Apex触发器从自定义对象更新联系人

时间:2012-08-16 14:42:41

标签: triggers salesforce apex-code

长话短说,我需要更新标准联系人中的自定义字段,该字段会在更新其他不相关的自定义对象后触发。我试图编写一个触发器,将字段值从我的自定义对象传递给联系人,但我不断收到各种错误 - 最近的错误让我感到难过。最终目标是从Passing__c更新Passing_Field__c

我在unexpected Token: "("行收到for(Contact C:错误。它实际上非常简单,我无法弄明白。

以下是我的代码。我已经简化了命名约定,试图让它更具有相关性。任何帮助表示赞赏。我是Apex和Triggers的新手,现在我已经在这里工作了几个小时,希望有些建议可以把我送到'本垒板'。

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是一个复选框。 Passing__c和Passing_Field__c都是文本框。

1 个答案:

答案 0 :(得分: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))