-
- Have your batch class implement Database.stateful
- Declare some variables that are initialized in the constructor to 0. These variables count successes and errors; also a string variable that remembers the records that failed and why (initialized to empty string).
- Use Database.update with allOrNothing = false instead of update within execute(). Interrogate each member of Database.SaveResult[] for isSuccess() and count succcesses and failures in your stateful variables from second point. Log in the stateful variable all the errors (id of record, name of record, and error message/exception)
- In the finish method, send an email to the sysad of count of successes/failures + string variable of all the failures.
- In finish() method, write your batch results to a custom Log__c record(s