Introducción al tipo de propiedad MAPI
Hace referencia a: Outlook 2013 | Outlook 2016
Los tipos de propiedad son constantes definidas por MAPI en MAPIDEFS. Archivo de encabezado H que indica el tipo de datos subyacente de un valor de propiedad. Todas las propiedades, ya sean definidas por MAPI, por aplicaciones cliente o por proveedores de servicios, usan uno de estos tipos.
Los tipos de propiedad siguen una convención de nomenclatura similar a la que se usa para las etiquetas de propiedad. Muchos tipos de propiedad tienen una versión de valor único y de varios valores. Las propiedades con valores únicos contienen un valor de su tipo, como un único entero o cadena de caracteres. La constante usada para representar una propiedad de valor único tiene dos partes: el prefijo PT_ y una cadena que describe el tipo real, como LONG o STRING8.
Las propiedades de varios valores contienen más de un valor de su tipo. A diferencia de las matrices de variantes OLE, cada valor de una propiedad multivalor es del mismo tipo. La constante utilizada para representar propiedades multivalor se crea combinando la marca de MV_FLAG con la constante de valor único correspondiente que representa el tipo base. Hay tres partes: el prefijo PT_ seguido de MV_ seguido de una cadena que describe el tipo. Por ejemplo, se PT_MV_LONG el tipo de una propiedad que contiene varios enteros y para varias cadenas de caracteres se PT_MV_STRING8.
En la ilustración siguiente se muestra la estructura de una estructura SPropValue para describir un entero de varios valores, una propiedad de tipo PT_MV_LONG. El miembro Value se expande para incluir un recuento del número de valores enteros en la propiedad y un puntero a una matriz de esos valores.
Propiedades multivalor
Aunque la compatibilidad con propiedades de varios valores es opcional, MAPI recomienda que los clientes y los proveedores de servicios admitan ambos tipos de propiedades, ya que esto permite una mayor interacción entre los componentes compatibles con MAPI.
En la ilustración siguiente se enumeran todas las constantes de tipo de propiedad diferentes, que muestran dónde se almacenan en una estructura SPropValue . El tamaño del miembro Value depende del tipo determinado. Observe que no todos los tipos de valor único tienen equivalentes de varios valores.
Constantes de tipo de propiedad
Los clientes y proveedores de servicios que trabajan con una propiedad deben seguir dos pasos:
Determine si la propiedad está disponible o no está disponible.
Si está disponible, recupere el valor de la propiedad.
A veces, un cliente o proveedor de servicios solo necesita comprobar la existencia de una propiedad; otras veces es necesario comprobar si hay un valor específico. Por ejemplo, los proveedores de transporte tienen tres cursos de acción diferentes para procesar la propiedad PR_SEND_RICH_INFO (PidTagSendRichInfo), un valor booleano que indica si se debe transmitir o no un mensaje con texto con formato. Si PR_SEND_RICH_INFO se establece en TRUE, el proveedor de transporte transmite el texto con formato. Si se establece en FALSE, el texto con formato se descarta antes de la transmisión. Si PR_SEND_RICH_INFO no está disponible, el proveedor de transporte sigue su curso de acción predeterminado, sea lo que sea para el proveedor determinado.
MAPI define un tipo de propiedad especial, PT_UNSPECIFIED, que un cliente o proveedor de servicios puede usar para recuperar una propiedad cuando el tipo de propiedad es desconocido. Para recuperar una propiedad sin conocimientos previos de su tipo, un cliente o proveedor de servicios llama al método IMAPIProp::GetProps de un objeto y pasa una etiqueta de propiedad formada por el identificador de la propiedad y el tipo de propiedad PT_UNSPECIFIED. GetProps devuelve una estructura SPropValue para la propiedad , reemplazando PT_UNSPECIFIED por el tipo adecuado. Los proveedores de servicios que implementan GetProps son necesarios para admitir PT_UNSPECIFIED.
Algunos objetos MAPI admiten propiedades que son objetos en sí mismos. Las propiedades del objeto tienen el tipo PT_OBJECT. En lugar de usar IMAPIProp::GetProps para acceder a estas propiedades, los clientes y los proveedores de servicios suelen usar el método IMAPIProp::OpenProperty , especificando la interfaz adecuada para el acceso o un método en el objeto que admite la propiedad.
Dado que el acceso al valor de una propiedad de objeto implica el uso de una de las interfaces para el objeto, GetProps es inadecuado. Con GetProps, el autor de la llamada accede al valor de una propiedad a través de una estructura SPropValue . Con IMAPIProp::OpenProperty, el autor de la llamada recupera un puntero a una interfaz que puede acceder al objeto. OpenProperty siempre se puede usar para recuperar una propiedad de objeto. La otra opción, llamar a un método en el objeto , no está disponible con todas las propiedades de objeto.
Por ejemplo, cada carpeta admite dos tablas, una tabla de jerarquía y una tabla de contenido. Estas tablas son propiedades de la carpeta; sus etiquetas de propiedad son PR_CONTAINER_HIERARCHY (PidTagContainerHierarchy) y PR_CONTAINER_CONTENTS (PidTagContainerContents). Las tablas son objetos que requieren la interfaz IMAPITable para el acceso. Un cliente puede llamar al método IMAPIContainer::GetHierarchyTable de la carpeta para tener acceso a la tabla de jerarquía, al método IMAPIContainer::GetContentsTable de la carpeta para acceder a la tabla de contenido o al método IMAPIProp::OpenProperty de la carpeta para acceder a cualquiera de las tablas. Para llamar a OpenProperty, un cliente pasa la etiqueta de propiedad de la propiedad como primer parámetro y un identificador de interfaz para la interfaz que se usará para el acceso como segundo parámetro. Estos parámetros serían PR_CONTAINER_HIERARCHY o PR_CONTAINER_CONTENTS y IID_IMAPITable.
Para obtener una lista completa de los tipos de propiedad de valor único y de varios valores, vea Tipos de propiedad.