Ui.prompt & Ui.alert 的问题

Problems With Ui.prompt & Ui.alert

在这里,我尝试构建一系列提示和警报以发送 SMS 消息。通过这个我输入了两个变量的值(1)移动phone号码和(2)预付款的截止日期。

这是它的来源:

function PromptPrepaymentReminder() {
  var ui = SpreadsheetApp.getUi();
  /* Шаг № 1: ввод мобильного телефона гостя */
  var step1 = ui.prompt("Напоминание о внесении страхового депозита: шаг 1 из 3", "Введите номер мобильного телефона гостя. Например, +79522294179.", ui.ButtonSet.OK);
  var step1_button = step1.getSelectedButton();
  var recipient = step1.getResponseText();
  if (step1_button == ui.Button.OK) {
  /* Когда пользователь нажимает «Ок» на шаге № 1 */
    var step2 = ui.prompt("Напоминание о внесении страхового депозита: шаг 2 из 3", "Введите точные дату и время чтобы установить дедлайн по внесению депозита. Например, 12.06.2016, 18:00.", ui.ButtonSet.OK_CANCEL);
    var step2_button = step2.getSelectedButton();
    var prepaymentReferenceLink = "berdyanskaya56.ru/info/prepayment";
    var prepaymentDeadline = step2.getResponseText();
    var message = "Мини-гостиница Бердянская 56. Внесение предоплаты в размере 1000 руб.: " + prepaymentReferenceLink + ". Внести необходимо до " + prepaymentDeadline + " по московскому времени.";
        if (step2_button == ui.Button.OK) {
        /* Когда пользователь нажимает «Ок» на шаге № 2 */
        var step3 = ui.alert("Напоминание о внесении страхового депозита: шаг 3 из 3", "Пожалуйста, проверьте детали СМС-напоминания перед отправкой гостю:" + "\n" + "\nНомер получателя: " + recipient + "\n" + "\nТекст оповещения: " + message, ui.ButtonSet.YES_NO);
        var step3_button = step3.getSelectedButton();
              if (step3_button == ui.Button.YES) {
              Logger.log("Нажал на YES на третьем шаге.");
              /* Когда пользователь нажимает «Да» на шаге № 3. Здесь же отправляем и СМС-уведомление. */
              try {
              TwilioTextMessenger(recipient, message);
              ui.alert("СМС-напоминание было успешно отправлено гостю на " + recipient + ".");
              }
              catch (err) {
              ui.alert("Не удалось отправить гостю СМС-напоминание. Пожалуйста, попробуйте снова.");
              }
              } else {
              /* Когда пользователь нажимает «Нет» на шаге № 3 */
              var step2 = ui.prompt("Напоминание о внесении страхового депозита: шаг 2 из 3", "Введите точные дату и время чтобы установить дедлайн по внесению депозита. Например, 12.06.2016, 18:00.", ui.ButtonSet.OK_CANCEL);
              var step2_button = step2.getSelectedButton();
              var prepaymentDeadline = step2.getResponseText();
              var message = "Мини-гостиница Бердянская 56. Внесение предоплаты в размере 1000 руб.: " + prepaymentReferenceLink + ". Внести необходимо до " + prepaymentDeadline + " по московскому времени.";
            } 
      } else if (step2_button == ui.Button.CANCEL) {
      /* Когда пользователь нажимает «Отмена» на шаге № 2 */
      var step1 = ui.prompt("Напоминание о внесении страхового депозита: шаг 1 из 3", "Введите номер мобильного телефона гостя. Например, +79522294179.", ui.ButtonSet.OK_CANCEL);
      var step1_button = step1.getSelectedButton();
      var recipient = step1.getResponseText();
      } else if (step2_button == ui.Button.CLOSE) {
      /* Когда пользователь нажимает «Закрыть» на шаге № 2 */
      ui.alert("Отправка СМС-оповещения была прервана пользователем на шаге № 2. Чтобы отправить напоминание, попробуйте повторить снова.");
      }
  } else if (step1_button == ui.Button.CLOSE) {
    /* Когда пользователь нажимает на «Закрыть» на шаге № 1 */
    ui.alert("Отправка СМС-оповещения была прервана пользователем на шаге № 1. Чтобы отправить напоминание, попробуйте повторить снова.");
  }
}

但你更应该注意以下部分:

/* Когда пользователь нажимает «Ок» на шаге № 2 */
            var step3 = ui.alert("Напоминание о внесении страхового депозита: шаг 3 из 3", "Пожалуйста, проверьте детали СМС-напоминания перед отправкой гостю:" + "\n" + "\nНомер получателя: " + recipient + "\n" + "\nТекст оповещения: " + message, ui.ButtonSet.YES_NO);
            var step3_button = step3.getSelectedButton();
                  if (step3_button == ui.Button.YES) {
                  Logger.log("Нажал на YES на третьем шаге.");
                  /* Когда пользователь нажимает «Да» на шаге № 3. Здесь же отправляем и СМС-уведомление. */
                  try {
                  TwilioTextMessenger(recipient, message);
                  ui.alert("СМС-напоминание было успешно отправлено гостю на " + recipient + ".");
                  }
                  catch (err) {
                  ui.alert("Не удалось отправить гостю СМС-напоминание. Пожалуйста, попробуйте снова.");
                  }
                  } else {
                  /* Когда пользователь нажимает «Нет» на шаге № 3 */
                  var step2 = ui.prompt("Напоминание о внесении страхового депозита: шаг 2 из 3", "Введите точные дату и время чтобы установить дедлайн по внесению депозита. Например, 12.06.2016, 18:00.", ui.ButtonSet.OK_CANCEL);
                  var step2_button = step2.getSelectedButton();
                  var prepaymentDeadline = step2.getResponseText();
                  var message = "Мини-гостиница Бердянская 56. Внесение предоплаты в размере 1000 руб.: " + prepaymentReferenceLink + ". Внести необходимо до " + prepaymentDeadline + " по московскому времени.";
                } 

上面你可以看到在第三步(你会在俄语中看到 шаг 3 из 3ui.alertui.ButtonSet.YES_NO 就两个都不按的效果而言不起作用Yes 也不 No。当我声明在每种情况下显示两种类型的 ui.alert 时,它们都没有发生任何事情。

简而言之:

ui.alert("СМС-напоминание было успешно отправлено гостю на " + recipient + ".");
              }
              catch (err) {
              ui.alert("Не удалось отправить гостю СМС-напоминание. Пожалуйста, попробуйте снова.");
              }

这是一个关于如何使用 ui.promptui.alert 的小课程,但对我帮助不大 :-(: https://developers.google.com/apps-script/reference/base/ui.

拜托,你能检查一下我是否遗漏了什么吗?当用户按下 YesNo 时,如何修复它以使其显示 ui.alerts 中的一个?

检查你的执行记录:你应该从...

var step3_button = step3.getSelectedButton();

...因为 step3 是一个 Button 枚举,它没有任何方法属性。

那个错误:

Execution failed: TypeError: Cannot find function getSelectedButton in object YES.

需要比较 Ui.alert() to Ui.prompt(), and you'll see that they have different Return types. If you'd used the latter, then PromptResponse.getselectedButton() 才能获得 Button

只需删除该问题行并将对 step3_button 的引用替换为 step3,您应该没问题。