Возврат после выполнения действия onclick fini sh - PullRequest
1 голос
/ 20 марта 2020

У меня есть скрипт, который проверяет, установлены ли свойства пользователя. Он отображает меню настроек, если их нет, и кнопку настроек, если они есть. Проблема в том, что когда я отправляю настройки (либо устанавливая новые, либо меняя старые), я не могу заставить скрипт вернуться в главное меню, то есть повторно запустить MainFunction. Может ли кто-нибудь помочь мне с этим?

function MainFunction() {
  var userProperties = PropertiesService.getUserProperties();
  var api_key = userProperties.getProperty('api_key');
  var source = userProperties.getProperty('source');
  console.log(api_key);
  console.log(source);
  if (api_key == null || source == null || api_key.length < 2 || source.length < 2) {
    return f_change_settings();
  } else {
    return f_add_settings_button();
  }
}

function f_change_settings(s) {  
  var userProperties = PropertiesService.getUserProperties();
  var api_key = userProperties.getProperty('api_key');
  var source = userProperties.getProperty('source');

  var action = CardService.newAction().setFunctionName('notificationCallback');
  return CardService
  .newCardBuilder()
  .addSection(
    CardService.newCardSection()
    .addWidget(CardService.newTextInput().setFieldName('api_key').setTitle('api_key').setValue(api_key))
    .addWidget(CardService.newTextInput().setFieldName('source').setTitle('source').setValue(api_key))
    .addWidget(CardService.newTextButton().setText('Submit').setOnClickAction(action))
    .addWidget(CardService.newTextParagraph().setText(' '))
  )
  .build();
}

function notificationCallback(a) {
  console.log(a);
  console.log(a.formInput['source']);
  var userProperties = PropertiesService.getUserProperties();
  userProperties.setProperty('api_key', a.formInput['api_key']);
  userProperties.setProperty('source', a.formInput['source']);
  CardService.newActionResponseBuilder()
  .setNotification(CardService.newNotification()
  .setText("Done"))
  .build();
//  MainFunction();
  return;
}

function f_add_settings_button() {  
  var action = CardService.newAction().setFunctionName('f_change_settings');
  return CardService
  .newCardBuilder()
  .addSection(
    CardService.newCardSection()
    .addWidget(CardService.newTextButton().setText('Settings').setOnClickAction(action))
    .addWidget(CardService.newTextParagraph().setText(' '))
  )
  .build();
}

Я пытался вызвать MainFunction из-за обратного вызова, но не работал (строка с комментариями).

1 Ответ

1 голос
/ 20 марта 2020

Вы можете просто установить MainFunction в качестве обратного вызова вместо notificationCallback:

var action = CardService.newAction().setFunctionName('MainFunction');

и установить новые пользовательские свойства в начале этой функции (только если ранее была форма представление):

function MainFunction(a) {
  var userProperties = PropertiesService.getUserProperties();
  if (a.formInput['api_key'] && a.formInput['source']) {
    userProperties.setProperty('api_key', a.formInput['api_key']);
    userProperties.setProperty('source', a.formInput['source']);
  }
  var api_key = userProperties.getProperty('api_key');
  var source = userProperties.getProperty('source');
  if (api_key == null || source == null || api_key.length < 2 || source.length < 2) {
    return f_change_settings();
  } else {
    return f_add_settings_button();
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...