繁体   English   中英

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

[英]EWS Managed API 2.0 - Render CalendarView including all recurring appointments

我确实使用.SyncFolderItems从EWS复制。 但是,这不包括重复系列中的虚拟物品。 因此,除了渲染特定范围的日历视图之外,我还希望获得所有这些虚拟项目。

如果我用

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

EWS是否会返回该范围内的所有约会,包括重复系列中的虚拟约会? 还是我必须遵循此处描述的困难方法并手动枚举所有项目?

对于那些会遇到相同情况的人。 我尝试并且已经成功呈现了两种类型的约会。

EWS API日历视图会自动为您呈现一个重复系列。

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

  1. 使用SyncFolderItems同步您的约会
  2. 在您的数据库中存储AppointmentType (单个,ReccuringMaster,出现次数,异常)。
  3. 在数据库中为每个约会存储Id.UniqueId
  4. cleanGlobalObjectId存储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); 
  5. 要删除数据库中的所有约会,可以使用您在3.中获取的syncId来捕获所有约会。 示例:如果RecurringMaster被用户删除。 删除所有引用它的行。

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

     var calendar = CalendarFolder.Bind(service, new FolderId(WellKnownFolderName.Calendar, new Mailbox(informerAccountMailbox.Mailbox)), psPropSet); var cView = new CalendarView(DateTime.Now.AddDays(informerAccountMailbox.DaysBeforeNow*-1), DateTime.Now.AddDays(informerAccountMailbox.DaysFromNow), 1000); var appointments = calendar.FindAppointments(cView); 

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM