You need to sign in to do that
Don't have an account?
sweta kumari 55
How to save Apex batch errors in the Object(Error_Log__c).
Hi All,
Those user record get updated success and those user are not getting update that record created as a Error record in Error_Log
Here is my code, I am getting inserted any error Log,Please check and let me know the correct logic.
userupdate__c(Custom Setting)
Error_Log__c (Custom Object)
User(standard Object)
public class TestBatchDemo implements Database.Batchable<SObject>
{
public Database.QueryLocator start(Database.BatchableContext bc)
{
List<userupdate__c> objBatchSize= userupdate__c.getAll().values();
List<String> updateuse = new List<string>();
for(userupdate__c Au :objBatchSize)
{
updateuse.add(Au.UserName__c);
System.debug('updateuse'+updateuse);
}
System.debug('objBatchSize'+objBatchSize);
string query = 'select id,UserName,IsActive,firstName from User where UserName Not IN :updateuse';
System.debug('query'+query);
return Database.getQueryLocator(query);
} public void execute(Database.BatchableContext bc , List<User> UpdateIsActive)
{
// List< User > Userupda = new List<User>();
for(User use: UpdateIsActive)
{
use.IsActive = false;
use.Response__c='Update sucessfully';
System.debug('use' +use);
try {
Database.update (UpdateIsActive,false);
}
catch(exception ex)
{
List<Error_Log__c> errorLogList = New List<Error_Log__c>();
Error_Log__c log = new Error_Log__c( Object_Name__c = 'User',Record_Id__c =use.Id, Request__c =use.Username, Response__c ='error message'+ex.getMessage()); errorLogList.add(log);
Database.SaveResult[] saveResultList = Database.insert(errorLogList, false);
for (Database.SaveResult sr : saveResultList) {
if (!sr.isSuccess())
{
System.debug('Successfully inserted error log. error log ID: ' + sr.getId()); }
else
{
for(Database.Error err : sr.getErrors()) {
System.debug('The following error has occurred.');
System.debug(err.getStatusCode() + ': ' + err.getMessage());
System.debug('REcord fields that affected this error: ' + err.getFields());
} } }}}} }
public void finish(Database.BatchableContext bc) {
System.debug('Batch is updated'); } }
Those user record get updated success and those user are not getting update that record created as a Error record in Error_Log
Here is my code, I am getting inserted any error Log,Please check and let me know the correct logic.
userupdate__c(Custom Setting)
Error_Log__c (Custom Object)
User(standard Object)
public class TestBatchDemo implements Database.Batchable<SObject>
{
public Database.QueryLocator start(Database.BatchableContext bc)
{
List<userupdate__c> objBatchSize= userupdate__c.getAll().values();
List<String> updateuse = new List<string>();
for(userupdate__c Au :objBatchSize)
{
updateuse.add(Au.UserName__c);
System.debug('updateuse'+updateuse);
}
System.debug('objBatchSize'+objBatchSize);
string query = 'select id,UserName,IsActive,firstName from User where UserName Not IN :updateuse';
System.debug('query'+query);
return Database.getQueryLocator(query);
} public void execute(Database.BatchableContext bc , List<User> UpdateIsActive)
{
// List< User > Userupda = new List<User>();
for(User use: UpdateIsActive)
{
use.IsActive = false;
use.Response__c='Update sucessfully';
System.debug('use' +use);
try {
Database.update (UpdateIsActive,false);
}
catch(exception ex)
{
List<Error_Log__c> errorLogList = New List<Error_Log__c>();
Error_Log__c log = new Error_Log__c( Object_Name__c = 'User',Record_Id__c =use.Id, Request__c =use.Username, Response__c ='error message'+ex.getMessage()); errorLogList.add(log);
Database.SaveResult[] saveResultList = Database.insert(errorLogList, false);
for (Database.SaveResult sr : saveResultList) {
if (!sr.isSuccess())
{
System.debug('Successfully inserted error log. error log ID: ' + sr.getId()); }
else
{
for(Database.Error err : sr.getErrors()) {
System.debug('The following error has occurred.');
System.debug(err.getStatusCode() + ': ' + err.getMessage());
System.debug('REcord fields that affected this error: ' + err.getFields());
} } }}}} }
public void finish(Database.BatchableContext bc) {
System.debug('Batch is updated'); } }
To save Apex batch job errors in Object you can use e.getStackTraceString() method in your Batch class execution method
and save this data to the Stacktrace__c field in your logs custom object.
https://salesforce.stackexchange.com/questions/34207/custom-error-logging-batch-apex-failure-success-counts
Also Refer this document :-
https://developer.salesforce.com/forums/?id=9062I000000BjzmQAC
If you find your Solution then mark this as the best answer.
Thank you!
Priya Ranjan
You can check my previous best answer:-
https://developer.salesforce.com/forums/?id=9062I000000BjzmQAC
Or you can use below code:-
if you need any assistanse, Please let me know!!
Kindly mark my solution as the best answer if it helps you.
Thanks
Mukesh