我在EWS UpdateItem中对ChangeKey使用什么?
我正在尝试使用Exchange Web服务更新日历项目。我正在创建一个ItemChangeType,然后一个ItemIdType。我有一个唯一的ID用于ItemIdType.Id,但是我没有任何可用于ChangeKey。当我忽略它时,我得到一个ErrorChangeKeyRequiredForWriteOperations。但是,当我尝试在其中放东西时,我得到一个ErrorInvalidChangeKey。
我可以用什么来使其正常工作?
我还试图确定要用于ItemChangeType.Item的BaseItemIdType的最佳实现。到目前为止,我正在使用ItemIdType,并且我猜这是正确的,但是我还没有找到关于此的任何特别有用的文档。
解决方案
如果我们拥有ItemIdType.Id属性,那么我们还应该可以访问Changekey,它也是ItemIdType的属性:
ItemIdType.ChangeKey
就像Id属性一样,它是一个字符串,因此在获取Id时就可以获取它。
问候
杰斯珀·豪格(Jesper Hauge)
在Hauge的答案上更明确一些:ChangeKey存储在Exchange中,用于标识项目的当前状态。对该项的任何更改都会创建一个新的ChangeKey。
这使Exchange可以"知道"更新已应用到与查看该项目以来相同的项目状态,因为我们检查该项目以来未对其进行更改。
一些代码可在以下位置找到:
http://msdn.microsoft.com/en-us/library/aa563020.aspx
如果仅知道ID,则可以轻松获取ChangeKey,例如文件夹:
private FolderIdType GetFullFolderID(string folderID) { GetFolderType request = new GetFolderType(); request.FolderIds = new BaseFolderIdType[1]; FolderIdType id = new FolderIdType(); id.Id = folderID; request.FolderIds[0] = id; request.FolderShape = new FolderResponseShapeType(); request.FolderShape.BaseShape = DefaultShapeNamesType.IdOnly; GetFolderResponseType response = _binding.GetFolder(request); FailOnError(response); FolderInfoResponseMessageType firmt = (FolderInfoResponseMessageType)response.ResponseMessages.Items[0]; FolderType ft = (FolderType)firmt.Folders[0]; id.ChangeKey = ft.FolderId.ChangeKey; return id; }
我建议我们使用Exchange托管API而不是Exchange Web服务来与Exchange一起工作。它更容易使用。我们可以在下面找到更多详细信息:
https://msdn.microsoft.com/zh-CN/library/dd877012(v=exchg.150).aspx