3

I have a trigger to make rejection comments mandatory. I have many records that have already been approved/rejected without comments. When a user attempts to reject a record that has already been approved or reject AND HAS NO comments, they receive an error (RequireRejectionComment: execution of BeforeUpdate caused by: System.ListException: List index out of bounds: 0: Trigger.RequireRejectionComment: line 29, column 1).

trigger RequireRejectionComment on carrier__c (before update) {

  Map<Id, carrier__c> rejectedStatements = new Map<Id, carrier__c>{};

  for(carrier__c car: trigger.new)
  {
    carrier__c oldcar = System.Trigger.oldMap.get(car.Id);

    if (oldcar.Approval_Status__c != 'Rejected' 
    && car.Approval_Status__c == 'Rejected')
    { 
        rejectedStatements.put(car.Id, car);
    }
  }
  for (ProcessInstance pi : [SELECT TargetObjectId, 
                              (  
                                 SELECT Id, StepStatus, Comments 
                                 FROM Steps
                                 WHERE StepStatus = 'Rejected'
                                 ORDER BY CreatedDate DESC
                                 LIMIT 1 
                              )
                               FROM ProcessInstance
                               WHERE TargetObjectId In 
                                 :rejectedStatements.keySet()
                               ORDER BY CreatedDate DESC
                              ])
  {     
      ***if ((pi.Steps[0].Comments == null || pi.Steps[0].Comments.trim().length() == 0))***
      {
          rejectedStatements.get(pi.TargetObjectId).addError(
          'Please enter a rejection comment!');
      }
  }
}

Your guidance is much appreciated.

1

As far as I can see and understand your logic and code ar correct. The only thing I can think of is adding an additional condition to verify the list isn't empty.

if (
    pi.Steps.size()>0  
    && (pi.Steps[0].Comments == null || pi.Steps[0].Comments.trim().length() == 0)
)

but if we're not sure what data scenario does end up in your query, yet having no Step records, this could introduce a bug...

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.