初始Exchange Web服务同步在给定时间启动

本文关键字:定时间 启动 同步 Exchange Web 服务 初始 | 更新日期: 2023-09-27 18:01:08

我们正在与应用程序进行Exchange web服务器同步。为了识别我们使用的EWS更改;service.SyncFolderItems()方法,就像MSDN上的解释一样。但是,在进行初始同步时,它会占用日历中的所有事件,也会占用非常旧的事件。为了避免旧的事件,我们需要使用时间段同步开始时间,同时从SyncFolderItems()方法请求更改。

1( SyncFolderItems((方法在从EWS获取事件时是否可以接受用户给定的时间段&如何
2( 如果没有,有什么变通办法吗?

初始Exchange Web服务同步在给定时间启动

有一种方法可以使用服务避免日历中的旧事件。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>();

创建日历视图对象;

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);

希望这对你们任何人都有帮助。

目前,SyncFolderItems只支持同步整个邮箱。它不支持从特定时间段开始同步。此类请求已与产品策划人共享。希望我们能看到这种类型的功能。

在解决方法方面,您可以:1( 仅使用ItemId同步所有事件。扔掉不需要的东西。2( 使用您的预期时间段执行FindItems,使用GetItem(绑定(获取事件,然后使用通知了解新项目何时到达或项目何时更新。你不会得到的是已经改变的东西。对于新项目,这不是问题。但对于更新的项目,您必须执行GetItem(加载(,然后将更新的项目和旧的项目进行比较,以查看发生了什么变化。