2017-03-23 16 views
1

私はオブジェクト 'A'の後挿入トリガーのトリガーハンドラークラスを記述しています。ハンドラークラスの関数にtrigger.newを渡した後、その親オブジェクトフィールドはすべてnullです。トリガー自体からIDを渡さずに、親オブジェクトフィールドにアクセスするにはどうすればよいですか?ここでトリガーハンドラークラスの親オブジェクトフィールドへのアクセス

は、サンプル・トリガーである::

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


     TriggerHandler.handleAfterInsert(trigger.new); 

} 

ここハンドラクラス::

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

      } 
    } 

答えて

0

でしょうが、この作品のようなものでしょうか?子オブジェクトのレコードにアクセスするために私のクラスで同様のことをします。基本的にA__cのすべてのIdのセットを取得し、A__cに関連付けられた子オブジェクトレコードを表示するためにはSOQLクエリを実行する必要があります。以下では、例の子オブジェクトとして「連絡先」を使用しています。

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

は、私は、子供がfields.Youがquery.Usually我々が使用して親オブジェクトのフィールドにアクセスすることができ、内側SOQLを使用して、子オブジェクトのフィールドにアクセスできるオブジェクトではなく、親オブジェクトのフィールドにアクセスしたい「」(ドット)operator.Butこの場合は動作していません! –

+1

私はまだ間違っているかもしれませんが、その場合(私の経験では)、親IDのマップを作成するだけです。したがって、連絡先を扱っていてAccount sObjectフィールドを取得したい場合は、trigger.newをループしてAccountIdを取得し、マップに追加してください。次に、必要なアカウントフィールドを取得するためにSOQLを実行することができます([Select ID、Name、Owner from Account where ID in:AccountIDs])。問題は、trigger.new、trigger.oldmapなどで、データベースからSOQLを実行するまで、親子のsObjectsに直接アクセスできるとは思いません。 – Steve

+0

あなたはデータベースからSOQLを実行するまで、trigger.new、trigger.oldmapを使用して右に ''親または子のsObjectsに直接アクセスできません。 –

関連する問題