我在EWS UpdateItem中使用什么来改变ChangeKey?

时间:2008-09-29 19:52:44

标签: exchange-server exchangewebservices

我正在尝试使用Exchange Web服务更新日历项。我正在创建一个ItemChangeType,然后是一个ItemIdType。我有一个唯一的ID用于ItemIdType.Id,但我没有什么可用于ChangeKey。当我把它遗漏时,我得到一个ErrorChangeKeyRequiredForWriteOperations。但是当我尝试在那里放东西时,我得到一个ErrorInvalidChangeKey。

我可以使用什么来实现它?

我还试图确定用于ItemChangeType.Item的BaseItemIdType的最佳实现是什么。到目前为止,我正在使用ItemIdType,我猜这是正确的,但我还没有找到任何特别有用的文档。

4 个答案:

答案 0 :(得分:7)

要更清楚地了解Hauge的答案:ChangeKey存储在Exchange中并标识项目的当前状态。对该项目的任何更改都会创建一个新的ChangeKey。

这允许Exchange“知道”您的更新应用于与查看项目时相同的项目状态 - 自检查后它没有更改。

有些代码可在: http://msdn.microsoft.com/en-us/library/aa563020.aspx

答案 1 :(得分:2)

如果你有ItemIdType.Id属性,你也应该有权访问Changekey,它也是ItemIdType的属性:

ItemIdType.ChangeKey

与Id属性类似,它是一个字符串,因此您可以在获取Id时抓住它。

此致 Jesper Hauge

答案 2 :(得分:1)

如果您只知道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;
  }

答案 3 :(得分:1)

我建议您使用Exchange托管API而不是Exchange Web服务来使用Exchange。它更容易使用。您可以在下面找到更多详细信息:

https://msdn.microsoft.com/en-gb/library/dd877012(v=exchg.150).aspx