You need to sign in to do that
Don't have an account?
Vijay Zutshi 2
Apex Trigger not updating as required
The trigger senario is as follows:-
Create “Top X Designation” custom object which is the related list to Opportunity (Look up Relationship). The Top X Designation object, has fields Type (Picklist), Document Attached (Checkbox). The opportunity object has one field Handoff Attached with pick list type with values are Yes, No. The logic that the trigger has to follow is
//If Type (Top X Designation) = "Contract Flow Down/Handoff"
// and "Document Attached” = True then "Handoff Attached" = True, otherwise false.
My trigger is as follows. After insert is working fine but after update trigger is no performing as required
trigger topDesignation on Top_X_Designation__c (After insert, After Update, after delete) {
LIST<Top_X_Designation__c> newTopDesignation = new LIST<Top_X_Designation__c>();
LIST<Opportunity> oppList = new LIST<Opportunity>();
LIST<Opportunity> totalOpp = new LIST<Opportunity>();
SET<ID> newId = new SET<ID>();
if(Trigger.IsAfter) {
if(Trigger.IsInsert) {
for(Top_X_Designation__c top : Trigger.new) {
newTopDesignation.add(top);
newId.add(top.OwnerId);
system.debug('top' + top.OwnerId);
system.debug(top.Id);
Opportunity newOpp = new Opportunity();
newOpp.OwnerId = top.Id;
system.debug('opportunity' + newOpp.OwnerId);
if(top.Type__c == 'Contract Flow Down/Handoff' && top.Document_Attached__c == True) {
newOpp.Handoff_Attached__c = 'Yes';
totalOpp.add(newOpp);
newId.add(newOpp.Id);
}
else {
newOpp.Handoff_Attached__c = 'No';
totalOpp.add(newOpp);
newId.add(newOpp.Id);
}
}
}
//system.debug('opp' + totalOpp);
if(Trigger.IsUpdate) {
LIST<Top_X_Designation__c> updateTopDesg = new LIST<Top_X_Designation__c>();
LIST<Opportunity> upOpp = new LIST<Opportunity>();
SET<ID> topId = new SET<ID>();
for(Top_X_Designation__c updateDesg : Trigger.new) {
Id oldId = Trigger.oldMap.get(updateDesg.Id).OwnerId;
Id newId = updateDesg.Id;
system.debug('old' + oldId);
system.debug('new' + newId);
if(oldId != newId) {
topId.add(updateDesg.Id);
updateTopDesg.add(updateDesg);
}
}
system.debug('set' +topId);
LIST<Opportunity> listOpp = [SELECT OwnerId, Name, Handoff_Attached__c FROM Opportunity
WHERE Id IN:topId];
system.debug('opp' + listOpp);
for(Top_X_Designation__c dc : Trigger.new) {
for(Opportunity oppUpdate :listOpp) {
if(dc.Id == oppUpdate.Id) {
oppUpdate.Handoff_Attached__c = 'Yes';
upOpp.add(oppUpdate);
}
else
{
oppUpdate.Handoff_Attached__c = 'No';
upOpp.add(oppUpdate);
}
}
}
if(upOpp != NULL && upOpp.size()>0) {
update upOpp;
}
}
}
}
I am new to this field and would appreciate help to solve my problem.
Thanks
Vijay Zutshi
Create “Top X Designation” custom object which is the related list to Opportunity (Look up Relationship). The Top X Designation object, has fields Type (Picklist), Document Attached (Checkbox). The opportunity object has one field Handoff Attached with pick list type with values are Yes, No. The logic that the trigger has to follow is
//If Type (Top X Designation) = "Contract Flow Down/Handoff"
// and "Document Attached” = True then "Handoff Attached" = True, otherwise false.
My trigger is as follows. After insert is working fine but after update trigger is no performing as required
trigger topDesignation on Top_X_Designation__c (After insert, After Update, after delete) {
LIST<Top_X_Designation__c> newTopDesignation = new LIST<Top_X_Designation__c>();
LIST<Opportunity> oppList = new LIST<Opportunity>();
LIST<Opportunity> totalOpp = new LIST<Opportunity>();
SET<ID> newId = new SET<ID>();
if(Trigger.IsAfter) {
if(Trigger.IsInsert) {
for(Top_X_Designation__c top : Trigger.new) {
newTopDesignation.add(top);
newId.add(top.OwnerId);
system.debug('top' + top.OwnerId);
system.debug(top.Id);
Opportunity newOpp = new Opportunity();
newOpp.OwnerId = top.Id;
system.debug('opportunity' + newOpp.OwnerId);
if(top.Type__c == 'Contract Flow Down/Handoff' && top.Document_Attached__c == True) {
newOpp.Handoff_Attached__c = 'Yes';
totalOpp.add(newOpp);
newId.add(newOpp.Id);
}
else {
newOpp.Handoff_Attached__c = 'No';
totalOpp.add(newOpp);
newId.add(newOpp.Id);
}
}
}
//system.debug('opp' + totalOpp);
if(Trigger.IsUpdate) {
LIST<Top_X_Designation__c> updateTopDesg = new LIST<Top_X_Designation__c>();
LIST<Opportunity> upOpp = new LIST<Opportunity>();
SET<ID> topId = new SET<ID>();
for(Top_X_Designation__c updateDesg : Trigger.new) {
Id oldId = Trigger.oldMap.get(updateDesg.Id).OwnerId;
Id newId = updateDesg.Id;
system.debug('old' + oldId);
system.debug('new' + newId);
if(oldId != newId) {
topId.add(updateDesg.Id);
updateTopDesg.add(updateDesg);
}
}
system.debug('set' +topId);
LIST<Opportunity> listOpp = [SELECT OwnerId, Name, Handoff_Attached__c FROM Opportunity
WHERE Id IN:topId];
system.debug('opp' + listOpp);
for(Top_X_Designation__c dc : Trigger.new) {
for(Opportunity oppUpdate :listOpp) {
if(dc.Id == oppUpdate.Id) {
oppUpdate.Handoff_Attached__c = 'Yes';
upOpp.add(oppUpdate);
}
else
{
oppUpdate.Handoff_Attached__c = 'No';
upOpp.add(oppUpdate);
}
}
}
if(upOpp != NULL && upOpp.size()>0) {
update upOpp;
}
}
}
}
I am new to this field and would appreciate help to solve my problem.
Thanks
Vijay Zutshi
Do you see any error message or any information in the debug logs on where the functionality is failing in case of after update?Thanks