Запускать оповещение в указанное c время в Google Script - PullRequest
1 голос
/ 27 мая 2020

Я новичок в написании сценариев, поэтому, если кто-нибудь знает, как это сделать, это было бы здорово!

У меня есть пользователь, который входит в систему по рабочим дням примерно в 9 утра и должен делать что-то до 9.30. Чтобы напомнить и настоять на том, что это сделано, я хочу иметь предупреждение, в котором говорится, что нужно сделать это, если определенная ячейка не пуста. В идеале он должен проверять в 9, 9.10, 9.20 и 9.30 и всплывать каждый раз, пока это не будет сделано.

Я пытался настроить триггер каждые 10 минут, но я читал, что вы не можете использовать триггеры с UI.

function startCustomTrigger()
{
  ScriptApp.newTrigger('alerta').timeBased().everyMinutes(10).create();
}

Итак, я подумал о том, чтобы сделать его скриптом onEdit, когда new date().getMinutes() равен 0/10/20/30, и он работал, но затем он продолжает появляться, когда вы продолжаете работать с листом для целую минуту. Добавление new date().getSeconds() не работает, потому что у него слишком мало временного окна, и его легко пропустить.

Это мой текущий код:

function alerta() {
  var ss = SpreadsheetApp.getActiveSpreadsheet()
  var s = ss.getActiveSheet();
  var motosS = ss.getSheetByName("Motos - mañana");
  var motosRange = motosS.getRange(3, 1)
  var ui = SpreadsheetApp.getUi();
  var date = new Date();  
  var day = date.getDay();
  var hrs = date.getHours();
  var min = date.getMinutes()
  var sec = date.getSeconds()

  Logger.log(date)
  Logger.log(day)
  Logger.log(hrs)
  Logger.log(min)
  Logger.log(sec)

  if (motosRange == "" && (day >= 1) && (day <= 5) && (hrs = 9)){
      if (min == 0 || min == 14 || min == 20 || min == 30){
      var response = ui.alert('IMPRIMIR MOTOS PARA LA MAÑANA', 
                            "Hay que anotar el sector de las ventas de ayer e imprimir las motos para la mañana.", 
                            ui.ButtonSet.OK_CANCEL);
                         }
  }
  }

1 Ответ

0 голосов
/ 01 июня 2020

Используйте Свойства скрипта для сохранения статуса предупреждения между вызовами функций

Объяснение

  • Свойства скрипта позволяют вам кэшировать переменные, которые доступны для последующего скрипта run
  • Создайте свойство, для которого установлено значение true, если предупреждение уже было показано
  • Установите для свойства обратно значение false, если одна минута (или любой другой промежуток времени по вашему желанию) пройдено
  • Последнее может быть выполнено с помощью триггера, управляемого по времени, или, что проще, с помощью Utilities.sleep () .
  • Идея состоит в том, что вы проверяете в if укажите состояние вашего логического значения и больше не показывайте предупреждение, пока переменная истинна

Пример:

function alerta() {
  //initial setup
  if(!PropertiesService.getScriptProperties().getProperty("alreadyNotified")){
    PropertiesService.getScriptProperties().setProperty("alreadyNotified", false)
  }
  var ss = SpreadsheetApp.getActiveSpreadsheet()
  var s = ss.getActiveSheet();
  var motosS = ss.getSheetByName("Motos - mañana");
  var motosRange = motosS.getRange(3, 1).getValue()
  var ui = SpreadsheetApp.getUi();
  var date = new Date();  
  var day = date.getDay();
  var hrs = date.getHours();
  var min = date.getMinutes()
  var sec = date.getSeconds()

  Logger.log(date)
  Logger.log(day)
  Logger.log(hrs)
  Logger.log(min)
  Logger.log(sec)
  var alertStatus = PropertiesService.getScriptProperties().getProperty("alreadyNotified");
  //put "false" in quotes because Scriptproperties store the value as a string
  if (alertStatus == "false" && motosRange == "" && (day >= 1) && (day <= 5) && (hrs = 9)){
    if (min == 0 || min == 14 || min == 20 || min == 30){
      PropertiesService.getScriptProperties().setProperty("alreadyNotified", true);
      var response = ui.alert('IMPRIMIR MOTOS PARA LA MAÑANA', 
                              "Hay que anotar el sector de las ventas de ayer e imprimir las motos para la mañana.", 
                              ui.ButtonSet.OK_CANCEL);
      Utilities.sleep(60*1000);
      PropertiesService.getScriptProperties().setProperty("alreadyNotified", false);
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...