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

また、Googleコンタクトのカスタムフィールドを処理する方法のサンプルを含む簡単なドキュメントはありますか?追加、削除、値の取得だけでは不可能に思えます。この質問の助けに感謝しますが、簡単なサンプルを見てどこかにガイドを見つけてもかまいません。

インスピレーションとして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
      }
    }
  }
}

これが (ある意味で) 2 番目の要求にも答えてくれることを願っています... ご覧のとおり、これらの関数を正しい方法で使用することがすべてです。ロガーを使用して役立つことをお勧めします。返される変数のタイプを確認できます...(あなたと私の間の話ですが、それが私があなたのコードを「デバッグ」した方法です....しかし、これは秘密にしておいてください;-)

あなたのプロフィールを見ると、「Google Apps スクリプトを使用しなければならないので」と書かれていますが、最終的には気に入っていただけると思います。

編集 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 に答える