Извините ... Еще один вопрос по поводу формы отправки триггера - PullRequest
0 голосов
/ 17 апреля 2020

У меня есть скрипт для преобразования ответов формы в контакты в contactsApp. Когда я запускаю его из редактора сценариев, он работает.

Я хотел бы, чтобы отправка формы, связанной с электронной таблицей, запускала сценарий, поэтому был создан триггер отправки формы, но ut не работает (разумеется).

Не работает ли объяснение триггера, что существует некоторая задержка между отправкой формы и электронной таблицей для получения новых данных? Таким образом, скрипт запускается до того, как у него есть данные для работы.

В любом случае, вот код:

function oneNewContact() {

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var shts = ss.getSheets();
  var lr = shts[0].getLastRow();

  var acol = shts[1].getRange(1, 1, lr-1, 1).getValues();
  var drng = shts[1].getRange(1, 2, lr-1, 6).getValues();

  for(var i = 0; i < lr-1; i++) {

    if(acol[i][0]!==1) {     

    var first = drng[i][0];
    var surname = drng[i][1];
    var phone = drng[i][2];
    var email = drng[i][3];
    var consentDate = drng[i][5];
    var grp = 'qcbread';

    //create contact
      var contact = ContactsApp.createContact(first, surname, email);
      var contactID = contact.getId();

    //add info via bug workaround ie getting the new contact via contactID 
    contact = ContactsApp.getContactById(contactID); 
      console.log(contact.getFullName());
    contact.addPhone('mobile', phone);    
    contact.setNotes('contact consent given to MQC on '+ consentDate);

    //update contact
    var group = ContactsApp.getContactGroup(grp);
    contact = contact.addToGroup(group);

    }// end of if

    //added contact marked as processed
    var acell = i + 1;// add 1 to array counter
    var mark = shts[1].getRange('A'+ acell );
    mark.setValue(1);

  }// end of for loop

}

1 Ответ

1 голос
/ 20 апреля 2020

Чтобы скрипт работал как задумано, вы должны использовать event objects. Таким образом, вы можете получать нужные данные напрямую, а не go через каждую строку листа отправки формы каждый раз, когда отправляется новая отправка формы.

function newContact(e) {

    var sht = e.source.getActiveSheet();
    var row = e.range.getRow();

    var drng = sht.getRange(row, 2, 1, 6).getValues();
    // drng is a single row 2D array

    var first = drng[0][0];
    var surname = drng[0][1];
    var phone = drng[0][2];
    var email = drng[0][3];
    var consentDate = drng[0][5];
    var grp = 'qcbread';

    //create contact
    var contact = ContactsApp.createContact(first, surname, email);
    var contactID = contact.getId();

    //add info via bug workaround ie getting the new contact via contactID 
    contact = ContactsApp.getContactById(contactID);
    contact.addPhone('mobile', phone);
    contact.setNotes('contact consent given to MQC on ' + consentDate);

    //update contact
    var group = ContactsApp.getContactGroup(grp);
    contact = contact.addToGroup(group);

    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sht2 = ss.getSheets()[1];
    sht2.getRange(row - 1, 1).setValue(1);

}

Ссылка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...