0

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

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

1 回答 1

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

我希望这也(以某种方式)回答您的第二个请求......正如您所看到的,这一切都是关于以正确的方式使用这些功能。我建议您使用记录器来帮助您。它允许查看返回的变量类型......(就在你我之间,这就是我“调试”你的代码的方式......但请保密;-)

我在您的个人资料中看到您“使用 google 应用程序脚本,因为我必须这样做”,但我确信(我希望)您最终会喜欢它。

编辑 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')
      }
    }
  }
于 2012-11-01T23:44:21.923 回答