You can specify data specific to a user's Exchange mailbox using the RoamingSettings object. Examples of such data include the user's personal data and preferences. Your mail add-in can access roaming settings when it roams on any device it's designed to run on (desktop, tablet, or smartphone).
Les modifications apportées à ces données sont stockées dans une copie en mémoire de ces paramètres pour la session Outlook en cours. Vous devez enregistrer explicitement tous les paramètres d’itinérance après les avoir mis à jour afin qu’ils soient disponibles la prochaine fois que l’utilisateur ouvre votre complément, sur le même appareil ou sur tout autre appareil pris en charge.
Importante
Bien que l’API de complément Outlook limite l’accès à ces paramètres uniquement au complément qui les a créés, ces paramètres ne doivent pas être considérés comme du stockage sécurisé. Ils sont accessibles par d’autres services, tels que Microsoft Graph. Ils ne doivent pas être utilisés pour stocker des informations sensibles, telles que des informations d’identification utilisateur ou des jetons de sécurité.
Les données dans un objet RoamingSettings sont stockées sous forme d’une chaîne sérialisée JavaScript Object Notation (JSON).
Voici un exemple de structure, en supposant qu’il existe trois paramètres d’itinérance définis nommés add-in_setting_name_0
, add-in_setting_name_1
et 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"
}
Chargement des paramètres d’itinérance
Un complément de messagerie charge généralement les paramètres d’itinérance dans le gestionnaire Office.onReady . L’exemple de code JavaScript suivant montre comment charger des paramètres itinérants existants et obtenir les valeurs de deux paramètres, customerName et 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");
}
});
Création ou affectation d’un paramètre d’itinérance
Pour reprendre l’exemple précédent, la fonction JavaScript suivante, setAddInSetting
, montre comment utiliser la méthode RoamingSettings.set pour définir un paramètre nommé cookie
avec la date du jour. Ensuite, il conserve les données à l’aide de la méthode RoamingSettings.saveAsync pour enregistrer tous les paramètres d’itinérance dans la boîte aux lettres de l’utilisateur.
La set
méthode crée le paramètre si le paramètre n’existe pas déjà et affecte le paramètre à la valeur spécifiée. La saveAsync
méthode enregistre les paramètres d’itinérance de façon asynchrone. Cet exemple de code passe une fonction de rappel, saveMyAddInSettingsCallback
, à saveAsync
. Une fois l’appel asynchrone terminé, saveMyAddInSettingsCallback
est appelé à l’aide d’un paramètre, asyncResult. Ce paramètre est un objet AsyncResult qui contient le résultat des détails relatifs à l’appel asynchrone. Vous pouvez utiliser le paramètre facultatif userContext pour transmettre des informations d’état de l’appel asynchrone à la fonction de rappel.
// 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.
}
}
Suppression d’un paramètre d’itinérance
Toujours dans l’exemple précédent, la fonction JavaScript suivante, removeAddInSetting
, montre comment utiliser la méthode RoamingSettings.remove pour supprimer le cookie
paramètre et enregistrer tous les paramètres d’itinérance dans la boîte aux lettres.
// 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);
}
Essayez l’exemple de code dans Script Lab
Pour savoir comment créer et gérer un objet RoamingSettings, obtenez les Script Lab pour le complément Outlook et essayez l’exemple « Utiliser les paramètres de complément ». Pour en savoir plus sur Script Lab, consultez Explorer l’API JavaScript Office à l’aide de Script Lab.
Vous pouvez spécifier les données propres à un élément dans la boîte aux lettres de l’utilisateur à l’aide de l’objet CustomProperties. Par exemple, votre complément de messagerie peut catégoriser certains messages et noter la catégorie à l’aide d’une propriété personnalisée messageCategory
. Si votre complément de messagerie crée des rendez-vous à partir de suggestions de réunion dans un message, vous pouvez utiliser une propriété personnalisée pour suivre chacun de ces rendez-vous. Cela garantit que si l’utilisateur ouvre à nouveau le message, votre complément de messagerie n’offre pas de créer le rendez-vous une deuxième fois.
Comme pour les paramètres d’itinérance, les modifications apportées aux propriétés personnalisées sont stockées dans des copies en mémoire des propriétés de la session Outlook en cours. Pour vous assurer que ces propriétés personnalisées seront disponibles dans la session suivante, utilisez CustomProperties.saveAsync.
Ces propriétés personnalisées spécifiques au complément et à l’élément ne sont accessibles qu’à l’aide de l’objet CustomProperties
. Ces propriétés sont différentes des propriétés UserProperties personnalisées basées sur MAPI dans le modèle objet Outlook et des propriétés étendues dans les services Web Exchange (EWS). Vous ne pouvez pas accéder directement à CustomProperties
l’aide du modèle objet Outlook, d’EWS ou de Microsoft Graph. Pour savoir comment accéder CustomProperties
à l’aide de Microsoft Graph ou EWS, consultez la section Obtenir des propriétés personnalisées à l’aide de Microsoft Graph ou EWS.
Remarque
Les propriétés personnalisées sont disponibles uniquement pour le complément qui les a créées et uniquement par le biais de l’élément de courrier dans lequel elles ont été enregistrées. Pour cette raison, les propriétés définies en mode composition ne sont pas transmises aux destinataires de l’élément de courrier. Lorsqu’un message ou un rendez-vous avec des propriétés personnalisées est envoyé, ses propriétés sont accessibles à partir de l’élément dans le dossier Éléments envoyés . Pour permettre aux destinataires de recevoir les données personnalisées que votre complément définit, envisagez plutôt d’utiliser InternetHeaders .
Utilisation de propriétés personnalisées
Avant de pouvoir utiliser les propriétés personnalisées, vous devez les charger en appelant la méthode loadCustomPropertiesAsync. Une fois que vous avez créé le conteneur de propriétés, vous pouvez utiliser les méthodes set et get pour ajouter et récupérer des propriétés personnalisées. Vous devez utiliser la méthodesaveAsync pour enregistrer les modifications que vous apportez au conteneur de propriétés.
Remarque
Lorsque vous utilisez des propriétés personnalisées dans les compléments Outlook, gardez à l’esprit que :
- Outlook sur Mac ne met pas en cache les propriétés personnalisées. Si le réseau de l’utilisateur tombe en panne, les compléments dans Outlook sur Mac ne peuvent pas accéder à leurs propriétés personnalisées.
- Dans Outlook sur Windows classique, les propriétés personnalisées enregistrées en mode composition ne sont conservées qu’après la fermeture ou
Office.context.mailbox.item.saveAsync
l’appel de l’élément en cours de composition.
Essayez l’exemple de code dans Script Lab
Pour savoir comment créer et gérer un objet CustomProperties, obtenez le Script Lab pour le complément Outlook et essayez l’exemple « Utiliser des propriétés personnalisées d’élément ». Pour en savoir plus sur Script Lab, consultez Explorer l’API JavaScript Office à l’aide de Script Lab.
Obtenir des propriétés personnalisées à l’aide de Microsoft Graph ou d’EWS
Pour obtenir CustomProperties à l’aide de Microsoft Graph ou d’EWS, vous devez d’abord déterminer le nom de sa propriété étendue basée sur MAPI. Vous pouvez ensuite obtenir cette propriété de la même façon que vous pouviez obtenir toute propriété étendue de base MAPI.
L’utilisation de Microsoft Graph ou EWS varie selon qu’un complément s’exécute dans un environnement Exchange Online ou Exchange local.
Exchange Online
Dans les environnements Exchange Online, votre complément peut construire une requête Microsoft Graph sur des messages et des événements pour obtenir ceux qui ont déjà des propriétés personnalisées. Dans votre demande, vous devez inclure la propriété basée sur MAPI CustomProperties et son jeu de propriétés en utilisant les détails fournis dans Comment les propriétés personnalisées sont stockées sur un élément.
L’exemple suivant montre comment obtenir tous les événements dont les propriétés personnalisées sont définies par votre complément. Il garantit également que la réponse inclut la valeur de la propriété, ce qui vous permet d’appliquer une logique de filtrage supplémentaire.
Importante
Dans l’exemple suivant, remplacez <app-guid>
par l’ID de votre complément.
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>')
Pour obtenir d’autres exemples qui obtiennent des propriétés étendues basées sur MAPI à valeur unique, consultez Obtenir singleValueLegacyExtendedProperty.
Exchange local
Dans les environnements Exchange locaux, votre complément de messagerie peut obtenir la CustomProperties
propriété étendue basée sur MAPI à l’aide de l’opération GetItem EWS. Accédez GetItem
côté serveur à l’aide d’un jeton de rappel ou côté client à l’aide de la méthode mailbox.makeEwsRequestAsync . Dans la GetItem
demande, spécifiez la CustomProperties
propriété basée sur MAPI dans son jeu de propriétés en utilisant les détails fournis dans Comment les propriétés personnalisées sont stockées sur un élément.
L’exemple suivant montre comment obtenir un élément et ses propriétés personnalisées.
Importante
Dans l’exemple suivant, remplacez <app-guid>
par l’ID de votre complément.
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));
}
}
);
Vous pouvez également obtenir plus de propriétés personnalisées si vous les spécifiez dans la chaîne de demande, comme les autres éléments ExtendedFieldURI.
Comment les propriétés personnalisées sont stockées sur un élément
Les propriétés personnalisées définies par un complément ne sont pas équivalentes aux propriétés basées sur MAPI normales. Les API de complément sérialisent tous les compléments CustomProperties
en tant que charge utile JSON, puis les enregistrent dans une seule propriété étendue basée sur MAPI dont le nom est cecp-<app-guid>
(<app-guid>
est l’ID de votre complément) et le GUID du jeu de propriétés est {00020329-0000-0000-C000-000000000046}
. (Pour plus d’informations sur cet objet, consultez Propriétés personnalisées de l’application de messagerie MS-OXCEXT 2.2.5.) Vous pouvez ensuite utiliser Microsoft Grpah ou EWS pour obtenir cette propriété basée sur MAPI.
Le tableau suivant récapitule le comportement des propriétés personnalisées enregistrées dans les messages pour différents clients Outlook.
Scénario |
Outlook sur le web et sur le nouveau client Windows |
Outlook classique sur Windows |
Outlook sur Mac |
Nouvelle composition |
null |
null |
null |
Répondre, répondre à tous |
null |
null |
null |
Transférer |
null |
Charge les propriétés du parent |
null |
Élément envoyé à partir d’une nouvelle composition |
null |
null |
null |
Élément envoyé à partir de répondre ou répondre à tous |
null |
null |
null |
Élément envoyé à partir de l’avance |
null |
Supprime les propriétés du parent si elles ne sont pas enregistrées |
null |
Pour gérer la situation dans Outlook classique sur Windows :
- Vérifiez les propriétés existantes lors de l’initialisation de votre complément et conservez-les ou effacez-les si nécessaire.
- Lorsque vous définissez des propriétés personnalisées, incluez une propriété supplémentaire pour indiquer si les propriétés personnalisées ont été ajoutées en mode lecture. Cela vous aidera à différencier si la propriété a été créée en mode composition ou héritée du parent.
- Pour case activée si l’utilisateur transfère ou répond à un message, vous pouvez utiliser item.getComposeTypeAsync (disponible dans l’ensemble de conditions requises 1.10).