0
global class D3_RequiredAttachementsBatch implements Database.Batchable<sObject> {
    String query;
    Set<String> serviceRequestUniqueIds;
    global D3_RequiredAttachementsBatch(Set<String> serviceRequestUniqueIds){
        this.serviceRequestUniqueIds= serviceRequestUniqueIds;
        query = 'Select Id,SrvReq_Att_Service_Request_Name__c,Queue_Object_UID__c,Error_Message__c,Status__c,Owning_System__c,SrvReq_Att_Code__c';
        query=query+',SrvReq_Att_Category_Item_Title__c,SrvReq_Att_DocFriendlyFileName__c,SrvReq_Att_Is_Mandatory__c,SrvReq_Att_Physically_Received__c';
        query=query+',SrvReq_Att_Physically_Received_at__c,SrvReq_Att_Category__c,SrvReq_Att_Verified__c,SrvReq_Att_Verified_at__c,Queue_Operation_Type__c from RNL_D3_Integration__c';
        query=query+' where Object_API_Name__c=\'Service_Request_Attachment__c\' AND Queue_Operation_Type__c=\'Create\' AND Queue_Status__c<>\'Completed\' AND SrvReq_Att_Service_Request_Name__c in:serviceRequestUniqueIds';
    }
    global Database.QueryLocator start(Database.BatchableContext BC){
      return Database.getQueryLocator(query);
   }

   global void execute(Database.BatchableContext BC, List<sObject> scope){
        List<RNL_D3_Integration__c> queueRecordsToBeUpdate = new List<RNL_D3_Integration__c>();
        Map<String,Service_Request_Attachment__c> serviceRequestAttachments = new Map<String,Service_Request_Attachment__c>();
        Map<string,RNL_D3_Integration__c> recievedRecordByExternalID = new Map<string,RNL_D3_Integration__c>();
        Set<String> serviceRequestNames = new Set<String>();
        Map<String,Id> serviceRequestMap = new Map<String,id>();
        for(sObject obj:scope){
            RNL_D3_Integration__c queueItem = (RNL_D3_Integration__c)obj;
            serviceRequestNames.add(queueItem.SrvReq_Att_Service_Request_Name__c);
            recievedRecordByExternalID.put((String)queueItem.Queue_Object_UID__c,queueItem);
        }
        for(R_L_Service_Request__c serviceRequest: [select id,Owning_System_UID__c from R_L_Service_Request__c where Owning_System_UID__c in:serviceRequestNames]){
            serviceRequestMap.put(serviceRequest.Owning_System_UID__c,serviceRequest.Id);
        }
        for(sObject obj:scope){
            RNL_D3_Integration__c queueItem = (RNL_D3_Integration__c)obj;
            if(serviceRequestMap.containskey(queueItem.SrvReq_Att_Service_Request_Name__c)){
                Service_Request_Attachment__c newSrvReqAtt = new Service_Request_Attachment__c();                                
                newSrvReqAtt.Owning_System_UID__c = queueItem.Queue_Object_UID__c;
                newSrvReqAtt.Owning_System__c = queueItem.Owning_System__c;
                newSrvReqAtt.Name = queueItem.SrvReq_Att_Code__c;
                newSrvReqAtt.Service_Request__c = serviceRequestMap.get((string)queueItem.SrvReq_Att_Service_Request_Name__c);                    
                newSrvReqAtt.Owning_System_Related_Service_Request__c = queueItem.SrvReq_Att_Service_Request_Name__c;                                
                newSrvReqAtt.Category__c = queueItem.SrvReq_Att_Category__c;                
                newSrvReqAtt.Category_Item_Title__c = queueItem.SrvReq_Att_Category_Item_Title__c;                
                newSrvReqAtt.DocFriendlyFileName__c = queueItem.SrvReq_Att_DocFriendlyFileName__c;                
                newSrvReqAtt.Is_Mandatory__c = queueItem.SrvReq_Att_Is_Mandatory__c;
                newSrvReqAtt.Physically_Received__c = queueItem.SrvReq_Att_Physically_Received__c;
                newSrvReqAtt.Physically_Received_at__c = queueItem.SrvReq_Att_Physically_Received_at__c;
                newSrvReqAtt.Verified__c = queueItem.SrvReq_Att_Verified__c;
                newSrvReqAtt.Verified_at__c = queueItem.SrvReq_Att_Verified_at__c;
                serviceRequestAttachments.put(newSrvReqAtt.Owning_System_UID__c,newSrvReqAtt);
            }
        }
        if(serviceRequestAttachments.values().size()>0){
            List<Database.SaveResult> saveResults = Database.insert(serviceRequestAttachments.values());
            for(Integer i=0;i<saveResults.size();i++){
                RNL_D3_Integration__c recordToUpdate= recievedRecordByExternalID.get(serviceRequestAttachments.values()[i].Owning_System_UID__c);
                if(saveResults[i].isSuccess()){
                     recordToUpdate.Queue_Status__c    = 'Completed'; 
                     recordToUpdate.Error_Message__c = '';
                }else{
                    recordToUpdate.Queue_Status__c    = 'Failed'; 
                    recordToUpdate.Error_Message__c = saveResults[i].getErrors()[0].getMessage();
                }
                queueRecordsToBeUpdate.add(recordToUpdate);
            }
            Database.update(queueRecordsToBeUpdate);
        }
   }
   global void finish(Database.BatchableContext BC){

   }
}

1 Answer 1

1

This is how to pass the Ids and execute the batchable:

// Add the Ids to this set
Set<String> ids = new Set<String>();
...

// Pass Ids in to constructor
D3_RequiredAttachementsBatch batchable = new D3_RequiredAttachementsBatch(ids);

// Execute the batch (you can choose the batch size)
Database.executeBatch(batchable, 100);
0

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .