Salesforce 批处理和设计?
我需要一个设计问题和批处理Apex中发生的事情的帮助 这就是我们的情况: 我们有一个territory对象,当您更新单个字段时,需要更新多达数百个联系人的字段。为此,我使用Batch Apex。并在领土记录更新之前调用它 问题:Salesforce 批处理和设计?,salesforce,apex-code,Salesforce,Apex Code,我需要一个设计问题和批处理Apex中发生的事情的帮助 这就是我们的情况: 我们有一个territory对象,当您更新单个字段时,需要更新多达数百个联系人的字段。为此,我使用Batch Apex。并在领土记录更新之前调用它 问题: 假设用户将区域从A更新为B,然后单击保存。这会导致大量联系人更新,需要一段时间,然后,他将B更改为C。我们是否保证所有受影响记录的最终更新为C?为什么 或者,有没有办法安排批处理作业?我正在研究asyncApexJob并将其用作框架 有更好的设计吗 Batch Apex
首先,您需要将逻辑放在Territory对象的AFTER UPDATE触发器中,而不是放在BEFORE UPDATE部分。作为一般规则,如果您需要更新触发操作所针对的记录/对象(即您案例中的Territory对象)上的字段或值,那么您可以使用更新前或插入前部分,如果您想要创建/更新/删除其他记录/对象(即您案例中的联系人)使用“更新后”或“插入后”部分 其次,我认为从触发器启动批处理apex过程没有任何错误 例如,假设您有一个名为“BatchUpdateContactsBasedOnTerritory”的批处理类,该类有三(3)个关键特性:
global list<Territory> TerritoryList;
global BatchUpdateContactsBasedOnTerritory(list<Territory> updatedTerritories){
TerritoryList = updatedTerritories;
}
trigger TerritoryTrigger on Territory (after delete, after insert, after undelete, after update, before delete, before insert, before update)
{
if(trigger.isInsert)
{
if(Trigger.isBefore){
// before insert event not implemented
}
else if(Trigger.isAfter){
// after insert event not implemented
}
}else if(trigger.isUpdate){
if(Trigger.isBefore){
// before update event not implemented
}
else if(Trigger.isAfter){
// after update event - call batch class to process 1000 records at a time
Database.ExecuteBatch(new BatchUpdateContactsBasedOnTerritory(trigger.new),1000);
}
}else if(trigger.isDelete){
if(Trigger.isBefore){
// before delete event not implemented
}
else if(Trigger.isAfter){
// after delete event not implemented
}
}
else if(Trigger.isUnDelete){
// undelete event not implemented
}
}
嘿,马特-作为对1的回应,这就是我如何调用我的批次。。。你为什么要避免这种情况?作为对2&3的回应,我现在正在研究调度程序。这是我的设计:@Matt-F/U这里有问题:如果您要从Territory对象上的触发器执行批处理,则可能会同时运行两个批处理以获取Territory记录。我认为这在你的情况下是不可取的,因为结果(对于联系人)是不可预测的。