我想编写一个批量触发器(牢记管理者限制),这样当插入一个新的潜在客户时,它的“x”字段值与某个机会的“y”字段值相同,它会更新这个机会的字段“z”。
我是salesforce和apex的新手,所以面临问题。
任何帮助,将不胜感激。
谢谢
日滕德拉
我想编写一个批量触发器(牢记管理者限制),这样当插入一个新的潜在客户时,它的“x”字段值与某个机会的“y”字段值相同,它会更新这个机会的字段“z”。
我是salesforce和apex的新手,所以面临问题。
任何帮助,将不胜感激。
谢谢
日滕德拉
你有开发经验吗?你要处理多少条记录?如果您有超过 10k 的机会,那么您很快就会遇到问题!
如果您是开发人员,下面的(未经测试的)代码应该是有意义的,但请记住,您只能执行 20 次 SOQL 查询,允许 19 次更新调用,每次调用 200 条记录 - 所以这只有在您拥有最多 3800 个机会的情况下才有效给定 Y 值。如果您需要更多,那么您需要编写一个使用 Batchable 接口的类并从触发器中触发它——您需要在调用执行之前传递 X 值列表,这样您就可以在查询中使用它们(有关 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;
}
}