2017-03-23 2 views
1

Ich schreibe eine Trigger-Handler-Klasse für einen After-Insert-Trigger für ein Objekt 'A'.Nach der Übergabe von trigger.new an eine Funktion in der Handler-Klasse kann ich aber auf das A-Feld zugreifen Die übergeordneten Objektfelder sind alle null. Wie kann ich auf Felder für übergeordnete Objekte zugreifen, ohne die ID vom Trigger selbst zusammen mit der Variablen trigger.new zu übergeben. HierZugriff auf übergeordnete Objektfelder in der Trigger-Handler-Klasse

ist die Probe Auslöser ::

if(trigger.isInsert && Trigger.isAfter){ 


     TriggerHandler.handleAfterInsert(trigger.new); 

} 

hier ist die Handler-Klasse ::

public class DedupeTriggerHandler{ 
    public static void handleAfterInsert(List<A__c >AList) { 
    // accessing parent objects field here 

      } 
    } 

Antwort

0

wäre so etwas wie dieses Werk? Ich mache ähnliche Dinge in meinen Klassen, um auf Kindobjekt-Datensätze zuzugreifen. Sie müssen im Grunde eine Menge aller IDs für A__c abrufen und dann eine SOQL-Abfrage ausführen, um mit A__c verknüpfte untergeordnete Objektdatensätze anzuzeigen. Im Folgenden verwende ich "Kontakt" als ein Beispiel Kindobjekt.

public static void handleAfterInsert(List<A__c> AList) { 
    Set<Id> aIds = new Set<Id>(); //set for holding the Ids in AList ("trigger.new") 

    // 1. Get a list of all A__c Id's in the trigger 
    for (A__c ac : AList) { 
     // Add the Id to set 
     aIds.add(ac.Id); 
     System.Debug('^^^^^## A__c Id added to list: ' + ac.Id); 
    } 

    // 2. Loop through all A__c affected by trigger (using one SOQL query) 
    for (A__c ac : [SELECT Id, (SELECT Id, OwnerId FROM Contacts) FROM A__c WHERE Id in :aIds]) { 
     // You should now be able to see child table data here: 
     for (Contact c : ac.Contacts) { 
      ... 
      ... 
     } 
     ... 
     ... 
    } 
} 
+0

Ich mag die übergeordnete Objekt für den Zugriff auf Felder und nicht untergeordnete Objekte fields.You die Felder Kind-Objekt zugreifen kann inneren SOQL mit query.Usually können wir die übergeordneten Objektfelder mit Zugriff ‚‘ (Punkt) operator.But In diesem Fall funktioniert es nicht! –

+1

Ich kann immer noch falsch verstanden werden, aber in diesem Fall (in meiner Erfahrung), müssen Sie nur eine Karte der Eltern-IDs erstellen. Wenn Sie also mit Contacts zu tun haben und Account sObject-Felder abrufen möchten, durchlaufen Sie einfach trigger.new, um die AccountId abzurufen und zur Map hinzuzufügen. Dann könnten Sie eine SOQL-Datei erstellen, um die von Ihnen benötigten Kontofelder zu erhalten (z. B. [ID, Name, Besitzer vom Konto mit ID in: Konto-IDs auswählen]). Die Sache ist, mit trigger.new, trigger.oldmap, etc, ich denke nicht, dass Sie direkten Zugriff auf Parent oder Child sObjects haben, bis Sie eine SOQL aus der Datenbank machen. – Steve

+0

das ist richtig '' mit trigger.new, trigger.oldmap haben Sie keinen direkten Zugriff auf Parent oder Child sObjects, bis Sie eine SOQL von der Datenbank ''. –

Verwandte Themen