初始Exchange Web Services同步在给定时间开始

sha*_*lin 5 c# synchronization exchangewebservices

我们正在与应用程序进行Exchange Web服务器同步。为了识别EWS更改,我们使用了;service.SyncFolderItems()方法,如 在MSDN上解释。但是,在进行初始同步时,它会将所有事件都保存在日历中,也包括非常旧的事件。为了避免发生较旧的事件,我们需要在请求方法更改使用时间段或“ 同步开始时间”SyncFolderItems()

1)从EWS获取事件时,SyncFolderItems()方法可以接受用户给定的时间段吗?& 怎么样 ?
2)如果没有,任何解决方法?

sha*_*lin 4

有一种方法可以使用 service.SyncFolderItems() 方法来避免日历中的旧事件。

<SyncFolderItems>
 <ItemShape/>
 <SyncFolderId/>
 <SyncState/>
 <Ignore/>
 <MaxChangesReturned/>   <SyncScope/>
</SyncFolderItems>
Run Code Online (Sandbox Code Playgroud)

忽略参数将接受事件 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.
Run Code Online (Sandbox Code Playgroud)

创建项目 ID 列表;

List<ItemId> itmid = new List<ItemId>();
Run Code Online (Sandbox Code Playgroud)

创建日历视图对象;

CalendarView cView = new CalendarView(startDate, endDate);
Run Code Online (Sandbox Code Playgroud)

检索约会;

 // Retrieve a collection of appointments by using the calendar view.
        FindItemsResults<Item> appointments = service.FindItems(WellKnownFolderName.Calendar, cView);
Run Code Online (Sandbox Code Playgroud)

或者你可以使用这个,但是之前的代码有一些优化。(谷歌)

FindItemsResults<Appointment> appointments = service.FindAppointments(WellKnownFolderName.Calendar, cView);
Run Code Online (Sandbox Code Playgroud)

将检索事件 ID 添加到列表中,

foreach (var item in appointments)
        {
            itmid.Add(item.Id);

        }
Run Code Online (Sandbox Code Playgroud)

最后,在您的 SyncFolderItems 方法中将如下所示;

service.SyncFolderItems(new FolderId(WellKnownFolderName.Calendar), PropertySet.IdOnly, itmid, 10, SyncFolderItemsScope.NormalItems, sSyncState);
Run Code Online (Sandbox Code Playgroud)

希望这对你们有帮助。