通过salesforce中的触发器插入潜在客户时更新机会

时间:2011-05-04 16:07:21

标签: salesforce apex-code soql

我想写一个批量触发器(记住管理者限制),这样当插入一个新的潜在客户,其'x'字段值与某些机会的'y'字段值相同时,它会更新字段'z'这个机会。

我是salesforce和apex的新手,所以面临问题。

任何帮助都将不胜感激。

由于

Jitendra

1 个答案:

答案 0 :(得分:1)

您有任何开发经验吗?你要处理多少条记录?如果你有超过10k的机会,那么你很快就会遇到问题!

如果您是开发人员,下面的(未经测试的)代码应该是有意义的,但请记住,您只能执行20次SOQL查询,允许每次调用200条记录的19次更新调用 - 所以这只有在最大值为3800时才有效任何给定Y值的机会。如果你需要更多,那么你将要编写一个使用Batchable接口的类并从触发器中激活它 - 你需要在调用execute之前通过X值列表因此您可以在查询中使用它们(请参阅here for the docs on Batch Apex

trigger LeadAfterInsert on Lead (after insert)
{
    // assuming string for the type of fields X & Y
    set<string> setXValues = new set<string>();
    list<Opportunity> liOpptysToUpdate = new list<Opportunity>();

    for(Lead sLead : trigger.new)
    {
        setXValues.add(sLead.FieldX);
    }

    for(Opportunity [] sOpportunityArr : [select Id, FieldZ, FieldY
                                            from Opportunity
                                            where FieldY in : setXValues
                                            limit 1000])
    {
        for(Opportunity sOpportunity : sOpportunityArr)
        {
            // field logic here, e.g.
            if(sOppty.FieldY != 0)
            {
                sOppty.FieldZ ++;
            }

            liOpptysToUpdate.add(sOppty);

            // can only update 200 records at once so we check the list size here
            if(liOpptysToUpdate.size() == 200)
            {
                update liOpptysToUpdate;
                liOpptysToUpdate.clear();
            }
        }
    }

    // deal with any stragglers
    if(liOpptysToUpdate.size() > 0)
    {
        update liOpptysToUpdate;
    }
}