上下文 使用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);'
答案 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
}
}
}
}