我们正在与我们的应用程序进行 Exchange Web 服务器同步。识别我们使用的 EWS 变更; service.SyncFolderItems()
方法,如 explain on MSDN .但是,在进行初始同步时,它会获取日历中的所有事件,也包括非常旧的事件。为避免获取较旧的事件,我们需要使用 time period 或 Sync Start From time,同时从 SyncFolderItems()
方法请求更改。
1) 从 EWS 获取事件时,SyncFolderItems() 方法可以接受用户给定的时间段吗? & 如何?
2)如果没有,有什么解决方法吗?
最佳答案
有一种方法可以使用 service.SyncFolderItems() 方法避免日历中的旧事件。
<SyncFolderItems>
<ItemShape/>
<SyncFolderId/>
<SyncState/>
<Ignore/>
<MaxChangesReturned/> <SyncScope/>
</SyncFolderItems>
Ignore 参数将接受事件 ID 列表。并在同步时忽略它们。为此,首先我们需要检索较旧的事件 ID,Exchange 将只接受两年前的事件
DateTime startDate = DateTime.Now.AddYears(-2); //start from two years earlier
DateTime endDate = DateTime.Now.AddMonths(-1); // End One Month before,
//you can use Convert.ToDateTime("01/01/2013"); what ever date you wanted.
创建项目id列表;
List<ItemId> itmid = new List<ItemId>();
创建日历 View 对象;
CalendarView cView = new CalendarView(startDate, endDate);
检索约会;
// Retrieve a collection of appointments by using the calendar view.
FindItemsResults<Item> appointments = service.FindItems(WellKnownFolderName.Calendar, cView);
或者你可以使用这个,但是之前的代码有一些优化。 (谷歌)
FindItemsResults<Appointment> appointments = service.FindAppointments(WellKnownFolderName.Calendar, cView);
将检索事件 ID 添加到列表中,
foreach (var item in appointments)
{
itmid.Add(item.Id);
}
最后,在您的 SyncFolderItems 方法中将如下所示;
service.SyncFolderItems(new FolderId(WellKnownFolderName.Calendar), PropertySet.IdOnly, itmid, 10, SyncFolderItemsScope.NormalItems, sSyncState);
希望对大家有所帮助。
关于c# - 初始 Exchange Web 服务同步在给定时间开始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23383724/