4 votes

Que dois-je utiliser pour ChangeKey dans EWS UpdateItem ?

J'essaie d'utiliser les services Web d'Exchange pour mettre à jour un élément de calendrier. Je crée un ItemChangeType, puis un ItemIdType. J'ai un ID unique à utiliser pour ItemIdType.Id, mais je n'ai rien à utiliser pour la ChangeKey. Lorsque je ne l'indique pas, je reçois une erreur ErrorChangeKeyRequiredForWriteOperations. Mais lorsque j'essaie d'y mettre quelque chose, je reçois un ErrorInvalidChangeKey.

Qu'est-ce que je peux utiliser pour que ça marche ?

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

8voto

jeffreypriebe Points 1070

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 de cet élément crée un nouveau ChangeKey.

Cela permet à Exchange de "savoir" que votre mise à jour est appliquée au même état que lorsque vous avez regardé l'article - il n'a pas changé depuis que vous l'avez vérifié.

Certains codes sont disponibles sur le site : http://msdn.microsoft.com/en-us/library/aa563020.aspx

2voto

Hauge Points 1257

Si vous avez la propriété ItemIdType.Id, vous devriez également avoir accès à la Changekey, qui est également une propriété de ItemIdType :

ItemIdType.ChangeKey

Comme pour la propriété Id, il s'agit d'une chaîne de caractères, que vous pouvez donc saisir lorsque vous saisissez la propriété Id.

Salutations Jesper Hauge

1voto

aloneguid Points 2122

Si vous ne connaissez que l'ID, vous pouvez obtenir facilement le ChangeKey, 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;
  }

1voto

Eyal Points 4877

Je vous recommande d'utiliser l'API gérée d'Exchange, plutôt que les services Web d'Exchange, pour travailler avec Exchange. C'est beaucoup plus facile à utiliser. Vous trouverez plus de détails ci-dessous :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X