You need to sign in to do that
Don't have an account?
Nandhu
my program is correct or not for picklist filed
Scenario:Trigger to be written when a new leave request created is approved.
When the Approval process incurs and leave is approved, the Leave status field is changed to Approved.
Criteria : Trigger should work when the 'Approval status' field on Leaves object changes its picklist value to 'APPROVED'
Action : Total Available Leaves = Total Available leaves - Requested Days Off
Trigger:
trigger LeavesTrigger on Leaves__c (after update) {
TriggerHandlerLeave handler = new TriggerHandlerLeave();
handler.onAfterInsert();
}
Handler Class
public with sharing class TriggerHandlerLeave {
public void onAfterInsert(){
totalLeave();
}
Map<Id, Leaves__c> merMap = new Map<Id, Leaves__c>([Select Id, Name,Approval_Status__c,
Total_Available_Leave__c,
Req_Days_Off__c
From Leaves__c]);
public void totalLeave(){
for(Leaves__c approvedList:Trigger.New){
if(approvedList.Approval_Status__c =='Approved'){
merMap.get(approvedList.Leaves__c).Total_Available_Leave__c=merMap.get(approvedList.Leaves__c).Total_Available_Leave__c - merMap.get(approvedList.Leaves__c).Req_Days_Off__c;
}
}
update merMap.values();
}
}
When the Approval process incurs and leave is approved, the Leave status field is changed to Approved.
Criteria : Trigger should work when the 'Approval status' field on Leaves object changes its picklist value to 'APPROVED'
Action : Total Available Leaves = Total Available leaves - Requested Days Off
Trigger:
trigger LeavesTrigger on Leaves__c (after update) {
TriggerHandlerLeave handler = new TriggerHandlerLeave();
handler.onAfterInsert();
}
Handler Class
public with sharing class TriggerHandlerLeave {
public void onAfterInsert(){
totalLeave();
}
Map<Id, Leaves__c> merMap = new Map<Id, Leaves__c>([Select Id, Name,Approval_Status__c,
Total_Available_Leave__c,
Req_Days_Off__c
From Leaves__c]);
public void totalLeave(){
for(Leaves__c approvedList:Trigger.New){
if(approvedList.Approval_Status__c =='Approved'){
merMap.get(approvedList.Leaves__c).Total_Available_Leave__c=merMap.get(approvedList.Leaves__c).Total_Available_Leave__c - merMap.get(approvedList.Leaves__c).Req_Days_Off__c;
}
}
update merMap.values();
}
}
You can try using the conext variables so that in case if you want to extend your trigger in the future and follow the best practice of one trigger on one object.The trigger context variables can be trigger.isafter and trigger.isupdate this could be a condtion check then you can call your function
In the soql query I believe you can create a map in the begining then store the response of records in a list and then iterate through the list of records to store the values in the map.
Also instead of checking the records that are approved late you can write a filter in the soql query such that only those records are returned which satisfy the condition.
Then you can make changes to the record values or perform the operation to the total leaves so as to save them or update them later and also do keep in mind to follow the best practices when you are creating a trigger.
In case if the above was helpful in your query can you please mark this as the best answer as it would help others in the future and also helps in keeping our community clean.
Regards,
Anutej