Как связать живые триггеры для формы, созданной кодом электронной таблицы? - PullRequest
0 голосов
/ 01 ноября 2018

Я пытаюсь создать электронную таблицу, которая в реальном времени импортирует данные с сайта, и каждый раз, когда происходит "торговля", она отправляет форму Google нескольким людям, чтобы они могли проголосовать за сделку.

Чтобы убедиться, что все получают только один голос, я настроил его на создание уникальных идентификаторов, и он будет сравнивать их с тем, что было отправлено.

Однако я хочу иметь возможность анализировать ответы формы каждый раз, когда они отправляются, и:

  • Проверьте, был ли уже отправлен ответ с этим уникальным идентификатором - если это так, удалите ответ.
  • Проверьте, приходит ли ответ после того, как прошло окно торгового голосования (24 часа) - если это так, удалите ответ и закройте форму.
  • Проверьте, было ли подано не менее 6 голосов на вето - если это так, закройте форму.

Моя проблема в том, что когда я запускаю этот код, не похоже, что onFormSubmit (e) когда-либо запускается. У меня есть код, сохраненный как «forms.gs» для моего проекта. Мусор внизу моего сценария просто для того, чтобы попытаться увидеть что-то, если onFormSubmit запущен. Есть ли что-то, что я делаю неправильно, вызывая триггер? Кроме того, есть ли более конкретный способ вызова этого триггера (в случае, если я хочу включить в электронную таблицу другие триггеры, такие как time или onedit)? Спасибо!

Вот мой код:

function updatecomparelist() {
  var spreadsheet = SpreadsheetApp.getActive();
  var questionsheet = spreadsheet.getSheetByName("Question list");
  var newtradesheet = spreadsheet.getSheetByName("Trades Cut");
  var newnameandtime = newtradesheet.getRange('D1');
  var isjustaveto = newtradesheet.getRange('C1');
  var comparesheet = spreadsheet.getSheetByName("Compare");
  var oldnameandtime = comparesheet.getRange('D1');
  if (newnameandtime.getValue() != oldnameandtime.getValue() && isjustaveto.getValue() != "Vetoed Trade to"){
    comparesheet.getRange('1:1').activate();
    comparesheet.insertRowsBefore(comparesheet.getActiveRange().getRow(), 2);
    newtradesheet.getRange('A1:D2').copyTo(comparesheet.getRange('A1:D2'), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
    var tradeTime = new Date(newtradesheet.getRange('P1').getValue());
    var theTrade = questionsheet.getRange('B2').getValue();
    createNewForm(spreadsheet,theTrade,tradeTime);
  }
};


function createNewForm(spreadsheet,theTrade,tradeTime) {
  var now = new Date();
  var emailList = spreadsheet.getSheetByName("Email List").getRange('A1:A2');
  var emailListCut = spreadsheet.getSheetByName("Email List").getRange('B1:B2');
  var emailListCutValues = emailListCut.getValues();
  var uniqueIDList = [];
  var expression = "";
  for (var i = 0; i<3; i++){
    var randnumber = Math.floor((Math.random() * 99998) + 1);
    uniqueIDList[i] = emailListCutValues[i] + randnumber;
    spreadsheet.getSheetByName("Email List").getRange('C'+i+1).setValue(uniqueIDList[i]);
    var expression = expression + uniqueIDList[i] + "|";
    spreadsheet.getSheetByName("Email List").getRange('C'+i+2).setValue(expression);
  }
  var form = FormApp.create('Trade Veto Survey');
  form.setDestination(FormApp.DestinationType.SPREADSHEET, spreadsheet.getId());
  form.setDescription(theTrade);
  var question = form.addMultipleChoiceItem();
  question.setTitle('How do you vote?')
      .setChoices([
          question.createChoice('Accept'),
          question.createChoice('Veto')
       ]);
  question.setRequired(true);
  var item = form.addTextItem();
  item.setTitle("Unique user ID (DO NOT CHANGE):");
  item.setRequired(true);
  var textValidation = FormApp.createTextValidation()
    .setHelpText('Your user ID is incorrect.')
    .requireTextMatchesPattern(expression)
    .build();
  item.setValidation(textValidation);
  form.setAllowResponseEdits(true);
  form.setPublishingSummary(true);
  ScriptApp.newTrigger('onFormSubmit')
    .forSpreadsheet(spreadsheet)
    .onFormSubmit()
    .create();
}

function onFormSubmit(e) {
  var formResponses = {vote: e.namedValues['How do you vote?'], names: e.namedValues['Unique user ID (DO NOT CHANGE):']};
  var sheetActive = SpreadsheetApp.openById("1995364161");
  var sheet = sheetActive.getSheetByName("Email List");
  var dateSheet = SpreadsheetApp.openByID('1928596830');
  var tradeTime = new Date(dateSheet.getRange('P1').getValue());
  dateSheet.getRange('Z1').setValue(tradeTime);
  var now = new Date();
  var form = FormApp.activeForm();
  if (now.valueOf() > tradeTime.valueOf()){
    form.setAcceptingResponses(false);
    form.setCustomClosedFormMessage("Sorry, the 24 hour veto window has passed.");
  }
  sheet.getRange('F1').setValue(formResponses);
  Logger.log(formResponses);
  var formResponses2 = form.getResponses();
  for (var i = 0; i < formResponses.length; i++) {
    var formResponse = formResponses[i];
    var itemResponses = formResponse.getItemResponses();
    for (var j = 0; j < itemResponses.length; j++) {
      var itemResponse = itemResponses[j];
      sheet.getRange('D'+j).setValue(itemResponse[j]);
      sheet.getRange('E'+i).setValue(formResponse[i]);
      Logger.log('Response #%s to the question "%s" was "%s"',
        (i + 1).toString(),
        itemResponse.getItem().getTitle(),
        itemResponse.getResponse());
  }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...