コピペで、簡単に!Apexから子リレーション名の確認+標準リレーション名 54個 まとめ
こんにちは!
AWS EC2で個人用のRedmineを立ち上げてみました。 Redmineって落ち着きますよねぇ〜…職業病でしょうか?

開発中、SOQLを書いている時に子リレーション名が知りたくなった時。 Salesforceにログインして、カスタムオブジェクトの設定画面を開いて… とか 標準オブジェクトの名前からググって… とか たまのことですが、面倒なので、 いつでもコピペで確認できるようにApexからの参照方法を確認してみました。
・オブジェクトのメタデータから子リレーション名の一覧を取得してみる。
Schema.ChildRelationshipが便利です! オブジェクトのメタデータからリレーションを特定し、リレーション名を取得できます。 例として、取引先オブジェクトだと下記のような形で取得することができます。
Schema.DescribeSObjectResult result = Account.SObjectType.getDescribe();
List<Schema.ChildRelationship> childRelation = result.getChildRelationships();
for (Schema.ChildRelationship c : childRelation) {
System.debug(c.getChildSObject().getName() + ' / ' + c.getRelationshipName());
}

・オブジェクトを指定して、リレーション名を取得する。
さて、先述したのは取引先(と諸々の子オブジェクト達)の取得でしたが、 それだとコピペで使えないので、分かりやすく文字列で指定できるようにしときます。
String parentObject = 'Account';
String childObject = 'Contact';
for (Schema.ChildRelationship c : Schema.getGlobalDescribe().get(parentObject).getDescribe().getChildRelationships()) {
if (c.getChildSObject()==Schema.getGlobalDescribe().get(childObject)) {
System.debug('リレーション名:'+c.getRelationshipName());
}
}

これで、 オブジェクトのAPI参照名を親子で指定すると、リレーション名が分かるようになりました。 これで完璧・・・?
・いや、コピペ出来ない時もある。事前に対策!
プログラマーは忙しいのです…コピペすらできない時のために、 ざっくりと標準オブジェクトのリレーション名を事前にまとめておきます。 AccessibleとかQueryableでフィルタリング済み。重複は、気にしない。
| 親オブジェクト | 子オブジェクト | 子リレーション名 |
|---|---|---|
| 契約 | 行動 | Events |
| メモ | Notes | |
| 注文 | Orders | |
| ToDo | Tasks | |
| 注文 | 添付ファイル | Attachments |
| 行動 | Events | |
| メモ | Notes | |
| 注文 | Orders | |
| ToDo | Tasks | |
| メールテンプレート | 添付ファイル | Attachments |
| キャンペーン | 添付ファイル | Attachments |
| キャンペーン | ChildCampaigns | |
| 行動 | Events | |
| 商談 | Opportunities | |
| ToDo | Tasks | |
| 取引先 | 取引先 | ChildAccounts |
| 納入商品 | Assets | |
| 添付ファイル | Attachments | |
| ケース | Cases | |
| 取引先責任者 | Contacts | |
| 契約 | Contracts | |
| 行動 | Events | |
| メモ | Notes | |
| 商談 | Opportunities | |
| 注文 | Orders | |
| ToDo | Tasks | |
| 取引先責任者 | 納入商品 | Assets |
| 添付ファイル | Attachments | |
| ケース | Cases | |
| 契約 | ContractsSigned | |
| 行動 | Events | |
| メモ | Notes | |
| ToDo | Tasks | |
| リード | 添付ファイル | Attachments |
| 行動 | Events | |
| メモ | Notes | |
| ToDo | Tasks | |
| 商談 | 添付ファイル | Attachments |
| 行動 | Events | |
| メモ | Notes | |
| ToDo | Tasks | |
| 商品 | 納入商品 | Assets |
| 添付ファイル | Attachments | |
| 行動 | Events | |
| メモ | Notes | |
| ToDo | Tasks | |
| 納入商品 | 納入商品 | ChildAssets |
| 添付ファイル | Attachments | |
| ケース | Cases | |
| 行動 | Events | |
| メモ | Notes | |
| ToDo | Tasks | |
| ケース | 添付ファイル | Attachments |
| ケース | Cases |


