顶点 CPU 限制.在顶点类中使用映射而不是列表



我创建了一个流,根据某些要求找到帐户列表。然后,流将此帐户列表和新帐户所有者 (id( 传递给顶点类。然后,apex 类使用此新所有者更新所有帐户,并更新具有相同帐户所有者的每个活动下列出的每个商机和每个任务。这工作正常,直到我说更新了大量帐户。我现在正在达到 APEX CPU 限制。我的顶点类如下所示。我想我需要使用地图,但我不知道该怎么做。关于如何重写此代码以使其更高效,以免遇到 APEX CPU 限制的任何想法?谢谢

public class LCD_AccountinCounty {
@InvocableMethod(label='Account Owner Update flow' Description='Update Account Object with new owner')
public static void updateAccountOwner(List<FlowDetail> flowdetails) {
List<Account> accList = new List<Account>();
for(FlowDetail fd : flowdetails){
for(Account acct : fd.accounts){
acct.OwnerId = fd.newAccountOwnerName;
acc.Salesperson__c = SalespersonName;
accList.add(acct);
}
}
update accList;
List<Opportunity> opportunities = new List<Opportunity>();
for(Opportunity opp: [SELECT Id, OwnerId, AccountId, Account.OwnerId FROM Opportunity WHERE AccountId IN :accList and StageName !='Closed']){
opp.OwnerId = opp.Account.OwnerId;
opportunities.add(opp);
}
update opportunities;
List<Task> activities = new List<Task>();
for(Task t: [SELECT Id, OwnerId, WhatId, Account.OwnerId FROM Task WHERE WhatId IN :accList]){
t.OwnerId = t.Account.OwnerId;
activities.add(t);
}
update activities;

}

public with sharing class FlowDetail{
@InvocableVariable
public List<Account> accounts;
@InvocableVariable
public String newAccountOwnerName;
@InvocableVariable
public String SalespersonName;
}
}

这些对象上是否有触发器来触发一些额外的逻辑?

不能将包装类传递给批处理类。 但是,您可以使用可排队接口传入复杂的数据类型。

https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_queueing_jobs.htm

您可以将上面的代码移动到可排队的类中,并按如下所示将其排队:

public class LCD_AccountinCounty {
@InvocableMethod(label='...' Description='...')
public static void updateAccountOwner(List<FlowDetail> flowdetails) {
AsyncExecutionExample a = new AsyncExecutionExample(flowdetails);
System.enqueueJob(a);
}
}
public class AsyncExecutionExample implements Queueable {
public LCD_AccountinCounty.FlowDetail flowdetails;
public AsyncExecutionExample(LCD_AccountinCounty.FlowDetail flowdetails){
this.flowdetails = flowdetails;
}
public void execute(QueueableContext context) {
*Old updateAccountOwner code goes here...*      
}
}

最新更新