特定の自己参照型の一対多テーブルリレーションシップを階層として定義できます。 これらの階層の関連データを返すクエリを記述できます。
新しいクエリ条件演算子を利用して、明示的な階層リレーションシップを持つテーブルにクエリを実行できます。 これらの演算子は、階層リレーションシップとして特に定義されているテーブル リレーションシップにのみ適用されます。 QueryExpressionまたはFetchExpressionを使用してクエリを実行するときに、新しい条件演算子を使用してこの階層データを取得できます。
階層データの条件演算子
階層データのクエリを実行するときに条件を設定するには、次の演算子を使用します。
| FetchXML | ConditionOperator | Description |
|---|---|---|
above |
Above |
参照先レコードの階層的な先祖行のすべてのレコードを返します。 |
eq-or-above |
AboveOrEqual |
階層内の参照先レコードとその上のすべてのレコードを返します。 |
under |
Under |
階層内の参照先レコードの下にあるすべての子レコードを返します。 |
eq-or-under |
UnderOrEqual |
階層内の参照先レコードとその下位にあるすべての子レコードを返します。 |
not-under |
NotUnder |
階層内の参照先レコードの下にないすべてのレコードを返します。 |
eq-useroruserhierarchy |
OwnedByMeOrMyReports |
階層型セキュリティ モデルを使用する場合、現在のユーザーまたはユーザーのレポート階層に等しい |
eq-useroruserhierarchyandteams |
OwnedByMeOrMyReportsAndTeams |
階層型セキュリティ モデルを使用すると、現在のユーザーとユーザーのチーム、またはユーザーのレポート階層とそのチームが等しくなります。 |
階層データに対してクエリを実行するときの再帰の制限
階層データのクエリはリソースを大量に消費する可能性があるため、 Above、 AboveOrEqual、 Under、 UnderOrEqual、および NotUnder 条件演算子を使用する階層型クエリでは、既定で 100 個の再帰が許可される条件に制限されています。
OwnedByMeOrMyReports および OwnedByMeOrMyReportsAndTeams は、 階層の深さの 設定に依存する階層セキュリティ条件演算子であり、 設定>Security>Hierarchy Security で確認できます。 この設定の値は、 Organization.MaxDepthForHierarchicalSecurityModel 列に格納されます。
階層的に関連する子レコードの数を取得する
FetchXML ベースのクエリで rowaggregate 列を使用して、階層的に関連する子レコードの数を取得します。 この値を CountChildren に設定すると、レコードの子レコードの合計数を含む値が EntityCollectionに含まれます。 たとえば、次のクエリには、AccountChildren パラメーターが親レコードの{0}を表す階層リレーションシップ内の子アカウント レコードの数を表すAccountId集計値が含まれます。
<fetch>
<entity name='account'>
<attribute name='name' />
<attribute name='accountid' />
<attribute name='accountid' rowaggregate='CountChildren' alias='AccountChildren'/>
<filter type='and'>
<condition attribute='accountid' operator='under' value='{0}' />
</filter>
</entity>
</fetch>
注
返される集計値は、ユーザーが読み取りアクセス権を持たない可能性のあるものも含め、すべての子レコードを表します。