Tuesday, 22 June 2021

DML records 10K limit Issue


public class DMLManager {

public static Integer THRESHOLD_LIMIT = 9000 ;

    public static Integer BATCH_SIZE = 5000 ;

    public static void insertRecordsInChunk(List<sObject> records ){

        Integer chunkNumber = 1 ;

        List<sObject> chunkRecords = new List<sObject>() ;

        

        Map<Integer,List<sObject>> mapOfChunks = new Map<Integer, List<sObject>>() ;

        mapOfChunks.put(chunkNumber ,chunkRecords ) ;

        

        if(records != null && records.isEmpty() == false ){

            if(records.size() > THRESHOLD_LIMIT ){

                for(sObject s : records ){

List<sObject> chunkRecordsTemp  = mapOfChunks.get(chunkNumber) ;

                    if(chunkRecordsTemp.size() == BATCH_SIZE ){

                      chunkNumber = chunkNumber + 1 ;

                        List<sObject> chunkRecordsTempNew = new List<sObject>() ;

                        chunkRecordsTempNew.add(s) ;

                        mapOfChunks.put(chunkNumber , chunkRecordsTempNew  ) ;

                    }else{

                        chunkRecordsTemp.add(s) ;

                    }

                }               

            }else{

                chunkRecords.addAll(records) ;

                mapOfChunks.put(chunkNumber, chunkRecords  ) ;

            }

        }

        

        

        for(List<sObject> recordList : mapOfChunks.values() ){

Database.insert(recordList) ;

        }

    }

}