交换Web服务:为什么ItemId不是常量?

正如其他一些人之前已经讨论过这个问题(例如, Exchange Web服务:为什么ItemId不是常数? ),我想谈谈解决方案,我已经通过将Guid标记为扩展属性来完成了人们所建议的内容,对我而言解决方案有点好(虽然我不知道如何使它与出现的一起工作)但只要应用程序正常工作,一旦应用程序重新启动项目的扩展属性消失,所以我现在的问题是“ 如何在EWS项目上标记扩展属性并使其不断存在? “这是更新日历项目(约会)的代码

public void SetGuidForAppointement(Appointment appointment) { appointment.SetExtendedProperty((ExtendedPropertyDefinition)_appointementIdPropertyDefinition, Guid.NewGuid().ToString()); appointment.Update(ConflictResolutionMode.AlwaysOverwrite, SendInvitationsOrCancellationsMode.SendToNone); } 

这些是上面需要的属性定义。

 _appointementIdPropertyDefinition = new ExtendedPropertyDefinition(DefaultExtendedPropertySet.Appointment, "AppointmentID", MapiPropertyType.String); _propertyDefinitionBases = new PropertyDefinitionBase[] { _appointementIdPropertyDefinition, ItemSchema.ParentFolderId, AppointmentSchema.Start, AppointmentSchema.End, AppointmentSchema.LegacyFreeBusyStatus, AppointmentSchema.Organizer }; PropertySet = new PropertySet(BasePropertySet.FirstClassProperties, _propertyDefinitionBases); 

因此,如果有人之前已经这样做了,他/她可以提供一个示例,即使应用程序退出,也会将扩展属性标记在项目上。 谢谢

经过一段时间的尝试和搜索后,我找到了解决问题的方法。

 private static readonly PropertyDefinitionBase AppointementIdPropertyDefinition = new ExtendedPropertyDefinition(DefaultExtendedPropertySet.PublicStrings, "AppointmentID", MapiPropertyType.String); public static PropertySet PropertySet = new PropertySet(BasePropertySet.FirstClassProperties, AppointementIdPropertyDefinition); //Setting the property for the appointment public static void SetGuidForAppointement(Appointment appointment) { try { appointment.SetExtendedProperty((ExtendedPropertyDefinition)AppointementIdPropertyDefinition, Guid.NewGuid().ToString()); appointment.Update(ConflictResolutionMode.AlwaysOverwrite, SendInvitationsOrCancellationsMode.SendToNone); } catch (Exception ex) { // logging the exception } } //Getting the property for the appointment public static string GetGuidForAppointement(Appointment appointment) { var result = ""; try { appointment.Load(PropertySet); foreach (var extendedProperty in appointment.ExtendedProperties) { if (extendedProperty.PropertyDefinition.Name == "AppointmentID") { result = extendedProperty.Value.ToString(); } } } catch (Exception ex) { // logging the exception } return result; }