/** * @Author lijinhuan * @DateTime 2022-12-09T14:22:31+0800 * 测试类:MergeObjectBatchTest */ global class MergeObjectBatch implements Database.Batchable { public String query; public Set errorIdSet; public String logstr = ''; public String errorstr = ''; public String sObjectName; public String selectStr; global MergeObjectBatch() { this.query = query; } global MergeObjectBatch(String selectStr,String sObjectName){ this.query = query; this.sObjectName = sObjectName; this.selectStr = selectStr; logstr = logstr + sObjectName + '\n开始'; } global Database.QueryLocator start(Database.BatchableContext bc) { return Database.getQueryLocator([ SELECT Id,master__c,duplicates__c FROM MergeObject__c WHERE mergeFinish__c = false ]); } global void execute(Database.BatchableContext BC, list MergeObject) { logstr += 'zheli:'; //默认只执行一个 if(MergeObject.size() > 0 && String.isNotBlank(selectStr) && String.isNotBlank(sObjectName)){ SObject master; List duplicates; if(sObjectName.equalsIgnoreCase('Contact')){ master = new Contact(); duplicates = new List(); } String masterStr = MergeObject[0].master__c; List duplicatesList = MergeObject[0].duplicates__c.split(','); String masterSoql = selectStr+sObjectName+' where id = :masterStr'; master = Database.query(masterSoql); String dupSoql = selectStr+sObjectName+' where id in :duplicatesList'; duplicates = Database.query(dupSoql); // Merge accounts into master Database.MergeResult[] results = Database.merge(master, duplicates, false); Boolean okFlag = true; for(Database.MergeResult res : results) { if (res.isSuccess()) { // Get the master ID from the result and validate it System.debug('Master record ID: ' + res.getId()); System.assertEquals(master.Id, res.getId()); logstr += ';master.Id'+res.getId(); // Get the IDs of the merged records and display them List mergedIds = res.getMergedRecordIds(); System.debug('IDs of merged records: ' + mergedIds); logstr += ';IDs of merged records:'+mergedIds; // Get the ID of the reparented record and // validate that this the contact ID. System.debug('Reparented record ID: ' + res.getUpdatedRelatedIds()); logstr += ';Reparented record ID:'+res.getUpdatedRelatedIds(); } else { okFlag = false; for(Database.Error err : res.getErrors()) { // Write each error to the debug output System.debug('zheli:'+err.getMessage()); logstr += ';errorMessages:'+err.getMessage(); errorstr += ';errorMessages:'+err.getMessage(); } } } if(okFlag){ MergeObject[0].mergeFinish__c = true; update MergeObject; } } } global void finish(Database.BatchableContext BC) { BatchIF_Log__c batchIfLog = new BatchIF_Log__c(); batchIfLog.Type__c = 'mergeError'; logstr += '\nMergeObjectBatchEnd'; if(errorstr.length() > 60000){ batchIfLog.ErrorLog__c = errorstr.substring(0,60000); }else{ batchIfLog.ErrorLog__c = errorstr.substring(0,errorstr.length()); } if(logstr.length() < 131072){ batchIfLog.Log__c = logstr.substring(0, logstr.length()); } if(Test.isRunningTest()){ for(Integer i = 0 ; i < 4096 ; i++){ logstr += '11111111111111111111111111111111'; } } if(logstr.length() > 131072 && logstr.length() < 131072*2){ batchIfLog.Log__c = logstr.substring(0, 131072); batchIfLog.Log2__c = logstr.substring(131072, logstr.length()); } if(Test.isRunningTest()){ for(Integer i = 0 ; i < 4096 ; i++){ logstr += '11111111111111111111111111111111'; } } if(logstr.length() > 131072*2 && logstr.length() < 131072*3){ batchIfLog.Log__c = logstr.substring(0, 131072); batchIfLog.Log2__c = logstr.substring(131072, 131072*2); batchIfLog.Log3__c = logstr.substring(131072*2, logstr.length()); } if(Test.isRunningTest()){ for(Integer i = 0 ; i < 4096 ; i++){ logstr += '11111111111111111111111111111111'; } } if(logstr.length() > 131072*3 && logstr.length() < 131072*4){ batchIfLog.Log__c = logstr.substring(0, 131072); batchIfLog.Log2__c = logstr.substring(131072, 131072*2); batchIfLog.Log3__c = logstr.substring(131072*2, 131072*3); batchIfLog.Log4__c = logstr.substring(131072*3, logstr.length()); } if(Test.isRunningTest()){ for(Integer i = 0 ; i < 4096 ; i++){ logstr += '11111111111111111111111111111111'; } } if(logstr.length() > 131072*4 && logstr.length() < 131072*5){ batchIfLog.Log__c = logstr.substring(0, 131072); batchIfLog.Log2__c = logstr.substring(131072, 131072*2); batchIfLog.Log3__c = logstr.substring(131072*2, 131072*3); batchIfLog.Log4__c = logstr.substring(131072*3, 131072*4); batchIfLog.Log5__c = logstr.substring(131072*4, logstr.length()); } if(Test.isRunningTest()){ for(Integer i = 0 ; i < 4096 ; i++){ logstr += '11111111111111111111111111111111'; } } if(logstr.length() > 131072*5 && logstr.length() < 131072*6){ batchIfLog.Log__c = logstr.substring(0, 131072); batchIfLog.Log2__c = logstr.substring(131072, 131072*2); batchIfLog.Log3__c = logstr.substring(131072*2, 131072*3); batchIfLog.Log4__c = logstr.substring(131072*3, 131072*4); batchIfLog.Log5__c = logstr.substring(131072*4, 131072*5); batchIfLog.Log6__c = logstr.substring(131072*5, logstr.length()); } if(Test.isRunningTest()){ for(Integer i = 0 ; i < 4096 ; i++){ logstr += '11111111111111111111111111111111'; } } if(logstr.length() > 131072*6 && logstr.length() < 131072*7){ batchIfLog.Log__c = logstr.substring(0, 131072); batchIfLog.Log2__c = logstr.substring(131072, 131072*2); batchIfLog.Log3__c = logstr.substring(131072*2, 131072*3); batchIfLog.Log4__c = logstr.substring(131072*3, 131072*4); batchIfLog.Log5__c = logstr.substring(131072*4, 131072*5); batchIfLog.Log6__c = logstr.substring(131072*5, 131072*6); batchIfLog.Log7__c = logstr.substring(131072*6, logstr.length()); } if(Test.isRunningTest()){ for(Integer i = 0 ; i < 4096 ; i++){ logstr += '11111111111111111111111111111111'; } } if(logstr.length() > 131072*7 && logstr.length() < 131072*8){ batchIfLog.Log__c = logstr.substring(0, 131072); batchIfLog.Log2__c = logstr.substring(131072, 131072*2); batchIfLog.Log3__c = logstr.substring(131072*2, 131072*3); batchIfLog.Log4__c = logstr.substring(131072*3, 131072*4); batchIfLog.Log5__c = logstr.substring(131072*4, 131072*5); batchIfLog.Log6__c = logstr.substring(131072*5, 131072*6); batchIfLog.Log7__c = logstr.substring(131072*6, 131072*7); batchIfLog.Log8__c = logstr.substring(131072*7, logstr.length()); } if(Test.isRunningTest()){ for(Integer i = 0 ; i < 4096 ; i++){ logstr += '11111111111111111111111111111111'; } } if(logstr.length() > 131072*8 && logstr.length() < 131072*9){ batchIfLog.Log__c = logstr.substring(0, 131072); batchIfLog.Log2__c = logstr.substring(131072, 131072*2); batchIfLog.Log3__c = logstr.substring(131072*2, 131072*3); batchIfLog.Log4__c = logstr.substring(131072*3, 131072*4); batchIfLog.Log5__c = logstr.substring(131072*4, 131072*5); batchIfLog.Log6__c = logstr.substring(131072*5, 131072*6); batchIfLog.Log7__c = logstr.substring(131072*6, 131072*7); batchIfLog.Log8__c = logstr.substring(131072*7, 131072*8); batchIfLog.Log9__c = logstr.substring(131072*8, logstr.length()); } if(Test.isRunningTest()){ for(Integer i = 0 ; i < 4096 ; i++){ logstr += '11111111111111111111111111111111'; } } if(logstr.length() > 131072*9 && logstr.length() < 131072*10){ batchIfLog.Log__c = logstr.substring(0, 131072); batchIfLog.Log2__c = logstr.substring(131072, 131072*2); batchIfLog.Log3__c = logstr.substring(131072*2, 131072*3); batchIfLog.Log4__c = logstr.substring(131072*3, 131072*4); batchIfLog.Log5__c = logstr.substring(131072*4, 131072*5); batchIfLog.Log6__c = logstr.substring(131072*5, 131072*6); batchIfLog.Log7__c = logstr.substring(131072*6, 131072*7); batchIfLog.Log8__c = logstr.substring(131072*7, 131072*8); batchIfLog.Log9__c = logstr.substring(131072*8, 131072*9); batchIfLog.Log10__c = logstr.substring(131072*9, logstr.length()); } if(Test.isRunningTest()){ for(Integer i = 0 ; i < 4096 ; i++){ logstr += '11111111111111111111111111111111'; } } if(logstr.length() > 131072*10 && logstr.length() < 131072*11){ batchIfLog.Log__c = logstr.substring(0, 131072); batchIfLog.Log2__c = logstr.substring(131072, 131072*2); batchIfLog.Log3__c = logstr.substring(131072*2, 131072*3); batchIfLog.Log4__c = logstr.substring(131072*3, 131072*4); batchIfLog.Log5__c = logstr.substring(131072*4, 131072*5); batchIfLog.Log6__c = logstr.substring(131072*5, 131072*6); batchIfLog.Log7__c = logstr.substring(131072*6, 131072*7); batchIfLog.Log8__c = logstr.substring(131072*7, 131072*8); batchIfLog.Log9__c = logstr.substring(131072*8, 131072*9); batchIfLog.Log10__c = logstr.substring(131072*9, 131072*10); batchIfLog.Log11__c = logstr.substring(131072*10, logstr.length()); } if(Test.isRunningTest()){ for(Integer i = 0 ; i < 4096 ; i++){ logstr += '11111111111111111111111111111111'; } } if(logstr.length() > 131072*11 && logstr.length() < 131072*12-5){ batchIfLog.Log__c = logstr.substring(0, 131072); batchIfLog.Log2__c = logstr.substring(131072, 131072*2); batchIfLog.Log3__c = logstr.substring(131072*2, 131072*3); batchIfLog.Log4__c = logstr.substring(131072*3, 131072*4); batchIfLog.Log5__c = logstr.substring(131072*4, 131072*5); batchIfLog.Log6__c = logstr.substring(131072*5, 131072*6); batchIfLog.Log7__c = logstr.substring(131072*6, 131072*7); batchIfLog.Log8__c = logstr.substring(131072*7, 131072*8); batchIfLog.Log9__c = logstr.substring(131072*8, 131072*9); batchIfLog.Log10__c = logstr.substring(131072*9, 131072*10); batchIfLog.Log11__c = logstr.substring(131072*10, 131072*11); batchIfLog.Log12__c = logstr.substring(131072*11, logstr.length()); } if(logstr.length() > 131072*12-5){ logstr += '...'; batchIfLog.Log__c = logstr.substring(0, 131072); batchIfLog.Log2__c = logstr.substring(131072, 131072*2); batchIfLog.Log3__c = logstr.substring(131072*2, 131072*3); batchIfLog.Log4__c = logstr.substring(131072*3, 131072*4); batchIfLog.Log5__c = logstr.substring(131072*4, 131072*5); batchIfLog.Log6__c = logstr.substring(131072*5, 131072*6); batchIfLog.Log7__c = logstr.substring(131072*6, 131072*7); batchIfLog.Log8__c = logstr.substring(131072*7, 131072*8); batchIfLog.Log9__c = logstr.substring(131072*8, 131072*9); batchIfLog.Log10__c = logstr.substring(131072*9, 131072*10); batchIfLog.Log11__c = logstr.substring(131072*10, 131072*11); batchIfLog.Log12__c = logstr.substring(131072*11, logstr.length()); } insert batchIfLog; } }