Visits__c previsit=new Visits__c(); Visits__c changevisit=new Visits__c(); Visits__c visilist=new Visits__c(); Visits__c managerapproval; for(Visits__c result: VisitsOldMap.values()) { previsit.Actual_Service_Date__c=result.Actual_Service_Date__c; } for(Visits__c result: VisitsNewMap.values()) { visilist.id=result.id; changevisit.Actual_Service_Date__c=result.Actual_Service_Date__c; managerapproval = [select id,name,Revised_Actual_Visit__c from Visits__c where id =:visilist.id]; } if(visilist.id!=null) { if(previsit.Actual_Service_Date__c.month()==previsit.Actual_Service_Date__c.month() && managerapproval.Revised_Actual_Visit__c!=true){ for(Visits__c visit: VisitsNewMap.values()){ visit.addError('Manager can only reschedule the actual visit in different month'); } } } system.debug('>>>>>>>>>>>month>>>>>>>>>'+previsit.Actual_Service_Date__c+changevisit.Actual_Service_Date__c); }
/*==================================================== *Method Name : CheckManagerApproval *Description : Check Manager Approval for Actual Visit Date *Arguments : new Visit list ====================================================*/ private void CheckManagerApproval(Map<id,Visits__c> VisitsNewMap) { Visits__c check; for(Visits__c result: VisitsNewMap.values()){ check = [select id,name,Revised_Actual_Visit__c from Visits__c where id =:result.id]; check.Revised_Actual_Visit__c=false; } update check; }
Which ever method where you want to do this check, should receive trigger.oldMap and trigger.new/newMap as arguments. In your case that should become -
Suppose its the method - CheckRevisiedVisitDate(VisitsNewMap,VisitsOldMap) and field Visit_Date_c
then you need to do -
for(Visit__c v : VisitsNewMap.Values()) { if(v.Visit_Date__c != VisitsOldMap.get(v.Id).Visit_Date__c) { //your code here } }
Note that old map is only available in update and delete triggers.
for(Account a: trigger.new) {
if(a.My_Date__c != trigger.oldMap.get(a.Id).My_Date__c) {
//do something here
}
}
Since trigger.old and trigger.oldMap are null for Insert and Undelete triggers, this should only work for Updates and Deletes.
------------------------
If this resolves your problem, please mark the question as Resolved.
if(RecursiveHandler.runOnce1()){
CheckRevisiedVisitDate(VisitsNewMap,VisitsOldMap);
CheckManagerApproval(VisitsNewMap);
}
}
private void CheckRevisiedVisitDate(Map<id,Visits__c> VisitsNewMap,Map<id,Visits__c> VisitsOldMap)
{
Visits__c previsit=new Visits__c();
Visits__c changevisit=new Visits__c();
Visits__c visilist=new Visits__c();
Visits__c managerapproval;
for(Visits__c result: VisitsOldMap.values())
{
previsit.Actual_Service_Date__c=result.Actual_Service_Date__c;
}
for(Visits__c result: VisitsNewMap.values())
{
visilist.id=result.id;
changevisit.Actual_Service_Date__c=result.Actual_Service_Date__c;
managerapproval = [select id,name,Revised_Actual_Visit__c from Visits__c where id =:visilist.id];
}
if(visilist.id!=null)
{
if(previsit.Actual_Service_Date__c.month()==previsit.Actual_Service_Date__c.month() && managerapproval.Revised_Actual_Visit__c!=true){
for(Visits__c visit: VisitsNewMap.values()){
visit.addError('Manager can only reschedule the actual visit in different month');
}
}
}
system.debug('>>>>>>>>>>>month>>>>>>>>>'+previsit.Actual_Service_Date__c+changevisit.Actual_Service_Date__c);
}
/*====================================================
*Method Name : CheckManagerApproval
*Description : Check Manager Approval for Actual Visit Date
*Arguments : new Visit list
====================================================*/
private void CheckManagerApproval(Map<id,Visits__c> VisitsNewMap)
{
Visits__c check;
for(Visits__c result: VisitsNewMap.values()){
check = [select id,name,Revised_Actual_Visit__c from Visits__c where id =:result.id];
check.Revised_Actual_Visit__c=false;
}
update check;
}
Upadte me....
eg:
trigger HelloWorldTrigger on Book__c (before update) {
In your case that should become -
Suppose its the method - CheckRevisiedVisitDate(VisitsNewMap,VisitsOldMap) and field Visit_Date_c
then you need to do -
for(Visit__c v : VisitsNewMap.Values()) {
if(v.Visit_Date__c != VisitsOldMap.get(v.Id).Visit_Date__c) {
//your code here
}
}