private static async Task DeletePlanTasksAsync(int metricId) { var filter = string.Format( @"<Eq> <FieldRef Name='{0}' LookupId='TRUE'/> <Value Type='Lookup'>{1}</Value> </Eq>", SPLists.MetricIdeas.Columns.Metric, metricId); var query = new CamlQuery(); query.ViewXml = string.Format("<View><Query><Where>{0}</Where></Query></View>", filter); using (var clientContext = await(AuthenticationHelper.GetSharePointClientContextAsync(Permissions.Application))) { var items = clientContext.GetItems(SPLists.MetricIdeas.Title, query); var graphServiceClient = await AuthenticationHelper.GetGraphServiceClientAsync(); for (int i = items.Count - 1; i > -1; i--) { var taskId = items[i].GetFieldValueStr(SPLists.MetricIdeas.Columns.TaskId); PlannerTask task = null; try { task = await graphServiceClient.Planner.Tasks[taskId].Request().GetAsync(); } catch (ServiceException) { } if (task != null) { await graphServiceClient.Planner.Tasks[taskId] .Request(new[] { new HeaderOption("If-Match", task.GetEtag()) }) .DeleteAsync(); items[i].DeleteObject(); clientContext.ExecuteQuery(); } } } }
public PlannerTaskViewModel(PlannerTask task) { Id = task.Id; Title = task.Title; BucketId = task.BucketId; DueDateTime = task.DueDateTime; AssignmentIds = task.Assignments?.Assignees.ToList(); if (AssignmentIds == null) { AssignmentIds = new List <string>(); } Assignments = new ObservableCollection <Person>(AssignmentIds.Select(s => new Person() { Id = s })); Assignments.CollectionChanged += Assignments_CollectionChanged; PercentComplete = task.PercentComplete ?? 0; CreatedDateTime = task.CreatedDateTime; ETag = task.GetEtag(); }
private async Task DeleteTaskAsync(PlannerTaskViewModel task) { MessageDialog confirmDialog = new MessageDialog(DeleteConfirmDialogMessage); confirmDialog.Commands.Add(new UICommand { Id = DeleteConfirmDialogYes, Label = DeleteConfirmDialogYesLabel }); confirmDialog.Commands.Add(new UICommand { Id = DeleteConfirmDialogNo, Label = DeleteConfirmDialogNoLabel }); confirmDialog.DefaultCommandIndex = 0; confirmDialog.CancelCommandIndex = 1; IUICommand result = await confirmDialog.ShowAsync(); if (result.Id.ToString() == DeleteConfirmDialogYes) { try { GraphServiceClient graphClient = await GraphServiceHelper.GetGraphServiceClientAsync(); if (graphClient != null) { PlannerTask taskToUpdate = await graphClient.Planner.Tasks[task.Id].Request().GetAsync(); await graphClient.Planner.Tasks[task.Id].Request().Header(HttpHeaderIfMatch, taskToUpdate.GetEtag()).DeleteAsync(); task.PropertyChanged -= TaskViewModel_PropertyChanged; Tasks.Remove(task); _allTasks.Remove(task); } } catch (Exception exception) { MessageDialog messageDialog = new MessageDialog(exception.Message); await messageDialog.ShowAsync(); } } }
private async void TaskViewModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) { PlannerTaskViewModel plannerTaskViewModel = sender as PlannerTaskViewModel; if (Tasks.Contains(plannerTaskViewModel)) { Dictionary <string, object> task = new Dictionary <string, object>(); bool skipUpdate = false; switch (e.PropertyName) { case nameof(plannerTaskViewModel.AssignmentIds): await GetAssignmentsAsync(plannerTaskViewModel); PlannerAssignments assignments = new PlannerAssignments(); foreach (string assignee in plannerTaskViewModel.AssignmentIds) { assignments.AddAssignee(assignee); } task.Add(TaskAssignmentsJsonName, assignments); break; case nameof(plannerTaskViewModel.Title): task.Add(TaskTitleJsonName, plannerTaskViewModel.Title); break; case nameof(plannerTaskViewModel.BucketId): string bucketName = string.Empty; foreach (PlannerBucket bucket in Buckets) { if (bucket.Id == plannerTaskViewModel.BucketId) { bucketName = bucket.Name; break; } } plannerTaskViewModel.BucketName = bucketName; task.Add(TaskBucketIdJsonName, plannerTaskViewModel.BucketId); if (string.IsNullOrEmpty(plannerTaskViewModel.BucketId)) { skipUpdate = true; } break; case nameof(plannerTaskViewModel.DueDateTime): task.Add(TaskDueDateTimeJsonName, plannerTaskViewModel.DueDateTime); if (_list.ContainerFromItem(plannerTaskViewModel) is ListViewItem taskContainer) { var flyout = taskContainer.ContentTemplateRoot.FindDescendants <Button>().FirstOrDefault(s => s.Flyout != null)?.Flyout; if (flyout != null) { flyout.Hide(); } } break; default: skipUpdate = true; break; } if (!skipUpdate) { plannerTaskViewModel.IsUpdating = true; try { GraphServiceClient graphClient = await GraphServiceHelper.GetGraphServiceClientAsync(); if (graphClient != null) { PlannerTask taskToUpdate = await graphClient.Planner.Tasks[plannerTaskViewModel.Id].Request().GetAsync(); if (task.ContainsKey(TaskAssignmentsJsonName)) { PlannerAssignments assignments = task[TaskAssignmentsJsonName] as PlannerAssignments; string[] oldAssignees = taskToUpdate.Assignments.Assignees.ToArray(); string[] newAssignees = assignments.Assignees.ToArray(); foreach (string userId in oldAssignees) { if (!newAssignees.Contains(userId)) { assignments.AddAssignee(userId); assignments[userId] = null; } } } plannerTaskViewModel.ETag = taskToUpdate.GetEtag(); using (HttpRequestMessage request = graphClient.Planner.Tasks[plannerTaskViewModel.Id].Request().GetHttpRequestMessage()) { request.Method = new HttpMethod(HttpMethodPatch); string json = JsonConvert.SerializeObject(task); request.Content = new StringContent(json, System.Text.Encoding.UTF8, MediaTypeJson); request.Headers.Add(HttpHeaderIfMatch, plannerTaskViewModel.ETag); await graphClient.AuthenticationProvider.AuthenticateRequestAsync(request); HttpResponseMessage response = await graphClient.HttpProvider.SendAsync(request); response.Dispose(); } } } catch (Exception exception) { MessageDialog messageDialog = new MessageDialog(exception.Message); await messageDialog.ShowAsync(); } plannerTaskViewModel.IsUpdating = false; } } }