[英]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日历视图会自动为您呈现一个重复系列。
有趣的部分是如何设置一种方法,使其可以复制并在删除系列时更新数据库。
SyncFolderItems
同步您的约会 AppointmentType
(单个,ReccuringMaster,出现次数,异常)。 Id.UniqueId
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);
要删除数据库中的所有约会,可以使用您在3.中获取的syncId
来捕获所有约会。 示例:如果RecurringMaster
被用户删除。 删除所有引用它的行。
同步约会后,您可以呈现特定范围的视图,以将这些虚拟约会复制到数据库中。 恕我直言,最简单的方法是通过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.