我正在尝试根据其值删除自定义字段,但它在测试中死亡。目前的代码:
function testDelete2() {
var contacts = ContactsApp.findContactGroup('test').getContacts();
for (var i in contacts) {
var checkfield = contacts[i].getUserDefinedField('testlabel')
if (checkfield == 'testvalue') {
var customFields = contacts[i].getCustomFields();
customFields.deleteCustomField('testlabel');
}
}
}
我收到此错误:TypeError:无法在对象CustomField中找到函数deleteCustomField。
不知道这意味着什么。请帮忙。我一遍又一遍地阅读这个页面并没有帮助:https://developers.google.com/apps-script/service_contacts
我甚至试过这种不起作用的变种:
customFields.getLabel('testlabel').deleteCustomField();
此外,是否有任何简单的文档与样本如何处理谷歌联系人自定义字段?添加,删除,只是获取值似乎都是不可能的。我很欣赏这个问题的帮助,但也不介意在某个地方找一个简单的样本来查看。
使用Serge的优秀代码作为灵感,想出了这个删除代码(将添加删除/添加的完整代码):
更新:简化过程(不知道为什么不开始尝试这个,也许我做了但是编码错了,无论如何)通过取出删除/添加自定义字段并只更新该自定义字段的值
function testUpdateDues() {
var duescos = ContactsApp.findContactGroup('z8 - Assoc').getContacts();
for (var i in duescos) {
var customFields = duescos[i].getCustomFields();
for (var n in customFields) {
if (customFields[n].getLabel() == 'Dues Amount' && customFields[n].getValue() == 'unstated'){
customFields[n].setValue('$ 500');
}
}
}
}
最终修改允许我根据Google联系人群组分配(感谢Serge的帮助!!)添加/编辑任何自定义字段,并在脚本中添加基于时间的触发器:
function UpdateRegion1() {
UpdateCustomField('Reg 1 - Pan', 'Region' , 'Region 1 - Panhandle');
}
function UpdateCustomField(group, customlabel, customvalue) {
var contacts = ContactsApp.findContactGroup(group).getContacts();
for (var i in contacts) {
var fields = new Array();
var customFields = contacts[i].getCustomFields();
for(var n in customFields) {
fields.push(customFields[n].getLabel());
}
if (fields.indexOf(customlabel)==-1){
contacts[i].addCustomField(customlabel, customvalue);
}
for(var j in customFields) {
if (customFields[j].getLabel() == customlabel && customFields[j].getValue() != customvalue){
customFields[j].setValue(customvalue);
}
}
}
}
答案 0 :(得分:0)
以下是它的工作原理,请参阅代码中的注释
function testDelete2() {
var contacts = ContactsApp.findContactGroup('test').getContacts();
for (var i in contacts) {
var customFields = contacts[i].getCustomFields();// returns an array of custom fields
for(var n in customFields) { // iterate the custom fields
Logger.log(customFields[n].getLabel()+' = '+customFields[n].getValue()) // EDIT : just changed this line to show the label AND the value
if(customFields[n].getLabel() == 'testlabel'){ // compare the label with your criteria
customFields[n].deleteCustomField();// if true then delete
}
}
}
}
我希望这也能(在某种程度上)回答你的第二个请求......正如你所看到的,正是以正确的方式使用这些功能。我建议您使用记录器来帮助您。它允许查看返回的变量类型......(就在你和我之间,我就是这样'调试'你的代码......但是请保密! - )
我在你的个人资料中看到你是“使用谷歌应用程序脚本,因为我必须”但我确信(我希望)你最终会喜欢它。
编辑2: 用于在不存在时添加自定义字段的脚本
function addCustomField() {
var contacts = ContactsApp.findContactGroup('Insas').getContacts();
for (var i in contacts) {
var fields = new Array()
var customFields = contacts[i].getCustomFields()
for(var n in customFields) {
fields.push(customFields[n].getLabel())
}
Logger.log(fields)
if(fields.indexOf('insas')==-1){
contacts[i].addCustomField('insas','oui')
}
}
}