اقدامات را هدایت کنید

اشیاء Action به شما امکان می دهند رفتار تعاملی را در افزونه های Google Workspace ایجاد کنید. آنها تعریف می کنند که چه اتفاقی می افتد زمانی که کاربر با یک ویجت (به عنوان مثال، یک دکمه) در رابط کاربری افزونه تعامل می کند.

یک عملکرد با استفاده از یک تابع کنترل کننده ویجت به یک ویجت معین متصل می‌شود، که همچنین شرایطی را که اقدام را آغاز می‌کند، تعریف می‌کند. وقتی فعال می‌شود، عملکرد یک تابع بازخوانی تعیین‌شده را اجرا می‌کند. تابع callback به یک شی رویداد ارسال می شود که اطلاعات مربوط به تعاملات سمت مشتری کاربر را حمل می کند. شما باید تابع callback را پیاده سازی کنید و از آن بخواهید یک شی پاسخ خاص را برگرداند.

به عنوان مثال، می‌خواهید دکمه‌ای را می‌خواهید که با کلیک کردن، یک کارت جدید بسازد و نمایش دهد. برای این کار، باید یک ویجت دکمه جدید ایجاد کنید و از تابع کنترل کننده ابزارک دکمه setOnClickAction(action) برای تنظیم یک Action ساخت کارت استفاده کنید. Action که شما تعریف می‌کنید، یک تابع فراخوانی Apps Script را مشخص می‌کند که با کلیک روی دکمه اجرا می‌شود. در این حالت، تابع callback را برای ساخت کارت مورد نظر و برگرداندن یک شی ActionResponse پیاده سازی می کنید. شیء پاسخ به افزونه می‌گوید که کارتی را که تابع پاسخ به تماس ساخته شده است نمایش دهد.

این صفحه اقدامات ویجت خاص Drive را که می‌توانید در برافزای خود قرار دهید، توضیح می‌دهد.

تعاملات را تحریک کنید

افزونه‌های Google Workspace که Drive را گسترش می‌دهند، می‌توانند یک اقدام ویجت خاص Drive را نیز شامل شوند. این عمل به تابع مربوط به تماس پاسخ نیاز دارد تا یک شی پاسخ تخصصی را برگرداند:

برای استفاده از این اقدامات ویجت و اشیاء پاسخ، همه موارد زیر باید درست باشد:

  • زمانی که کاربر یک یا چند مورد Drive را انتخاب کرده باشد، این کنش فعال می‌شود.
  • این افزونه شامل https://www.googleapis.com/auth/drive.file محدوده Drive در مانیفست خود است.

درخواست دسترسی به فایل برای فایل های انتخابی

مثال زیر نشان می دهد که چگونه می توان یک رابط متنی برای Google Drive ایجاد کرد که وقتی کاربر یک یا چند مورد Drive را انتخاب می کند، فعال می شود. مثال هر مورد را آزمایش می کند تا ببیند آیا به افزونه مجوز دسترسی داده شده است یا خیر. اگر نه، از یک شی DriveItemsSelectedActionResponse برای درخواست مجوز از کاربر استفاده می کند. هنگامی که مجوز برای یک مورد اعطا شد، افزونه میزان استفاده از سهمیه Drive از آن مورد را نشان می دهد.

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