Google表格的有效VS有效用户

时间:2016-10-13 11:26:45

标签: google-apps-script google-sheets

我正在编写一个简单的谷歌应用脚​​本应用程序,它执行一些数据操作取决于请求页面的用户。

根据google documentation对象会话有 getActiveUser() getEffectiveUser()我目前正在使用它来确定用户。 看看代码:

var email = Session.getActiveUser().getEmail();
  switch (email){
    case 'test@gmail.com':
      /*Some code here*/
      return true;
    case 'test2@gmail.com':
      /*Some code here*/
      return true;
    default:
      return false;
  }

它看起来应该有效,不幸的是它没有按预期工作(至少对我而言)。

上面的代码在onOpen触发器触发时运行,并且当用户第一次尝试运行此代码时设置所有权限。

因此,我决定执行跟踪,发现Session.getActiveUser().getEmail();Session.getEffectiveUser().getEmail();会为用户返回错误的电子邮件。

对于创建脚本{1}}的第一个用户(我),返回正确的电子邮件,但对于所有其他用户,它也会返回我的电子邮件。 好的,我已决定将Session.getActiveUser().getEmail();替换为Session.getActiveUser().getEmail();和BOOM - 它适用于其他人,但对我不起作用...

怎么可能?有什么想法吗?

  • 我注意到当我从ScriptEditor运行代码时,代码就像所有用户的魅力一样,但是当它在onOpen触发时运行时,它的工作变得不可预测。
  

此电子表格与多人共享。

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

简短回答

代码发出错误的语句,因为没有break语句来避免它们的执行,另一方面,对于消费者帐户(gmail.com)getActiveUser只会在活动用户运行脚本时返回一个值 1

1 https://developers.google.com/apps-script/reference/base/session#getActiveUser()

解释

您应该在每个案例集的末尾添加break;,否则下一个语句也将被执行。相反,请考虑以下内容进行测试。

替代测试代码

function onOpen(){
  myFunction('On open - simple trigger');
}

function onOpenInstallable(){
  myFunction('On open - installable trigger');
}

function runFromScriptEditor(){
  myFunction('Run - script editor');
}

function myFunction(context) {
  var sheet = SpreadsheetApp.getActiveSheet();
  var lastRow = sheet.getLastRow();
  var range = sheet.getRange(lastRow + 1,1,1,4);
  var output = [[
    new Date(),
    context,
    Session.getActiveUser().getEmail(),
    Session.getEffectiveUser().getEmail()
    ]];
  range.setValues(output); 
}

结果

所有者:testA@gmail.com
编辑:testB@gmail.com

  • 在testA@gmail.com
  • 打开电子表格时添加了第1行和第2行
  • testB@gmail.com
  • 打开电子表格时添加了第3行和第4行
  • 通过testB@gmail.com点击脚本编辑器的“运行”按钮触发条带时的第6行adden
+---+------------+-------------------------------+-----------------+-----------------+
|   |     A      |               B               |        C        |        D        |
+---+------------+-------------------------------+-----------------+-----------------+
| 1 | Timestamp  | Context                       | Active User     | Effective User  |
| 2 | 10/29/2016 | On open - simple trigger      | testA@gmail.com | testA@gmail.com |
| 3 | 10/29/2016 | On open - installable trigger | testA@gmail.com | testA@gmail.com |
| 4 | 10/29/2016 | On open - simple trigger      |                 |                 |
| 5 | 10/29/2016 | On open - installable trigger |                 | testA@gmail.com |
| 6 | 10/29/2016 | Run - script editor           | testB@gmail.com | testB@gmail.com |
+---+------------+-------------------------------+-----------------+-----------------+