【问题标题】:programmatically disable / enable Google Apps Script script trigger以编程方式禁用/启用 Google Apps Script 脚本触发器
【发布时间】:2016-12-05 12:12:47
【问题描述】:

我创建了一个脚本以作为基于时间的触发器运行。

  • 我想在周末休息和节假日禁用该触发器。
  • 理想情况下,我希望它成为我已经拥有的功能的一部分 删除之前提交的表单,这意味着用户在每个假期开始时只需按下一个按钮(删除之前的提交并禁用时间触发器)。
  • 如果 下次学生提交表单时,触发器已重新启用 (表示假期已经结束)。

不确定如何使用脚本以这种方式禁用/启用触发器 - 感谢任何建议!

   //Menu allowing user to choose to delete previous form submissions
    function onOpen() {
      var ui = SpreadsheetApp.getUi();
      // Or DocumentApp or FormApp.
      ui.createMenu('Clear Out Responses')
      .addItem('Clear Form & Responses', 'showAlert')
          .addToUi();
    }


//Alert box deleting previous form submissions on yes, doing nothing if not
function showAlert() {
  var ui = SpreadsheetApp.getUi(); // Same variations.

  var result = ui.alert(
     'This will clear all previously registered data',
     'Are you sure you want to continue?',
      ui.ButtonSet.YES_NO);

  // Process the user's response.
  if (result == ui.Button.YES) {
    // User clicked "Yes".
 var ui = SpreadsheetApp.getUi();
  var source = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Form Responses 1");
  var lastRow = source.getLastRow()
  source.deleteRows(2, lastRow)}
  var form, urlForm = SpreadsheetApp.getActiveSpreadsheet().getFormUrl();
  if (urlForm) {}
    form = FormApp.openByUrl(urlForm);
    if (form) form.deleteAllResponses();
  }

//Trigger running  record-keeping function each night 
function dailyTrigger() {
  ScriptApp.newTrigger('dailyRecord')
  .timeBased()
  .atHour(22)
  .everyDays(1)
  .create();
}


//Record-keeping function, copy/value-pasting record into next clear column
function dailyRecord() {
    var ss = SpreadsheetApp.getActive()
        .getSheetByName('History'),
        lastColumn = ss.getLastColumn(),
        colE = ss.getRange("C:C")
            .getValues();
    ss.getRange(1, lastColumn + 1, colE.length, 1)
        .setValues(colE);
}

【问题讨论】:

    标签: google-apps-script triggers


    【解决方案1】:

    你看过getUserTriggers()deleteTrigger吗?

    • 使用getUserTriggers(),您可以确定调用dailyRecord 的触发器是否已经存在。它返回一个触发器列表,您可以使用getHandlerFunction()检查每个触发器正在调用的函数。
    • 使用deleteTrigger(),您可以删除给定的触发器。例如如果您调用dailyRecord 的触发器已安装(并从getUserTriggers() 的列表中返回,则可以使用此函数将其删除。
    • 要再次启用触发器,在检查它不存在后,您可以使用触发器构建器根据您已有的代码重新创建触发器。

    有了这些方法,你应该就能达到你想要的效果了。

    【讨论】:

    • 谢谢你,Bardy - 不,我没有编写大量脚本,也没有遇到过这些 - 我会看看。 - 非常感谢
    【解决方案2】:

    无法检索和重新定义现有触发器。例如,已运行的基于时间的触发器无法检索并使用代码指定新的运行时间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-08
      • 2016-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多