Веб-службы 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>
Ответ 3
вам необходимо преобразовать идентификатор элемента 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