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
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);