2010-11-12 11 views
11

Escribo una pequeña aplicación, que debe procesar automáticamente los correos electrónicos de una carpeta pública. Para cada correo electrónico, queremos guardar algunos metadatos, en una base de datos.Servicios web de intercambio: ¿por qué ItemId no es constante?

Quería usar el ItemID para hacer el enlace entre estos metadatos y un correo electrónico específico, y acabo de descubrir que este ItemId no es constante. Por ejemplo, si el correo electrónico se mueve de una carpeta pública a otra, recibirá otro ItemId. Eso significa que el enlace entre el correo electrónico y los metadatos asociados se pierde.

Entonces, el problema es, ¿cómo puedo hacer el enlace entre los metadatos y el correo electrónico específico?

+0

Véase también http://stackoverflow.com/questions/11827152/exchange-web-services-why-is-itemid-not-constant-continued que tiene algún ejemplo de código para guardar un guid en un elemento EWS como solución para este problema. – Rory

Respuesta

0

usted tiene que convertir la EntryItemId a EWS única Identificación del artículo entonces se puede utilizar como clave principal para crear una entrada en la base de datos

un vistazo a:

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

No, creo que EntryId cambia cuando los elementos se mueven entre carpetas también. Claro que puede convertir entre EwsId y EntryId, pero eso no significa que le proporcione una identificación única a lo largo del tiempo. – Rory

5

Mi entendimiento es , que el ID único de EWS contiene el EntryId de alguna forma. Por lo tanto, cambiará una vez que el elemento se mueva a otra carpeta.

Y aunque no se aplica aquí, la situación es más complicada con las entradas de calendario, ya que Exchange destruye y recrea una cita bajo ciertas circunstancias, cambiando así la identificación única.

Esta página (http://msdn.microsoft.com/en-us/library/cc815908.aspx) contiene una descripción general de las propiedades MAPI que se pueden utilizar para identificar un objeto. Una alternativa a esto es que puede agregar su propia propiedad de identificación al elemento de Exchange (a través de la propiedad extendida).

+0

El problema que me he encontrado es cuando entra la notificación de que se ha eliminado un elemento, porque la propiedad extendida está adjunta al elemento, no se puede recuperar porque se ha eliminado junto con el elemento ... mi problema relacionado aquí: http://stackoverflow.com/q/8807765/555384 – jondavidjohn

1

Cambios de ID de artículo. No permanece único en todas partes. Para acceder a un elemento, uno puede usar GUID.

(la solicitud SOAP a continuación es para ir a buscar un elemento de calendario.) Usted puede recuperar información acerca de un elemento utilizando GUID en una llamada 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> 
Cuestiones relacionadas