2012-11-01 26 views
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(); 

此外,有沒有與任何樣品簡單文檔的任何地方如何處理谷歌聯繫人自定義字段?添加,刪除,只是獲得價值似乎都不可能。我很欣賞這個問題的幫助,但也不介意在簡單的示例中查找指南。

使用嗶嘰的偉大代碼爲靈感想出了這個代碼刪除(將添加完整的代碼與刪除/添加很快):

UPDATE:簡化的過程(不知道爲什麼沒有在嘗試了這一點開始,也許我沒有,但被編碼錯誤的,反正)採取了刪除/添加自定義字段,只是更新該自定義字段的值

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

最後編輯允許我添加/編輯任何自定義字段根據谷歌聯絡小組的分配(感謝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

你爲什麼要加上'使用Utilities.sleep(4000)'添加自定義字段?你沒有嘗試過嗎? –

+0

是的,當一個聯繫人被編輯爲「太快」時,我得到了etag錯誤 - 因爲一個字段被刪除,然後另一個添加在一個聯繫人中,我添加它允許刪除「採取」。我編輯單個聯繫人連續動作的每個腳本都向我發送了etag錯誤,如果我沒有包含4秒的延遲 - 討厭這樣做,因爲它會減慢它的速度,但我已經搜索並搜索,似乎是隻有有效的解決方案 – user1783229

+0

fyi - 我會爲您的答案投一個加號,但系統仍然不會允許我,因爲我是新的 – user1783229

回答

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') 
     } 
    } 
    } 
+0

謝謝 - 我正在接近您的方向,但您讓我靠得更快!事情是,我試圖測試的價值不是標籤 - 這個代碼(我會在此期間嘗試)基本上工作,如果我用getValue getLabel交換? - 如果我提供了標籤,那麼getUserDefinedField很容易給出該值,這就是爲什麼我通過將它與'testvalue'進行比較來讓它在頂部滾動的原因。 – user1783229

+0

是的,我發現了logger.logs - 非常有用的thx。基本上我試圖測試自定義字段標籤的值,如果測試成功,則刪除整個字段。我非常喜歡使用不推薦使用的getUserDefinedField來獲取最高值。 :-)是的,有時候我想在Google上踢球,但如果我可以定製它,那麼我會爲我的目的感到高興。基本報告和我發現我可以用GAS做的事情。 – user1783229

+0

你確實可以用'getValue()'來切換'getLabel()'語句,並對其進行比較......對於我的代碼中的錯誤抱歉,我不確定你需要什麼:-)我更新了代碼 –

相關問題