GSuite Addon CardService newDatePicker Обратный вызов не находит идентификатор свойства - PullRequest
1 голос
/ 21 апреля 2020

Просто пытаюсь изучить аддоны GSuite .. следуя указаниям разработчика в качестве руководства: https://developers.google.com/gsuite/add-ons/concepts/widgets#user_interaction_widgets Я вижу карту аддона разработчика, которая появляется в Gmail ... но затем выдает ошибку:

TypeError: Невозможно прочитать свойство 'form_input_date_value' из неопределенного [строка: 34, функция: handleDateChange, файл: Код]

Это строка 34:

var dateInputControl = e.commonEventObject.formInputs["form_input_date_value"].dateInput;

Вот полный источник, который я пытаюсь ...

function loadAddOn(event) {

  var dateOnlyPicker = CardService.newDatePicker()
    .setTitle("Date to send Drafts")
    .setFieldName("form_input_date_value")
    .setValueInMsSinceEpoch(1558668600000)
    .setOnChangeAction(CardService.newAction()
        .setFunctionName("handleDateChange"));  

  var card = CardService.newCardBuilder()
      .setHeader(CardService.newCardHeader().setTitle("Date Test"))
      .addSection(CardService.newCardSection()
         .addWidget(dateOnlyPicker))
      .build();

  return [card];
}

function handleDateChange(e) {
  var dateInputControl = e.commonEventObject.formInputs["form_input_date_value"].dateInput;
  // have also tried e.commonEventObject.formInputs.myDatePicker[""].dateInput without luck
  var msSinceEpoch = dateInputControl.msSinceEpoch;
  var hasDate = dateInputControl.hasDate;
  var hasTime = dateInputControl.hadTime;
  var userTimezoneId = event.userTimezone.id;

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

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

Я посмотрел на этой странице: https://developers.google.com/gsuite/add-ons/concepts/event-objects и это говорит:

Выбор только на дату: объект DateInput. Пример: для средства выбора с идентификатором myDatePicker, получить доступ к объекту DateInput, используя e.commonEventObject.formInputs.myDatePicker[""].dateInput.

Если я задаю имя файла, используя .setFieldName("myDatePicker"), а затем использую var dateInputControl = e.commonEventObject.formInputs.myDatePicker[""].dateInput; I Я все еще получаю ту же ошибку.

Не могу понять, как мне обойти это. Если бы мне пришлось угадывать - я бы сказал, что установка FieldName не устанавливает ID, и поэтому я не могу его найти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...