【问题标题】:Why does EWS Managed API SyncFolderItems not return recurring appointments为什么 EWS 托管 API SyncFolderItems 不返回定期约会
【发布时间】:2011-09-01 07:41:48
【问题描述】:

我正在使用 EWS 的托管 API 将调度应用程序与交换日历同步。我可以正常参加所有正常会议,但没有任何重复/重复约会。

我的代码如下:

itemChangeCollection = _service.SyncFolderItems(
                            new FolderId(WellKnownFolderName.Calendar,
                                         new Mailbox(Email)),
                            propertySet,
                            null,
                            Settings.Default.ExchangeSyncFetchCount,
                            SyncFolderItemsScope.NormalItems,
                            syncState);

我还需要更改哪些内容才能查看定期约会?

【问题讨论】:

    标签: calendar exchangewebservices ews-managed-api recurring-events


    【解决方案1】:

    定期约会的实例不是商店中的“真实”物品。它们是虚拟的,因为只要您使用日历视图和时间范围执行搜索,它们就会被计算出来。

    查找定期约会的唯一方法是使用 FindItems 方法。

    【讨论】:

    • 实际上,我正在使用 FindItem 从具有开始和结束日期限制的房间日历中检索约会,但仍然没有收到定期会议。
    • 我刚刚意识到即使我使用 FindItem 也没有收到定期会议的原因是我使用了搜索过滤器(我想同时使用项目视图进行分页并指定日期间隔)。如果您想接收经常性项目,则不能使用搜索过滤器(至少不能使用带有日期条件的过滤器)。
    【解决方案2】:

    SyncFolderItems 只返回必要的信息来重建一个重复出现的系列,但不扩展个别事件。如果您需要扩展出现次数,则需要使用FindItems 方法。

    但是,即使假设您可以自己扩展重复,SyncFolderItems 单独提供所有必要的信息。

    SyncFolderItems 将返回带有SingleRecurringMaster AppointmentType 的事件列表。 RecurringMaster 事件包含ModifiedOccurrencesDeletedOccurrences 属性。不幸的是,ModifiedOccurrences 中的项目仅包含 ItemId,而不包含 Item 本身。似乎有必要单独解决所有异常以获取修改事件的字段。来自documentation

    ModifiedOccurrences 集合中的每个 OccurrenceInfo 对象 包含四个属性:EndItemIdOriginalStartStart。到 访问异常项的附加属性,您必须绑定到 使用 OccurrenceInfo.ItemId 的项目。

    foreach (OccurrenceInfo item in recurringMasterItem.ModifiedOccurrences)
    {
       Appointment modifiedItem = Appointment.Bind(service, item.ItemId);
       Console.WriteLine("Subject: " + modifiedItem.Subject);
    }
    

    换句话说,使用您从SyncFolderItem 获得的数据,您可以扩展重复周期,包括时间异常和已删除的事件,但您必须解决其他字段(即摘要、正文、位置等)的异常额外的.Bind() 电话。

    【讨论】:

    • Marco,你知道如何找出哪些 ModifiedOccurrences 刚刚被修改了吗? (在执行 SyncFolderItems 并加载 ModifiedOccurrences 属性后,它包含曾经修改过的每个事件,而不仅仅是自上次同步以来修改的事件)。谢谢!
    【解决方案3】:

    SyncFolderItems 将为您提供经常性主条目,但不会将它们扩展为出现次数。循环主控拥有所有项目的通用属性、循环模式以及异常和删除列表。这是将它们扩展到事件所需的所有信息。尽管您应该调用Appointment.BindToOccurrence 来根据出现索引绑定来自重复主实例的单个出现的属性。缺点是每次发生都会调用 EWS。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-28
      • 2015-06-06
      • 1970-01-01
      • 2011-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-17
      相关资源
      最近更新 更多