我正在尝试与Exchange日历进行一些同步工作。我想让另一个外部日历与Exchange保持同步。目前,当其他应用程序在Exchange中触发某种创建或更新时,该更改将被发送回另一个日历,从而创建无限循环。
我曾希望在绑定Appointment项时使用AppointmentSequenceNumber属性,但无论更新多少次,它总是具有值0。我在我的PropertySet中包含了AppointmentSequenceNumber。
如果有人知道如何捕获这些更新并阻止它们被发回,那将非常有用。
谢谢。
PropertySet pSet = new PropertySet(BasePropertySet.FirstClassProperties, ItemSchema.Subject, ItemSchema.Body, AppointmentSchema.Start, AppointmentSchema.End,AppointmentSchema.ArchiveTag, AppointmentSchema.InstanceKey, AppointmentSchema.AppointmentSequenceNumber);
ChangeCollection<ItemChange> changes = null;
.....
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2013)
{
Url = new Uri(exInfo.ServiceURL),
Credentials = new WebCredentials(exInfo.UserName, exInfo.Password)
};
//Pull Subscription Info
Microsoft.Exchange.WebServices.Data.PullSubscription sub = service.SubscribeToPullNotifications(
new FolderId[] { WellKnownFolderName.Calendar }, 30, "",
EventType.Created, EventType.Modified, EventType.Deleted);
syncState = exInfo.SyncState;
//Pull Changes
while (!syncComplete )//&& Count < MaxItems)
{
changes = service.SyncFolderItems(new FolderId(WellKnownFolderName.Calendar),
PropertySet.FirstClassProperties, null, 100, SyncFolderItemsScope.NormalItems, syncState);
foreach (ItemChange change in changes)
{
if (change.ChangeType != ChangeType.Delete) { eventItem = Appointment.Bind(service, change.ItemId, pSet); }
switch (change.ChangeType)
{
case ChangeType.Update:
...
break;
case ChangeType.Create:
...
break;
case ChangeType.Delete:
...
break;
}
Count++;
}
syncState = changes.SyncState;
syncComplete = !changes.MoreChangesAvailable;
}...
答案 0 :(得分:1)
AppointmentSequenceNumber仅对会议有效;在正常约会时,它没有被使用。
我希望在绑定约会项
时使用AppointmentSequenceNumber属性
即使它正在递增,它也不会起作用。 Exchange将始终为您提供当前版本,并且Bind中唯一有效的内容是约会的EWSId(或重复序列)。
如果有人知道如何捕获这些更新并阻止它们被发回,那将非常有用。
同步很复杂但是(从通知的角度来看)如果您在Exchange中修改项目,它将触发通知并且项目的ChangeKey属性将更新(quote):
&#34;在Exchange中处理项目时,要记住的另一个值是ChangeKey属性。除了项目ID之外,该值还用于跟踪项目的状态。每次更改项目时,都会生成一个新的更改密钥。例如,执行UpdateItem操作时,可以使用ChangeKey属性让服务器知道您的更新正在应用于项目的最新版本。如果其他应用程序对您要更新的项目进行了更改,则更改密钥将不匹配,您将无法执行更新。&#34;