Веб-сервисы Exchange: почему ItemId не является постоянным? - PullRequest
12 голосов
/ 12 ноября 2010

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

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

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

Ответы [ 3 ]

6 голосов
/ 14 ноября 2010

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

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

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

1 голос
/ 10 декабря 2010

Изменения ID предмета.Это не остается уникальным во всем.Для доступа к элементу можно использовать 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>
0 голосов
/ 12 ноября 2010

вам нужно преобразовать EntryItemId в уникальный идентификатор элемента EWS, после чего вы можете использовать его в качестве первичного ключа для создания записи в БД

Посмотрите:

http://blogs.msdn.com/b/brijs/archive/2010/09/09/how-to-convert-exchange-item-s-entryid-to-ews-unique-itemid-via-ews-managed-api-convertid-call.aspx

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