2010-11-12 5 views
11

J'écris une petite application, qui devrait traiter automatiquement les emails d'un dossier public. Pour chaque email, nous voulons sauvegarder des métadonnées, dans une base de données.Services Web Exchange: pourquoi ItemId n'est pas constant?

Je voulais utiliser l'ItemID pour faire le lien entre cette métadonnée et un email spécifique, et je viens de découvrir que cet itemId n'est pas constant. Par exemple, si l'e-mail est déplacé d'un dossier public vers un autre, il recevra un autre ItemId. Cela signifie que le lien entre l'e-mail et les métadonnées associées est perdu. Donc, le problème est, comment puis-je faire le lien entre les métadonnées et l'email spécifique?

+0

Voir aussi http://stackoverflow.com/questions/11827152/exchange-web-services-pourquoi-is-itemid-not-constant-continue qui a un exemple de code pour enregistrer un guid contre un élément EWS comme solution à ce problème. – Rory

Répondre

0

vous devez convertir le EntryItemId à id EWS article unique que vous pouvez utiliser comme clé primaire pour créer une entrée dans le DB

Jetez un oeil à:

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

+0

Non Je crois que le EntryId change lorsque les éléments sont déplacés parmi les dossiers. Bien sûr, vous pouvez convertir entre EwsId et EntryId, mais cela ne signifie pas qu'il vous donne un identifiant unique au fil du temps. – Rory

5

Ma compréhension est , que l'identifiant unique EWS contient l'EntryId sous une forme quelconque. Par conséquent, il va changer une fois que l'élément est déplacé vers un autre dossier.

Et bien que non applicable ici, la situation est plus compliquée avec les entrées de calendrier, car Exchange détruit et recrée un rendez-vous dans certaines circonstances, changeant ainsi l'identifiant unique.

Cette page (http://msdn.microsoft.com/en-us/library/cc815908.aspx) contient une vue d'ensemble des propriétés MAPI pouvant être utilisées pour identifier un objet. Une alternative à ceci est que vous pouvez ajouter votre propre propriété id à l'élément Exchange (via la propriété étendue).

+0

Le problème que j'ai rencontré est quand une notification qu'un élément a été supprimé, parce que la propriété étendue est attachée à l'élément, il n'est pas récupérable car il a été supprimé avec l'élément ... mon problème connexe ici: http://stackoverflow.com/q/8807765/555384 – jondavidjohn

1

Modifications d'ID article. Il ne reste pas unique tout au long. Pour accéder à un élément, on peut utiliser le GUID.

(La demande SOAP ci-dessous pour aller chercher un élément de calendrier.) Vous pouvez chercher des informations sur un élément en utilisant GUID dans un appel 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> 
Questions connexes