服务器错误,google.script.run在使用共享库

时间:2015-07-11 00:50:50

标签: google-apps-script google-sheets

我有两个Google Apps脚本项目,两个都是Spreadsheet类型。

我们称之为服务器,另一个客户端

我想公开服务器中的一些功能,以便我可以从客户端中调用它们。

图书馆看起来很完美。

不幸的是,当我使用资源 - >将服务器库添加到客户端时图书馆...菜单选项,东西休息。

请注意,即使将服务器库添加到客户端,我也从未真正使用任何服务器库函数。 (实际上服务器 Code.gs完全空白。)

服务器 Code.gs

//nothing, totally blank, these are test projects created find out what is wrong

客户 Code.gs

//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;
}

客户端 Sidebar.html

<script>
function yay(d)
{
  alert('yay: ' + d);
}

function boo(d)
{
  alert('boo: ' + d);
}

google.script.run.withFailureHandler(boo).withSuccessHandler(yay).testReturn();
</script>

应该发生什么:

  1. 我们致电客户 .test()。

    这会打开Sidebar.html的补充工具栏

    补充工具栏运行:

    google.script.run.withFailureHandler(boo).withSuccessHandler(yay).testReturn();
    
  2. 这应该从客户端 Code.gs

    致电testReturn()

    testReturn()完成(或不完成)......

  3. 应调用yay(d)boo(d)

  4. 很简单......

    因此,当我们附加 NO 库时,会调用yay(d)! (在这种情况下使用d = 1

    但是当我们 DO 附加了一个库时,boo(d)会被调用

      

    d = ScriptError:很抱歉,发生了服务器错误。请稍等一下再试一次。

    此外,我相信testReturn()永远不会运行,因为它不会显示在日志中。

    我做错了什么?这是Google方面的错误吗?

    我公开了测试项目:

    • Server服务器键,可轻松将其添加为库:Mb7vYHsQuTR9f4-cMPhFPYBfykRDizSBp

    • Client

    总结一下,我不明白为什么简单地添加共享库会破坏google.script.run ....功能。特别是因为图书馆是空白的。

3 个答案:

答案 0 :(得分:3)

tl; dr 您的“图书馆”是一个包含电子表格的脚本。为你的图书馆使用一个独立的脚本,你会没事的。

我创建了一个脚本&amp;库与您的示例代码,它完美地工作。我抓取了共享文件的副本,这两个文件都是电子表格,并重现了这个错误:

We're sorry, a server error occurred. Please wait a bit and try again.

我尝试了几个众所周知的公共图书馆,SheetConverterBetterLog。如果我从项目中删除你的库,一切都很顺利。

观察 <问题 存在 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)

我将进行以下两项更改。

  1. 确保您的图书馆与拥有 Google 帐户的任何人共享。
  2. 在使用库的代码中,使用非零数字的版本。默认情况下,库版本设置为 0。将其更改为某个非零数字(希望是您最近部署的库)。如果您没有看到您的库的任何版本号,那么您首先需要部署它。