Получение сценария для запуска при отправке только определенной формы - Google Script / Sheets / Forms

Я чувствую, что это должно быть так просто и очевидно, но я не могу понять это...

Я работаю с 2 формами и 2 электронными таблицами. Форма 1 отправляется на лист 1. На листе 1 для каждой записи имеется ссылка, которая переводит пользователя в форму 2, наполовину предварительно заполненную данными из листа 1. Когда пользователь отправляет форму 2, он заполняет лист 2.,

У меня есть пара сценариев, которые должны быть запущены при отправке формы 1. Я использую триггер "Из электронной таблицы" "OnFormSubmit". Однако сценарии также запускаются при отправке формы 2.

Как сделать так, чтобы сценарии выполнялись только при отправке формы 1? Кроме того, есть ли способ обеспечить запуск сценариев в определенном порядке?

Если это поможет, сценарии ниже. Все они работают правильно, как есть, за исключением проблемы запуска. Я знаю, что могу объединить 2-й и 3-й сценарии, и я это сделаю, но я бы хотел сначала решить эту проблему, так как я получаю двойные письма при каждом тестировании.

1-й сценарий:

function onFormSubmit(e) {

  //Uses time in milleseconds to create unique ID #
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("ComplaintLog");
  var d = new Date();
  var n = d.getTime();
  var lastRow = sheet.getLastRow();
  var cell = sheet.getRange("BA" + lastRow);
  cell.setValue(n);
  var cell = sheet.getRange("BB" + lastRow);
  cell.setFormula("=right(BA"+lastRow+",6)");
  sheet.getRange("BB"+lastRow).copyTo(sheet.getRange("BC"+lastRow), + 
    {contentsOnly:true});
}

2-й сценарий:

function formSubmitReply(e) {
//Sends email to certain users when a new complaint has been entered  
  var emailAddresses = 'person@organzation.com';

  MailApp.sendEmail(emailAddresses,
                  "person@organzation.com",
                  "New Guest Complaint",
                  "A new guest complaint has been entered into the database."
                  + "\n\n To vew the database, click here: http://goo.gl/DI33EC");
}

3-й сценарий:

function createResolutionForm() {

  var ss = SpreadsheetApp.getActive()
  var sheet = ss.getSheetByName("ComplaintLog")
  var lastRow = sheet.getLastRow();
  var data = ss.getSheetByName("ComplaintLog") +
    .getRange("A"+lastRow+":Z"+lastRow).getValues();
  var form = FormApp.openById('The form's ID goes here.  that part works.');
  var items = form.getItems();

  for (var i = 0; i < data.length; i++) {
    var formResponse = form.createResponse();

    //ID
    var formItem = items[1].asTextItem();
    var response = formItem.createResponse(data[i][0]);
    formResponse.withItemResponse(response);

    //Guest Name
    var formItem = items[2].asTextItem();
    var response = formItem.createResponse(data[i][3]);
    formResponse.withItemResponse(response);

    //email
    var formItem = items[3].asTextItem();
    var response = formItem.createResponse(data[i][4]);
    formResponse.withItemResponse(response);

    // The pre-populated form is being created here.  I didn't include every 
    // form item for brevity's sake.
  }

    //Create Link
    var formUrl = formResponse.toPrefilledUrl();

    //Enable Clickable ID
    var idNum = sheet.getRange("BC"+lastRow).getValues();

    sheet.getRange("A"+lastRow).setFormula +
       ('=HYPERLINK("' + formUrl + '","' + idNum + '")');

    var sheetUrl = "The URL to the spreadsheet goes here - that part works.";


    //Send Email to assigned managers
    var j,tempname=[],name, subject, managername, message;

    managername = sheet.getRange("P"+lastRow).getValue();
    tempname=managername.split(" ");

    Logger.log(managername)

    if (tempname.length==2) {
        name=tempname[0].slice(0,1) + tempname[1] + '@organization.com';
        subject = 'Action Required';
        var message = "<html><body>"
        + "<p> You have been assigned to follow-up on a complaint,"
        + "or your contact information has been given to a customer in"
        + "regards to a complaint."
        + "<p><p>The complaint ID number is " + idNum +"."
        + "<p>To go directly to this complaint," 
        + "<a href="+formUrl+"><b>click here</b></a>."
        + "<p>To vew the database so that you can take action," 
        +<a href="+sheetUrl+">click here</a>."
        + "</body></html>";


      MailApp.sendEmail(name, subject,"",{htmlBody : message});
      }
    }

1 ответ

Решение

Настройка триггеров из скрипта может быть тем, что вы ищете. Вы можете создавать триггеры, которые отвечают на события отправки формы для каждой формы, например так:

function setup () {
  ScriptApp.newTrigger('onForm1ResponseHandler').forForm(form1).onFormSubmit().create();
  ScriptApp.newTrigger('onForm2ResponseHandler').forForm(form2).onFormSubmit().create();
}

где form1 и form2 являются объектами Form, а 'onForm1ResponseHandler' является именем функции-обработчика.

С функцией обработчика, настроенной так:

function onForm1ResponseHandler (e) {
  ...
}

e будет объектом со свойствами, задокументированными здесь (для события отправки формы).

Другие вопросы по тегам