创建带自定义字段的Google联系人时遇错及解决过程
解决Google Apps Script添加自定义联系人字段的TypeError问题
问题背景
我尝试按照文档创建带自定义字段的Google联系人,一开始用了官方示例代码:
var contacts = ContactsApp.getContactsByName('John Doe'); var field = contacts[0].getCustomFields()[0]; field.setLabel('Mail application'); field.setValue('Gmail');
运行时直接抛出错误:TypeError: Cannot read property 'setLabel' of undefined。
我的目标是给新创建的联系人添加名为“ID number”的自定义字段,完整业务代码如下:
var clientaddress = spreadsheet.getRange('L2').getValue(); var clientcontact = ContactsApp.createContact(clientfirstname, clientlastname, clientemail); var contactgroup = spreadsheet.getRange('AL2').getValue(); // AL2为群组名称 var group = ContactsApp.getContactGroup(contactgroup); clientcontact = clientcontact.addToGroup(group); var address = clientcontact.addAddress(ContactsApp.Field.HOME_ADDRESS,clientaddress); var phone = clientcontact.addPhone(ContactsApp.Field.MOBILE_PHONE, clientmobile); var IDnumber = ? // 这里不知道如何添加自定义字段
我先做了几次测试尝试:
- 最初没意识到
getContactsByName返回的是数组,直接调用addCustomField失败:
function quicktest () { var contacts = ContactsApp.getContactsByName('XXXX'); var IDnumber = contacts.addCustomField("IDnumber","12345"); }
- 后来加上索引
[0],且确认联系人无重复,但问题依旧:
function quicktest () { var contacts = ContactsApp.getContactsByName('XXX'); var IDnumber = contacts[0].addCustomField("IDnumber","12345"); }
(附[联系人“更多详情”页面截图])
错误原因分析
- 官方示例代码的前提是该联系人已存在至少一个自定义字段,如果目标联系人没有自定义字段,
getCustomFields()[0]会返回undefined,自然无法调用setLabel方法,这是第一个错误的核心原因。 - 测试代码中,即使加上了
[0],如果getContactsByName未找到匹配的联系人(比如名称拼写错误),contacts[0]也会是undefined,导致addCustomField调用失败。
解决方法与修订代码
最终通过先创建联系人,再通过ID获取实例后添加自定义字段的方式解决了问题,修订后的测试代码如下:
function quicktest () { var contactId = ContactsApp.createContact("test1", "familytest1", "email@email.com").getId(); ContactsApp.getContactById(contactId).addCustomField("IDnumber","12345"); }
也可以直接对createContact返回的Contact对象调用addCustomField,代码更简洁:
function quicktest () { var clientcontact = ContactsApp.createContact("test1", "familytest1", "email@email.com"); clientcontact.addCustomField("IDnumber","12345"); // 后续可继续添加群组、地址等信息 }
对应到你的完整业务代码,只需要在创建联系人后添加一行即可:
var clientaddress = spreadsheet.getRange('L2').getValue(); var clientcontact = ContactsApp.createContact(clientfirstname, clientlastname, clientemail); var contactgroup = spreadsheet.getRange('AL2').getValue(); var group = ContactsApp.getContactGroup(contactgroup); clientcontact.addToGroup(group); var address = clientcontact.addAddress(ContactsApp.Field.HOME_ADDRESS,clientaddress); var phone = clientcontact.addPhone(ContactsApp.Field.MOBILE_PHONE, clientmobile); // 添加自定义字段 var IDnumber = clientcontact.addCustomField("ID number", "你的ID值");
(附[添加自定义字段后的Google Contacts截图])
内容的提问来源于stack exchange,提问作者user13708028
相关产品推荐
相关产品推荐

