You need to sign in to do that
Don't have an account?
santhiya durai
Trigger for updating child when update a field on parent, both parent and child object are same
I have object called Agreement.
One agreement will have mutliple child agreements.
we have a Parent Agreement lookup field on Child Agreement with Parent agreement value.
When Status category of Child agreement is Terminated, then on Parent agreement Status category and Termination date should be updated as child record.
The issue is am not getting Parent id from my trigger. So its not updating on Parent record eventhough my if condition satisfied.
Class:
public class UpdateTerminationDate {
public static Boolean isFirstTime = true;
}
Trigger:
trigger UpdateTerminationDateTrigger on Apttus__APTS_Agreement__c (after insert,after update) {
public static Boolean bool = true;
If(UpdateTerminationDate.isFirstTime){
UpdateTerminationDate.isFirstTime = false;
List<Apttus__APTS_Agreement__c> agr=new List<Apttus__APTS_Agreement__c>();
List<id> acc=new List<id>();
for(Apttus__APTS_Agreement__c a:Trigger.New)
{
acc.add(a.id);
system.debug(acc);
}
List<Apttus__APTS_Agreement__c> agreement = [select id,Name,Apttus__Parent_Agreement__r.Apttus__Status_Category__c,CLM_Agreement_Termination_Date__c,Apttus__Parent_Agreement__r.CLM_Agreement_Termination_Date__c,Apttus__Parent_Agreement__c,Apttus__Status_Category__c,Apttus__Status__c,Apttus__Parent_Agreement__r.Apttus__Status__c from Apttus__APTS_Agreement__c where id in: acc];
for(Apttus__APTS_Agreement__c ag:agreement){
system.debug(ag.Apttus__Parent_Agreement__r.CLM_Agreement_Termination_Date__c);
if(ag.Apttus__Status_Category__c=='Terminated')
{
ag.Apttus__Parent_Agreement__r.CLM_Agreement_Termination_Date__c=ag.CLM_Agreement_Termination_Date__c;
//ag.Apttus__Status_Category__c=ag.Apttus__Parent_Agreement__r.Apttus__Status_Category__c;
//ag.Apttus__Status__c='Terminated';
system.debug('test');
system.debug(ag.Apttus__Parent_Agreement__r.CLM_Agreement_Termination_Date__c);
system.debug(ag.CLM_Agreement_Termination_Date__c);
agr.add(ag);
}
update ag;
}
update agr;
system.debug(agr);
}
}
Isuue is both agr id and ag id are same(child agreement id)
One agreement will have mutliple child agreements.
we have a Parent Agreement lookup field on Child Agreement with Parent agreement value.
When Status category of Child agreement is Terminated, then on Parent agreement Status category and Termination date should be updated as child record.
The issue is am not getting Parent id from my trigger. So its not updating on Parent record eventhough my if condition satisfied.
Class:
public class UpdateTerminationDate {
public static Boolean isFirstTime = true;
}
Trigger:
trigger UpdateTerminationDateTrigger on Apttus__APTS_Agreement__c (after insert,after update) {
public static Boolean bool = true;
If(UpdateTerminationDate.isFirstTime){
UpdateTerminationDate.isFirstTime = false;
List<Apttus__APTS_Agreement__c> agr=new List<Apttus__APTS_Agreement__c>();
List<id> acc=new List<id>();
for(Apttus__APTS_Agreement__c a:Trigger.New)
{
acc.add(a.id);
system.debug(acc);
}
List<Apttus__APTS_Agreement__c> agreement = [select id,Name,Apttus__Parent_Agreement__r.Apttus__Status_Category__c,CLM_Agreement_Termination_Date__c,Apttus__Parent_Agreement__r.CLM_Agreement_Termination_Date__c,Apttus__Parent_Agreement__c,Apttus__Status_Category__c,Apttus__Status__c,Apttus__Parent_Agreement__r.Apttus__Status__c from Apttus__APTS_Agreement__c where id in: acc];
for(Apttus__APTS_Agreement__c ag:agreement){
system.debug(ag.Apttus__Parent_Agreement__r.CLM_Agreement_Termination_Date__c);
if(ag.Apttus__Status_Category__c=='Terminated')
{
ag.Apttus__Parent_Agreement__r.CLM_Agreement_Termination_Date__c=ag.CLM_Agreement_Termination_Date__c;
//ag.Apttus__Status_Category__c=ag.Apttus__Parent_Agreement__r.Apttus__Status_Category__c;
//ag.Apttus__Status__c='Terminated';
system.debug('test');
system.debug(ag.Apttus__Parent_Agreement__r.CLM_Agreement_Termination_Date__c);
system.debug(ag.CLM_Agreement_Termination_Date__c);
agr.add(ag);
}
update ag;
}
update agr;
system.debug(agr);
}
}
Isuue is both agr id and ag id are same(child agreement id)
The if(ag.Apttus__Status_Category__c=='Terminated') should go on the first iteration, only if that condition is met you add the parent id to the acc list.
You could make a Map that has de Parent Id and the date terminated so in the query you check for the keys and in the iteration you use the id as key to get the terminated date.
Map<Id,Date> acc = new Map<Id,Date>();
for(Apttus__APTS_Agreement__c a:Trigger.New) {
if(a.Apttus__Status_Category__c=='Terminated') {
acc.put(a.parentId,a.CLM_Agreement_Termination_Date__c);
system.debug(acc);
}
}
List<Apttus__APTS_Agreement__c> agreement = [select id,Name,Apttus__Parent_Agreement__r.Apttus__Status_Category__c,CLM_Agreement_Termination_Date__c,Apttus__Parent_Agreement__r.CLM_Agreement_Termination_Date__c,Apttus__Parent_Agreement__c,Apttus__Status_Category__c,Apttus__Status__c,Apttus__Parent_Agreement__r.Apttus__Status__c from Apttus__APTS_Agreement__c where id in: acc.keyset()];
for(Apttus__APTS_Agreement__c ag:agreement){
ag.CLM_Agreement_Termination_Date__c = acc.get(ag.Id);
}
update ag;
If this solves your issue please mark this answer as correct, it may help others.
All Answers
The if(ag.Apttus__Status_Category__c=='Terminated') should go on the first iteration, only if that condition is met you add the parent id to the acc list.
You could make a Map that has de Parent Id and the date terminated so in the query you check for the keys and in the iteration you use the id as key to get the terminated date.
Map<Id,Date> acc = new Map<Id,Date>();
for(Apttus__APTS_Agreement__c a:Trigger.New) {
if(a.Apttus__Status_Category__c=='Terminated') {
acc.put(a.parentId,a.CLM_Agreement_Termination_Date__c);
system.debug(acc);
}
}
List<Apttus__APTS_Agreement__c> agreement = [select id,Name,Apttus__Parent_Agreement__r.Apttus__Status_Category__c,CLM_Agreement_Termination_Date__c,Apttus__Parent_Agreement__r.CLM_Agreement_Termination_Date__c,Apttus__Parent_Agreement__c,Apttus__Status_Category__c,Apttus__Status__c,Apttus__Parent_Agreement__r.Apttus__Status__c from Apttus__APTS_Agreement__c where id in: acc.keyset()];
for(Apttus__APTS_Agreement__c ag:agreement){
ag.CLM_Agreement_Termination_Date__c = acc.get(ag.Id);
}
update ag;
If this solves your issue please mark this answer as correct, it may help others.
Whether this code will work for vice-versa.
When Parent Agreement is updated with Terminated, then on Child Agreement the termination date should be updated with the value on Parent Record.
Child Agreement having Parent agreement lookup field with value.