EWS托管API 2.0 - 渲染CalendarView,包括所有定期约会

时间:2017-08-29 08:09:55

标签: c# exchangewebservices

我使用.SyncFolderItems从EWS复制。但是,这不包括重复系列中的虚拟项目。所以我想要除了为特定范围渲染日历视图以获取所有这些虚拟项目。

如果我使用

CalendarView cView = new CalendarView(start, end, 1000);
FindItemsResults<Appointment> findAppointmentResults = calendar.FindAppointments(cView);

EWS是否会返回此范围内的所有约会,包括来自定期系列的虚拟约会?或者我是否必须采用描述here的方式并手动枚举所有项目?

1 个答案:

答案 0 :(得分:0)

对于那些会遇到同样情况的人。我尝试过并且已经成功地渲染了两种类型的约会。

EWS API日历视图会自动为您呈现定期系列。

有趣的是如何设置一种方法,以便在系列被删除时复制并更新数据库。

  1. 使用SyncFolderItems
  2. 同步您的约会
  3. 在您的数据库中存储AppointmentType(Single,ReccuringMaster,Occurrence,Exception)。
  4. 为数据库中的每个约会存储Id.UniqueId
  5. 同时存储cleanGlobalObjectId!怎么弄它:

    var cleanGlobalObjectId = new ExtendedPropertyDefinition(DefaultExtendedPropertySet.Meeting, 0x23, MapiPropertyType.Binary);
    var psPropSet = new PropertySet(BasePropertySet.FirstClassProperties) { cleanGlobalObjectId };
    object calIdVal;
    ewsAppointment.TryGetProperty(cleanGlobalObjectId, out calIdVal);
    var syncId = Convert.ToBase64String((byte[])calIdVal);
    
  6. 要删除数据库中的所有约会,您可以使用{3}来获取所有约会。示例:如果用户删除了syncId。删除引用它的所有行。

  7. 同步约会后,您可以呈现特定范围的视图,以将这些虚拟约会复制到数据库中。最简单的方法是删除所有RecurringMaster并再次插入所有内容。

    syncId
  8. 希望这有帮助。