You need to sign in to do that
Don't have an account?

Batch on account to update a cutom percentage field
Hi All,
i have a batch on Account to Calculate Quality score. with a scoring system . like if the fields has values than give a particular score to the field According to specific record type. and after calculation the result is shown in Quality score.
My batch is given below:-
public without sharing class BatchCADUtilization implements Database.Batchable<sObject>{
public Map<String, Map<String, Integer>> mapRecordTypeToScores = new Map<String, Map<String, Integer>> {
'Cachet' => new Map<String, Integer> {
'ACH_Provider__c' => 5,
'Payroll_Software__c' => 3,
'HR_Software__c' => 3,
'Payroll_Tax_Processor__c' => 3,
'Current_Bank__c' => 3,
'Payroll_Business_Consultant__c' => 2,
'Time_Attendance__c' => 2,
'CPA_Accounting_Firm__c' => 2
},
'TimeRack' => new Map<String, Integer> {
'Time_Attendance__c' => 5,
'CPA_Accounting_Firm__c' => 3,
'Payroll_Software__c' => 3,
'Current_Bank__c' => 3,
'HR_Software__c' => 3,
'Payroll_Business_Consultant__c' => 2,
'ACH_Provider__c' => 2,
'Payroll_Tax_Processor__c' => 2
},
'PTM' => new Map<String, Integer> {
'Payroll_Tax_Processor__c' => 5,
'ACH_Provider__c' => 3,
'Payroll_Software__c' => 3,
'Current_Bank__c' => 3,
'Payroll_Business_Consultant__c' => 2,
'Time_Attendance__c' => 2,
'HR_Software__c' => 2,
'CPA_Accounting_Firm__c' => 2
},
'SBS' => new Map<String, Integer> {
'Payroll_Software__c' => 5,
'ACH_Provider__c' => 3,
'Payroll_Tax_Processor__c' => 3,
'Current_Bank__c' => 3,
'Time_Attendance__c' => 3,
'Payroll_Business_Consultant__c' => 2,
'HR_Software__c' => 2,
'CPA_Accounting_Firm__c' => 2
}
};
public static void run( Set<Id> AccIds ) {
List<Account> accountRecords = [Select id, RecordTypeId, RecordType.Name, ACH_Provider__c,
RecordType.developerName, Payroll_Software__c, HR_Software__c,
Payroll_Tax_Processor__c, Current_Bank__c, Payroll_Business_Consultant__c,
Time_Attendance__c, CPA_Accounting_Firm__c,Quality_Score__c
from Account
where Id IN: AccIds ];
//executeHelper( accountRecords );
}
public Database.querylocator start(Database.BatchableContext BC){
String query = 'Select id, RecordTypeId, RecordType.Name, ACH_Provider__c, ' +
'RecordType.developerName, Payroll_Software__c, HR_Software__c, ' +
'Payroll_Tax_Processor__c, Current_Bank__c, ' +
'Payroll_Business_Consultant__c,Quality_Score__c, ' +
'Time_Attendance__c, CPA_Accounting_Firm__c ' +
'FROM Account' ;
return Database.getQueryLocator(query);
}
public void execute(Database.BatchableContext BC, List<Account> scope){
List<Account> accListToUpdate = new List<Account>();
for(Account acc : scope) {
Integer totalScoreAchieved = 0;
Integer totalScorePossible = 0;
String recordTypeDeveloperName = acc.RecordType.developerName;
if( recordTypeDeveloperName != null ) {
Map<String, Integer> mapFieldAPINameToScore = mapRecordTypeToScores.get( recordTypeDeveloperName );
totalScoreAchieved = 0;
if( mapFieldAPINameToScore != null ) {
for( String fieldAPIName : mapFieldAPINameToScore.keySet() ) {
Object fieldValue = acc.get( fieldAPIName );
Integer scoreForTheField = mapFieldAPINameToScore.get( fieldAPIName );
totalScorePossible += scoreForTheField;
if( fieldValue != null && String.valueOf( fieldValue ) != 'Other' ) {
totalScoreAchieved += scoreForTheField;
}
}
}
if( totalScorePossible > 0 ) {
acc.Quality_Score__c = (totalScoreAchieved * 100)/totalScorePossible;
}
}
System.assert(false,acc.Quality_Score__c);
}
update accListToUpdate;
}
public void finish(Database.BatchableContext BC){
}
}
Its giving me no value in the Quality score field?
Any suugestions how to solve it?
i have a batch on Account to Calculate Quality score. with a scoring system . like if the fields has values than give a particular score to the field According to specific record type. and after calculation the result is shown in Quality score.
My batch is given below:-
public without sharing class BatchCADUtilization implements Database.Batchable<sObject>{
public Map<String, Map<String, Integer>> mapRecordTypeToScores = new Map<String, Map<String, Integer>> {
'Cachet' => new Map<String, Integer> {
'ACH_Provider__c' => 5,
'Payroll_Software__c' => 3,
'HR_Software__c' => 3,
'Payroll_Tax_Processor__c' => 3,
'Current_Bank__c' => 3,
'Payroll_Business_Consultant__c' => 2,
'Time_Attendance__c' => 2,
'CPA_Accounting_Firm__c' => 2
},
'TimeRack' => new Map<String, Integer> {
'Time_Attendance__c' => 5,
'CPA_Accounting_Firm__c' => 3,
'Payroll_Software__c' => 3,
'Current_Bank__c' => 3,
'HR_Software__c' => 3,
'Payroll_Business_Consultant__c' => 2,
'ACH_Provider__c' => 2,
'Payroll_Tax_Processor__c' => 2
},
'PTM' => new Map<String, Integer> {
'Payroll_Tax_Processor__c' => 5,
'ACH_Provider__c' => 3,
'Payroll_Software__c' => 3,
'Current_Bank__c' => 3,
'Payroll_Business_Consultant__c' => 2,
'Time_Attendance__c' => 2,
'HR_Software__c' => 2,
'CPA_Accounting_Firm__c' => 2
},
'SBS' => new Map<String, Integer> {
'Payroll_Software__c' => 5,
'ACH_Provider__c' => 3,
'Payroll_Tax_Processor__c' => 3,
'Current_Bank__c' => 3,
'Time_Attendance__c' => 3,
'Payroll_Business_Consultant__c' => 2,
'HR_Software__c' => 2,
'CPA_Accounting_Firm__c' => 2
}
};
public static void run( Set<Id> AccIds ) {
List<Account> accountRecords = [Select id, RecordTypeId, RecordType.Name, ACH_Provider__c,
RecordType.developerName, Payroll_Software__c, HR_Software__c,
Payroll_Tax_Processor__c, Current_Bank__c, Payroll_Business_Consultant__c,
Time_Attendance__c, CPA_Accounting_Firm__c,Quality_Score__c
from Account
where Id IN: AccIds ];
//executeHelper( accountRecords );
}
public Database.querylocator start(Database.BatchableContext BC){
String query = 'Select id, RecordTypeId, RecordType.Name, ACH_Provider__c, ' +
'RecordType.developerName, Payroll_Software__c, HR_Software__c, ' +
'Payroll_Tax_Processor__c, Current_Bank__c, ' +
'Payroll_Business_Consultant__c,Quality_Score__c, ' +
'Time_Attendance__c, CPA_Accounting_Firm__c ' +
'FROM Account' ;
return Database.getQueryLocator(query);
}
public void execute(Database.BatchableContext BC, List<Account> scope){
List<Account> accListToUpdate = new List<Account>();
for(Account acc : scope) {
Integer totalScoreAchieved = 0;
Integer totalScorePossible = 0;
String recordTypeDeveloperName = acc.RecordType.developerName;
if( recordTypeDeveloperName != null ) {
Map<String, Integer> mapFieldAPINameToScore = mapRecordTypeToScores.get( recordTypeDeveloperName );
totalScoreAchieved = 0;
if( mapFieldAPINameToScore != null ) {
for( String fieldAPIName : mapFieldAPINameToScore.keySet() ) {
Object fieldValue = acc.get( fieldAPIName );
Integer scoreForTheField = mapFieldAPINameToScore.get( fieldAPIName );
totalScorePossible += scoreForTheField;
if( fieldValue != null && String.valueOf( fieldValue ) != 'Other' ) {
totalScoreAchieved += scoreForTheField;
}
}
}
if( totalScorePossible > 0 ) {
acc.Quality_Score__c = (totalScoreAchieved * 100)/totalScorePossible;
}
}
System.assert(false,acc.Quality_Score__c);
}
update accListToUpdate;
}
public void finish(Database.BatchableContext BC){
}
}
Its giving me no value in the Quality score field?
Any suugestions how to solve it?
You have missed to add
accListToUpdate.add(acc);
================================================================================
public void execute(Database.BatchableContext BC, List<Account> scope){
List<Account> accListToUpdate = new List<Account>();
for(Account acc : scope) {
Integer totalScoreAchieved = 0;
Integer totalScorePossible = 0;
String recordTypeDeveloperName = acc.RecordType.developerName;
if( recordTypeDeveloperName != null ) {
Map<String, Integer> mapFieldAPINameToScore = mapRecordTypeToScores.get( recordTypeDeveloperName );
totalScoreAchieved = 0;
if( mapFieldAPINameToScore != null ) {
for( String fieldAPIName : mapFieldAPINameToScore.keySet() ) {
Object fieldValue = acc.get( fieldAPIName );
system.debug('fieldValue-='+fieldValue);
Integer scoreForTheField = mapFieldAPINameToScore.get( fieldAPIName );
system.debug('scoreForTheField-='+scoreForTheField);
totalScorePossible += scoreForTheField;
if( fieldValue != null && String.valueOf( fieldValue ) != 'Other' ) {
totalScoreAchieved += scoreForTheField;
}
}
}
system.debug('totalScoreAchieved-='+totalScoreAchieved);
system.debug('totalScorePossible-='+totalScorePossible);
if( totalScorePossible > 0 ) {
acc.Quality_Score__c = (totalScoreAchieved * 100)/totalScorePossible;
}
}
accListToUpdate.add(acc);
// System.assert(false,acc.Quality_Score__c);
}
update accListToUpdate;
}