function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
Salesforce2015Salesforce2015 

Need information about our Batch Apex Class

Hi Experts,

In our Sandbox Organization Apex Classes are written in year 2011. Please find below images and Apex Classes information and let me know about what is exactly they do in our organization with apex code.

Below is Batch Apex Class “SubmitChecksBatch” Code:


global class SubmitChecksBatch implements Database.batchable<sObject>,Database.AllowsCallouts, Database.Stateful{

global Case cs;
global List<Fulfillment_History__c> toUpdateFulfillment = new List<Fulfillment_History__c>();
global List<Webservice_Call_Result__c> callLogs = new List<Webservice_Call_Result__c>();
global List<Task> failedCalls = new List<Task>();

global Boolean exceptionOccurred = false;
global String exceptionMessage;
global String exceptionTypeName;
 
global Database.QueryLocator start(Database.BatchableContext info){
  String query = 'Select Name, Case__c, Fulfillment_Type__c, Fulfillment_Workflow__c from Fulfillment_History__c';
  query += ' where Fulfillment_Status__c = \'Pending Request\' and Fulfillment_Type__c in (\'Check\')';
  if(UtilityClass.isBatchTestMethodExecution)
   query += ' order by createddate desc limit 1';
  return Database.getQueryLocator(query);
}

global void execute(Database.BatchableContext info, List<Fulfillment_History__c> toSubmitChecks){
  try {
   schemasDatacontractOrg200407Telerx.ClientCredentials clientCred = UtilityClass.getClientCredentials();
   tempuriOrg.BasicHttpBinding_ITlxCheckAndLetterProcessor processVar = new tempuriOrg.BasicHttpBinding_ITlxCheckAndLetterProcessor();
   schemasDatacontractOrg200407Telerx.SubmitCheckResponse submitCheckResponse = new schemasDatacontractOrg200407Telerx.SubmitCheckResponse();
  
   //Create the array of check requests
   schemasDatacontractOrg200407Telerx.ArrayOfCheckRequest chqReqArray = new schemasDatacontractOrg200407Telerx.ArrayOfCheckRequest();
   chqReqArray.CheckRequest = new List<schemasDatacontractOrg200407Telerx.CheckRequest>();
  
   Fulfillment_History__c fh = toSubmitChecks[0];
  
   // Get the Case information from the Fulfillment History record
   Case[] cases = [Select CaseNumber, RecordTypeId, Job__c, Product__c, Current_Fulfillment_Status__c, Fulfillment_Date__c, Claim_Status__c, Disposition__c, OwnerId, Calculated_Rebate__c, MEC_Transaction__c, Tax_ID__c,
    Account.Name, Practice_Address__c, Practice_Address_2__c, Practice_City__c, Practice_State__c, Practice_Zip__c,
    Patient_First_Name__c, Patient_Last_Name__c, Patient_Claim_Address_1__c, Patient_Claim_Address_2__c, Patient_Claim_City__c, State_of_Residence__c, Patient_Claim_Zip__c,
    Primary_Insured_First_Name__c, Primary_Insured_Last_Name__c, Primary_Insured_Address_1__c, Primary_Insured_Address_2__c, Primary_Insured_City__c, Primary_Insured_State__c, Primary_Insured_Zip__c from Case
    where Id = :fh.Case__c];
      
   cs = cases[0];
   String programCode;
   String caseTypeName;
   
   // Get the corresponding Job information for the Check and Letter Service Codes
         Jobs__c[] clsCodes = [Select Check_And_Letter_Service_Program_Code__c, Check_Type_Code__c from Jobs__c
              where Id = :cs.Job__c];
 
   Jobs__c clsCode = clsCodes[0];
   programCode = clsCode.Check_And_Letter_Service_Program_Code__c;
   
    // Create the Check Request to submit
   schemasDatacontractOrg200407Telerx.CheckRequest chqReqTemp = new schemasDatacontractOrg200407Telerx.CheckRequest();
  
   chqReqTemp.CheckRequestID = fh.Name;
   chqReqTemp.CheckType = clsCode.Check_Type_Code__c;
   chqReqTemp.CheckAmount = String.valueOf(cs.Calculated_Rebate__c);
  
   // Set the address of the correct Fulfillment Workflow type
   if(fh.Fulfillment_Workflow__c == 'Provider'){
    chqReqTemp.MailingAddressLine1 = cs.Practice_Address__c;
    chqReqTemp.MailingAddressLine2 = cs.Practice_Address_2__c;
    chqReqTemp.MailingAddressCity = cs.Practice_City__c;
    chqReqTemp.MailingAddressState = cs.Practice_State__c;
    chqReqTemp.MailingAddressPostalCode = cs.Practice_Zip__c;
    chqReqTemp.MailingName = cs.Account.Name;
    chqReqTemp.PayeeName = cs.Account.Name;
   
    // Create the array of custom fields
    schemasDatacontractOrg200407Telerx.ArrayOfCustomField customFieldArray = new schemasDatacontractOrg200407Telerx.ArrayOfCustomField();
    customFieldArray.CustomField = new List<schemasDatacontractOrg200407Telerx.CustomField>();
   
    // Pass the MEC Transaction ID. If there is no MEC Transaction ID on the Case then pass the Case Number.
    if(cs.MEC_Transaction__c != null)
     customFieldArray.CustomField.add(UtilityClass.createCustomWebServiceField('MEC_Transaction__c', cs.MEC_Transaction__c));
    else
     customFieldArray.CustomField.add(UtilityClass.createCustomWebServiceField('MEC_Transaction__c', cs.CaseNumber));
   
    // Pass the Tax ID if provided
    if(cs.Tax_ID__c != null)
     customFieldArray.CustomField.add(UtilityClass.createCustomWebServiceField('Tax_ID__c', cs.Tax_ID__c));

    chqReqTemp.CustomFields = customFieldArray;
   
   }
   else if(fh.Fulfillment_Workflow__c == 'Primary Insured'){
    chqReqTemp.MailingAddressLine1 = cs.Primary_Insured_Address_1__c;
    chqReqTemp.MailingAddressLine2 = cs.Primary_Insured_Address_2__c;
    chqReqTemp.MailingAddressCity = cs.Primary_Insured_City__c;
    chqReqTemp.MailingAddressState = cs.Primary_Insured_State__c;
    chqReqTemp.MailingAddressPostalCode = cs.Primary_Insured_Zip__c;
    chqReqTemp.MailingName = cs.Primary_Insured_First_Name__c + ' ' + cs.Primary_Insured_Last_Name__c;
    chqReqTemp.PayeeName = cs.Primary_Insured_First_Name__c + ' ' + cs.Primary_Insured_Last_Name__c;
   }
   else if(fh.Fulfillment_Workflow__c == 'Patient'){
    chqReqTemp.MailingAddressLine1 = cs.Patient_Claim_Address_1__c;
    chqReqTemp.MailingAddressLine2 = cs.Patient_Claim_Address_2__c;
    chqReqTemp.MailingAddressCity = cs.Patient_Claim_City__c;
    chqReqTemp.MailingAddressState = cs.State_of_Residence__c;
    chqReqTemp.MailingAddressPostalCode = cs.Patient_Claim_Zip__c;
    chqReqTemp.MailingName = cs.Patient_First_Name__c + ' ' + cs.Patient_Last_Name__c;
    chqReqTemp.PayeeName = cs.Patient_First_Name__c + ' ' + cs.Patient_Last_Name__c;
   }  
  
   // Add the check request to the array of check requests
   chqReqArray.CheckRequest.add(chqReqTemp);
  
   // This is used for the test classes since the test classes should not call out to the web service
   if(UtilityClass.isBatchTestMethodExecution) {
    submitCheckResponse.ResponseText = 'Successful Call';
    submitCheckResponse.ResponseCode = '000';
    submitCheckResponse.TransactionID = '123456789';
   }
   else {
    submitCheckResponse = processVar.submitChecks(clientCred, programCode, chqReqArray);
   }
  
   if(submitCheckResponse.ResponseCode == '000') {   
    cs.Current_Fulfillment_Status__c = 'Requested';
    cs.Fulfillment_Date__c = null;
    fh.Fulfillment_Status__c = 'Requested';
    fh.Date_Requested__c = datetime.now();
    update cs;
    toUpdateFulfillment.add(fh);
   }
  
   Webservice_Call_Result__c callLog = new Webservice_Call_Result__c();
   callLog.Case__c = cs.Id;
   callLog.Name = 'Submit Check';
   callLog.Response_Text__c = submitCheckResponse.ResponseText;
   callLog.Response_Code__c = submitCheckResponse.ResponseCode;
   callLog.Transaction_Id__c = submitCheckResponse.TransactionID;
   callLogs.add(callLog);
  
   // This is used for the test classes so we can test response codes other than '000' for creating a Task
   if(UtilityClass.isBatchTestMethodExecution) {
    submitCheckResponse.ResponseText = 'Failed Call';
    submitCheckResponse.ResponseCode = '300';
    submitCheckResponse.TransactionID = '123456789';
   }
  
   if(submitCheckResponse.ResponseCode != '000') {
    String taskDescription;
    if(submitCheckResponse.ResponseText != null)
        taskDescription += 'Response Text: ' + submitCheckResponse.ResponseText + '; ';
       if(submitCheckResponse.ResponseCode != null)
        taskDescription += 'Response Code: ' + submitCheckResponse.ResponseCode + '; ';
       if(submitCheckResponse.TransactionID != null)
        taskDescription += 'Transaction Id: ' + submitCheckResponse.TransactionID + '; ';
      
       UtilityClass.sendExceptionEmail('SubmitChecksBatch', 'Error while submitting checks for CaseNumber ' + cs.CaseNumber + '. ' + taskDescription, 'Failed Web Service Call');
    //Task tsk = UtilityClass.createTask(cs, 'Error while submitting check for the case. Please open a help desk ticket.', taskDescription, 'In Progress', 'High', 1, true);
       //failedCalls.add(tsk);
      }
  }
  catch(Exception ex) {
   exceptionOccurred = true;
   exceptionMessage = 'CaseNumber: ' + cs.CaseNumber + ' - ' + ex.getMessage();
   exceptionTypeName = ex.getTypeName();
  }
}

global void finish(Database.BatchableContext info){
  if(toUpdateFulfillment.size() > 0)
   update toUpdateFulfillment;
  if(callLogs.size() > 0)
   insert callLogs;
  if(failedCalls.size() > 0)
   insert failedCalls;
  if(exceptionOccurred)
   UtilityClass.sendExceptionEmail('Submit Check', exceptionMessage, exceptionTypeName);
}
}


Below is Schedule class “SubmitCheckSchedulableClass” Information:


User-added image


Please let me know information about above Batch and Schedule Classes.

Thanks,
Manu
ManojjenaManojjena
Hi Manu ,

To know the basics of batch apex please check below link .
http://manojjena20.blogspot.in/2015/06/batch-apex-in-depth.html 
Try to analyse your code . 

Let m eknow if it helps .
Salesforce2015Salesforce2015
Hi Manoj,

Thanks for your reply.

As per my understanding about Batch Class "SubmitChecksBatch". Below are my findings.
 
-       This batch class integrate with an external system probably it is Telerx. It submit some check request and according to response Case record created in organization also used object Jobs__c to get exact information about the code.
 
-       Once the check submitted successfully using the web-service it updates the Webservice_Call_Result__c result and create task if there is any error some other action need to be done

But I'm new to Webservice & WSDL, Please guide me how to understand this.