Закрыть боковую панель от кнопки оповещения в Google App Script - PullRequest
0 голосов
/ 07 января 2019

У меня есть электронная таблица, в которой я открываю боковую панель с деталями заказа, а затем получаю предупреждение с вопросом, готов ли пользователь отправить письмо. Если пользователь выбирает «Отмена», я хочу остановить весь скрипт и закрыть боковую панель. google.script.host.close выдает «сценарий» свойства Cannot read из-за неопределенной ошибки. Как бы я просто закрыл боковую панель без необходимости вручную?

// Display a modal dialog box in sidebar with custom HtmlService content to preview the order.
   var htmlOutput = HtmlService.createHtmlOutput('<h1>'+ supplier + '</h1><br/>' +  previewOrder)
   .setTitle('Order Details');
   SpreadsheetApp.getUi().showSidebar(htmlOutput);

// now also show an alert asking if you want to send the mail
   var ui = SpreadsheetApp.getUi();
   var response = ui.alert('Confirm Sending','You are about to send this order to '+  supplier + ' (' + emailAddress + ') - are you sure?', ui.ButtonSet.YES_NO_CANCEL);

        // Process the user's response.
        if (response == ui.Button.YES) {
          var subject = "Order for Tomorrow ";
          MailApp.sendEmail(emailAddress,subject + dayname + " - " + Utilities.formatDate(tomorrow, "GMT+2", "d MMM") + "" ,emailBody, {to: emailAddress,cc: ccEmailAddress, htmlBody: emailBody});          

          }
        else  if (response == ui.Button.NO) {
          //if user chooses NO then ignore and continue the loop
        } else {
      //close the sidebar
          SpreadsheetApp.getUi().google.script.host.close();
          //cancel the script
          return;
        }

Ответы [ 2 ]

0 голосов
/ 08 января 2019
  • Вы хотите закрыть боковую панель, которая уже открыта.
  • Вы хотите достичь выше с помощью другой функции, которая не является скриптом боковой панели.

Если мое понимание верно, как насчет этого обходного пути? В этом обходном пути боковая панель закрывается перезаписанной временной боковой панелью. Я думаю, что есть несколько обходных путей для вашей ситуации. Поэтому, пожалуйста, подумайте об этом как об одном из них.

Модифицированный скрипт:

Когда это отражается на вашем сценарии, измененный сценарий становится следующим:

var ui = SpreadsheetApp.getUi();
var response = ui.alert('Confirm Sending','You are about to send this order to '+  supplier + ' (' + emailAddress + ') - are you sure?', ui.ButtonSet.YES_NO_CANCEL);

// Process the user's response.
if (response == ui.Button.YES) {
  var subject = "Order for Tomorrow ";
  MailApp.sendEmail(emailAddress,subject + dayname + " - " + Utilities.formatDate(tomorrow, "GMT+2", "d MMM") + "" ,emailBody, {to: emailAddress,cc: ccEmailAddress, htmlBody: emailBody});
}
else  if (response == ui.Button.NO) {
  //if user chooses NO then ignore and continue the loop
} else {
  //close the sidebar

  var html = HtmlService.createHtmlOutput("<script>google.script.host.close();</script>"); // Added
  SpreadsheetApp.getUi().showSidebar(html); // Added

  //cancel the script
  return;
}

Примечание:

  • Когда этот модифицированный скрипт запускается, когда главная боковая панель не открыта, временная боковая панель открывается на мгновение. Если вы не хотите делать это, например, пожалуйста, установите существование основной боковой панели с помощью PropertiesService, когда главная боковая панель открыта. Используя это, когда главная боковая панель не открыта, можно запретить открытие временной боковой панели.

Ссылки:

Если этот обходной путь оказался не тем, что вы хотите, извините.

0 голосов
/ 07 января 2019

Нет прямого способа закрыть боковую панель из окна предупреждения. Однако вы можете использовать обходной путь.

  1. Когда пользователь нажимает кнопку Отмена, задайте свойство на стороне сервера.

     PropertiesService.getDocumentProperties().setProperty("CLOSED", "CLOSED");
    
  2. На боковой панели установите таймер, который опрашивает значение этого свойства каждую секунду. Если возвращаемое значение ЗАКРЫТО, закройте боковую панель.

    // Server side
    function checkClosedStatus() {
       var props = PropertiesService.getDocumentProperties();
       var value = props.getProperty("CLOSED");
       if (value === "CLOSED") {
         props.deleteProperty("CLOSED");
       }
       return value;
    }
    
    // Inside the sidebar html
    
    google.script
      .run
      .withSuccessHandler(function(e) {
             if (e === "CLOSED") 
                google.script.host.close();
     })
     .checkClosedStatus()
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...