Salesforce 如何在执行批处理作业时将记录的IsProcessed标志设置为True?

Salesforce 如何在执行批处理作业时将记录的IsProcessed标志设置为True?,salesforce,apex,apex-code,salesforce-lightning,soql,Salesforce,Apex,Apex Code,Salesforce Lightning,Soql,在我的自定义对象ERT_Case_Type__c中,我有一个复选框IsProcessed,默认为false 现在,每当执行批处理作业时,我都需要将这个IsProcessed标志设置为True,这是伪代码,现在我要看的是,我需要在下面的伪批处理顶点代码中做哪些确切的更改,以使这个代码在每次批处理后都能使用IsProcessed标志设置为True 全局类CopyerBatch6AM实现数据库。可批处理{ global Database.QueryLocator sta

在我的自定义对象ERT_Case_Type__c中,我有一个复选框IsProcessed,默认为false

现在,每当执行批处理作业时,我都需要将这个IsProcessed标志设置为True,这是伪代码,现在我要看的是,我需要在下面的伪批处理顶点代码中做哪些确切的更改,以使这个代码在每次批处理后都能使用IsProcessed标志设置为True

全局类CopyerBatch6AM实现数据库。可批处理{

                global Database.QueryLocator start(Database.BatchableContext BC) {
                    // collect the batches of records or objects to be passed to execute
                    
                    String query = 'select Case__c, Level_1__c, Level_2__c,Level_3__c  FROM ERT_Case_Type__c where createddate = today and IsProcessed Flag = False';
                    System.debug('ERT Case No is =====>' +query);
                    return Database.getQueryLocator(query);
                }
                
                global void execute(Database.BatchableContext BC, List<ERT_Case_Type__c> exeList) {
                   
                    // process each batch of records
            List<Case_Type__c> listCTD = new List<Case_Type__c>();
                    System.debug('ERT Case No is =====>' +exeList);
                    for(ERT_Case_Type__c exe : exeList)
                    {        
                        listCTD.add(new Case_Type__c(Case__c=exe.Case__c,Level_1__c=exe.Level_1__c,Level_2__c=exe.Level_2__c,Level_3__c=exe.Level_3__c));
                       IsProcessed Flag = True
                    }
                    try {
                        System.debug('ERT Case No is =====>' +listCTD);
                        insert listCTD;
                    
                    } catch(Exception e) {
                        System.debug(e);
                    }
                    
                }   
                
                global void finish(Database.BatchableContext BC) {
                    // execute any post-processing operations
              }
            }
global Database.QueryLocator启动(Database.BatchableContext-BC){
//收集要传递给执行的记录或对象的批
字符串查询='从ERT_Case_Type_uuc中选择Case_uc、Level_u1_uc、Level_u2_uc、Level_u3_uc,其中createddate=today,IsProcessed Flag=False';
System.debug('ERT案例号====>'+查询);
返回数据库.getQueryLocator(查询);
}
全局void execute(Database.BatchableContext BC,List exeList){
//处理每批记录
List listCTD=新列表();
System.debug('ERT案例编号为===>'+exeList);
用于(ERT\U Case\U Type\U c exe:exeList)
{        
添加(新的案例类型案例c(案例c=exe.Case c,级别c=exe.Level c,级别c=exe.Level c,级别c=exe.Level c,级别c=exe.Level c,级别c=exe.Level c,级别c=exe.Level c);
IsProcessed标志=True
}
试一试{
系统调试('ERT案例号====>'+listCTD);
插入列表CTD;
}捕获(例外e){
系统调试(e);
}
}   
全局void完成(Database.BatchableContext BC){
//执行任何后处理操作
}
}
非常感谢你的帮助

感谢和问候


Carolyn

我将在本例中实现Database.Stateful。对不起,我不喜欢断线

              global class ertcopybatch3pm implements Database.Batchable<sObject>, Database.Stateful {
                        private List<ERT_Case_Type__c> processedRecords;
                    global Database.QueryLocator start(Database.BatchableContext BC) {
                        processedRecords = new List<ERT_Case_Type__c>();
                        // collect the batches of records or objects to be passed to execute        
                        String query = 'select Case__c, Level_1__c, Level_2__c,Level_3__c  FROM ERT_Case_Type__c where createddate = today and IsProcessed__c = False';
                        System.debug('ERT Case No is =====>' +query);
                        return Database.getQueryLocator(query);
                    }
                    global void execute(Database.BatchableContext BC, List<ERT_Case_Type__c> exeList) {   
                        // process each batch of records
                        List<Case_Type__c> listCTD = new List<Case_Type__c>();
                        System.debug('ERT Case No is =====>' +exeList);
                        for(ERT_Case_Type__c exe : exeList)
                        {        
                            listCTD.add(new Case_Type__c(Case__c=exe.Case__c,Level_1__c=exe.Level_1__c,Level_2__c=exe.Level_2__c,Level_3__c=exe.Level_3__c));
                           exe.IsProcessed__c = true;
                        }
                        try {
                            System.debug('ERT Case No is =====>' +listCTD);
                            insert listCTD;
                            //only successful batches will be processed in the finish() method
                            processedRecords.addAll(exeList);
                        } catch(Exception e) {
                            System.debug(e);
                        }
                    }   
                    global void finish(Database.BatchableContext BC) {
                        // execute any post-processing operations
                        update processedRecords;
                    }
                }
全局类ertcopybatch3pm实现Database.Batchable、Database.Stateful{
私有列表处理记录;
global Database.QueryLocator启动(Database.BatchableContext BC){
processedRecords=新列表();
//收集要传递给执行的记录或对象的批
字符串查询='从ERT_Case_Type_uuc中选择Case_uc、Level_u1_uc、Level_u2_uc、Level_u3_uc,其中createddate=today,IsProcessed_uc=False';
System.debug('ERT案例号====>'+查询);
返回数据库.getQueryLocator(查询);
}
全局void execute(Database.BatchableContext BC,List exeList){
//处理每批记录
List listCTD=新列表();
System.debug('ERT案例编号为===>'+exeList);
用于(ERT\U Case\U Type\U c exe:exeList)
{        
添加(新的案例类型案例c(案例c=exe.Case c,级别c=exe.Level c,级别c=exe.Level c,级别c=exe.Level c,级别c=exe.Level c,级别c=exe.Level c,级别c=exe.Level c);
exe.IsProcessed_uuc=true;
}
试一试{
系统调试('ERT案例号====>'+listCTD);
插入列表CTD;
//finish()方法只处理成功的批
processedRecords.addAll(exeList);
}捕获(例外e){
系统调试(e);
}
}   
全局void完成(Database.BatchableContext BC){
//执行任何后处理操作
更新processedRecords;
}
}
  • 在类定义中实现Database.Stateful
  • 声明私有属性以在类实例化时存储已处理的记录
  • 在start()方法中,初始化一个空列表,以便向其中添加项
  • 在execute()方法中,对成功处理的记录设置标志,并将它们添加到列表中
  • 在finish()方法中,一次更新所有批次中所有已成功处理的记录

  • 在开发人员控制台上获取此错误无效类型:来自伪代码“IsProcessed Flag=True”的IsProcessed从对象粘贴了IsProcessed复选框屏幕截图。将代码更改为
    IsProcessed\uu c=True现在控制台显示
    变量不存在:IsProcessed_uuc
    不确定发生了什么事情Gits需要一个小的代码更改`listCTD.add(新的Case_Type_uc(Case_uc=exe.Case_uc,Level_u1_uc=exe.Level_u1_uc,Level_u2_uc=exe.Level_u2_uc,Level_u3_uc));ERT_Case_Type_c temporary=新的ERT_Case_Type_c();temporary.id=exe.id;temporary.IsProcessed_uuc=True;更新列表。添加(临时);`谢谢,只有错误显示在第
    processedRecords.add(exe)行中,控制台显示
    变量不存在:exe