2012-08-16 53 views
0

長話短說,我需要在我的標準跟更新自定義字段,一個不同的,不相關的自定義對象後,大火被更新聯繫。我試着寫,從我的自定義對象的聯繫通過字段值觸發,但我不斷收到各種錯誤 - 其中最近已經難倒我。最終目標是從Passing_Field__c更新Passing__c頂點觸發更新來自定義對象

我就for(Contact C:線得到一個unexpected Token: "("錯誤。這實際上很簡單,我無法弄清楚。

這是我的代碼如下。我簡化了命名約定,試圖讓它更加可靠。任何幫助表示讚賞。我很新的頂點和觸發器,和我已經在這了幾個小時了,希望一些建議可以送我去「本壘板」。

trigger ContactUpdater on Custom_Object_Name__c (after update) { 

    List<Contact> updatedContacts = new List<Contact>(); 
    Set<Id> ObjectIds = new Set<Id>(); 
    Set<String> ObjectCont = new Set<String>(); 
    Set<Boolean> ObjectActive = new Set<Boolean>(); 
    Set<String> ObjectPass = new Set<String>(); 

    for(Custom_Object_Name__c p : trigger.new) 
     { 
      If(p.Active__c == true){ 
       ObjectIds.add(p.Id); 
       ObjectCont.add(p.Contact__c); 
       ObjectActive.add(p.Active__c); 
       ObjectPass.add(p.Passing_Field__c); 
       } 

     try{ for(Contact c : [SELECT Id, Passing__c FROM Contact WHERE (AccountId IN (Select Account__c from Custom_Object_Name__c)) AND ObjectActive = true]) 
       { 
       set(c.Passing__c = p.Passing_Field__c); 
       c.FieldToUpdate = c.Passing__c; 
       updatedContacts.add(c); 
       } 
      update updatedContacts; 

      } 

      catch(exception e){ 
       throw e; 
       } 
     } 
} 

注意:Active__c是一個複選框。傳遞___c和傳遞_場___c都是文本框。

回答

2

我認爲這個問題是您的SOQL查詢的WHERE子句中:

WHERE (AccountId = (Select Account__c from Custom_Object_Name__c)) 

Salesforce的期待您比較AccountId某種的ID,而不是某些子查詢的結果。你可能想嘗試類似於:

WHERE (AccountId in (Select Account__c from Custom_Object_Name__c)) 
+0

我已更新上面的代碼以反映我當前的版本。 'IN'運算符代替'='修正了這個錯誤,但似乎我有一個更基本的錯誤。它不承認'p.Passing_Field__c」作爲一個變量,這使我相信我沒有正確地引用Custom_Object_Name__c。聯繫人'選擇'從我可以告訴的是確定的,但如果自定義對象沒有正確調用,則全部爲無。有任何想法嗎?我會嘗試重新設定它的設置。 – CDD 2012-08-16 16:49:05

+1

語法縮進是通過我一點,但你的p變量只在for循環的上下文中有效。在for循環之外,p變量不在範圍內,所以這可能是你得到錯誤的原因。 – 2012-08-16 17:02:05

+0

有趣。我改變了括號{},以包含TRY在'for(Custom_Object_Name__c p:trigger.new)'中。不過,我已經將ObjectPass聲明爲一個字符串,並且已將'Passing_Field__c'添加到字符串中。當我開始設置(c.Passing__c = p.Passing_Field__c);'時,我得到了「從SET 到字符串的非法分配」。看起來好像你不能用字段值覆蓋字符串的值,就像我試圖做的那樣。有沒有更好的方法將'Passing_Field__c'帶入觸發器,而不使用字符串? – CDD 2012-08-16 17:25:10