у пользователя его идентификатор (или любой признак)?
Можно заставить пользователя запустить функцию, которая от его имени заведет триггер и, например, разрешит редактирование нужного ему диапазона. Тогда этот триггер будет выполняться для каждого пользователя, но данные о пользователе будут передаваться только в тот, который им и установлен. Можно проверять аргумент "е" на наличие этих данных и прекращать выполнение функции. Дичайший костыль с неизвестными побочками, но как вариант - имеет право на существование.
У каждого пользователя, открывшего книгу и запустившего функцию (через скриптом созданное меню) будет свой экземпляр тригера? В функции надо проверять на наличие такого триггера (что бы не создавать их при каждом запуске)?
Я успел заскринить
Удали🙃
Запрашиваете список триггеров у каждого пользователя и если он есть в списке то он есть. Триггеры других пользователей уму не видны.
Уже попробовал. Проблема появилась: у каждого пользователя отрабатывают все экземпляры всех пользователей.
Я писал что с этим делать
Напиши простой триггер который выводит почту пользователя и время старта скрипта.
Понял. е.еMail будет пустым у остальных
Если вы свой onEdit пишите то все будут запускаться от всех пользователей.
Или надо именно простой тригер использовать? Но его же я не могу для каждого пользователя сделать уникальным?
Скрипт на взведение триггера на скору руку получился такой: function createTrigger() { let sTrigName="fгScript"; let fTrigOn=false; let ss = SpreadsheetApp.getActiveSpreadsheet(); let triggers = ScriptApp.getProjectTriggers(); Logger.log('Current project has ' + triggers.length + ' triggers.'); triggers.forEach(trigger => {if(trigger.getHandlerFunction()===sTrigName)fTrigOn=true}) if (!fTrigOn) ScriptApp .newTrigger(sTrigName) .forSpreadsheet(ss) //или forForm, forCalendar, forDocument .onEdit() //или onChange(), onOpen(), onFormSubmit() .create() } Подкорректируете для красоты?
Для красоты не буду.)
function createTrigger() { let sTrigName="fuScript"; let fTrigOn=false; let ss = SpreadsheetApp.getActiveSpreadsheet(); let triggers = ScriptApp.getProjectTriggers(); Logger.log('Current project has ' + triggers.length + ' triggers.'); triggers.forEach(trigger => {if(trigger.getHandlerFunction()===sTrigName)fTrigOn=true}) if (!fTrigOn) ScriptApp .newTrigger(sTrigName) .forSpreadsheet(ss) //или forForm, forCalendar, forDocument .onEdit() //или onChange(), onOpen(), onFormSubmit() .create() }
Вот бы взять let и отменить.
С отступом в два пробела выглядит как в исходном сообщении в телеге😉
const? или var привычнее? Просто let - более строга!?
🤷♂️ Не знаю. Я все еще размышляю. Но везде использую const как гарантию конкретного использования. let в циклах, если сильно надо. var только в apps script и то если редактирую чужое.
Тогда конечно - я в конце, под завершение проекта меняю на const, там где точно не собираюсь менять внутри функции.
fTrigOn= triggers.some(trigger => trigger.getHandlerFunction()===sTrigName);
А вот с этим проблема. Все триггеры запускаются у всех редакторов и let sUserEmail = e.user.getEmail() не пустой. Содержит мыло автора триггера. Есть идеи как исправить?
идей нет, есть только каждому свой лист или своя таблица, а от туда уже собирать информацию в общую,
А нет, все получилось. Спасибо, кто верил (в меня :) и в google) :)
Обсуждают сегодня