2014-01-20 2 views
0

Edit:Google формирует onFormSubmit (при редактировании) вызывает дубликатами

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

[14-01-21 13:39:03:306 EST] Starting execution 
[14-01-21 13:39:03:311 EST] FormResponse.getItemResponses() [0.001 seconds] 
[14-01-21 13:39:03:311 EST] (class).getResponse() [0 seconds] 
[14-01-21 13:39:03:312 EST] (class).getResponse() [0 seconds] 
[14-01-21 13:39:03:312 EST] (class).getResponse() [0 seconds] 
[14-01-21 13:39:03:312 EST] (class).getResponse() [0 seconds] 
[14-01-21 13:39:03:312 EST] (class).getResponse() [0 seconds] 
[14-01-21 13:39:03:312 EST] (class).getResponse() [0 seconds] 
[14-01-21 13:39:03:312 EST] (class).getResponse() [0 seconds] 
[14-01-21 13:39:03:312 EST] (class).getResponse() [0 seconds] 
[14-01-21 13:39:03:456 EST] ContactsApp.getContactGroup([System Group: My Contacts]) [0.143 seconds] 
[14-01-21 13:39:04:634 EST] ContactGroup.getContacts() [1.178 seconds] 
[14-01-21 13:39:04:637 EST] Contact.getEmails([WORK_EMAIL]) [0 seconds] 
[14-01-21 13:39:04:637 EST] EmailField.toString() [0 seconds] 
[14-01-21 13:39:04:718 EST] ContactsApp.createContact([JOTTER, BOT, [email protected]]) [0.08 seconds] 
[14-01-21 13:39:04:719 EST] Contact.getEmails([HOME_EMAIL]) [0 seconds] 
[14-01-21 13:39:04:802 EST] EmailField.setLabel([WORK_EMAIL]) [0.082 seconds] 
[14-01-21 13:39:04:877 EST] EmailField.setAsPrimary() [0.074 seconds] 
[14-01-21 13:39:04:959 EST] Contact.addPhone([MOBILE_PHONE, 12345]) [0.081 seconds] 
[14-01-21 13:39:05:168 EST] Contact.addPhone([WORK_PHONE, 67890]) [0.209 seconds] 
[14-01-21 13:39:05:252 EST] Contact.addCompany([CompanyInc, BadCoderYep]) [0.083 seconds] 
[14-01-21 13:39:05:386 EST] Contact.addAddress([WORK_ADDRESS, 123 Company Place, Suburb, State]) [0.133 seconds] 
[14-01-21 13:39:05:625 EST] Contact.addToGroup([ContactGroup]) [0.237 seconds] 
[14-01-21 13:39:05:625 EST] Contact.toString() [0 seconds] 
[14-01-21 13:39:05:625 EST] ContactGroup.addContact([Contact]) [0.237 seconds] 
[14-01-21 13:39:05:625 EST] Contact.getEmails([WORK_EMAIL]) [0 seconds] 
[14-01-21 13:39:05:625 EST] EmailField.toString() [0 seconds] 
[14-01-21 13:39:05:696 EST] ContactsApp.createContact([JOTTER, BOT, [email protected]]) [0.069 seconds] 
[14-01-21 13:39:05:696 EST] Contact.getEmails([HOME_EMAIL]) [0 seconds] 
[14-01-21 13:39:05:766 EST] EmailField.setLabel([WORK_EMAIL]) [0.069 seconds] 
[14-01-21 13:39:05:823 EST] EmailField.setAsPrimary() [0.056 seconds] 
[14-01-21 13:39:05:986 EST] Contact.addPhone([MOBILE_PHONE, 12345]) [0.162 seconds] 
[14-01-21 13:39:06:062 EST] Contact.addPhone([WORK_PHONE, 67890]) [0.075 seconds] 
[14-01-21 13:39:06:145 EST] Contact.addCompany([CompanyInc, BadCoderYep]) [0.082 seconds] 
[14-01-21 13:39:06:236 EST] Contact.addAddress([WORK_ADDRESS, 123 Company Place, Suburb, State]) [0.091 seconds] 
[14-01-21 13:39:06:389 EST] Contact.addToGroup([ContactGroup]) [0.152 seconds] 
[14-01-21 13:39:06:389 EST] Contact.toString() [0 seconds] 
[14-01-21 13:39:06:389 EST] ContactGroup.addContact([Contact]) [0.152 seconds] 
[14-01-21 13:39:06:390 EST] Execution succeeded [3.079 seconds total runtime] 

Является ли это проблема рекурсии или что-то?

У меня есть форма, которая добавляет контакт непосредственно в мои контакты Gmail - принимая значения из формы.

При первом отправке оно отлично работает, но когда я снова редактирую форму, я получаю 2 x новый контакт с отредактированными деталями и старый контакт остается. При запуске снова добавляется 4 x контакта, затем 8 x контакт и т. Д.

Кажется, глупая ошибка. Что мне здесь не хватает?

function onFormSubmit(e) { 

var formResponses = e.response.getItemResponses(); 

    var firstName = formResponses[0].getResponse().toString(); 
    var lastName = formResponses[1].getResponse().toString(); 
    var emailAddress = formResponses[2].getResponse().toString(); 
    var company = formResponses[3].getResponse().toString(); 
    var position = formResponses[4].getResponse().toString(); 
    var mobileNumber = formResponses[5].getResponse().toString(); 
    var workNumber = formResponses[6].getResponse().toString(); 
    var workAddress = formResponses[7].getResponse().toString(); 

    // Get all of our contacts in group "My Contacts". 
    // Later we will check the submitted values against the existing contacts to avoid duplicates. 
    var group = ContactsApp.getContactGroup("System Group: My Contacts"); 
    var myContacts = group.getContacts(); 

    // try finding contact first by email address to avoid duplicates. 
    for (var i = 0; i < myContacts.length; i++) { 

    if(myContacts[i].getEmails(ContactsApp.Field.WORK_EMAIL)[0] == emailAddress) { 

     //contact exists so lets update it's values to latest in form submission 
     //var contact = ContactsApp.getContact(emailAddress).deleteContact(); 

     myContacts[i].deleteContact(); 

     var contact = ContactsApp.createContact(firstName, lastName, emailAddress); 
     contact.getEmails(ContactsApp.Field.HOME_EMAIL)[0].setLabel(ContactsApp.Field.WORK_EMAIL); 
     contact.addPhone(ContactsApp.Field.MOBILE_PHONE, mobileNumber); 
     contact.addPhone(ContactsApp.Field.WORK_PHONE, workNumber); 
     contact.addCompany(company, position); 
     contact.addAddress(ContactsApp.Field.WORK_ADDRESS, workAddress); 

     group.addContact(contact); 

    } else { 

     //contact does not yet exist so we will create it from scratch 
     var contact = ContactsApp.createContact(firstName, lastName, emailAddress); 
     contact.getEmails(ContactsApp.Field.HOME_EMAIL)[0].setLabel(ContactsApp.Field.WORK_EMAIL); 
     contact.addPhone(ContactsApp.Field.MOBILE_PHONE, mobileNumber); 
     contact.addPhone(ContactsApp.Field.WORK_PHONE, workNumber); 
     contact.addCompany(company, position); 
     contact.addAddress(ContactsApp.Field.WORK_ADDRESS, workAddress); 

     // Adding our contact to the "My Contacts" group 
     group.addContact(contact); 

    } 
    } 
} 
+0

Я думаю, что внутри, если цикл, вы должны удалить текущий контакт, который соответствовал условию. myContacts [I] .deleteContact(); –

+0

Спасибо Amit за ответ! Я внес изменения, но он по-прежнему вызывает дубликаты. Я обновляю страницу, чтобы отразить текущий код. – jotterbot

ответ

0

В интересах интернет-справедливости, вот решение.

Я сделал несколько вещей неправильно, но после запроса on the google product forums мне сказали, что сравниваю объект emailAddress со строковым значением, поэтому мой чек всегда будет терпеть неудачу, и новый контакт будет создан независимо. Во всяком случае, метод, в котором я определяю существующий контакт, изменился в конечном коде.

И так вот утонченный код работает в форме (триггер устанавливается для onFormSubmit):

function onFormSubmit(e) { 

    var formResponses = e.response.getItemResponses(); 

    var firstName = formResponses[0].getResponse().toString(); 
    var lastName = formResponses[1].getResponse().toString(); 
    var emailAddress = formResponses[2].getResponse().toString(); 
    var company = formResponses[3].getResponse().toString(); 
    var position = formResponses[4].getResponse().toString(); 
    var mobileNumber = formResponses[5].getResponse().toString(); 
    var workNumber = formResponses[6].getResponse().toString(); 
    var workAddress = formResponses[7].getResponse().toString(); 

    // Get all of our contacts in group "My Contacts". 
    var myContactsGroup = ContactsApp.getContactGroup("System Group: My Contacts"); 

    // Check to see if the email address already exists 
    var existingContact = ContactsApp.getContact(emailAddress); 

    // If the email address doesn't exist, create a new contact and add it to the group 
    if (existingContact == null) 
    { 
    var newContact = ContactsApp.createContact(firstName, lastName, emailAddress); 
    newContact.getEmails(ContactsApp.Field.HOME_EMAIL)[0].setLabel(ContactsApp.Field.WORK_EMAIL).setAsPrimary(); 
    newContact.addPhone(ContactsApp.Field.MOBILE_PHONE, mobileNumber); 
    newContact.addPhone(ContactsApp.Field.WORK_PHONE, workNumber); 
    newContact.addCompany(company, position); 
    newContact.addAddress(ContactsApp.Field.WORK_ADDRESS, workAddress); 

    myContactsGroup.addContact(newContact); 
    } 

    // Otherwise simply update the details of the existing contact 
    else 
    { 
    existingContact.setGivenName(firstName); 
    existingContact.setFamilyName(lastName); 
    existingContact.setFullName(firstName + " " + lastName); 
    existingContact.getPhones(ContactsApp.Field.MOBILE_PHONE)[0].setPhoneNumber(mobileNumber); 
    existingContact.getPhones(ContactsApp.Field.WORK_PHONE)[0].setPhoneNumber(workNumber); 
    existingContact.getCompanies()[0].setCompanyName(company); 
    existingContact.getCompanies()[0].setJobTitle(position); 
    existingContact.getAddresses(ContactsApp.Field.WORK_ADDRESS)[0].setAddress(workAddress);  
    } 
} 
Смежные вопросы