2008-09-29 92 views
3

我正在嘗試使用Exchange Web服務來更新日曆項目。我創建一個ItemChangeType,然後是一個ItemIdType。我有一個唯一的ID用於ItemIdType.Id,但我沒有什麼可用於ChangeKey。當我離開它時,我得到一個ErrorChangeKeyRequiredForWriteOperations。但是,當我嘗試只是把東西放在那裏,我得到一個ErrorInvalidChangeKey。EWS UpdateItem中用於ChangeKey的是什麼?

我可以用什麼來使它起作用?

我也在試圖確定什麼是用於ItemChangeType.Item的BaseItemIdType的最佳實現。到目前爲止,我使用的是ItemIdType,我猜這是正確的,但我一直沒有找到任何特別有用的文檔。

+0

我相信每次創建或更新的東西的時候,你應該在一些地方保存其變革的關鍵以備將來使用。 – Sam 2013-06-04 01:47:48

回答

2

如果你有ItemIdType.Id屬性,你也應該有機會獲得Changekey,這也是ItemIdType的屬性:

ItemIdType.ChangeKey

像Id屬性是字符串,這樣你就可以抓住它當你抓住Id。

問候 加斯帕豪格

7

要對豪格的回答更加明確一些:ChangeKey存儲在Exchange和標識項目的當前狀態。對該項目的任何更改都會創建一個新的ChangeKey。

這使得Exchange可以「知道」您的更新正在應用到與您查看該項目時相同的項目狀態 - 自從您選中該項目以來它並未發生變化。可

一些代碼在: http://msdn.microsoft.com/en-us/library/aa563020.aspx

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; 
    }