リレーションの一覧を取得

リレーションの種類

  • 主従関係
  • 参照
  • 階層
  • 多対多
  • 外部参照
  • 間接参照

主従関係

主従の従側のオブジェクトが主側への参照項目を持つ。
主側は従側のレコードの最大値、最小値、合計値を積み上げ集計項目として使用できる。

従側の所有者は主側の所有者と同じになる。そのため、共有ルール、共有の設定は使用できない。

主従関係は最大2つまで使用できる。1つ目に作成したのがプライマリリレーションで2つ目がセカンダリリレーションとなる。プライマリリレーションの所有者、オブジェクトのアイコン、色が使用される。

主側のレコードを削除すると従側のレコードも削除される。その後、主側のレコードを元に戻すと従側のレコードも元に戻る。(主側と同時に削除された従側のレコードのみ)

従側が持つ主側への参照項目はデフォルトでは変更不可になっている。オブジェクトの設定画面で「親の変更を許可」をチェックしないと主側の項目を変更することができない。

参照関係

主従関係と似ているが以下の点が異なる。

  • 所有者は独立しているため、共有ルールの設定、共有の直接設定がそれぞれ可能。
  • 積み上げ集計項目は利用できない。
  • 参照しているレコードが削除されるときの動作が指定できる。(この項目の値をクリアします、参照関係に含まれる参照レコードは削除できません、このレコードも削除します)カスケード削除はセキュリティと共有設定を無視して行われる。

階層

Userオブジェクトでのみ使用できるリレーション

子リレーションの取得

1
2
3
4
5
6
Schema.DescribeSObjectResult result = CustomOpportunity__c.SObjectType.getDescribe();
List<Schema.ChildRelationship> childRelation = result.getChildRelationships();

for (Schema.ChildRelationship c : childRelation) {
    System.debug(c.getChildSObject().getDescribe().getName() + ' / ' + c.getRelationshipName());
}

注意事項

必須の参照項目、主従項目を更新する時、参照先のレコードがロックされます。バルク処理で更新する場合、ロックの可能性を少なくする工夫(参照先のレコードでソートしてから更新するなど) + ロックエラーが発生後にリトライする仕組みを考えておく必要があります。

Last Mod: Jan 7, 2020