private static void CreateBucket(string targetPlanId, Bucket bucket, bool addAssignments, HttpClient httpClient) { bucket.PlanId = targetPlanId; // reset all order hints as the exported values don't work bucket.OrderHint = " !"; var newBucket = GraphResponse <Bucket> .Post("buckets", httpClient, bucket).Result; // if we are too quick the created bucket is not available yet, make sure it it there Thread.Sleep(5 * 1000); var verifyNewBucket = GraphResponse <Bucket> .Get("buckets/" + newBucket.Id, httpClient).Result; bucket.Tasks = bucket.Tasks.Reverse().ToArray(); foreach (PlannerTask task in bucket.Tasks) { task.PlanId = targetPlanId; task.BucketId = newBucket.Id; task.OrderHint = " !"; // assignments contain the users assigned to a task if (addAssignments) { foreach (Assignment assignment in task.Assignments.Values) { assignment.OrderHint = " !"; } } else { task.Assignments = new Dictionary <string, Assignment>(); } var newTask = GraphResponse <PlannerTask> .Post("tasks", httpClient, task).Result; // remember new task id for next loop task.Id = newTask.Id; } // if we are too quick the created tasks are not available yet Thread.Sleep(5 * 1000); foreach (PlannerTask task in bucket.Tasks) { var newTaskDetailsResponse = GraphResponse <TaskDetailResponse> .Get("tasks/" + task.Id + "/details", httpClient).Result; foreach (var checklist in task.TaskDetail.Checklist.Values) { checklist.OrderHint = " !"; } foreach (var reference in task.TaskDetail.References.Values) { // same as order hint reference.PreviewPriority = " !"; } var updatedTaskDetailsResponse = GraphResponse <TaskDetailResponse> .Patch("tasks/" + task.Id + "/details", httpClient, task.TaskDetail, newTaskDetailsResponse.OdataEtag).Result; } }
private static void SaveTasks(string targetPlanId, string bucketId, bool addAssignments, IEnumerable <PlannerTask> tasks, HttpClient httpClient) { var taskList = tasks.Reverse().ToList(); foreach (PlannerTask task in taskList) { task.PlanId = targetPlanId; task.BucketId = bucketId; task.OrderHint = " !"; // assignments contain the users assigned to a task if (addAssignments) { foreach (Assignment assignment in task.Assignments.Values) { assignment.OrderHint = " !"; } } else { task.Assignments = new Dictionary <string, Assignment>(); } var newTask = GraphResponse <PlannerTask> .Post("tasks", httpClient, task).Result; // remember new task id for next loop task.Id = newTask.Id; task.OrderHint = newTask.OrderHint; } // if we are too quick the created tasks are not available yet Thread.Sleep(5 * 1000); foreach (PlannerTask task in taskList) { var newTaskDetailsResponse = GraphResponse <TaskDetailResponse> .Get("tasks/" + task.Id + "/details", httpClient).Result; foreach (var checklist in task.TaskDetail.Checklist.Values) { checklist.OrderHint = " !"; } foreach (var reference in task.TaskDetail.References.Values) { // same as order hint reference.PreviewPriority = " !"; } var updatedTaskDetailsResponse = GraphResponse <TaskDetailResponse> .Patch("tasks/" + task.Id + "/details", httpClient, task.TaskDetail, newTaskDetailsResponse.OdataEtag).Result; } }
// export a plan and import everything into a new plan public static void Import() { Console.WriteLine("Step 1: Select the plan to export"); Plan exportedPlan = Export(false); Console.WriteLine("Step 2: Select the plan in which you want to import"); Plan targetPlan = SelectPlan(); bool addAssignments = Program.GetInput("Do you want to import the assignments (y/n)? This might send email notifications to the assignees. ") == "y"; using (var httpClient = PreparePlannerClient()) { // buckets and tasks are always added at the beginning, therefore reversing the order when importing, otherwise e.g. the // last exported bucket would become the first bucket in the imported plan exportedPlan.Buckets = exportedPlan.Buckets.Reverse().ToArray(); // create buckets and tasks and then set details for the created tasks (can't be done in one step) foreach (Bucket bucket in exportedPlan.Buckets) { bucket.PlanId = targetPlan.Id; // reset all order hints as the exported values don't work bucket.OrderHint = " !"; var newBucket = GraphResponse <Bucket> .Post("buckets", httpClient, bucket).Result; bucket.Tasks = bucket.Tasks.Reverse().ToArray(); foreach (PlannerTask task in bucket.Tasks) { task.PlanId = targetPlan.Id; task.BucketId = newBucket.Id; task.OrderHint = " !"; // assignments contain the users assigned to a task if (addAssignments) { foreach (Assignment assignment in task.Assignments.Values) { assignment.OrderHint = " !"; } } else { task.Assignments = new Dictionary <string, Assignment>(); } var newTask = GraphResponse <PlannerTask> .Post("tasks", httpClient, task).Result; // remember new task id for next loop task.Id = newTask.Id; } // if we are too quick the created tasks are not available yet Thread.Sleep(2 * 1000); foreach (PlannerTask task in bucket.Tasks) { var newTaskDetailsResponse = GraphResponse <TaskDetailResponse> .Get("tasks/" + task.Id + "/details", httpClient).Result; foreach (var checklist in task.TaskDetail.Checklist.Values) { checklist.OrderHint = " !"; } foreach (var reference in task.TaskDetail.References.Values) { // same as order hint reference.PreviewPriority = " !"; } var updatedTaskDetailsResponse = GraphResponse <TaskDetailResponse> .Patch("tasks/" + task.Id + "/details", httpClient, task.TaskDetail, newTaskDetailsResponse.OdataEtag).Result; } } } Console.WriteLine("Import is done"); }