Есть ли проверенный способ обработки интервалов обновления с автоматической проверкой / установкой триггера и несколькими пользователями между несколькими электронными таблицами?
Я работаю над надстройкой, которая должна обновлять электронные таблицы с заданными пользователем интервалами (от одного раза в час до одного раза в год) - есть ли умный, проверенный способ справиться с этим с помощью автоматической проверки / установки триггера и нескольких пользователей между несколькими электронными таблицами?
Насколько я понимаю, триггеры устанавливаются индивидуально для каждого пользователя - может ли кто-нибудь раскрыть тайну того, как работают триггеры, управляемые по времени, для надстроек в следующих случаях?
Проверка, установлены ли триггеры, не "видит", были ли они установлены другими пользователями, и не может им управлять (например, удалять чужой триггер, когда он больше не нужен). Есть идеи, как с этим справиться? Наличие 50 пользователей с установленными почасовыми триггерами - не лучший вариант.
Несколько таблиц с установленным дополнением: будет ли триггер запускать вызываемую функцию во всех из них одновременно или для них требуются отдельные триггеры на листе? Сухое тестирование, по-видимому, указывает на то, что триггеры необходимо настраивать индивидуально для каждого листа, хотя было бы здорово, если бы кто-то мог подтвердить свой опыт с помощью надстройки, которая уже онлайн.
Чтобы контролировать потенциальный хаос, я подумываю добавить свойство `` последнее обновление '' в экземпляры запланированного обновления и заставить запускаемую функцию сравнить разницу во времени между этим и текущим временем, но тогда он все равно возвращается к тому, чтобы эта функция запускалась каждый час. умноженное на количество пользователей.
1 ответ
будет ли триггер запускать вызываемую функцию во всех из них одновременно или для каждого листа требуются отдельные триггеры?
Устанавливаемые триггеры устанавливаются на [лист | документ | форма] на [пользователя] (ну, если быть точным, на проект скрипта). Учитывая тот факт, что они изолированы для каждого пользователя, они также запускаются для каждого пользователя (в отличие от простых триггеров).
Устанавливается на Open | onEdit | по изменению
Однако есть случай, когда это может быть не так просто - см. Устанавливаемый onOpen
раздел триггеров в официальном руководстве. Хотя общий случай все еще сохраняется - даже если другая учетная запись вызовет его, триггер будет запущен для учетной записи создателя, которая включает квоты и все, что связано с пользователем, поэтому будьте с этим особенно осторожны.
Есть идеи, как с этим справиться?
Хотя [устанавливаемые] триггеры не являются общими для пользователей, некоторые ресурсы разделяются между ними, поэтому у вас есть по крайней мере два возможных способа борьбы с одновременным срабатыванием триггеров:
- Предпочтительный способ:
LockService
. Он специально разработан, чтобы избежать состояний гонки, таких как ваш случай: просто подождите (или измените расписание, если действие может занять более 5 минут), пока блокировка не будет установлена (обратите внимание, что вам нужно использовать скрипт или блокировку документа). - Резервный способ: если вы намерены разрешить пользователям одновременно взаимодействовать с пользовательским интерфейсом, блокировка не сработает (по дизайну). Вы правильно поняли, как использовать
PropertiesService
(Я предполагаю, что это то, что вы имели в виду, говоря "добавление свойства"), но будьте осторожны, чтение / запись регулируются квотами.
Я недавно ответил на аналогичный вопрос - у него есть рабочий и проверенный образец эмуляцииLockService
поведение сPropertiesService
(но опять же будьте осторожны с квотами).
Заметки
Вы должны знать о проблеме с триггерами, основанными на времени, и учитывать это (также упомянутый ответ дает более простое решение для проверки метки времени).