Recuperación de propiedades MAPI
Hace referencia a: Outlook 2013 | Outlook 2016
Cuando un cliente o proveedor de servicios recupera una propiedad de un objeto, el objeto pone a disposición el valor, el tipo y el identificador de la propiedad.
Los clientes y proveedores de servicios pueden recuperar las propiedades de un objeto llamando a una de las siguientes opciones:
El método GetProps se usa para recuperar una o varias propiedades que no necesitan una interfaz especializada o alternativa para el acceso. Esto implica que las propiedades disponibles con GetProps son pequeñas, como enteros y valores booleanos.
Para recuperar varias propiedades
Asigne una estructura SPropTagArray lo suficientemente grande como para contener el número de propiedades que se van a recuperar.
Establezca el miembro cValues de la estructura SPropTagArray en el número de propiedades que se van a recuperar y establezca cada miembro aulPropTag en el identificador y el tipo, si es posible, de una de las propiedades de destino. Si el tipo es desconocido, establézcalo en PT_UNSPECIFIED. Si el tipo y el identificador son desconocidos, busque esta información llamando a IMAPIProp::GetPropList. GetPropList devuelve una matriz de etiquetas de propiedad con todas las propiedades admitidas del objeto. Si solo hay disponible un nombre de propiedad, llame a IMAPIProp::GetIDsFromNames para acceder al identificador asociado.
Llame a IMAPIProp::GetProps para abrir la propiedad o propiedades.
El método OpenProperty se usa para abrir propiedades más grandes que requieren una interfaz alternativa como IStream o IMAPITable para el acceso. OpenProperty se usa normalmente para abrir las propiedades de cadena de caracteres grandes, binarios y objetos y solo puede abrir una propiedad a la vez. Los llamadores pasan el identificador de la interfaz adicional necesaria como uno de los parámetros de entrada.
Algunos de los usos comunes de OpenProperty incluyen la apertura de PR_BODY (PidTagBody), la propiedad que contiene el cuerpo de un mensaje basado en texto, PR_ATTACH_DATA_OBJ (PidTagAttachDataObject), la propiedad que contiene un objeto OLE o datos adjuntos del mensaje y PR_CONTAINER_CONTENTS (PidTagContainerContents), la propiedad que contiene una tabla de contenido de contenedor de carpetas o libreta de direcciones.
En función de la propiedad , se solicita una interfaz diferente a OpenProperty. IStream, una interfaz que permite leer y escribir datos de propiedad como un flujo de bytes, se usa normalmente para acceder a PR_BODY. IMessage o IStream se pueden usar para acceder a PR_ATTACH_DATA_OBJ. Los datos adjuntos de mensajes incrustados que son mensajes estándar usan IMessage , mientras que los mensajes en el formato TNEF usan IStream. Dado que PR_CONTAINER_CONTENTS es un objeto de tabla, se accede a él con IMAPITable.
Para recuperar la propiedad PR_ATTACH_DATA_BIN de los datos adjuntos
Llame a la función OpenStreamOnFile para abrir una secuencia para el archivo.
Llame al método IMAPIProp::OpenProperty del mensaje para recuperar la propiedad PR_ATTACH_DATA_BIN (PidTagAttachDataBinary) con la interfaz IStream . Establezca las marcas MAPI_MODIFY y MAPI_CREATE.
Asigne una estructura STATSTG y pásela en una llamada al método IStream::Stat del flujo de archivos para determinar su tamaño. Otra manera de determinar el tamaño de la secuencia es llamar a IStream::Seek con la marca STREAM_SEEK_END.
Llame al método IStream::CopyTo de la secuencia para copiar los datos de la secuencia del archivo en la secuencia de datos adjuntos.
Cuando finalice la operación de copia, libere ambas secuencias llamando a sus métodos IUnknown::Release .
Cuando se usa IStream para el acceso a propiedades, algunos proveedores de servicios envían automáticamente el tamaño de la propiedad con la secuencia. Llamar a OpenProperty con la marca MAPI_DEFERRED_ERRORS puede retrasar la apertura de la propiedad y la devolución del tamaño de la secuencia. Si se llama a IStream::Stat para recuperar este tamaño después de OpenProperty con la marca MAPI_DEFERRED_ERRORS establecida, el rendimiento se verá afectado porque esta secuencia de llamadas fuerza una llamada de procedimiento remoto adicional. Para evitar la acierto en el rendimiento, los clientes pueden llamar a cualquier método MAPI entre las llamadas a OpenProperty y a Stat.
La función HrGetOneProp , como OpenProperty, abre una propiedad a la vez. HrGetOneProp solo se debe usar cuando el objeto de destino existe en el equipo local. Cuando el objeto de destino no está disponible localmente, el uso de HrGetOneProp repetidamente puede dar lugar a varias llamadas a procedimientos remotos y a una degradación del rendimiento.
Los autores de llamadas que necesitan varias propiedades pueden llamar a HrGetOneProp o OpenProperty en un bucle o realizar una llamada a GetProps. Llamar a GetProps una vez es más eficaz.
Nota:
Las propiedades seguras no están disponibles automáticamente con otras propiedades en una llamada GetProps, HrGetOneProp o GetPropList . Las propiedades seguras se deben solicitar explícitamente mediante sus identificadores de propiedad.