修改
以下是编辑现有联系表单的执行记录(我什么也没看到删除任何现有联系人?)。
[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, jotterbot@stackoverflow.com]) [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, jotterbot@stackoverflow.com]) [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个联系人,然后是8个联系人,依此类推。
似乎是一个愚蠢的错误。我在这里缺少什么?
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 :(得分:0)
为了互联网正义,这是解决方案。
我做了一些错误,但在询问on the google product forums后,我被告知我正在将emailAddress对象与字符串值进行比较,因此我的检查总是会失败并且无论如何都会创建新的联系人。无论如何,我确定现有联系人的方法在最终代码中已经改变。
所以这里是在Form中工作的精炼代码(触发器设置为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);
}
}