public async Async.Task PlannerPlanDetailsUpdate()
        {
            var group = await CreateGroup();

            this.testGroup = group;
            await Async.Task.Delay(3000); // sometimes we need to delay, the group information needs to be set before we can create a plan.

            var plannerPlan = await CreatePlan(group);

            PlannerPlanDetails planDetails = await graphClient.Planner.Plans[plannerPlan.Id].Details.Request().GetAsync();

            string             etag = planDetails.GetEtag();
            PlannerPlanDetails planDetailsToUpdate = new PlannerPlanDetails();

            planDetailsToUpdate.CategoryDescriptions           = new PlannerCategoryDescriptions();
            planDetailsToUpdate.CategoryDescriptions.Category1 = "First category";
            planDetailsToUpdate.CategoryDescriptions.Category4 = "Category 4";
            planDetailsToUpdate.SharedWith = new PlannerUserIds();
            planDetailsToUpdate.SharedWith.Add("me");

            PlannerPlanDetails updatedPlanDetails = await graphClient.Planner.Plans[plannerPlan.Id].Details.Request().Header("If-Match", etag).Header("Prefer", "return=representation").UpdateAsync(planDetailsToUpdate);

            Assert.AreEqual("First category", updatedPlanDetails.CategoryDescriptions.Category1);
            Assert.AreEqual("Category 4", updatedPlanDetails.CategoryDescriptions.Category4);

            // plan creator is the current user as well, we can get the id from there.
            Assert.IsTrue(updatedPlanDetails.SharedWith.Contains(plannerPlan.CreatedBy.User.Id));
        }
예제 #2
0
        /// <summary>
        /// Update the navigation property details in planner
        /// <param name="body"></param>
        /// <param name="requestConfiguration">Configuration for the request such as headers, query parameters, and middleware options.</param>
        /// </summary>
        public RequestInformation CreatePatchRequestInformation(PlannerPlanDetails body, Action <DetailsRequestBuilderPatchRequestConfiguration> requestConfiguration = default)
        {
            _ = body ?? throw new ArgumentNullException(nameof(body));
            var requestInfo = new RequestInformation {
                HttpMethod     = Method.PATCH,
                UrlTemplate    = UrlTemplate,
                PathParameters = PathParameters,
            };

            requestInfo.SetContentFromParsable(RequestAdapter, "application/json", body);
            if (requestConfiguration != null)
            {
                var requestConfig = new DetailsRequestBuilderPatchRequestConfiguration();
                requestConfiguration.Invoke(requestConfig);
                requestInfo.AddRequestOptions(requestConfig.Options);
                requestInfo.AddHeaders(requestConfig.Headers);
            }
            return(requestInfo);
        }
        public async Task <PlannerPlan> GetOrCreatePlanByChannel(string groupId, string channelId)
        {
            var channel = await GraphClient.Teams[groupId].Channels[channelId].Request().GetAsync();

            var plans      = new List <PlannerPlan>();
            var pagedItems = await GraphClient.Groups[groupId].Planner.Plans.Request().GetAsync();

            plans.AddRange(pagedItems.CurrentPage);
            while (pagedItems.NextPageRequest != null)
            {
                pagedItems = await pagedItems.NextPageRequest.GetAsync();

                plans.AddRange(pagedItems.CurrentPage);
            }

            var retValue = plans.FirstOrDefault(o => o.Title == channel.DisplayName);

            if (retValue == null)
            {
                retValue = await CreatePlan(groupId, channel.DisplayName);
            }

            var plannerPlanDetails = await GraphClient.Planner.Plans[retValue.Id].Details.Request().GetAsync();

            if (string.IsNullOrEmpty(plannerPlanDetails.CategoryDescriptions.Category1) || plannerPlanDetails.CategoryDescriptions.Category1 != "Pre-Read")
            {
                var plannerDetail = new PlannerPlanDetails
                {
                    CategoryDescriptions = new PlannerCategoryDescriptions
                    {
                        Category1 = "Pre-Read",
                        Category2 = "Meeting"
                    }
                };
                await GraphClient.Planner.Plans[retValue.Id].Details.Request().Header("If-Match", plannerPlanDetails.GetEtag()).UpdateAsync(plannerDetail);
            }
            return(retValue);
        }