在Graph API客户端中,有一个Filter扩展方法,可以在构建请求时使用,也可用于ICalUid过滤。如何仅通过其ICalUid在EWS托管API中检索约会?
[更新#1 - 11.13]
正如提到的图谱API可能已经建议的那样,我需要使用此方法来使用Office 365,而不一定是旧的Exchange版本。这将是解决方案的“一个很好的”功能。 我真正需要的是会议独有的ID,但在所有日历中都是相同的,并且也适用于孤立和异常事件。看起来,ICalUid在Graph API中满足此标准,但在EWS中不满足,因为EWS在每次出现时都返回相同的ICalUid。
[更新#2 - 11.13]
看起来我需要的属性是PidLidGlobalObjectId。我找到了几篇帖子,如何将其作为ExtendedProperty检索,并且我可以在使用CalendarFolder.FindAppointments
和ExchangeService.BindToItems
时检索它。但是我无法将此属性用作过滤器。我知道我必须将这个二进制属性转换为Base64。
var s = Convert.ToBase64String(searchval);
var sf = new SearchFilter.IsEqualTo(PidLidGlobalObjectId, s);
var fi = new FolderId(WellKnownFolderName.Calendar, new Mailbox(MailboxToAccess));
var cf = await CalendarFolder.Bind(service, fi);
var res = await cf.FindItems(sf, new ItemView(1)); // yields empty
没有SearchFilter的 FindItems
会返回所有Single和RecurringMaster项。因此,这相当于Graph API的events
集合。但我需要过滤CalendarView,因为只有在系列出现和异常是单个对象的情况下,此属性才有意义。在Graph API中,calendarview
是一个可以使用OData查询过滤的单独集合。
有没有办法实现同样的目的:使用SearcFilter
但在CalendarView上应用?
(注意:我只是通过使用权限来访问没有模拟的外国日历。)
谢谢!