Проблема с обработкой пользовательских событий надстройки рабочей области Google

Это очень сложно. Я прошу прощения....

Я создаю надстройку рабочей области Google, которая позволяет:

  1. Выберите файл.
  2. Задайте имя для этого файла на основе набора пользовательских данных.

Я столкнулся с рядом проблем.

  1. Во-первых, когда я выбираю файл после того, как он проходит через процесс авторизации, он часто выдает мне « Контент недоступен для этого сообщения » на боковой панели. Я не могу понять, зачем он это делает. Я ожидаю, что он просто покажет виджеты с различными параметрами пользовательского ввода.
  2. Во-вторых, я не могу записывать или регистрировать какие-либо данные, введенные пользователем. Вы можете видеть, как я пытаюсь вызвать их как переменные в функции onSearch, а затем записать их в имя файла.

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация для решения проблем. Прошу прощения за беспорядок в коде. Это относительно новая функция в Google, и я в основном только что изменял код из примеров надстроек, поэтому есть некоторые рудиментарные переменные и т. Д.

      // See https://github.com/contributorpw/lodashgs
var _ = LodashGS.load();

/**
* Renders the home page for the add-on. Used in all host apps when
* no context selected.
*
* @param {Object} event - current add-on event
* @return {Card[]} Card(s) to display
*/
function onHomePage(event) {
  var card = buildSearchCard_();
  return [card];
}

/**
* Renders the contextual interface for a selected Drive file.
*
* @param {Object} event - current add-on event
* @return {Card[]} Card(s) to display
*/
function onDriveItemsSelected(event) {
  // For demo, only allow single select on files.
  if (event.drive.selectedItems.length != 1) {
    var message = "To set a file name, select one file only.";
    var card = buildSearchCard_(message);
    return [card];
  }

  var selectedItem = event.drive.selectedItems[0];
  if (!selectedItem.addonHasFileScopePermission) {
    // Need file access to read ACL, ask user to authorize.
    var authorizeFilesAction = CardService.newAction()
    .setFunctionName("onAuthorizeDriveFiles")
    .setLoadIndicator(CardService.LoadIndicator.SPINNER)
    .setParameters({id: selectedItem.id});
    var authorizationMessage = CardService.newTextParagraph()
    .setText("To change your file name, give permission to the tool to do so.");
    var authorizeButton = CardService.newTextButton()
    .setText("Authorize")
    .setOnClickAction(authorizeFilesAction);
    var card = CardService.newCardBuilder()
    .addSection(CardService.newCardSection()
                .addWidget(authorizationMessage)
                .addWidget(authorizeButton))
    .build();
    return [card];
  }}
/**
  // Have access, extract ACLs to find co-workers
  var emails = extractEmailsFromDrivePermissions_(event);
  var people = fetchPeople_(emails);
  if (people.length == 0) {
    var card = buildSearchCard_("");
    return [card];
  }
  var card = buildTeamListCard_(people)
  return [card];
}

/**
* Handles the click for requesting drive file access.
*
* @param {Object} event - current add-on event
* @return {ActionResponse} Request to authorize access to a drive item
*/
function onAuthorizeDriveFiles(event) {
  var id = event.parameters.id;
  return CardService.newDriveItemsSelectedActionResponseBuilder()
  .requestFileScope(id)
  .build();
}

/**
* Handles the user search request.
*
* @param {Object} event - current add-on event
* @return {Card[]} Card(s) to display
*/

function handleDateChange(event) {
  var dateTimeInput =
    event.commonEventObject.formInputs["myDateTimePickerWidgetID"];
  var hasDate = dateTimeInput.hasDate;

  // The following requires you to configure the add-on to read user locale
  // and timezone.
  // See https://developers.google.com/gsuite/add-ons/how-tos/access-user-locale
  var userTimezoneId = event.userTimezone.id;

  // Format and log the date-time selected using the user's timezone.
  var formattedDateTime;
  if (hasDate) {
    formattedDateTime = Utilities.formatDate(
      new Date(hasDate), userTimezoneId, "yyy/MM/dd hh:mm:ss");
  } else if (hasDate) {
    formattedDateTime = Utilities.formatDate(
      new Date(hasDate), userTimezoneId, "yyy/MM/dd")
      + ", Time unspecified";
  }

  if (formattedDateTime) {
    console.log(formattedDateTime);
  }
}

function onSearch(event) {
  if (!event.formInputs || !event.formInputs.query) {
    var notification = CardService.newNotification()
    .setText("Enter file name components");
    return CardService.newActionResponseBuilder()
    .setNotification(notification)
    .build();
  }
  var itemId = event.drive.selectedItems[0].id;
  var targetFile = DriveApp.getFileById(itemId)
 // var query =  event.formInputs.query[0];
  var dateOnlyPicker = 
event.commonEventObject.formInputs.dateOnlyPicker[""].stringInputs.value[0];
  var description = event.commonEventObject.formInputs.description[""].stringInputs.value[0];
  var department = event.commonEventObject.formInputs.department[""].stringInputs.value[0];


  targetFile.setName(dateOnlyPicker +"-"+ description +"-"+ department);
  Logger.log(dateOnlyPicker)
  Logger.log(description)
  Logger.log(department)
 // var people = queryPeople_(query);

}

/**


/**
* Builds the search interface for looking up people.
*
* @param {string} opt_error - Optional message to include (typically when
*    contextual search failed.)
* @return {Card} Card to display
*/
function buildSearchCard_(opt_error) {
  //var banner = CardService.newImage()
  //.setImageUrl('https://storage.googleapis.com/gweb-cloudblog-publish/original_images/Workforce_segmentation_1.png');

var dateOnlyPicker = CardService.newDatePicker()
    .setTitle("Enter the date.")
    .setFieldName("date_field")
    // Set default value as May 24 2019. Either a
    // number or string is acceptable.
    .setValueInMsSinceEpoch(1558668600000)
    .setOnChangeAction(CardService.newAction()
        .setFunctionName("handleDateChange"));
  
  var description = CardService.newTextInput()
   .setFieldName("description")
  .setHint("description")
  .setTitle("description");

  var department = CardService.newSelectionInput()
  .setType(CardService.SelectionInputType.DROPDOWN)
  .addItem("checkbox one title", "checkbox_one_value", false)
    .addItem("checkbox two title", "checkbox_two_value", true)
    .addItem("checkbox three title", "checkbox_three_value", true)
   .setFieldName("department")
  .setTitle("department");
  

  var onSubmitAction = CardService.newAction()
  .setFunctionName("onSearch")
  .setLoadIndicator(CardService.LoadIndicator.SPINNER);

  var submitButton = CardService.newTextButton()
  .setText("Set File Name")
  .setOnClickAction(onSubmitAction);

  var section = CardService.newCardSection()
 // .addWidget(banner)
 .addWidget(dateOnlyPicker)
  .addWidget(description)
  .addWidget(department)
  .addWidget(submitButton);

  if (opt_error) {
    var message = CardService.newTextParagraph()
    .setText("Note: " + opt_error);
    section.addWidget(message);
  }


  return CardService.newCardBuilder()
  .addSection(section)
  .build();
}

/**

Вот манифест json, чтобы вы могли его полностью протестировать.

Вот журнал, согласно первому предложению в первом комментарии. У меня тоже возникли проблемы с его расшифровкой.

      [21-02-04 14:44:15:004 EST] Starting execution
[21-02-04 14:44:15:154 EST] CardService.newDatePicker() [0 seconds]
[21-02-04 14:44:15:154 EST] CardService.DatePicker.setTitle([Enter the date.]) [0 seconds]
[21-02-04 14:44:15:154 EST] CardService.DatePicker.setFieldName([date_field]) [0 seconds]
[21-02-04 14:44:15:154 EST] CardService.DatePicker.setValueInMsSinceEpoch([1.5586686E12]) [0 seconds]
[21-02-04 14:44:15:155 EST] CardService.newAction() [0 seconds]
[21-02-04 14:44:15:155 EST] CardService.Action.setFunctionName([handleDateChange]) [0 seconds]
[21-02-04 14:44:15:155 EST] CardService.DatePicker.setOnChangeAction([Action]) [0 seconds]
[21-02-04 14:44:15:155 EST] CardService.newTextInput() [0 seconds]
[21-02-04 14:44:15:155 EST] CardService.TextInput.setFieldName([description]) [0 seconds]
[21-02-04 14:44:15:155 EST] CardService.TextInput.setHint([description]) [0 seconds]
[21-02-04 14:44:15:155 EST] CardService.TextInput.setTitle([description]) [0 seconds]
[21-02-04 14:44:15:155 EST] CardService.newSelectionInput() [0 seconds]
[21-02-04 14:44:15:155 EST] CardService.SelectionInput.setType([DROPDOWN]) [0 seconds]
[21-02-04 14:44:15:155 EST] CardService.SelectionInput.addItem([checkbox one title, checkbox_one_value, false]) [0 seconds]
[21-02-04 14:44:15:156 EST] CardService.SelectionInput.addItem([checkbox two title, checkbox_two_value, true]) [0 seconds]
[21-02-04 14:44:15:156 EST] CardService.SelectionInput.addItem([checkbox three title, checkbox_three_value, true]) [0 seconds]
[21-02-04 14:44:15:156 EST] CardService.SelectionInput.setFieldName([department]) [0 seconds]
[21-02-04 14:44:15:156 EST] CardService.SelectionInput.setTitle([department]) [0 seconds]
[21-02-04 14:44:15:156 EST] CardService.newAction() [0 seconds]
[21-02-04 14:44:15:156 EST] CardService.Action.setFunctionName([onSearch]) [0 seconds]
[21-02-04 14:44:15:156 EST] CardService.Action.setLoadIndicator([SPINNER]) [0 seconds]
[21-02-04 14:44:15:156 EST] CardService.newTextButton() [0 seconds]
[21-02-04 14:44:15:156 EST] CardService.TextButton.setText([Set File Name]) [0 seconds]
[21-02-04 14:44:15:156 EST] CardService.TextButton.setOnClickAction([Action]) [0 seconds]
[21-02-04 14:44:15:156 EST] CardService.newCardSection() [0 seconds]
[21-02-04 14:44:15:156 EST] CardService.CardSection.addWidget([DatePicker]) [0 seconds]
[21-02-04 14:44:15:157 EST] CardService.CardSection.addWidget([TextInput]) [0 seconds]
[21-02-04 14:44:15:157 EST] CardService.CardSection.addWidget([SelectionInput]) [0 seconds]
[21-02-04 14:44:15:157 EST] CardService.newCardBuilder() [0 seconds]
[21-02-04 14:44:15:157 EST] CardService.CardBuilder.addSection([CardSection]) [0 seconds]
[21-02-04 14:44:15:157 EST] CardService.CardBuilder.build() [0 seconds]
[21-02-04 14:44:15:159 EST] Execution succeeded [0.004 seconds total runtime]

1 ответ

Это устранило мою проблему для №2. Не минимальный код, я знаю, но масштаб проекта изменился

Другие вопросы по тегам