IABLogon::OpenTemplateID
Hace referencia a: Outlook 2013 | Outlook 2016
Abre una entrada de destinatario que tiene datos que residen en un proveedor de libreta de direcciones de host.
HRESULT OpenTemplateID(
ULONG cbTemplateID,
LPENTRYID lpTemplateID,
ULONG ulTemplateFlags,
LPMAPIPROP lpMAPIPropData,
LPCIID lpInterface,
LPMAPIPROP FAR * lppMAPIPropNew,
LPMAPIPROP lpMAPIPropSibling
);
Parameters
cbTemplateID
[in] Recuento de bytes en el identificador de plantilla al que apunta el parámetro lpTemplateID .
lpTemplateID
[in] Puntero al identificador de plantilla o PR_TEMPLATEID propiedad (PidTagTemplateid) de la entrada de destinatario que se va a abrir.
ulTemplateFlags
[in] Máscara de bits de marcas usadas para indicar cómo abrir la entrada representada por el identificador de plantilla. Se puede establecer la marca siguiente:
FILL_ENTRY
El proveedor de hosts está creando una nueva entrada en su contenedor en función de la entrada representada por el identificador de plantilla. El método IABLogon::OpenTemplateID debe realizar una inicialización específica de la entrada del proveedor host mediante la implementación IMAPIProp : IUnknown en el parámetro lpMAPIPropData o devolver una implementación de interfaz IMAPIProp personalizada en el parámetro lppMAPIPropNew .
lpMAPIPropData
[in] Puntero al objeto de propiedad del proveedor host y a la implementación de una interfaz derivada de IMAPIProp.
lpInterface
[in] Puntero al identificador de interfaz (IID) que representa el tipo de puntero de interfaz que se va a devolver en el parámetro lppMAPIPropNew . Pasar null devuelve la interfaz de usuario de mensajería estándar, IMailUser : IMAPIProp.
lppMAPIPropNew
[out] Puntero al objeto de propiedad enlazada y una implementación de una interfaz derivada de IMAPIProp.
lpMAPIPropSibling
[out] Reservados; debe ser null.
Valor devuelto
S_OK
El código adecuado se ha enlazado correctamente a los datos relacionados en el proveedor de hosts.
MAPI_E_NO_SUPPORT
El objeto no admite identificadores de plantilla.
MAPI_E_UNKNOWN_ENTRYID
El proveedor de libreta de direcciones no reconoce el identificador de plantilla pasado en el parámetro lpTemplateID .
Comentarios
El método IABLogon::OpenTemplateID solo lo implementan los proveedores de libretas de direcciones que necesitan mantener el control sobre las copias de sus entradas que se encuentran en los contenedores de proveedores de hosts. Los proveedores que implementan OpenTemplateID se conocen como proveedores de libretas de direcciones externas. Los proveedores de host llaman a IMAPISupport::OpenTemplateID para crear una entrada copiada o abrir la entrada copiada, y MAPI pasa la llamada a IABLogon::OpenTemplateID. IABLogon::OpenTemplateID abre la entrada y enlaza el código que lo controla a los datos del proveedor host.
En lugar de usar un identificador de entrada, IABLogon::OpenTemplateID usa otra propiedad, el identificador de plantilla de la entrada, PR_TEMPLATEID. Se deben admitir identificadores de plantilla para las entradas cuyo código se debe enlazar a los datos de un proveedor host.
Algunos ejemplos de cuándo un proveedor de libreta de direcciones debe implementar IABLogon::OpenTemplateID son los siguientes:
Para actualizar periódicamente los datos de una entrada copiada para que permanezcan sincronizados con el original.
Para implementar la funcionalidad que el proveedor de hosts no puede implementar, como rellenar dinámicamente una lista que aparece en la tabla de detalles de la entrada a partir de datos de un servidor.
Para controlar la interacción entre las propiedades de la entrada del proveedor de hosts y la entrada original, como calcular el PR_EMAIL_ADDRESS (PidTagEmailAddress) a partir de los valores de los controles de edición en la pantalla de detalles que contienen distintos componentes de la dirección.
Notas a los implementadores
Cuando un proveedor de hosts copia o crea una entrada del proveedor y proporciona una implementación de objeto de propiedad a través de IABLogon::OpenTemplateID, controla la mayoría de las llamadas para mantener la entrada. Sin embargo, dado que depende del proveedor de hosts reenviar estas llamadas, el proveedor de host puede interceptar cualquier llamada y realizar un procesamiento personalizado antes de reenviar la llamada.
Debe usar las siguientes directrices en las implementaciones de objetos de propiedad:
Cuando se llama a IMAPIProp::GetProps , determine si la solicitud es para una propiedad calculada y, si es así, controlarla. Transfiera todas las solicitudes de propiedades no compatibles al proveedor host.
Cuando se llama a IMAPIProp::OpenProperty para abrir cualquier tabla excepto la tabla de visualización de detalles, controle la solicitud. La mayoría de las tablas no se pueden copiar con precisión en el proveedor host. Debe generar la implementación de IMAPITable para estas tablas solicitadas. La propiedad de tabla de detalles PR_DETAILS_TABLE (PidTagDetailsTable) debe copiarse en el proveedor host. Esto permite que este proveedor genere la tabla localmente. Es posible que desee encapsular la implementación de la tabla para mostrar para generar notificaciones de tabla para mostrar.
Cuando se llama a IMAPIProp::SetProps , el proveedor de host puede validar los datos antes de permitirle establecer las propiedades. Puede comprobar que todas las propiedades necesarias se han establecido o calculado. Si se detecta un error, devuelva el valor de error adecuado y, si puede, cualquier explicación adicional a través de IMAPIProp::GetLastError.
Cuando se llama a IMAPIProp::SaveChanges , es posible que el proveedor de hosts quiera realizar el procesamiento antes de guardar la entrada. Debe guardar los datos que se vean afectados por las propiedades modificadas, como una nueva dirección, en la entrada del proveedor host.
En general, realice la implementación de la entrada que se pasa al proveedor de host intercepte todos los métodos para realizar la manipulación específica del contexto de las propiedades pertinentes. Si se pasa la marca de FILL_ENTRY en el parámetro ulTemplateFlags , establezca todas las propiedades de la entrada.
Si devuelve un nuevo objeto de propiedad en el parámetro lppMAPIPropNew , llame al método IUnknown::AddRef del objeto de propiedad del proveedor de hosts para mantener una referencia. Todas las llamadas a través del objeto enlazado que la implementación IMAPIProp devolvió en lppMAPIPropNew deben enrutarse a su método correspondiente en el objeto de propiedad host después de que el objeto enlazado las trate.
Los identificadores de propiedad de las propiedades con nombre que se pasan a través del objeto de propiedad enlazada se encuentran en el espacio de nombres de identificador del proveedor. La implementación del método IMAPIProp::GetNamesFromIDs debe determinar los nombres de las propiedades para que pueda realizar cualquier tarea específica de la plantilla. De forma similar, las propiedades que el proveedor pasa al proveedor host también deben estar en el espacio de nombres. Por ejemplo, si establece una propiedad con nombre en OpenTemplateID, debe usar uno de sus identificadores para el nombre: para crearla, si es necesario, llame al método IMAPIProp::GetIDsFromNames .
Si no reconoce el identificador de entrada pasado en lpTemplateID, devuelva MAPI_E_UNKNOWN_ENTRYID.
Para obtener más información sobre cómo trabajar con identificadores de plantilla de libreta de direcciones, vea Actuar como proveedor de libretas de direcciones externas.