Веб-службы Exchange: почему ItemId не является константой?

Я пишу небольшое приложение, которое должно автоматически обрабатывать электронные письма из общей папки. Для каждого письма мы хотим сохранить некоторые метаданные в базе данных.

Я хотел использовать ItemID, чтобы установить связь между этими метаданными и конкретным электронным письмом, и я только что обнаружил, что этот ItemId не является постоянным. Например, если электронное письмо перемещено из общей папки в другую, оно получит другой ItemId. Это означает, что связь между электронной почтой и связанными с ней метаданными теряется.

Итак, проблема в том, как я могу установить связь между метаданными и конкретным электронным письмом?

Ответ 1

Я понимаю, что уникальный идентификатор EWS содержит EntryId в той или иной форме. Поэтому он будет меняться после перемещения элемента в другую папку.

И, хотя здесь не применимо, ситуация осложняется записью календаря, поскольку Exchange разрушает и воссоздает встречу при определенных обстоятельствах, тем самым изменяя уникальный идентификатор.

Эта страница (http://msdn.microsoft.com/en-us/library/cc815908.aspx) содержит обзор свойств MAPI, который можно использовать для идентификации объекта. Альтернативой этому является то, что вы можете добавить свое собственное свойство id к элементу Exchange (через расширенное свойство).

Ответ 2

Изменения идентификатора товара. Он не остается уникальным во всем. Для доступа к элементу можно использовать GUID.

(Запрос SOAP ниже предназначен для извлечения элемента календаря). Вы можете получить информацию об элементе с помощью GUID в вызове FindItem

 <FindItem xmlns="http://schemas.microsoft.com/exchange/services/2006/messages" 
      xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types" 
     Traversal="Shallow">
  <ItemShape>
  <t:BaseShape>AllProperties</t:BaseShape>
  </ItemShape>
  <Restriction>
  <t:IsEqualTo>
  <t:ExtendedFieldURI PropertySetId="6ED8DA90-450B-101B-98DA-00AA003F1305" PropertyId="3" PropertyType="Binary" /> 
  <t:FieldURIOrConstant>
  <t:Constant Value="BAAAAJXIl1MJ8="/>  /* GUID */ 
  </t:FieldURIOrConstant>
  </t:IsEqualTo>
  </Restriction>
  <ParentFolderIds>
  <t:DistinguishedFolderId Id="calendar"/>
  </ParentFolderIds>
  </FindItem>