Adsenseコード

2017-10-26

【Salesforce】SOQLの中級者向け使いこなし集

■標準オブジェクトの「子リレーション名」を調べたい


例えば、Event(行動)のサブクエリとして
EventRelation (招集された側の行動)をとってくるSOQL文を書きたいが、 EventRelation の relationshipName (子リレーション名)がわからない時の方法です。



開発者コンソールを開き、上のメニューから
Debug > Open Execute Anonymous Window を開き、
以下を記入して実行する。

Schema.DescribeSObjectResult R = Event.SObjectType.getDescribe();
List<Schema.ChildRelationship> C = R.getChildRelationships();
for(Schema.ChildRelationship cr: C) {
system.debug('@@' + Cr); 
}



表示されたログで「Debug Only」のチェックをオンにし、
デバッグのみを表示します。



以下が出てきます。
getChildSObject=AcceptedEventRelation;
の部分が、Event の子オブジェクトに設定されているオブジェクト名です。

[5]|DEBUG|@@(
Schema.ChildRelationship[getChildSObject=AcceptedEventRelation;  ・・・
Schema.ChildRelationship[getChildSObject=ActivityExtension;  ・・・
Schema.ChildRelationship[getChildSObject=AttachedContentDocument;  ・・・



この中から、
getChildSObject=EventRelation
となっている場所を探すと、以下になります。

14:28:22:012 USER_DEBUG [4]|DEBUG|@@
Schema.ChildRelationship[
getChildSObject=EventRelation;
getField=EventId;
getJunctionIdListNames=();
getRelationshipName=EventRelations;
isCascadeDelete=true;
isDeprecatedAndHidden=false;
isRestrictedDelete=false;
]



このうち、
getRelationshipName=EventRelations;
が、子リレーション名なので、
EventRelations ということがわかります。



Account (取引先)の子の Contact ()の
子リレーション名 Contacts と同様の法則に基づいていますね




参考
ChildRelationship クラス
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_class_Schema_ChildRelationship.htm#!
relationshipName (リレーション名)について
https://developer.salesforce.com/docs/atlas.ja-jp.soql_sosl.meta/soql_sosl/sforce_api_calls_soql_relationships_understanding.htm?search_text=relationshipName






0 件のコメント:

コメントを投稿