Les objets Action
vous permettent de créer
dans les modules complémentaires Google Workspace. Elles définissent
que se passe-t-il lorsqu'un utilisateur interagit avec un widget (par exemple, un bouton) dans
l'UI du module complémentaire.
Une action est associée à un widget donné à l'aide d'un Fonction de gestionnaire de widgets qui définit également la condition qui déclenche l'action. Lorsqu'elle est déclenchée, exécute une opération fonction de rappel. La fonction de rappel reçoit une objet "event", qui contient des informations sur les interactions de l'utilisateur côté client. Vous devez mettre en œuvre de rappel et lui demander de renvoyer un objet de réponse spécifique.
Par exemple, supposons que vous souhaitiez un bouton qui crée et affiche une nouvelle carte lorsque
sur lesquels l'utilisateur a cliqué. Pour ce faire, vous devez créer un widget de bouton et utiliser le widget Bouton
Fonction de gestionnaire
setOnClickAction(action)
pour définir un Action
de création de cartes. La
Action
que vous définissez spécifie un Apps Script.
de rappel qui s'exécute lorsque l'utilisateur clique sur le bouton. Dans ce cas, vous
implémenter la fonction de rappel pour créer la carte souhaitée et renvoyer une
ActionResponse
. L'objet de réponse indique au module complémentaire d'afficher la carte
de la fonction.
Cette page décrit les actions de widget spécifiques à Drive que vous pouvez inclure dans vos un module complémentaire.
Générez des interactions
Les modules complémentaires Google Workspace qui étendent Drive peuvent inclure les éléments suivants : une action supplémentaire de widget spécifique à Drive. Cette action nécessite l'association l'action fonction de rappel pour renvoyer un objet de réponse spécialisé:
Tentative d'action | La fonction de rappel doit renvoyer |
---|---|
Demander l'accès aux fichiers sélectionnés | DriveItemsSelectedActionResponse |
Pour utiliser ces actions de widget et ces objets de réponse, toutes les doit être vraie:
- L'action est déclenchée lorsque l'utilisateur sélectionne un ou plusieurs éléments Drive.
- Ce module complémentaire inclut
https://www.googleapis.com/auth/drive.file
Champ d'application Drive dans son fichier manifeste.
Demander l'accès aux fichiers sélectionnés
L'exemple suivant montre comment créer une interface contextuelle pour Google
Drive déclenché lorsque l'utilisateur sélectionne un ou plusieurs éléments Drive. La
L'exemple teste chaque élément pour voir si l'autorisation d'accès a été accordée au module complémentaire.
Si ce n'est pas le cas, un élément DriveItemsSelectedActionResponse
est utilisé.
pour demander cette autorisation à l'utilisateur. Une fois l'autorisation accordée
d'un élément, le module complémentaire affiche l'utilisation du quota Drive pour cet élément.
/**
* Build a simple card that checks selected items' quota usage. Checking
* quota usage requires user-permissions, so this add-on provides a button
* to request `drive.file` scope for items the add-on doesn't yet have
* permission to access.
*
* @param e The event object passed containing contextual information about
* the Drive items selected.
* @return {Card}
*/
function onDriveItemsSelected(e) {
var builder = CardService.newCardBuilder();
// For each item the user has selected in Drive, display either its
// quota information or a button that allows the user to provide
// permission to access that file to retrieve its quota details.
e['drive']['selectedItems'].forEach(
function(item){
var cardSection = CardService.newCardSection()
.setHeader(item['title']);
// This add-on uses the recommended, limited-permission `drive.file`
// scope to get granular per-file access permissions.
// See: https://developers.google.com/drive/api/v2/about-auth
if (item['addonHasFileScopePermission']) {
// If the add-on has access permission, read and display its
// quota.
cardSection.addWidget(
CardService.newTextParagraph().setText(
"This file takes up: " + getQuotaBytesUsed(item['id'])));
} else {
// If the add-on does not have access permission, add a button
// that allows the user to provide that permission on a per-file
// basis.
cardSection.addWidget(
CardService.newTextParagraph().setText(
"The add-on needs permission to access this file's quota."));
var buttonAction = CardService.newAction()
.setFunctionName("onRequestFileScopeButtonClicked")
.setParameters({id: item.id});
var button = CardService.newTextButton()
.setText("Request permission")
.setOnClickAction(buttonAction);
cardSection.addWidget(button);
}
builder.addSection(cardSection);
});
return builder.build();
}
/**
* Callback function for a button action. Instructs Drive to display a
* permissions dialog to the user, requesting `drive.file` scope for a
* specific item on behalf of this add-on.
*
* @param {Object} e The parameters object that contains the item's
* Drive ID.
* @return {DriveItemsSelectedActionResponse}
*/
function onRequestFileScopeButtonClicked (e) {
var idToRequest = e.parameters.id;
return CardService.newDriveItemsSelectedActionResponseBuilder()
.requestFileScope(idToRequest).build();
}
/**
* Use the Advanced Drive Service
* (See https://developers.google.com/apps-script/advanced/drive),
* with `drive.file` scope permissions to request the quota usage of a
* specific Drive item.
*
* @param {string} itemId The ID of the item to check.
* @return {string} A description of the item's quota usage, in bytes.
*/
function getQuotaBytesUsed(itemId) {
try {
return Drive.Files.get(itemId,{fields: "quotaBytesUsed"})
.quotaBytesUsed + " bytes";
} catch (e) {
return "Error fetching how much quota this item uses. Error: " + e;
}
}