删除自定义字段google apps脚本

时间:2012-11-01 21:43:37

标签: google-apps-script google-contacts

我正在尝试根据其值删除自定义字段,但它在测试中死亡。目前的代码:

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);
      }
    }
  }
}

1 个答案:

答案 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')
      }
    }
  }