google-apps-script - 服务器错误,使用共享库时 google.script.run 失败

标签 google-apps-script google-sheets shared-libraries libraries

我有两个 Google Apps 脚本项目,都是电子表格类型。

让我们调用一个Server 和另一个Client

我想从Server 公开一些函数,这样我就可以从Client 调用它们。

图书馆似乎很适合这个。

不幸的是,当我使用 Resources --> Libraries... 菜单选项将 Server 库添加到 Client 时,出现问题。

请注意,尽管Server 库已添加到Client,但我实际上从未使用过任何Server 库函数。 (事实上​​ Server Code.gs 是完全空白的。)

服务器代码.gs

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

客户端代码.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. 我们调用Client.test()。

    这会从 Sidebar.html 打开一个边栏

    边栏运行:

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

    调用 testReturn()

    testReturn() 完成(或未完成)...

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

很简单...

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

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

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

另外,我相信 testReturn() 永远不会运行,因为它没有出现在日志中。

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

我公开了测试项目:

  • Server (用于轻松将其添加为库的服务器 key :Mb7vYHsQuTR9f4-cMPhFPYBfykRDizSBp)

  • Client

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

最佳答案

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


我使用您的示例代码创建了一个脚本和库,并且运行良好。我抓取了您共享文件的副本,它们都是电子表格,并重现了这个错误:

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

我尝试了几个著名的公共(public)图书馆,SheetConverterBetterLog .如果我从项目中删除了你的库,一切都很好。

观察:问题不是的存在,而是的存在您的图书馆

与我的手卷副本和两个公共(public)图书馆相比,您的图书馆有什么特别之处?你的是包含电子表格的。其他三个是独立的。

结论:不要那样做。对于库,请使用独立脚本。

我还没有在任何当前文档中找到详细说明。碰巧的是,我所有的库都是独立脚本,所以我以前从未遇到过这个限制,也不能说这是新的东西还是旧文档或示例表达了独立要求。


关于您的其他问题/问题...

  • >

    And when testReturn() finishes (or doesn't)...

    WRT “或不”部分...当服务器函数抛出异常时调用failureHandler。您观察到的错误消息就是这样的一个异常(exception)。如果您有意要调用一个failureHandler,您的服务器代码应该throw

  • >

    Also, I believe testReturn() is never run because it does not show up in the logs.

    触发脚本并不总是可以访问编辑器的日志查看器,因此您应该考虑使用 BetterLog 库将日志写入电子表格。它甚至适用于没有附加调试器的触发器函数和 Web 应用程序。 (只是说,因为缺少日志不能可靠地暗示从客户端代码调用的函数没有运行。)

关于google-apps-script - 服务器错误,使用共享库时 google.script.run 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31352328/

相关文章:

javascript - 尝试编写自定义复制/粘贴 Google 表格脚本

android - libiconv.so : has text relocations

c# - 管理源代码的方法

javascript - 对于列标题是否有与此类似的相应行 'header' 方法?

google-apps-script - 如何使用 google Apps Script 编辑现有的 google 表单项(问题)

google-apps-script - 有没有办法在保留文本格式的同时替换 TextBox 形状内的文本?

javascript - 如何以编程方式打开新电子表格

google-sheets - ImportRange 函数忽略空单元格

运行时的 C++ 编译

google-apps-script - 我需要通过Google Web表单将IP地址捕获到Google电子表格中