Batch file System.AsyncException:无法从批启动、批执行或未来方法调用Database.executeBatch

Batch file System.AsyncException:无法从批启动、批执行或未来方法调用Database.executeBatch,batch-file,triggers,salesforce,apex,Batch File,Triggers,Salesforce,Apex,通过外部应用程序更新记录时出现以下错误。 当更新此记录时,触发器正在调用批处理 Update failed. First exception on row 0 with id 0013H000008gq59QAA; first error: CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY, ivybat.AccountOperation: execution of AfterUpdate caused by: System.AsyncException: Databa

通过外部应用程序更新记录时出现以下错误。 当更新此记录时,触发器正在调用批处理

Update failed. First exception on row 0 with id 0013H000008gq59QAA; first error: CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY, ivybat.AccountOperation: execution of AfterUpdate

caused by: System.AsyncException: Database.executeBatch cannot be called from a batch start, batch execute, or future method.

Trigger.ivybat.AccountOperation: line 121, column 1: []
还将在一个自定义对象中记录以下错误描述,该自定义对象主要用于在从外部应用程序更新/插入时记录错误

Update failed. First exception on row 0 with id 0013H000008gq59QAA; first error: CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY, ivybat.AccountOperation: execution of AfterUpdate

caused by: System.AsyncException: Database.executeBatch cannot be called from a batch start, batch execute, or future method.

Trigger.ivybat.AccountOperation: line 121, column 1: []
调试错误描述中提到的类时,发现正在发生递归。 所以我试图停止递归,但仍然面临同样的问题

我不会讨论以下博客中针对System.AsyncException的建议解决方案:无法从批启动、批执行或将来的方法调用Database.executeBatch。因为这不会在使用相同托管包的其他组织中引发任何问题

从触发器附加以下代码块

if(trigger.isUpdate && trigger.isafter)
        {
            Map<String, Boolean> triggerLogicMap = TriggerLogicService.getDuplicationCheck(new Set<String>{'SKIP_AccountUpdate_Operation'});
            if(triggerLogicMap.get('SKIP_AccountUpdate_Operation') == Null 
               || triggerLogicMap.get('SKIP_AccountUpdate_Operation') == false) {
                   AccountOperationTriggerHelper.updateSalesOrgKey(trigger.new);        //    method calling to set SalesOrg key and tax classification key
                   Set<Id> accId = new Set<Id>();
                   Set<String> endMkts = new Set<String>();
                   map<Id,String> accmap = new map<id,String>();
                   boolean isReactivated = false;
                   for(Account acc : trigger.new){
                       system.debug(acc.ivybase__Status__c);
                       system.debug(trigger.oldMap.get(acc.Id).ivybase__Status__c);
                       if(acc.ivybase__Status__c != null && acc.ivybase__Status__c.equals('Active') && (acc.ivybase__Status__c != trigger.oldMap.get(acc.Id).ivybase__Status__c)){
                           isReactivated = true;
                           accmap.put(acc.Id,acc.market_iso__c);
                           accid.add(acc.id);
                       }
                   }
                   
                   if(isReactivated && (accId.size() > 0)){
                       if(!RoutePlanDetailsService.firstRun){
                           RoutePlanDetailsService.firstRun = true;
                           System.debug('Run the batch clas');
                           batchCalVisitRecords br = new batchCalVisitRecords(accId);
                           database.executeBatch(br);
                       }
                       
                   }
                   if(isReactivated && (accmap != null)){
                       CampaignTriggerHelper.insertvfonACCReactivation(accmap);
                   }
               }
        } 
if(trigger.isUpdate&&trigger.isafter)
{
Map triggerLogicMap=TriggerLogicService.GetReplicationCheck(新集合{'SKIP\u AccountUpdate\u Operation'});
if(triggerLogicMap.get('SKIP_AccountUpdate_Operation')==Null
||triggerLogicMap.get('SKIP\u AccountUpdate\u Operation')==false){
AccountOperationTriggerHelper.updateSalesOrgKey(trigger.new);//方法调用以设置SalesOrg密钥和税务分类密钥
Set accId=new Set();
Set endMkts=新集合();
map accmap=新映射();
布尔值isReactivated=false;
对于(科目科目:触发器新){
系统调试(根据ivybase\uuuuu状态\uuuu c);
调试(trigger.oldMap.get(acc.Id.ivybase\uuuu Status\uuu c);
if(acc.ivybase\uu Status\uu c!=null和acc.ivybase\uu Status\uu c.equals('Active')&(acc.ivybase\uu Status\uu c!=trigger.oldMap.get(acc.Id.ivybase\uu Status\uu c)){
isReactivated=真;
accmap.put(acc.Id、acc.market\u iso\u\c);
会计标识添加(会计标识);
}
}
如果(isReactivated&(accId.size()>0)){
如果(!RoutePlanDetailsService.firstRun){
RoutePlanDetailsService.firstRun=true;
调试(“运行批处理clas”);
batchCalVisitRecords br=新的batchCalVisitRecords(accId);
数据库执行包(br);
}
}
if(isReactivated&(accmap!=null)){
ActivityTriggerHelper.InsertvFonac重新激活(accmap);
}
}
} 
在这种情况下会有什么建议?
提前感谢。

您似乎使用了术语
批处理
,并使用了标记[],但是,我在您的问题中看不到任何批处理文件代码,也看不到任何对扩展名为
.bat
.cmd
的文件的引用,这表明使用了一个。你能澄清一下你的问题与那张用过的标签的关系吗?(请将鼠标悬停在批处理文件标签上方或单击该标签,以获取该标签在整个网站中的使用说明。)