Что я использую для ChangeKey в EWS UpdateItem? - PullRequest
4 голосов
/ 29 сентября 2008

Я пытаюсь использовать Exchange Web Services для обновления элемента календаря. Я создаю ItemChangeType, а затем ItemIdType. У меня есть уникальный идентификатор для ItemIdType.Id, но мне нечего использовать для ChangeKey. Когда я опускаю это, я получаю ErrorChangeKeyRequiredForWriteOperations. Но когда я пытаюсь просто положить что-то там, я получаю ErrorInvalidChangeKey.

Что я могу использовать для этого, чтобы заставить его работать?

Я также пытаюсь определить, какую наилучшую реализацию BaseItemIdType использовать для ItemChangeType.Item. Пока что я использую ItemIdType, и я предполагаю, что это правильно, но я не смог найти какой-либо особенно полезной документации по этому вопросу.

Ответы [ 4 ]

7 голосов
/ 21 января 2009

Чтобы быть немного более точным в ответе Хауге: ChangeKey хранится в Exchange и определяет текущее состояние элемента. Любое изменение этого элемента создает новый ChangeKey.

Это позволяет Exchange «знать», что ваше обновление применяется к тому же состоянию элемента, что и при просмотре элемента - оно не изменилось с момента его проверки.

Некоторый код доступен по адресу: http://msdn.microsoft.com/en-us/library/aa563020.aspx

2 голосов
/ 14 ноября 2008

Если у вас есть свойство ItemIdType.Id, у вас также должен быть доступ к Ключу изменения, это также свойство ItemIdType:

ItemIdType.ChangeKey

Подобно свойству Id, это строка, поэтому вы можете получить ее, когда захватите Id.

С уважением Джеспер Хауге

1 голос
/ 12 ноября 2010

Я рекомендую вам использовать Exchange Managed API вместо Exchange Web Services для работы с Exchange. Это намного проще в использовании. Вы можете найти более подробную информацию ниже:

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

1 голос
/ 17 августа 2009

Если вы знаете только идентификатор, вы можете легко получить 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;
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...