正如其他一些人之前讨论过这个问题(例如,Exchange Web服务:为什么ItemId不是常数?),我想谈谈解决方案,我已经做了人们通过将Guid标记为扩展属性而建议的内容,对我而言解决方案有点好(虽然我不知道如何使其与出现的一起工作)但只要应用程序正常工作,一旦应用程序重新启动项目的扩展属性消失,所以我现在的问题是" 如何在EWS项目上标记扩展属性并使其不断存在?"这是更新日历项目(约会)的代码
public void SetGuidForAppointement(Appointment appointment)
{
appointment.SetExtendedProperty((ExtendedPropertyDefinition)_appointementIdPropertyDefinition, Guid.NewGuid().ToString());
appointment.Update(ConflictResolutionMode.AlwaysOverwrite, SendInvitationsOrCancellationsMode.SendToNone);
}
Run Code Online (Sandbox Code Playgroud)
这些是上面需要的属性定义.
_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);
Run Code Online (Sandbox Code Playgroud)
因此,如果有人在此之前完成此操作,他/她可以向我提供一个示例,即使应用程序退出,也会将扩展属性标记在项目上.谢谢
我正在通过Web引用访问Exchange Web服务的客户端.(不是托管API).这是我第一次与EWS合作,所以我希望这只是一个我忽略的错误.
我有一个名为MoveItem的方法,它应该接收电子邮件并将其从收件箱移动到destinationFolder.当我运行此代码时,该项目确实从收件箱中消失,但它从未显示在目标文件夹中.我花了几天时间在线查看示例,而且我也找不到其他有类似问题的人.谁能告诉我我做错了什么?提前致谢
斯科特
static void MoveItem(ExchangeServiceBinding esb, BaseFolderType destinationFolder, MessageType msg)
{
ItemIdType[] items = new ItemIdType[1] { (ItemIdType)msg.ItemId };
BaseFolderIdType destFolder = destinationFolder.FolderId;
MoveItemType request = new MoveItemType();
request.ItemIds = items;
request.ToFolderId = new TargetFolderIdType();
request.ToFolderId.Item = destFolder;
try
{
MoveItemResponseType response = esb.MoveItem(request);
ArrayOfResponseMessagesType aormt = response.ResponseMessages;
ResponseMessageType[] rmta = aormt.Items;
foreach (ResponseMessageType rmt in rmta)
{
if (rmt.ResponseClass == ResponseClassType.Error)
{
throw new Exception("Item move failed.");
}
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
Run Code Online (Sandbox Code Playgroud)