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

时间:2014-04-30 08:53:25

标签: c# synchronization exchangewebservices

我们正在与我们的应用程序进行Exchange Web服务器同步。确定我们使用的EWS变更; service.SyncFolderItems()方法,explain on MSDN。但是,在进行初始同步时,它会占用日历中的所有事件,也会使用较旧的事件。为避免收到较旧的事件,我们需要在SyncFolderItems()方法请求更改时使用时间段同步开始时间

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

2 个答案:

答案 0 :(得分:3)

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

<SyncFolderItems>
 <ItemShape/>
 <SyncFolderId/>
 <SyncState/>
 <Ignore/>
 <MaxChangesReturned/>   <SyncScope/>
</SyncFolderItems>

忽略参数将接受事件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);

希望这会对你们有所帮助。

答案 1 :(得分:1)

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

就解决方法而言,您可以: 1)仅使用ItemId同步所有事件。丢弃不需要的物品。 2)使用您的预期时间段执行FindItems,使用GetItem(Bind)获取事件,然后使用通知来了解新项目何时到达或何时更新项目。你所取得的成就是改变了什么。对于新商品,这不是问题。但是对于更新的项目,您必须执行GetItem(加载),然后区分更新的旧项目以查看更改的内容。