Active VS Эффективный пользователь для Google Sheets

Я пишу простое приложение-скрипт приложения Google, которое выполняет некоторые манипуляции с данными в зависимости от пользователя, который запрашивает страницу.

Согласно документации Google объект Session имеет 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(); с Session.getEffectiveUser().getEmail(); и БУМ - это работает для других, но не работает для меня...

Как это могло произойти? Какие-нибудь мысли?

  • Я заметил, что когда я запускаю код из ScriptEditor, код работает как обаяние для всех пользователей, но когда он запускается при запуске onOpen, он работает непредсказуемо.

Эта таблица предназначена для нескольких человек.

Любая помощь приветствуется.

1 ответ

Решение

Короткий ответ

Код передает неправильные операторы, потому что нет операторов break, чтобы избежать их выполнения, с другой стороны, для учетных записей потребителей (gmail.com) getActiveUser будет возвращать значение только тогда, когда скрипт выполняется активным пользователем1.

1: https://developers.google.com/apps-script/reference/base/session

объяснение

Вы должны добавить 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

  • Строки 1 и 2 добавлены, когда электронная таблица была открыта testA@gmail.com
  • Строки 3 и 4 добавлены, когда электронная таблица была открыта testB@gmail.com
  • Строка 6 добавляется, когда полоса запускается нажатием кнопки "Выполнить" в редакторе сценариев testB@gmail.com
+---+------------+-------------------------------+-----------------+-----------------+
|   |     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 |
+---+------------+-------------------------------+-----------------+-----------------+
Другие вопросы по тегам