不一致的错误消息“不允许采取的措施(第298行,文件“ <功能名称>”))

时间:2019-04-24 13:25:21

标签: google-apps-script

上下文 使用g-suite,我有一个Google表单,用户可以将信息提交到Google工作表。与Google工作表对齐的代码会接收提交的信息,并输出google doc / pdf。通过复制主文档模板,合并/附加其他模板文档中的部分,最后搜索并替换最终文档中的许多文本合并字段,可以创建此最终文档/ pdf。代码失败的部分是一个部分,该部分负责合并/追加示例代码中引用的其他模板文档中的部分。

代码从“触发器”运行。触发器配置为: 选择事件源:从电子表格中 选择事件类型:在表单提交上

问题 在不进行任何代码更改的情况下,最近该代码已从触发器运行时停止运行,并出现以下错误: 不允许采取的措施(第298行,文件“”) 298的实际代码行是: 'TargetDocBody.appendParagraph(element);'

我可以通过选择Run-> Run Function->在GAS脚本编辑器中成功运行相关功能。配置为触发器时,该功能不运行。通常,我会将此归结为权限问题,但是当我是表单的提交者时,即使我(脚本所有者/编写者)也无法运行该功能。如上所述,它确实可以在GAS编辑器中成功运行。

我已对所有模板日期,最终保存文件的目录,对Google表单的写入权限,对Google表格的写入权限等具有完全写权限,但我似乎仍然无法解决'Action从触发器运行时不允许。我已经记录了活跃和有效用户的失败和成功情况,他们两次的输出相同。

[19-04-24 09:52:28:837 EDT]活动用户:tim_monaco@company.com

[19-04-24 09:52:28:839 EDT] EffectiveUser:tim_monaco@company.com

function MergeSections(ServiceTypeDoc,TargetDocBody)
{
  var ServiceTypeDocNumElements = ServiceTypeDoc.getNumChildren();
  for(var x =0; x < ServiceTypeDocNumElements; ++x)
  {
    var element = ServiceTypeDoc.getChild(x).copy();     
    var type = element.getType();

    if(type == DocumentApp.ElementType.PARAGRAPH) //this is the problem line
      TargetDocBody.appendParagraph(element);
    if(type == DocumentApp.ElementType.LIST_ITEM)
      TargetDocBody.appendListItem(element);
    if(type == DocumentApp.ElementType.FOOTER_SECTION)
      TargetDocBody.appendFooterSection(element);
  }
}

该功能过去应该/已经运行没有问题。没有代码更改,我期望相同。 实际结果是失败并停止执行 不允许采取的措施(第298行,文件“”) 298的实际代码行是: 'TargetDocBody.appendParagraph(element);'

1 个答案:

答案 0 :(得分:0)

这可能是错误消息不正确的情况。通常,配额限制错误最初并没有发生,然后神秘地出现。此外,由于它不一致地发生,因此也将指出配额限制错误。在这种情况下,您的for循环会在短时间内过于频繁地调用服务,并达到配额限制。我可能是错的,但是我尝试输入try / catch,如果有错误,请休眠代码,然后重试。

如果下面的代码在出现错误时进入休眠状态,则根本不起作用,那么我认为这可能是一个错误,请提交问题。

function MergeSections(ServiceTypeDoc,TargetDocBody)
{
  var ServiceTypeDocNumElements = ServiceTypeDoc.getNumChildren();

  for(var x =0; x < ServiceTypeDocNumElements; ++x)
  {
    var element = ServiceTypeDoc.getChild(x).copy();     
    var type = element.getType();

    for (var i2 = 0;i2<3;i2++) {//Try 3 times
      try{
        switch(true) {
          case type == DocumentApp.ElementType.PARAGRAPH:
            TargetDocBody.appendParagraph(element);
            break;
          case type == DocumentApp.ElementType.LIST_ITEM:
            TargetDocBody.appendListItem(element);
            break;
          case type == DocumentApp.ElementType.FOOTER_SECTION:
            TargetDocBody.appendFooterSection(element);
            break;
        }
        break;//If there is no error then break the loop

      }catch(e) {
        Utilities.sleep(1500);//Wait x number of seconds
      }
    }
  }
}