Создание выбора (выпадающего) ввода с динамическим списком параметров в аддоне Gmail - PullRequest
0 голосов
/ 19 февраля 2019

Документы Скрипт Google App SelectionInput показывают входные данные выбора со статическим списком параметров.Попытка создать динамический список опций, как показано ниже:

var items = [...];

var selectWidget = CardService.newSelectionInput()
  .setType(CardService.SelectionInputType.DROPDOWN)
  .setTitle("Select an item")
  .setFieldName("item");

items.forEach(function (item) {
  selectWidget.addItem(item, item, false);
});

приводит к ошибке времени выполнения:

Object does not have property 
    - /​Card/​sections[0]/​widgets[1]/​selection_control/​items. [line: 115, function: XYZ, file: Code]

Как мне создать выбор выбора с динамическими опциями в моем аддоне Gmail

1 Ответ

0 голосов
/ 19 февраля 2019

Addon Dropdown

Я не создавал никаких аддонов некоторое время, но я знал, что хочу это когда-нибудь в будущем, поэтому я сделал пару примеров для себя.Это часть одного из них.

function buildMessageCard(dfltObj){
  var card=CardService.newCardBuilder();
  card.setHeader(CardService.newCardHeader().setTitle('DropDown Tester'));
  var section=CardService.newCardSection().setHeader('Making Choices');
  var makeAChoice=CardService.newSelectionInput().setType(CardService.SelectionInputType.DROPDOWN)
  .setTitle('Make a Choice')
  .setFieldName('userChoice')
  .setOnChangeAction(CardService.newAction().setFunctionName('saveChoice'))
  for(var i=1;i<dfltObj.selections;i++){
    makeAChoice.addItem('Choice ' + i, i, (i==dfltObj.finalChoice)?true:false);
  }
  section.addWidget(makeAChoice);
  var choiceText=CardService.newTextInput()
  .setTitle('Final Choice')
  .setFieldName('finalChoice')
  .setValue(dfltObj.finalChoice);
  section.addWidget(choiceText);
  card.addSection(section);
  return card.build();
}

function saveChoice(e){
  var cObj={finalChoice:e.formInput.userChoice};
  setDefaults(cObj);
  return buildMessageCard(getDefaults());
}

var Default_URL='dflturl';

function setDefaults(dfltObj){
  var ss=SpreadsheetApp.openByUrl(Default_URL);
  var sh=ss.getSheetByName('Defaults');
  var rg=sh.getDataRange();
  var vA=rg.getValues();
  for(var i=0;i<vA.length;i++){
    if(typeof(dfltObj[vA[i][0]])!='undefined'){
      vA[i][1]=dfltObj[vA[i][0]];
    } 
  }
  rg.setValues(vA);
}

function getDefaults(){
  var ss=SpreadsheetApp.openByUrl(Default_URL);
  var sh=ss.getSheetByName('Defaults');
  var rg=sh.getDataRange();
  var vA=rg.getValues();
  var dfltObj={};
  for(var i=0;i<vA.length;i++){
    dfltObj[vA[i][0]]=vA[i][1];
  }
  return dfltObj;
}

Таким образом, вы можете динамически изменять количество выборок с помощью небольшого кода и, немного подумав, вы, вероятно, сможете выяснить, как изменить параметры.

Вот хеш-таблица для моего dfltObj:

enter image description here

Надеюсь, это поможет.

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