Устанавливаемый триггер случайным образом срабатывает несколько раз при отправке формы - PullRequest
0 голосов
/ 18 февраля 2019

У меня есть форма Google, которая отправляет заполненные данные в Google Sheet.С помощью устанавливаемого триггера (запускается при отправке формы) мне удалось скопировать самую новую строку в новый лист, добавив новую строку с этими данными.Однако иногда триггер случайным образом срабатывает несколько раз и поэтому добавляет 2 или более строк с одинаковыми значениями на другой лист.Я убежден, что проблема заключается в триггере, поскольку я обнаружил свидетельство многократного срабатывания триггера на странице обзора концентратора G Suite Developer.Кто-нибудь еще испытывает те же проблемы или знает, какие обходные пути будут работать?

РЕДАКТИРОВАТЬ : Вот полный код.У меня есть 2 листа, один называется «FormResponse», где входные данные формы копируются автоматически.И второй лист, называемый «Контрольный список», где устанавливаемый триггер срабатывает всякий раз, когда приходит ответ формы. Затем он запускает функцию «insertIntoChecklist ()».У меня есть второй устанавливаемый триггер для "edited ()".Способ еще не реализован.Однако в будущем потребуется вызвать метод, когда пользователь редактирует лист «Контрольный список».

Устанавливаемые триггеры задаются в центре разработчика G Suite:

Triggers

function edited() {
  var sheet = SpreadsheetApp.getActiveSheet();

  switch(sheet.getSheetName()){
    case "Checkliste":
      //checkIfFinished(); --> Method will be implemented later
      break;
    default:
      Logger.log("Unknown Sheet name in onEdit method!");
  }
}

// Method to insert into the Checklist sheet depending on the team
function insertIntoChecklist() {
  // Spreadsheet
  var ss = SpreadsheetApp.getActiveSpreadsheet();

  // FormResponse
  var formResponse = ss.getSheetByName("FormResponse");
  var lastRowFormResponse = formResponse.getLastRow();

  // Values FormResponse
  var prename = formResponse.getRange(lastRowFormResponse, 2.0).getValue();
  var surname = formResponse.getRange(lastRowFormResponse, 3.0).getValue();
  var team = formResponse.getRange(lastRowFormResponse, 4.0).getValue();
  var date = formResponse.getRange(lastRowFormResponse, 5.0).getValue();

  // Checklist
  var checklist = ss.getSheetByName("Checkliste");
  var lastRowChecklist = checklist.getLastRow();
  lastRowChecklist++;
  // Values Checklist
  var googleAccount = checklist.getRange("E" + lastRowChecklist);
  var phone = checklist.getRange("F" + lastRowChecklist);
  var workstation = checklist.getRange("H" + lastRowChecklist);

  // Based on the submitted team create instantiate a method that gets evoked
  switch(team){
    case "Immo":
      createImmo(checklist, prename, surname, team, date, email, googleAccount, phone, workstation);
      break;
    case "IT":
      createIT(checklist, prename, surname, team, date, email, googleAccount, phone, workstation);
      break;
    default:
      checklist.appendRow(["no team detected"]);
  }
}


var hardwareTypes = {
  winPC : "- Windows PC\n",
  iMac:  "- iMac\n",
};

var phoneTypes = {
  hardphone : "- Hardphone\n",
  softphone : "- Softphone\n"
};

function createImmo(checklist, prename, surname, team, date, email, googleAccount, phone, workstation) {
  checklist.appendRow([prename, surname, team, date]);
  addCheckbox(googleAccount);
  addCheckbox(phone);
  addNote(phone, phoneTypes.softphone);
  addCheckbox(workstation);
  addNote(workstation, hardwareTypes.winLap);
}

function createIT(checklist, prename, surname, team, date, email, googleAccount, phone, workstation) {
  checklist.appendRow([prename, surname, team, date]);
  addCheckbox(googleAccount);
  addCheckbox(phone);
  addNote(phone, phoneTypes.hardphone);
  addCheckbox(workstation);
  setNotAvailableCell(checklist);
}

function addCheckbox(checkboxRange) {
  var enforceCheckbox = SpreadsheetApp.newDataValidation();
  enforceCheckbox.requireCheckbox();
  enforceCheckbox.setAllowInvalid(false);
  enforceCheckbox.build();
  checkboxRange.setDataValidation(enforceCheckbox);
}

function addNote(range, note) {
  range.setNote(note);
}

function setNotAvailableCell(checklist) {
  var rowRange = checklist.getRange(checklist.getLastRow(), 1, 1, 
checklist.getLastColumn());
  var values = rowRange.getValues();

  for (var i = 0; i <= 0; i++){
    for (var j = 4; j < values[i].length; j++) {
      var currentValue = rowRange.getCell(i+1,j+1);
      var currentRange = 
checklist.getRange(currentValue.getRow(),currentValue.getColumn());

      if (values[i][j] !== false && values[i][j] !== true) {
        currentRange.setValue("n/a");
        currentRange.setBackground("#A9A9A9");
        currentRange.setHorizontalAlignment("center");
      }
    }
  } 
}
...