So I just realized that parent fields are not available on child triggers without querying. But i've tried several different methods and do no get the expected response. I want to create a campaign when the checkbox field Create_Campaign__c is checked.
There is a Budget__c field on Budget_Item__c that is a master-detail to object Budget__c.
These are the 3 variations i have tried:
The current code is the one below and i get required fields are missing [Budget__c]:[Budget__c]
trigger CreateCampaign on Budget_Item__c (after insert, after update)
{
List<Campaign> ca = new List <Campaign>();
Set<id> triggerIds = Trigger.newMap.keyset();
Budget_Item__c ParentData = [select Name, Budget__c,
budget__r.Region__c from
Budget_Item__c where id in :triggerIds];
for(Budget_Item__c bi : trigger.new)
{
if(bi.Create_Campaign__c == true)
{
Campaign c = new Campaign();
c.Region__c = ParentData.budget__r.Region__c;
//other fields
ca.add(c);
}
}
Database.insert(ca, false);
}
2
for(Budget_Item__c bi : [select id, budget__r.region__c ... from Budget_Item__c
where Id in: trigger.new])
{
Campaign c = new Campaign();
c.Region__c = bi.Budget__r.Region__c;
///more fields
ca.add(c);
}
3
Set<Id> Ids = new Set<Id>();
for(Budget_Item__c c : trigger.new)
{
Ids.add(c.Id);
}
Map<Id,Budget__c> mapRP = new Map<Id,Budget__c>([SELECT Id, Name, Region__c
FROM Budget__c
WHERE Id IN:Ids]);
for(Budget_Item__c bi : trigger.new)
{
Campaign c = new Campaign();
c.Region__c = bi.Budget__r.Region__c;
ca.add(c);
}
What is the preferred method for doing this and which has the least overhead?