我正在尝试使用Exchange Web服务更新日历项。我正在创建一个ItemChangeType,然后是一个ItemIdType。我有一个唯一的ID用于ItemIdType.Id,但我没有什么可用于ChangeKey。当我把它遗漏时,我得到一个ErrorChangeKeyRequiredForWriteOperations。但是当我尝试在那里放东西时,我得到一个ErrorInvalidChangeKey。
我可以使用什么来实现它?
我还试图确定用于ItemChangeType.Item的BaseItemIdType的最佳实现是什么。到目前为止,我正在使用ItemIdType,我猜这是正确的,但我还没有找到任何特别有用的文档。
答案 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