Что использовать для ChangeKey в UpdateItem EWS?

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

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

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


person coder1    schedule 29.09.2008    source источник
comment
Я считаю, что каждый раз, когда вы создаете или обновляете что-то, вы должны где-то хранить ключ изменения для будущего использования.   -  person Sam    schedule 04.06.2013


Ответы (4)


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

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

Некоторый код доступен по адресу: http://msdn.microsoft.com

person jeffreypriebe    schedule 21.01.2009

Если у вас есть свойство ItemIdType.Id, вы также должны иметь доступ к Changekey, это также свойство ItemIdType:

ItemIdType.ChangeKey

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

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

person Hauge    schedule 14.11.2008

Если вы знаете только 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;
  }
person Ivan G.    schedule 17.08.2009

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

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

person dann    schedule 12.11.2010