Tablas de estado
Hace referencia a: Outlook 2013 | Outlook 2016
La tabla de estado contiene información relacionada con el estado de la sesión actual. Hay una tabla de estado para cada sesión MAPI que incluye información proporcionada por MAPI y por proveedores de servicios. MAPI proporciona datos para tres filas: una fila para el subsistema MAPI, una fila para la cola mapi y una fila para la libreta de direcciones integrada. Dado que los proveedores de transporte son necesarios para proporcionar información de estado a la tabla de estado, hay una fila para cada proveedor de transporte activo. Los proveedores de la libreta de direcciones y del almacén de mensajes pueden elegir si se va a admitir la tabla de estado.
Dado que cada fila la proporciona un recurso diferente, el conjunto de columnas puede variar de una fila a otra. Hay un conjunto de columnas que cada objeto de estado es necesario proporcionar y un conjunto de columnas que proporciona MAPI. Un proveedor de servicios puede agregar a estos conjuntos para exponer propiedades específicas del proveedor. Por ejemplo, los proveedores de almacén de mensajes pueden agregar PR_STORE_RECORD_KEY (PidTagStoreRecordKey) para proporcionar a los clientes el identificador de su almacén de mensajes. Los clientes deben tener conocimientos avanzados de la existencia de esta información adicional para poder usarla.
En la tabla siguiente se enumeran las propiedades que deben estar en cada fila de tabla de estado. El implementador del objeto de estado proporciona algunas de las propiedades; otros se calculan mediante MAPI.
Propiedades proporcionadas por el objeto status | Propiedades proporcionadas por MAPI |
---|---|
PR_DISPLAY_NAME (PidTagDisplayName) |
PR_PROVIDER_DLL_NAME (PidTagProviderDllName) |
PR_STATUS_CODE (PidTagStatusCode) |
PR_RESOURCE_FLAGS (PidTagResourceFlags) |
PR_RESOURCE_METHODS (PidTagResourceMethods) |
PR_RESOURCE_TYPE (PidTagResourceType) |
Si el objeto de estado proporciona una identidad, debe establecer PR_IDENTITY_DISPLAY (PidTagIdentityDisplay), PR_IDENTITY_ENTRYID (PidTagIdentityEntryId) y PR_IDENTITY_SEARCH_KEY (PidTagIdentitySearchKey) e incluir estas propiedades en la tabla.
MAPI calcula cuatro propiedades para cada fila de tabla de estado:
Propiedad | ... |
---|---|
PR_ENTRYID (PidTagEntryId) |
PR_INSTANCE_KEY (PidTagInstanceKey) |
PR_OBJECT_TYPE (PidTagObjectType) |
PR_ROWID (PidTagRowid) |
MAPI asigna un identificador de entrada a la fila de estado para permitir que los clientes abran el objeto de estado correspondiente. También se asigna un identificador de fila para identificar la fila de la tabla como una clave de instancia para identificar los datos del objeto de estado. La propiedad PR_OBJECT_TYPE se establece en MAPI_STATUS.
Para obtener acceso a la tabla de estado, los clientes llaman al método IMAPISession::GetStatusTable . Esta llamada no debe realizarse inmediatamente al iniciarse. Esto se debe a que GetStatusTable tiene que esperar a que la cola MAPI inicialice los proveedores de transporte, una operación que se pospone hasta que el cliente haya finalizado su inicio de sesión. GetStatusTable es una llamada relativamente rápida después de que la cola MAPI haya completado su procesamiento de inicio.
La información de la tabla de estado se puede usar de varias maneras, como para acceder a un objeto de estado, para determinar si un cliente se ejecuta en un modo conectado o sin conexión y para supervisar el estado de un proveedor. Por ejemplo, los clientes pueden abrir un objeto de estado de un proveedor de servicios específico pasando el valor de la propiedad PR_ENTRYID al método IMAPISession::OpenEntry . El objeto de estado admite la interfaz IMAPIStatus , una interfaz que contiene métodos para cambiar la contraseña de un proveedor de servicios, vaciar la cola de mensajes, mostrar una hoja de propiedades de configuración o confirmar el estado con un proveedor directamente. La información de la tabla de estado también se puede usar para crear un cuadro de diálogo para informar a los clientes del progreso durante una operación larga.
Los proveedores de servicios que admiten la tabla de estado usan el método IMAPISupport::ModifyStatusRow para crear y actualizar su fila. Cada vez que se produce un cambio en su fila, se deben notificar todos los objetos receptores de aviso registrados para recibir notificaciones de tabla de estado. Los proveedores de servicios pueden llamar al método IMAPISupport::Notify si usan la utilidad de notificación MAPI o llaman directamente al método IMAPIAdviseSink::OnNotify de cada receptor de aviso.