Implementación de objetos de control
Hace referencia a: Outlook 2013 | Outlook 2016
Los proveedores implementan objetos de control o objetos que admiten la interfaz IMAPIControl : IUnknown para agregar funcionalidad a un botón que aparece en un cuadro de diálogo MAPI. Los objetos de control solo se pueden implementar para botones.
IMAPIControl tiene tres métodos: GetLastError, GetState y Activate.
MAPI llama a GetState para determinar si se va a deshabilitar o no el botón. Se llama a GetState en las situaciones siguientes:
Cuando se muestra por primera vez el cuadro de diálogo en el que aparece el botón.
Cuando se emite una notificación de tabla para mostrar para el botón.
Establezca el contenido del parámetro lpulState en MAPI_DISABLED si el usuario no puede interactuar con el botón y MAPI_ENABLED si el usuario puede interactuar.
Cuando el usuario hace clic en el botón, MAPI llama a Activate. Activate realiza la tarea que se ha asociado al botón. Esta tarea puede ser cualquier cosa adecuada para el proveedor, como mostrar un cuadro de diálogo o actualizar una propiedad. Si la tarea no se realiza correctamente porque el usuario la canceló, devuelva MAPI_E_USER_CANCEL. Para otras causas de error, devuelva el valor de error adecuado.
Si la tarea se realiza correctamente y está vinculada a un cambio de propiedad que se refleja en otro control del cuadro de diálogo, llame a ITableData::HrNotify. Se llama a HrNotify para emitir una notificación de tabla para mostrar con la propiedad PR_CONTROL_ID (PidTagControlId) de la propiedad modificada en la estructura TABLE_NOTIFICATION. No coloque el nuevo valor de propiedad en la estructura; en su lugar, devuévalo cuando se llame a IMAPIProp::GetProps . Aunque normalmente no se puede usar una notificación de tabla para mostrar para deshabilitar o habilitar un control, se puede usar con un botón. MAPI actualizará el control modificado para responder a la notificación.
MAPI llama al método GetLastError del control cuando Activate devuelve un error distinto de MAPI_E_USER_CANCEL. Si GetLastError coloca información de error extendida en la estructura MAPIERROR que devuelve en el contenido de the_lppMAPIError_ parámetro, MAPI la muestra para el usuario.