【问题标题】:Shared script conflict using Session.getActiveUser().getEmail()使用 Session.getActiveUser().getEmail() 的共享脚本冲突
【发布时间】:2018-07-31 17:05:31
【问题描述】:

我有一个与另一位用户共享的 Google Apps 脚本(我拥有这两个用户 - 一个是我的个人 Gmail,一个是我在 Gsuite 上的工作帐户)。该脚本会扫描我收件箱中的线程,并根据规则将标签应用于线程。

我从每个用户帐户设置基于时间的触发器来运行脚本。

脚本调用 Session.getActiveUser().getEmail() 来识别运行它的用户,并根据用户不同设置一些参数。

日志记录显示,对于任何一个用户,脚本都有一半的时间会间歇性地出错,提示“脚本无权获取活动用户的身份”。 (显然它对每个用户都有权限,否则每次都会失败。)

为了解决这个问题,我停止在用户之间共享脚本。我在每个用户的帐户中制作了相同代码的单独副本。现在脚本对两个用户都运行良好。

谁能确认这是 Google 操作环境中的错误?那(我怀疑)操作环境不知何故对哪个用户正在运行共享脚本感到困惑?

(我确实搜索过这个论坛,但找不到解释它的描述)

【问题讨论】:

  • 函数是怎么调用的?它使用什么名称?请注意,如果您注册了已安装的“编辑时”触发器,则该触发器为每个用户的编辑激活,而不仅仅是安装触发器的用户所做的编辑。
  • var currentUser = Session.getActiveUser().getEmail();
  • 每个用户的触发器只是一个基于时间的触发器,用于定期运行函数。这不是“编辑时”触发器。整体功能是在我的 gmail 收件箱中抓取一些线程并为其应用标签。

标签: google-apps-script


【解决方案1】:

您应该使用getEffectiveUser(),因为当基于时间的触发器触发时,不一定有活动用户。

来自文档(上面链接):

如果脚本在可安装触发器下运行,则返回 创建触发器的用户的帐户。

【讨论】:

  • 您好 Diego,感谢您的帮助。我阅读了链接,我怀疑这是答案。我没有运行网络应用程序,只是一个脚本。在我的每个用户下,我分别为共享脚本创建了触发器(在应用程序脚本控制台中) - 因此根据链接,无论我使用 getEffectiveUser() 还是 getActiveUser(),都应该返回相同的值。 (你认为我读错了吗?)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-22
相关资源
最近更新 更多