Estado de implementación de objeto
Hace referencia a: Outlook 2013 | Outlook 2016
Todos los proveedores de servicios deben implementar un objeto de estado y proporcionar propiedades desde él a la tabla de estado de sesión. Puede incluir una o varias filas en la tabla de estado, en función del número de recursos que controle. Por ejemplo, un proveedor de transporte debe crear una fila en la tabla de estado para cada cola de mensajes que administre. Cuando se producen cambios, se debe actualizar la fila de tabla de estado adecuada. Los objetos status se implementan para proporcionar acceso tanto a la información incluida en la tabla de estado como a información adicional no incluida en la tabla.
Para implementar un objeto de estado
Implemente el método OpenStatusEntry del objeto de inicio de sesión. Cuando los clientes quieren abrir el objeto de estado, llaman a IMAPISession::OpenEntry. MAPI satisface la solicitud abierta llamando al método OpenStatusEntry del proveedor, lo que hace que el proveedor abra su objeto de estado y devuelva al cliente un puntero a su implementación IMAPIStatus . En la implementación de OpenStatusEntry , complete los pasos siguientes:
Realice las siguientes tareas si el objeto de inicio de sesión aún no ha creado un objeto de estado:
Llame al método IMAPISupport::OpenProfileSection del objeto de soporte técnico para acceder a la sección de perfil del proveedor.
Cree un nuevo objeto de estado.
Almacene una referencia a la sección de perfil en el objeto de estado del proveedor y llame al método IUnknown::AddRef de la sección de perfil para incrementar su recuento de referencias.
Almacene una referencia al objeto de inicio de sesión en el objeto de estado del proveedor y llame al método IUnknown::AddRef del objeto de inicio de sesión para incrementar su recuento de referencias.
Almacene una referencia al objeto de estado en el objeto de inicio de sesión del proveedor.
Llame al método IUnknown::AddRef del objeto de estado para incrementar su número de referencias en el objeto de inicio de sesión.
Establezca la propiedad PR_OBJECT_TYPE del objeto de estado (PidTagObjectType) en MAPI_STATUS.
Establezca el parámetro de salida lppMAPIStatus para que apunte al objeto de estado y devuelva.
Compruebe el parámetro de entrada ulFlags . Si se establece en MAPI_MODIFY y el proveedor admite el acceso de lectura y escritura a su objeto de estado, devuelve un objeto que se puede escribir. Sin embargo, si el proveedor no admite el acceso de lectura y escritura a su objeto de estado, no se produzca un error. Devuelve un objeto de estado que es de solo lectura. Los clientes que esperan recibir objetos de estado de lectura y escritura deben comprobar que se ha concedido el permiso de lectura y escritura antes de intentar realizar cambios.
Establezca todas las propiedades de tabla de estado y objeto de estado necesarias. Las propiedades que incluya en la fila de la tabla de estado deben estar disponibles a través del objeto de estado, excepto para las propiedades calculadas por MAPI. Las propiedades necesarias son las siguientes:
PR_DISPLAY_NAME (PidTagDisplayName)
PR_PROVIDER_DLL_NAME (PidTagProviderDllName)
PR_PROVIDER_DISPLAY (PidTagProviderDisplay)
PR_RESOURCE_TYPE (PidTagResourceType)
PR_RESOURCE_METHODS (PidTagResourceMethods)
PR_RESOURCE_FLAGS (PidTagResourceFlags)
PR_STATUS_CODE (PidTagStatusCode)
Implemente los métodos IMAPIStatus : IMAPIProp adecuados para el proveedor. En función del proveedor, no es necesario implementar todos los cuatro métodos en IMAPIStatus. Cada proveedor debe implementar una versión de solo lectura de los métodos de la interfaz IMAPIProp : IUnknown y el método IMAPIStatus::ValidateState .
Los proveedores de transporte también deben implementar IMAPIStatus::FlushQueues y todos los proveedores deben admitir IMAPIStatus::SettingsDialog. Sin embargo, la compatibilidad con IMAPIStatus::ChangePassword es opcional. Solo los proveedores de servicios que requieren contraseñas y quieren permitir que los usuarios las cambien mediante programación deben implementar este método. Para cada método que admita, establezca el bit correspondiente en la propiedad PR_RESOURCE_METHODS . Por ejemplo, si solo admite ValidateState y SettingsDialog , establezca PR_RESOURCE_METHODS en lo siguiente:
STATUS_VALIDATE_STATE | STATUS_SETTINGS_DIALOG
Los clientes deben comprobar el valor de PR_RESOURCE_METHODS antes de intentar llamar al objeto de estado. Controle las llamadas a cualquiera de los métodos no admitidos devolviendo MAPI_E_NO_SUPPORT.
Llame a IMAPISupport::ModifyStatusRow durante el inicio de sesión para agregar la fila o las filas a la tabla de estado. Pase una matriz de valores de propiedad que contenga la información de columna de la fila y 0 para el parámetro ulFlags . Si en algún momento posterior de la sesión cambia el estado del proveedor y es necesario actualizar la información de columna, llame a ModifyStatusRow de nuevo con la marca STATUSROW_UPDATE establecida.
Para obtener más información sobre los objetos de estado, vea Objetos de estado MAPI.