项目/库物理(编辑访问)和逻辑(执行访问)范围

时间:2012-06-26 19:27:39

标签: google-apps-script

我已阅读了一些基本的Google Apps脚本文档/教程。我没有找到任何关于代码执行“范围”的解释。

到目前为止我理解的是:

 All code consists of one or more statements
 All statements must (?) be contained in a "function"
     (a slight different from non-google javascript? - is this a false assumption?) 
 All functions reside in a container called a "file"
 Each "file" is part of a "project" container (or library)
 Each project container is stored in a "spreadsheet" container.

这些是“物理”(编辑访问)边界。

我的问题是陈述的“逻辑”界限是什么 执行期间?

我首先假设所有变量/对象都是全局的, 类似于JavaScript在网页中的运作方式。我没想到 “edit access”容器限制了变量/对象定义的范围。 我错了。

我认为“库”结构类似于PHP“包含”操作。 由此我认为这将使我免于必须复制相同的一组 代码到我需要的每个应用程序(电子表格容器)中 使用已经“测试过”的代码。我假设资源可用 包括的项目与包括的项目相同 项目共同资源)。总之,我错了。 “属性”存储在定义的电子表格中,并被视为由包含项目“拥有”。

从玩它开始,我现在明白“项目密钥”只是增加了 电子表格容器的新“命名空间”。每个人都会发生什么 名称空间保留在该名称空间唯一(最简单)的沟通 命名空间之间是通过函数参数和返回值。

特别是,User和Project属性的范围限定并保留在其中 它们包含的电子表格文档。电子表格中的每个项目 文档具有单独的用户和项目属性集。

相同的项目/库名称可以出现在多个电子表格文件中 并完全独立。

这是在某处记录的吗?还有其他我需要知道的事情 关于作用域(跨不同应用程序的线程进行通信) 共享同一个项目/图书馆?

此外,如果函数传回对对象中定义的对象的引用 库范围,它会在调用项目中持续存在吗?我可以通过/返回 一个变量,指向项目的UserProperties“服务”对象并具有访问权限 在另一个项目中的数据?

2 个答案:

答案 0 :(得分:2)

这是在库中的用户指南结尾处记录的: https://developers.google.com/apps-script/guide_libraries

在决定如何确定范围时,我们试图对最常见的用例进行认真考虑,尽量减少意外,但我们并不完美。

关于您是否可以使用参数传递在库和项目之间共享ScriptProperties对象的问题,目前这是不可能的。您始终可以为特定属性公开getter / setter。

如果您有一个有趣的用例,如果没有请求的行为是不可能实现的,请在我们的问题跟踪器中提交一个错误。谢谢!

答案 1 :(得分:0)

我也与此搏斗。虽然文档非常好,但有点令人困惑。

共享和非共享的概念让我得到了一些试验和错误。

我确实想提一下,UserProperties存在于用户级别,并不仅仅与项目或库相关联。使用库时,无需像使用ScriptProperties那样传递UserProperties。

周围的东西: - )

吉姆