#google-apps-script #triggers
#google-apps-script #триггеры
Вопрос:
Мне нужен триггер (или два), и я делаю что-то не так. Или, может быть, мне нужно настроить свой код.
Я хочу, чтобы электронное письмо отправлялось автоматически при обновлении строки в моей электронной таблице. Три обновляемых столбца — это заметки, статус и разрешение. Прямо сейчас, в моей тестовой версии, он отправляет электронное письмо, как только я изменяю любой из этих столбцов. И это нормально, если я только обновляю одну вещь. Но если я хочу добавить заметку, изменить статус и ввести разрешение одновременно, он отправляет три отдельных письма. Мой первый триггер для отправки электронного письма при отправке формы отлично работает.
Вот мой код. Любая помощь будет оценена
PS: Я уверен, что есть более чистые способы сделать это, но я знаком с этим из прошлого. Прошло достаточно времени, чтобы я не помнил всего этого.
function formSubmitReply(e) {
var userEmail = e.values[3];
var sheet = SpreadsheetApp.getActiveSheet();
var lastRow = sheet.getLastRow();
// Set the status of the new ticket to 'New'.
// Column F is the Status column
sheet.getRange("F" lastRow).setValue("New");
// Calculate how many other 'New' tickets are ahead of this one
var numNew = 0;
for (var i = 2; i < lastRow; i ) {
if (sheet.getRange("F" i).getValue() == "New") {
numNew ;
}
}
MailApp.sendEmail(userEmail,
"Helpdesk Ticket #" lastRow,
"Thanks for submitting your issue. nnWe'll start "
"working on it as soon as possible. You are currently "
"number "
(numNew 1) " in the queue. nnHelp Desk.",
{name:"Help Desk"});
}
function emailStatusUpdates() {
var sheet = SpreadsheetApp.getActiveSheet();
var row = sheet.getActiveRange().getRowIndex();
var userEmail = sheet.getRange("D" row).getValue();
var subject = "Helpdesk Ticket #" row;
var body = "We've updated the status of your ticket.nnStatus: " sheet.getRange("F"
row).getValue();
body = "nnNotes: " sheet.getRange("E" row).getValue();
body = "nnResolution: " sheet.getRange("G" row).getValue();
MailApp.sendEmail(userEmail, subject, body, {name:"Help Desk"});
}
function onOpen() {
var subMenus = [{name:"Send Status Email", functionName: "emailStatusUpdates"},
{name:"Schedule Appointment", functionName: "scheduleAppointment"},
{name:"Push to KB", functionName: "pushToKb"}];
SpreadsheetApp.getActiveSpreadsheet().addMenu("Help Desk Menu", subMenus);
}
Ответ №1:
Похоже, что вы используете триггер редактирования для отправки и электронной почты, который работает нормально, когда вам нужно отредактировать только одну ячейку, но когда вам нужно отредактировать две или более, электронное письмо должно отправляться до тех пор, пока вы не закончите редактировать все связанные ячейки.
Один из способов добиться желаемого поведения — добавить одно или несколько условий для отправки электронного письма.
Один из способов реализовать вышесказанное — добавить вспомогательный столбец, чтобы указать, следует ли отправлять электронное письмо немедленно или нет. Как насчет вызова этого «Hold» и добавления флажка?
Это всего лишь краткий пример того, как реализовать вышеуказанное в качестве установки при редактировании триггера
/**
* Columns C,D,E are notes, status and resolution respectively
* Column F is Hold
*/
function sendUpdate(e){
if(e.range.columnStart > 2 amp;amp; e.range.columnStart < 6 || e.range.columnStart === 6){
var hold = e.range.getSheet().getRange(e.range.rowStart, 6).getValue();
if( hold !== 'TRUE'){
// Call here your send email function
} else {
// Ask if the email should be sent now
}
}
}