Triggers forOpportunity o:oppsToUpdate{ Id contactId=oppToContactMap.geto.Id; Contact c=contacts.getcontactId; ifc!=null{ o、 铅源=c.铅源; } } 更新oppsToUpdate; } }

Triggers forOpportunity o:oppsToUpdate{ Id contactId=oppToContactMap.geto.Id; Contact c=contacts.getcontactId; ifc!=null{ o、 铅源=c.铅源; } } 更新oppsToUpdate; } },triggers,salesforce,apex-code,soql,Triggers,Salesforce,Apex Code,Soql,这里很有趣,因为这个更新会触发我们以前的机会触发。如果填写了leadSource,您留下了我的跳过,这应该没问题,但您可能仍想探索两件事: 使用一些,称之为skipTriggerOnOpps。您将在OpportunityContactRoles上的触发器中设置此标志,并将Opportunity触发器的整个代码包装在其中,这样,如果我们已经处理了lead source sync,它将不会执行。 从理论上讲,你可以在不改变任何东西的情况下抓住机会,将旧的触发因素视为一种好处,而不是不必要的副作用。对

这里很有趣,因为这个更新会触发我们以前的机会触发。如果填写了leadSource,您留下了我的跳过,这应该没问题,但您可能仍想探索两件事:

使用一些,称之为skipTriggerOnOpps。您将在OpportunityContactRoles上的触发器中设置此标志,并将Opportunity触发器的整个代码包装在其中,这样,如果我们已经处理了lead source sync,它将不会执行。 从理论上讲,你可以在不改变任何东西的情况下抓住机会,将旧的触发因素视为一种好处,而不是不必要的副作用。对我来说,它看起来有点太神奇了,但如果它对这里发生的事情进行了很好的注释,它可能会导致更少的代码、更少的逻辑复制、更少的单元测试。。。只要在触发器之后,它就可以工作,因此我们刚刚修改的联系人角色查询将看到新的值。一定是这样的

插入后,更新后,在Opportunity ContactRole上触发ContactRoleRollup{ Set oppIds=新集合; forOpportunityContactRole ocr:trigger.new{ ifocr.isPrimary{ oppIds.addocr.OpportunityId; } } 如果!oppIds.isEmpty{ 更新[从商机中选择Id,其中LeadSource=null,Id位于:oppIds]; //就是这样。直接在返回的列表上调用update,而不做任何更改,让另一个触发器担心逻辑 } }
眼霜的机会触发器是最有帮助的,它为我解决了一个问题。然而,值得指出的是,不幸的是,SFDC尚未支持他所假设的机会主义ContactRole触发器。正如这一想法所指出的,OCR上的触发器在此时是不可能的。

因此,这是非常有意义的。关于你的3,当联系人角色被修改时,这会允许触发吗?雇佣我:P别开玩笑了,这是一个相当常见的问题,我很高兴我能帮上忙。触发器很棘手,跨对象工作流仍然非常有限,有大量的示例代码不是批量的,一旦尝试数据迁移就会失败。。。我真的希望它在第一次使用时不会出现打字错误之类的问题,它是在文本编辑器中编写的,而不是从一些旧功能中刮取的;
trigger UpdateContactLeadSource on Opportunity (after insert, after update) {

//Declare the Lead Source Variable which will hold the contact's lead source
string leadsource;

// See if there is a primary contact listed on the Opportunity
for (Opportunity o : Trigger.new) {
OpportunityContactRole[] contactRoleArray =
   [select ContactID, isPrimary from OpportunityContactRole where OpportunityId = :o.id ORDER BY isPrimary DESC, createdDate];

    // If the there is a primary contact, then...
    if (contactRoleArray.size() > 0) {

    // Lookup ContactID on the Contacts table to find the lead source
    for (Contact contact : [SELECT LeadSource FROM Contact WHERE Contact.Id = :OpportunityContactRole.ContactId LIMIT 1]) 

    // Store the actual lead source in the leadsource variable
    { Contact.LeadSource = leadsource;}
    update Opportunity.LeadSource = leadsource; }
}
}