Google Drive-Aktionen

Mit Action-Objekten können Sie in Google Workspace-Add-ons interaktive Funktionen einbinden. Sie definieren was passiert, wenn Nutzende mit einem Widget (z. B. einer Schaltfläche) in der Add-on-Benutzeroberfläche.

Eine Aktion wird mithilfe eines widget-Handler-Funktion, definiert auch die Bedingung, die die Aktion auslöst. Wenn die Aktion ausgelöst wird, wird eine bestimmte Callback-Funktion ausgeführt. Der Callback-Funktion wird ein Ereignisobjekt, das Informationen zu den clientseitigen Interaktionen des Nutzers. Sie müssen die -Callback-Funktion hinzu, die ein bestimmtes Antwortobjekt zurückgibt.

Angenommen, Sie möchten eine Schaltfläche, die beim Erstellen und Anzeigen einer neuen Karte angeklickt wurde. Dazu müssen Sie ein neues Schaltflächen-Widget erstellen und mit der Handlerfunktion für das Schaltflächen-Widget setOnClickAction(action) ein Kartenelement Action festlegen. Die Mit Action, den Sie definieren, wird ein Apps Script angegeben Callback-Funktion, die beim Klicken auf die Schaltfläche ausgeführt wird. In diesem Fall implementieren Sie die Rückruffunktion, um die gewünschte Karte zu erstellen und ein ActionResponse-Objekt zurückzugeben. Das Antwortobjekt weist das Add-on an, die Karte anzuzeigen, die der Callback enthält. erstellt.

Auf dieser Seite werden Drive-spezifische Widget-Aktionen beschrieben, die Sie in Ihren Add-on.

Interaktionen fördern

Google Workspace-Add-ons, die Drive erweitern, können eine zusätzliche Drive-spezifische Widget-Aktion enthalten. Für diese Aktion ist das verknüpfte Callback-Funktion der Aktion ein spezielles Antwortobjekt zurückzugeben:

Versuchte Aktion Die Callback-Funktion sollte Folgendes zurückgeben:
Dateizugriff für ausgewählte Dateien anfordern DriveItemsSelectedActionResponse

Um diese Widgetaktionen und Antwortobjekte zu verwenden, müssen alle muss wahr sein:

  • Die Aktion wird ausgelöst, während der Nutzer mindestens ein Drive-Element ausgewählt hat.
  • Das Add-on enthält die https://www.googleapis.com/auth/drive.file Drive-Bereich in der Manifests.

Dateizugriff für ausgewählte Dateien anfordern

Das folgende Beispiel zeigt, wie Sie eine kontextbezogene Oberfläche für Google Drive, das ausgelöst wird, wenn der Nutzer ein oder mehrere Drive-Elemente auswählt. Die Beispiel testet jedes Element, um zu sehen, ob dem Add-on Zugriffsberechtigung gewährt wurde. Andernfalls wird ein DriveItemsSelectedActionResponse-Element verwendet, Objekt, um diese Berechtigung vom Nutzer anzufordern. Sobald die Berechtigung für eine Datei heruntergeladen haben, wird im Add-on die entsprechende Drive-Kontingentnutzung angezeigt.

/**
 * 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;
  }
}