Я хотел бы лучше уточнить вопрос, который я написал.Я пытаюсь написать дополнение, которое выполняет следующие действия:
Когда это дополнение установлено в документе, я хочу, чтобы оно отправляло пользователю электронное письмо каждый раз, когда документс информацией о том, кто открыл документ.Ниже я подробно расскажу о своих предыдущих попытках, но главный вопрос заключается в следующем: Есть ли способ для меня это сделать?
Спасибо всем, ктопомог.
Я работаю над созданием надстройки Google Apps Script, которая после установки в документе будет выполнять функцию отправки электронного письма эффективному пользователю каждый раз, когда документоткрыт.В настоящее время я делаю следующее:
function onInstall (e)
{
onOpen (e)
}
function onOpen (e)
{
if (/*Some Code*/)
{
DocumentApp.getUi().createAddonMenu()
.addItem('Start Notification', 'myFunction')
.addToUi();
}
else
{
myFunction ();
}
}
В этом заявлении if я пробовал несколько разных вещей:
e.authMode == ScriptApp.AuthMode.NONE
, похоже, работал не совсем правильно, хотя ядействительно получило меню так, как было задумано, функция не выполнялась, когда кто-то другой открыл документ.Я думаю, это потому, что для них режим авторизации также НЕТ, поэтому он просто запускает if, а не else.Поэтому я попробовал это вместо этого:
e.authMode == ScriptApp.AuthMode.NONE && Session.getEffectiveUser().getEmail() == ""
Но это тоже не сработало.Опять же, я смог увидеть меню надстроек, и когда я нажал кнопку, чтобы активировать код, я могу убедиться, что «myFunction» действительно выполнялась, но не выполняла myFunction (), когда кто-то еще открыл документ.Я открыт для идей и предложений!
Вот myFunction ()
function myFunction() {
var doc = DocumentApp.getActiveDocument().getName();
var userEmail = Session.getEffectiveUser().getEmail();
var openerEmail = Session.getActiveUser().getEmail();
if (openerEmail != userEmail) {
GmailApp.sendEmail(userEmail, doc + ' opened', openerEmail + " opened the document.");
}
}
И еще одно дополнение, согласно второму полученному ответу: я изначально использовал этот код и вставил его во все свои документы.Поскольку он используется только для пользователей в моем домене, он работал отлично.Есть ли способ обойти это?
function myFunction() {
var email = Session.getActiveUser();
if (email != 'myEmail@domain.org') {
GmailApp.sendEmail('myEmail@domain.org', 'Document opened', email + " opened your document.");
}
}
function triggerBuilder ()
{
var doc = DocumentApp.getActiveDocument();
ScriptApp.newTrigger (myFunction)
.forDocument(doc)
.onOpen()
.create();
}
Я бы просто запустил конструктор триггеров, чтобы сделать устанавливаемый триггер, или сделал бы это вручную.
Дополнительная информация: Я протестировалследуя коду, и обнаружил, что при запуске я смог увидеть информацию, когда сам открыл документ, а не когда это сделал кто-то другой.Кажется, что метод onOpen (e), возможно, вообще не работал, так как он также не отображался на странице Выполнения проекта.
function onInstall (e)
{
onOpen (e);
}
function onOpen (e)
{
if (Session.getEffectiveUser().getEmail() == "")
{
DocumentApp.getUi().createMenu("Notification Test")
.addItem("Run function", 'myFunction')
.addToUi();
}
else
myFunction ();
}
function myFunction ()
{
Logger.log ("This is verification that the document was opened.");
Logger.log("Current user: " + Session.getActiveUser().getEmail());
}