当由其他人执行时,在调用Browser.msgBox()后脚本执行不会恢复

时间:2014-05-22 01:58:14

标签: google-apps-script google-sheets

我有一个谷歌电子表格,我们提到了我们团队必须完成的某项任务。在一列下,我们维护任务状态。我添加了一个Google应用脚本,该脚本会在更改电子表格时触发。脚本的主要工作是向某些Google邮件群组发送有关更改的电子邮件通知。 在脚本中我使用Browser.msgBox()来获取是/否的输入。现在,如果我在电子表格中更改状态,弹出窗口将会在按钮上恢复并按下按钮的值。如果其他人在电子表格中进行了更改,则会获取弹出窗口,但是单击“是/否”按钮脚本时不会恢复。

我的脚本看起来像这样:

function statusChangeNotification(e) {
  var user = e.user;
  var sheet = e.source.getActiveSheet();
  var range = e.range;
  var val = e.value;

  if(sheet.getName() == RESPONSE_SHEET && isStatusField(range)){
    if(val == STATUS_YES){
      var sendMail = Browser.msgBox("Status Changed", "Do you wanna send a status notification mail?", Browser.Buttons.YES_NO);
      if(sendMail == "yes"){
        // code to send email using MailApp.sendEmail()
      }
    }
  }
}

class browser reference下的Google开发者处,他们提到了

  

msgBox(标题,提示,按钮)

     

弹出一个带有给定标题,消息并指定的对话框   用户浏览器中的按钮。 msgBox方法引发了客户端   带有给定标题的消息框,显示给定的消息   用户,并提供要显示的按钮选择。注意   此方法导致服务器端脚本被挂起。它会   用户清除对话框后自动恢复,但JDBC   连接不会在暂停期间持续存在。

对于其他人调用Browser.msgBox()后,脚本无法恢复的问题是什么?请提出一些替代方案以实现相同目标。

2 个答案:

答案 0 :(得分:1)

请参阅以下主题:

Quiet .hashCode() death of a script (GAS)

此外,此记录的GAS问题:

https://code.google.com/p/google-apps-script-issues/issues/detail?id=2697

对于脚本+电子表格所有者以外的所有用户,

/ dr脚本将在Browser.msgBox()之后失败

答案 1 :(得分:0)

据我所知,您在弹出确认后使用onEdit触发器发送电子邮件。 onEdit触发器是一个简单的触发器,它的范围有限。 您无法使用onEdit事件发送电子邮件。您将不得不使用可安装触发器,如时间驱动触发器等。

为了更好地理解触发器及其范围,您可以检查这两个参考链接。