2008-09-29 14 views
3

J'essaie d'utiliser les services Web Exchange pour mettre à jour un élément de calendrier. Je crée un ItemChangeType, puis un ItemIdType. J'ai un identifiant unique à utiliser pour ItemIdType.Id, mais je n'ai rien à utiliser pour ChangeKey. Quand je l'omets, j'obtiens un ErrorChangeKeyRequiredForWriteOperations. Mais quand j'essaye juste de mettre quelque chose dedans, j'obtiens un ErrorInvalidChangeKey.Que dois-je utiliser pour ChangeKey dans EWS UpdateItem?

Que puis-je utiliser pour que cela fonctionne?

J'essaie également de déterminer quelle est la meilleure implémentation de BaseItemIdType à utiliser pour ItemChangeType.Item. Jusqu'à présent, j'utilise ItemIdType, et je suppose que c'est correct, mais je n'ai pas été en mesure de trouver une documentation particulièrement utile à ce sujet.

+0

Je crois que chaque fois que vous créez ou mettez à jour quelque chose, vous devez stocker sa clé de changement quelque part pour une utilisation future. – Sam

Répondre

2

Si vous avez la propriété ItemIdType.Id vous devriez également avoir accès au ChangeKey, il est aussi une propriété de ItemIdType:

ItemIdType.ChangeKey

Comme la propriété Id c'est une chaîne, de sorte que vous pouvez saisir quand vous prenez l'Id.

Cordialement Jesper Hauge

7

Pour être un peu plus explicite sur la réponse de Hauge: le ChangeKey est stocké dans Exchange et identifie l'état actuel de l'élément. Toute modification apportée à cet élément crée une nouvelle clé ChangeKey. Cela permet à Exchange de "savoir" que votre mise à jour est appliquée au même état d'élément que lorsque vous avez examiné l'élément. Elle n'a pas changé depuis que vous l'avez vérifiée.

Une partie du code disponible à: http://msdn.microsoft.com/en-us/library/aa563020.aspx

1

Si vous connaissez ID seulement, vous pouvez obtenir ChangeKey facilement, par exemple pour le dossier:

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