Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Si votre fonction personnalisée Excel n’utilise pas de runtime partagé, elle s’exécute dans un runtime JavaScript uniquement. Dans ce runtime, l’authentification nécessite généralement un flux de dialogue et un partage de jetons avec votre volet Office.
Utilisez OfficeRuntime.displayWebDialog pour vous connecter et OfficeRuntime.storage pour mettre en cache et partager le jeton entre les runtimes.
Remarque
Nous vous recommandons d’utiliser des fonctions personnalisées avec un runtime partagé, sauf si vous avez une raison spécifique de ne pas utiliser un runtime partagé. Pour plus d’informations sur les runtimes, voir Runtimes dans les compléments Office.
Flux de travail d’authentification
Le flux de travail suivant est classique pour les fonctions personnalisées qui n’utilisent pas de runtime partagé.
- Un utilisateur exécute une fonction personnalisée dans une cellule Excel.
- La fonction personnalisée appelle
OfficeRuntime.displayWebDialogpour ouvrir une page de connexion dans une boîte de dialogue, où l’utilisateur entre ses informations d’identification. - La page de connexion retourne un jeton d’accès à la boîte de dialogue.
- La boîte de dialogue appelle Office.ui.messageParent pour envoyer le jeton d’accès à la fonction personnalisée. Pour plus d’informations, consultez Envoyer des informations de la boîte de dialogue à la page hôte.
- La fonction personnalisée stocke le jeton d’accès dans
OfficeRuntime.storage. - Le volet Office du complément obtient le jeton à partir de
OfficeRuntime.storage.
Essayez-le avec un exemple
Utilisez l’exemple Utilisation d’OfficeRuntime.storage dans les fonctions personnalisées pour tester le stockage de jetons et la récupération entre des fonctions personnalisées et un volet Office.
API de boîte de dialogue
S’il n’existe pas de jeton, vous devez utiliser OfficeRuntime.displayWebDialog pour demander à l’utilisateur de se connecter. Une fois qu’un utilisateur a entré ses informations d’identification, le jeton d’accès résultant peut être stocké en tant qu’élément dans OfficeRuntime.storage.
Remarque
Le runtime JavaScript uniquement utilise un objet dialog légèrement différent de l’objet dialog dans le runtime du navigateur utilisé par les volets Office. Les deux sont appelés « API de dialogue », mais pour authentifier les utilisateurs dans le runtime JavaScript uniquement, utilisez OfficeRuntime.displayWebDialog, et non Office.ui.displayDialogAsync.
Exemple d’API de boîte de dialogue
Dans l’exemple de code suivant, getTokenViaDialog utilise OfficeRuntime.displayWebDialog pour afficher une boîte de dialogue. Cet exemple montre les fonctionnalités de méthode et n’est pas une implémentation d’authentification complète.
/**
* Function retrieves a cached token or opens a dialog box if there is no saved token. Note that this isn't a sufficient example of authentication but is intended to show the capabilities of the displayWebDialog method.
* @param {string} url URL for a stored token.
*/
function getTokenViaDialog(url) {
return new Promise (function (resolve, reject) {
if (_dialogOpen) {
// Can only have one dialog box open at once. Wait for previous dialog box's token.
let timeout = 5;
let count = 0;
const intervalId = setInterval(function () {
count++;
if(_cachedToken) {
resolve(_cachedToken);
clearInterval(intervalId);
}
if(count >= timeout) {
reject("Timeout while waiting for token");
clearInterval(intervalId);
}
}, 1000);
} else {
_dialogOpen = true;
OfficeRuntime.displayWebDialog(url, {
height: '50%',
width: '50%',
onMessage: function (message, dialog) {
_cachedToken = message;
resolve(message);
dialog.close();
return;
},
onRuntimeError: function(error, dialog) {
reject(error);
},
}).catch(function (e) {
reject(e);
});
}
});
}
Objet OfficeRuntime.storage
Le runtime JavaScript uniquement n’a pas d’objet localStorage disponible dans la fenêtre globale, où vous stockez généralement des données. Au lieu de cela, votre code doit partager des données entre des fonctions personnalisées et des volets office en utilisant OfficeRuntime.storage pour définir et obtenir des données.
Utilisation suggérée
Lorsque vous devez vous authentifier à partir d’un complément de fonction personnalisé qui n’utilise pas de runtime partagé, votre code doit case activée OfficeRuntime.storage pour voir si le jeton d’accès a déjà été acquis. Si ce n’est pas le cas, utilisez OfficeRuntime.displayWebDialog pour authentifier l’utilisateur, récupérer le jeton d’accès, puis stocker le jeton dans OfficeRuntime.storage pour une utilisation ultérieure.
Stockage du jeton
Les exemples suivants montrent comment stocker et récupérer des jetons à l’aide OfficeRuntime.storagede .
Si la fonction personnalisée s’authentifie, elle reçoit un jeton d’accès qu’elle doit stocker dans OfficeRuntime.storage. L’exemple de code suivant montre comment appeler storage.setItem pour stocker une valeur. La storeValue fonction est une fonction personnalisée qui stocke une valeur de l’utilisateur. Vous pouvez le modifier pour stocker n’importe quelle valeur de jeton dont vous avez besoin.
/**
* Stores a key-value pair into OfficeRuntime.storage.
* @customfunction
* @param {string} key Key of item to put into storage.
* @param {*} value Value of item to put into storage.
*/
function storeValue(key, value) {
return OfficeRuntime.storage.setItem(key, value).then(function (result) {
return "Success: Item with key '" + key + "' saved to storage.";
}, function (error) {
return "Error: Unable to save item with key '" + key + "' to storage. " + error;
});
}
Lorsque le volet Office a besoin du jeton d’accès, il peut récupérer le jeton à partir de l’élément OfficeRuntime.storage . L’exemple de code suivant montre comment utiliser la méthodestorage.getItem pour récupérer le jeton.
/**
* Read a token from storage.
* @customfunction GETTOKEN
*/
function receiveTokenFromCustomFunction() {
const key = "token";
const tokenSendStatus = document.getElementById('tokenSendStatus');
OfficeRuntime.storage.getItem(key).then(function (result) {
tokenSendStatus.value = "Success: Item with key '" + key + "' read from storage.";
document.getElementById('tokenTextBox2').value = result;
}, function (error) {
tokenSendStatus.value = "Error: Unable to read item with key '" + key + "' from storage. " + error;
});
}
Instructions générales
Les compléments Office étant basés sur le web, vous pouvez utiliser n’importe quelle technique d’authentification web. Il n’existe pas de modèle d’authentification requis pour les fonctions personnalisées. Commencez par Autoriser les services externes dans les compléments Office pour les modèles de conception et les compromis.
Évitez d’utiliser les emplacements suivants pour stocker des données lors du développement de fonctions personnalisées :
-
localStorage: les fonctions personnalisées qui n’utilisent pas de runtime partagé n’ont pas accès à l’objet globalwindowet n’ont donc pas accès aux données stockées danslocalStorage. -
Office.context.document.settings: cet emplacement n’est pas sécurisé et toute personne utilisant le complément peut extraire ces informations.
Étapes suivantes
Découvrez comment déboguer des fonctions personnalisées.