【问题标题】:How To Make IsProcessed Flag Is Set To True for records whenever a batch Job is executed?每当执行批处理作业时,如何将记录的 IsProcessed 标志设置为 True?
【发布时间】:2020-11-13 02:19:32
【问题描述】:

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

现在我需要在执行批处理作业时将此 IsProcessed 标志设置为 True,这是伪代码,现在我正在寻找的是,我需要在下面的伪批处理顶点代码中进行哪些确切更改才能做到这一点代码在处理每个批处理后将 IsProcessed 标志设置为 True

全局类 copyertbatch6am 实现 Database.Batchable {

                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
              }
            }

非常感谢您的帮助

感谢和问候,

卡罗琳

【问题讨论】:

    标签: salesforce apex apex-code salesforce-lightning soql


    【解决方案1】:

    我会在这个实例中实现 Database.Stateful。抱歉,SO 不喜欢换行符。

                  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;
                        }
                    }
    
    1. 在类定义中实现 Database.Stateful
    2. 声明一个私有属性以在类实例化时存储已处理的记录
    3. 在 start() 方法中初始化一个空列表,以便您可以向其中添加项目
    4. 在execute()方法中设置成功处理记录的标志并将它们添加到列表中
    5. 在 finish() 方法中一次更新所有批次中所有成功处理的记录

    【讨论】:

    • 在开发控制台出现此错误无效类型:IsProcessed
    • 这来自伪代码“IsProcessed Flag = True”
    • 从对象中粘贴了 IsProcessed 复选框屏幕截图。将代码更改为 IsProcessed__c = True; 现在控制台说 Variable does not exist: IsProcessed__c 不确定发生了什么
    • 它完成需要一个小的代码更改` 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)); ERT_Case_Type__c 临时 = 新 ERT_Case_Type__c();临时.id=exe.id;临时的.IsProcessed__c = True; to_update_list.add(临时);` 谢谢
    • 只有错误显示在processedRecords.add(exe); 行,控制台显示Variable does not exist: exe
    猜你喜欢
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-05
    • 1970-01-01
    • 2013-10-21
    • 1970-01-01
    相关资源
    最近更新 更多