Propiedades con nombre MAPI
Hace referencia a: Outlook 2013 | Outlook 2016
MAPI proporciona una facilidad para asignar nombres a propiedades, para asignar estos nombres a identificadores únicos y para que esta asignación sea persistente. La asignación persistente de nombres a identificadores garantiza que los nombres de propiedad sigan siendo válidos entre sesiones.
Para definir una propiedad con nombre, un cliente o proveedor de servicios constituye un nombre y lo almacena en una estructura MAPINAMEID . Dado que los nombres se componen de un identificador único global de 128 bits, o GUID, y una cadena de caracteres Unicode o un valor numérico de 32 bits, los creadores de propiedades con nombre pueden crear nombres significativos sin miedo a la duplicación. Los nombres son únicos y se pueden usar sin tener en cuenta el valor de sus identificadores.
Para admitir propiedades con nombre, un proveedor de servicios implementa dos métodos( IMAPIProp::GetIDsFromNames e IMAPIProp::GetNamesFromIDs ) para traducir entre nombres e identificadores y permitir que sus métodos IMAPIProp::GetPropsIMAPIProp::SetProps recuperen y modifiquen propiedades con identificadores en el intervalo de propiedades con nombre. El intervalo de identificadores de propiedad con nombre está entre 0x8000 y 0xFFFE.
Cualquier objeto que implemente la interfaz IMAPIProp puede admitir propiedades con nombre. Los proveedores de libreta de direcciones que permiten copiar entradas de otros proveedores en sus contenedores y proveedores de almacén de mensajes que se pueden usar para crear tipos de mensajes arbitrarios son necesarios para proporcionar esta compatibilidad. Es una opción para todos los demás proveedores de servicios. Los proveedores que no admiten propiedades con nombre devuelven MAPI_E_NO_SUPPORT de los métodos GetIDsFromNames y GetNamesFromIDs y se niegan a establecer propiedades con identificadores de 0x8000 o superior, devolviendo MAPI_E_UNEXPECTED en SPropProblemarray.
La creación de nombres para propiedades es una manera de que los clientes definan nuevas propiedades para las clases de mensajes existentes o personalizadas. Los proveedores de servicios pueden usar propiedades con nombre para exponer características únicas de sus sistemas de mensajería. Sin embargo, otro uso para las propiedades con nombre es proporcionar una manera alternativa de hacer referencia a las propiedades con identificadores debajo de 0x8000.
Por ejemplo, un cliente podría usar código similar al código siguiente para recuperar los nombres de todas las propiedades con nombre de un objeto:
LPSPropTagArray FAR * lppPropTags = NULL;
LPGUID lpPropSetGuid = NULL;
ULONG FAR * lpcPropNames;
LPMAPINAMEID FAR * FAR * lpppPropNames;
lpMAPIProp->GetNamesFromIDs (lppPropTags,
lpPropSetGuid,
0,
lpcPropNames,
lpppPropNames);
Para solicitar todos los nombres del conjunto de propiedades PS_PUBLIC_STRINGS, un cliente reemplazaría el valor NULL del parámetro property set en PS_PUBLIC_STRINGS como se indica a continuación:
LPSPropTagArray FAR * lppPropTags = NULL;
LPGUID lpPropSetGuid = &PS_PUBLIC_STRINGS;
ULONG FAR * lpcPropNames;
LPMAPINAMEID FAR * FAR * lpppPropNames;
lpMAPIProp->GetNamesFromIDs (lppPropTags,
lpPropSetGuid,
0,
lpcPropNames,
lpppPropNames);