我有两个Google Apps脚本项目,两个都是Spreadsheet类型。
我们称之为服务器,另一个客户端。
我想公开服务器中的一些功能,以便我可以从客户端中调用它们。
图书馆看起来很完美。
不幸的是,当我使用资源 - >将服务器库添加到客户端时图书馆...菜单选项,东西休息。
请注意,即使将服务器库添加到客户端,我也从未真正使用任何服务器库函数。 (实际上服务器 Code.gs完全空白。)
//nothing, totally blank, these are test projects created find out what is wrong
//This is our entry point
//It instantiates the Sidebar from Sidebar.html
function test()
{
SpreadsheetApp.getUi().showSidebar(HtmlService.createHtmlOutputFromFile('Sidebar')
.setSandboxMode(HtmlService.SandboxMode.IFRAME));
}
function testReturn()
{
Logger.log("doTest() called");
return 1;
}
<script>
function yay(d)
{
alert('yay: ' + d);
}
function boo(d)
{
alert('boo: ' + d);
}
google.script.run.withFailureHandler(boo).withSuccessHandler(yay).testReturn();
</script>
应该发生什么:
我们致电客户 .test()。
这会打开Sidebar.html的补充工具栏
补充工具栏运行:
google.script.run.withFailureHandler(boo).withSuccessHandler(yay).testReturn();
这应该从客户端 Code.gs
致电testReturn()
当testReturn()
完成(或不完成)......
应调用yay(d)
或boo(d)
。
很简单......
因此,当我们附加 NO 库时,会调用yay(d)
! (在这种情况下使用d = 1
)
但是当我们 DO 附加了一个库时,boo(d)
会被调用
d = ScriptError:很抱歉,发生了服务器错误。请稍等一下再试一次。
此外,我相信testReturn()
永远不会运行,因为它不会显示在日志中。
我做错了什么?这是Google方面的错误吗?
我公开了测试项目:
总结一下,我不明白为什么简单地添加共享库会破坏google.script.run
....功能。特别是因为图书馆是空白的。
答案 0 :(得分:3)
tl; dr 您的“图书馆”是一个包含电子表格的脚本。为你的图书馆使用一个独立的脚本,你会没事的。
我创建了一个脚本&amp;库与您的示例代码,它完美地工作。我抓取了共享文件的副本,这两个文件都是电子表格,并重现了这个错误:
We're sorry, a server error occurred. Please wait a bit and try again.
我尝试了几个众所周知的公共图书馆,SheetConverter和BetterLog。如果我从项目中删除你的库,一切都很顺利。
观察 <问题 存在 a 库,存在 您的库。
与我手工复制的图书馆和两个公共图书馆相比,你的图书馆有什么特别之处?你的是电子表格包含的。其他三个是独立的。
结论:不要这样做。对于库,请使用独立脚本。
我还没有在任何现有文档中找到这个拼写。碰巧,我的所有库都是独立的脚本,所以我以前从未遇到过这个限制,也不能说它是新的还是旧的文档或示例表达了独立的需求。
关于您的其他问题/问题......
当
testReturn()
完成 (或没有) ...
WRT“或不”部分...当服务器函数failureHandler
是异常时调用throw
。您观察到的错误消息就是这样的例外。如果您特意想要调用failureHandler
,则您的服务器代码应为throw
。
此外,我相信
testReturn()
永远不会运行,因为它不会显示在日志中。
编辑器的日志查看器并不总是可以被触发的脚本访问,因此您应该考虑使用BetterLog库将日志写入电子表格。它甚至适用于没有附加调试器的触发器功能和Web应用程序。 (只是说,因为缺少日志不能可靠地暗示从客户端代码调用的函数没有运行。)
答案 1 :(得分:2)
5 年后我登陆这里时遇到了类似的问题 - google.script.run 因服务器错误 500 失败。我的设置是类似的 - 电子表格绑定 GAS 和对同一项目中的库的引用。与您的情况不同,我的图书馆是独立的。 另外,我在项目中依赖库的代码独立于 google.script.run 相关代码。如果我从项目中取出 lib 及其相关代码,那么 google.script.run 位就可以正常工作。
解决方案 - 至少在我的情况下......结果证明只有在库指向其头部而不是(任何)版本化部署时才会发生服务器错误([https://developers.google.com/apps -脚本/概念/部署][1])。 即使 libs 头与它的最新版本代码完全匹配,这也适用。所以它甚至不是lib代码,而是部署。可能不相关,但以防万一 - 该库引用了 BigQuery API 服务。我没有进一步尝试这个。
希望这可能对遇到类似问题的人有所帮助。
答案 2 :(得分:0)
我将进行以下两项更改。