Puede especificar los datos específicos del buzón de Exchange de un usuario mediante el objeto RoamingSettings. Los datos personales y las preferencias del usuario son ejemplos de estos datos. El complemento de correo puede obtener acceso a la configuración de movilidad cuando se mueve en cualquier dispositivo en el que pueda ejecutarse por diseño (escritorio, tableta o smartphone).
Los cambios en estos datos se almacenan en una copia en memoria de los parámetros de la sesión actual de Outlook. Debe guardar explícitamente todas las opciones de itinerancia después de actualizarlas para que estén disponibles la próxima vez que el usuario abra el complemento, en el mismo dispositivo o en cualquier otro dispositivo compatible.
Importante
Aunque la API del complemento de Outlook limita el acceso a esta configuración solo al complemento que las creó, esta configuración no debe considerarse almacenamiento seguro. Otros servicios pueden acceder a ellos, como Microsoft Graph. No deben usarse para almacenar información confidencial, como credenciales de usuario o tokens de seguridad.
Los datos de un objeto RoamingSettings se almacenan como una cadena serializada de notación de objetos JavaScript (JSON).
A continuación se muestra un ejemplo de la estructura, suponiendo que hay tres configuraciones de itinerancia definidas denominadas add-in_setting_name_0
, add-in_setting_name_1
y add-in_setting_name_2
.
{
"add-in_setting_name_0": "add-in_setting_value_0",
"add-in_setting_name_1": "add-in_setting_value_1",
"add-in_setting_name_2": "add-in_setting_value_2"
}
Carga de la configuración de movilidad
Un complemento de correo normalmente carga la configuración de itinerancia en el controlador Office.onReady . En el siguiente ejemplo de código de JavaScript se muestra cómo cargar la configuración de itinerancia existente y obtener los valores de dos configuraciones, customerName y customerBalance.
let _mailbox;
let _settings;
let _customerName;
let _customerBalance;
Office.onReady((info) => {
if (info.host === Office.HostType.Outlook) {
// Initialize instance variables to access API objects.
_mailbox = Office.context.mailbox;
_settings = Office.context.roamingSettings;
_customerName = _settings.get("customerName");
_customerBalance = _settings.get("customerBalance");
}
});
Creación o asignación de una configuración de movilidad
Continuando con el ejemplo anterior, la siguiente función de JavaScript, setAddInSetting
, muestra cómo usar el método RoamingSettings.set para establecer una configuración denominada cookie
con la fecha de hoy. A continuación, conserva los datos mediante el método RoamingSettings.saveAsync para guardar toda la configuración de itinerancia en el buzón del usuario.
El set
método crea la configuración si la configuración aún no existe y asigna la configuración al valor especificado. El saveAsync
método guarda la configuración de itinerancia de forma asincrónica. Este ejemplo de código pasa una función de devolución de llamada, saveMyAddInSettingsCallback
, a saveAsync
. Cuando finaliza la llamada asincrónica, saveMyAddInSettingsCallback
se llama a mediante un parámetro, asyncResult. Este parámetro es un objeto AsyncResult que contiene el resultado de la llamada asíncrona y los detalles de la misma. Si lo desea, puede usar el parámetro opcional userContext para pasar la información de estado de la llamada asincrónica a la función de devolución de llamada.
// Set a roaming setting.
function setAddInSetting() {
_settings.set("cookie", Date());
// Save roaming settings to the mailbox, so that they'll be available in the next session.
_settings.saveAsync(saveMyAddInSettingsCallback);
}
// Callback function after saving custom roaming settings.
function saveMyAddInSettingsCallback(asyncResult) {
if (asyncResult.status === Office.AsyncResultStatus.Failed) {
// Handle the failure.
}
}
Supresión de la configuración de movilidad
Al extender el ejemplo anterior, la siguiente función de JavaScript, removeAddInSetting
, muestra cómo usar el método RoamingSettings.remove para quitar la cookie
configuración y guardar toda la configuración de itinerancia en el buzón.
// Remove an add-in setting.
function removeAddInSetting()
{
_settings.remove("cookie");
// Save changes to the roaming settings for the mailbox, so that they'll be available in the next Outlook session.
_settings.saveAsync(saveMyAddInSettingsCallback);
}
Pruebe el ejemplo de código en Script Lab
Para obtener información sobre cómo crear y administrar un objeto RoamingSettings, obtenga el Script Lab para el complemento de Outlook y pruebe el ejemplo "Usar configuración de complemento". Para más información sobre Script Lab, consulte Explorar las API de JavaScript de Office con Script Lab.
Puede especificar datos concretos en un elemento en el buzón del usuario mediante el objeto CustomProperties . Por ejemplo, el complemento de correo podría clasificar determinados mensajes y anotar la categoría mediante una propiedad personalizada messageCategory
. O bien, si el complemento de correo crea citas a partir de sugerencias de reunión en un mensaje, se puede usar una propiedad personalizada para realizar un seguimiento de cada una de las citas. Esto garantiza que si el usuario vuelve a abrir el mensaje, el complemento de correo no ofrece crear la cita una segunda vez.
Tal como ocurre con la configuración de movilidad, los cambios en las propiedades personalizadas se almacenan en las copias en la memoria de las propiedades para la sesión actual de Outlook. Para asegurarse de que estas propiedades personalizadas estarán disponibles en la siguiente sesión, use CustomProperties.saveAsync.
Solo se puede acceder a estas propiedades personalizadas específicas del complemento, específicas del elemento, mediante el CustomProperties
objeto . Estas propiedades son diferentes de las userProperties personalizadas basadas en MAPI en el modelo de objetos de Outlook y las propiedades extendidas en Exchange Web Services (EWS). No se puede acceder CustomProperties
directamente mediante el modelo de objetos de Outlook, EWS o Microsoft Graph. Para obtener información sobre cómo acceder CustomProperties
mediante Microsoft Graph o EWS, consulte la sección Obtener propiedades personalizadas mediante Microsoft Graph o EWS.
Nota:
Las propiedades personalizadas solo están disponibles para el complemento que las creó y solo a través del elemento de correo en el que se guardaron. Por este motivo, las propiedades establecidas mientras están en modo de redacción no se transmiten a los destinatarios del elemento de correo. Cuando se envía un mensaje o una cita con propiedades personalizadas, se puede acceder a sus propiedades desde el elemento de la carpeta Elementos enviados . Para permitir que los destinatarios reciban los datos personalizados de los conjuntos de complementos, considere la posibilidad de usar InternetHeaders en su lugar.
Usar propiedades personalizadas
Para poder usar propiedades personalizadas, debe cargarlas llamando al método loadCustomPropertiesAsync. Después de crear el contenedor de propiedades, puede usar los métodos set y get para agregar y recuperar propiedades personalizadas. Debe utilizar el método saveAsync para guardar los cambios que realice en el contenedor de propiedades.
Nota:
Al usar propiedades personalizadas en complementos de Outlook, tenga en cuenta lo siguiente:
- Outlook en Mac no almacena en caché las propiedades personalizadas. Si la red del usuario deja de funcionar, los complementos de Outlook en Mac no podrán acceder a sus propiedades personalizadas.
- En Outlook clásico en Windows, las propiedades personalizadas guardadas mientras están en modo de redacción solo se conservan después de que se cierre o se
Office.context.mailbox.item.saveAsync
llame al elemento que se va a componer.
Pruebe el ejemplo de código en Script Lab
Para obtener información sobre cómo crear y administrar un objeto CustomProperties, obtenga el Script Lab para el complemento de Outlook y pruebe el ejemplo "Trabajar con propiedades personalizadas de elementos". Para más información sobre Script Lab, consulte Explorar las API de JavaScript de Office con Script Lab.
Obtención de propiedades personalizadas mediante Microsoft Graph o EWS
Para obtener CustomProperties mediante Microsoft Graph o EWS, primero debe determinar el nombre de su propiedad extendida basada en MAPI. Luego, puede obtener dicha propiedad de la misma manera que obtendría cualquier propiedad extendida basada en MAPI.
El uso de Microsoft Graph o EWS depende de si un complemento se ejecuta en un entorno local de Exchange Online o Exchange.
Exchange Online
En Exchange Online entornos, el complemento puede construir una solicitud de Microsoft Graph en mensajes y eventos para obtener los que ya tienen propiedades personalizadas. En la solicitud, debe incluir la propiedad basada en MAPI CustomProperties y su conjunto de propiedades mediante los detalles proporcionados en Cómo se almacenan las propiedades personalizadas en un elemento.
En el ejemplo siguiente se muestra cómo obtener todos los eventos que tienen las propiedades personalizadas establecidas por el complemento. También garantiza que la respuesta incluya el valor de la propiedad, por lo que puede aplicar lógica de filtrado adicional.
Importante
En el ejemplo siguiente, reemplace <app-guid>
con el Id. del complemento.
GET https://graph.microsoft.com/v1.0/me/events?$filter=singleValueExtendedProperties/Any
(ep: ep/id eq 'String {00020329-0000-0000-C000-000000000046}
Name cecp-<app-guid>' and ep/value ne null)
&$expand=singleValueExtendedProperties($filter=id eq 'String
{00020329-0000-0000-C000-000000000046} Name cecp-<app-guid>')
Para obtener otros ejemplos que obtienen propiedades extendidas basadas en MAPI de un solo valor, vea Get singleValueLegacyExtendedProperty.
Implementación local de Exchange
En entornos locales de Exchange, el complemento de correo puede obtener la CustomProperties
propiedad extendida basada en MAPI mediante la operación GetItem de EWS. Acceda GetItem
al servidor mediante un token de devolución de llamada o en el lado cliente mediante el método mailbox.makeEwsRequestAsync . En la GetItem
solicitud, especifique la CustomProperties
propiedad basada en MAPI en su conjunto de propiedades mediante los detalles proporcionados en Cómo se almacenan las propiedades personalizadas en un elemento.
El siguiente ejemplo muestra cómo obtener un elemento y sus propiedades personalizadas.
Importante
En el ejemplo siguiente, reemplace <app-guid>
con el Id. del complemento.
let request_str =
'<?xml version="1.0" encoding="utf-8"?>' +
'<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"' +
'xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages"' +
'xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types"' +
'xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">' +
'<soap:Header xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"' +
'xmlns:wsa="http://www.w3.org/2005/08/addressing">' +
'<t:RequestServerVersion Version="Exchange2010_SP1"/>' +
'</soap:Header>' +
'<soap:Body>' +
'<m:GetItem>' +
'<m:ItemShape>' +
'<t:BaseShape>AllProperties</t:BaseShape>' +
'<t:IncludeMimeContent>true</t:IncludeMimeContent>' +
'<t:AdditionalProperties>' +
'<t:ExtendedFieldURI ' +
'DistinguishedPropertySetId="PublicStrings" ' +
'PropertyName="cecp-<app-guid>"' +
'PropertyType="String" ' +
'/>' +
'</t:AdditionalProperties>' +
'</m:ItemShape>' +
'<m:ItemIds>' +
'<t:ItemId Id="' +
Office.context.mailbox.item.itemId +
'"/>' +
'</m:ItemIds>' +
'</m:GetItem>' +
'</soap:Body>' +
'</soap:Envelope>';
Office.context.mailbox.makeEwsRequestAsync(
request_str,
function(asyncResult) {
if (asyncResult.status === Office.AsyncResultStatus.Succeeded) {
console.log(asyncResult.value);
}
else {
console.log(JSON.stringify(asyncResult));
}
}
);
También puede obtener más propiedades personalizadas si las especifica en la cadena de solicitud como otros elementos ExtendedFieldURI.
¿Cómo se almacenan las propiedades personalizadas en un elemento?
Las propiedades personalizadas establecidas por un complemento no son equivalentes a las propiedades normales basadas en MAPI. Las API de complemento serializan todos los complementos CustomProperties
como una carga JSON y, a continuación, los guardan en una única propiedad extendida basada en MAPI cuyo nombre es cecp-<app-guid>
( es el<app-guid>
identificador del complemento) y el GUID del conjunto de propiedades es {00020329-0000-0000-C000-000000000046}
. (Para obtener más información sobre este objeto, vea Propiedades personalizadas de la aplicación de correo MS-OXCEXT 2.2.5). A continuación, puede usar Microsoft Grpah o EWS para obtener esta propiedad basada en MAPI.
En la tabla siguiente se resume el comportamiento de las propiedades personalizadas guardadas en mensajes para varios clientes de Outlook.
Escenario |
Outlook en la Web y en el nuevo cliente de Windows |
Outlook clásico en Windows |
Outlook en Mac |
Redacción nueva |
nulo |
nulo |
nulo |
Responder, responder todo |
nulo |
nulo |
nulo |
Reenviar |
nulo |
Carga las propiedades del elemento primario |
nulo |
Elemento enviado desde la nueva redacción |
nulo |
nulo |
nulo |
Elemento enviado de respuesta o respuesta a todos |
nulo |
nulo |
nulo |
Elemento enviado desde adelante |
nulo |
Quita las propiedades del elemento primario si no se guarda |
nulo |
Para controlar la situación en Outlook clásico en Windows:
- Compruebe si hay propiedades existentes al inicializar el complemento y guárdalas o borrelas según sea necesario.
- Al establecer propiedades personalizadas, incluya una propiedad adicional para indicar si las propiedades personalizadas se agregaron en modo de lectura. Esto le ayudará a diferenciar si la propiedad se creó en modo de redacción o se heredó del elemento primario.
- Para comprobar si el usuario está reenviando o respondiendo a un mensaje, puede usar item.getComposeTypeAsync (disponible en el conjunto de requisitos 1.10).