【问题标题】:Patch Microsoft.Graph Event does not add new Extension补丁 Microsoft.Graph 事件不添加新扩展
【发布时间】:2020-02-25 18:04:16
【问题描述】:

我正在尝试修补现有的 Microsoft Graph 日历 Event 对象,以便将新的 Extension 添加到 Event 对象。根据文档,这应该是可能的:

因为事件资源支持扩展,所以可以使用 PATCH 添加、更新或删除您自己的应用程序特定数据的操作 现有事件中扩展的自定义属性 实例。 More Info

这是我尝试将扩展添加到现有事件的更新方法:


        public async Task<Event> UpdateEventAsync(string userId, string eventId, JsonPatchDocument<EventForUpdate> patchedEvent)
        {
            // Create a new event for updating            
            var newEvent = new Event();

            // Get the Extension data from the patch object: IDictionary<string,object>
            var extensionData = GetExtensionData(patchedEvent, newEvent);

            // Create new extension and add to event object
            var extension = new OpenTypeExtension()
            {
                ODataType = "microsoft.graph.openTypeExtension",
                ExtensionName = EXTENSION_NAME,
                AdditionalData = extensionData,
                Id = "Microsoft.OutlookServices.OpenTypeExtension." + EXTENSION_NAME
            };
            newEvent.Extensions = new EventExtensionsCollectionPage() { extension };

            // Create the request - unsure if Expand is necessary.
            var request = graphServiceClient.Users[userId].Events[eventId].Request();
            var reqExpanded = request.Expand($"extensions($filter=id%20eq%20'Microsoft.OutlookServices.OpenTypeExtension.{EXTENSION_NAME}')");
            return await reqExpanded.UpdateAsync(newEvent);
        }

返回事件的扩展值总是null——所以它似乎没有添加下一个扩展。即使在后续调用以获取所有事件时,扩展对象也是null

我有其他代码在新事件上创建扩展对象,并且工作正常。

总之,我想知道如何为补丁上的现有日历事件添加新的扩展?


注意事项

我查看了this SO Question - 但他正在执行 Add 而我正在执行 UpdateAsync。

我有一个解决办法

  private async Task<Extension> AddExtension(string user, string eventId, IDictionary<string, object> metadata)
        {
            Extension result = null;
            // Create new extension and add to event object
            var extension = new OpenTypeExtension()
            {
                ODataType = "microsoft.graph.openTypeExtension",
                ExtensionName = EXTENSION_NAME,
                AdditionalData = metadata,
            };
            return await graphServiceClient.Users[user].Events[eventId].Extensions.Request().AddAsync(extension);
        }

当我想将扩展数据添加到现有事件时,我会调用上述方法。

【问题讨论】:

    标签: c# outlook microsoft-graph-api microsoft-graph-sdks microsoft-graph-calendar


    【解决方案1】:

    我目前正在尝试通过 PostMan 完成相同的操作,但也无法使用补丁。我怀疑文档的摘录并没有说明它看起来的样子,而是一旦扩展存在,我们可以通过补丁对其进行更改。

    通过https://stackoverflow.com/a/38471514 的通知,我已成功地在现有事件上创建扩展,如下所示,而不是在扩展集合上使用 POST。

    POST https://graph.microsoft.com/v1.0/users/<upn>/calendar/events/<event-id>/extensions
    
    {
      "@odata.type": "microsoft.graph.openTypeExtension",
      "extensionName": "Com.<company-name>.PlacesAvailable",
      "placesAvailable": "50"
    }
    

    【讨论】:

    • 您发布的是我正在做的解决方法。我帖子末尾的 SDK 代码正是这样做的。特别是这一行:graphServiceClient.Users[].Events[].Extensions.Request().AddAsync(extension);但是 - 我想在活动的 PATCH 期间进行添加。
    • 您不能使用 PATCH,因为扩展实际上是一个单独的对象,正在创建并关联/附加到现有事件,因此需要 POST
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-21
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 2015-06-18
    • 2015-05-21
    • 2011-08-31
    相关资源
    最近更新 更多