Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
(※ 2015 年 2 月 27 日 高度な検索の条件それぞれが FetchXML のどのクエリに対応するか追記)
みなさん、こんにちは。
前回に引き続き、Dynamics CRM 2015/Online 2015 更新プログラムの階層化に関する新機能を紹介します。
前回の記事を見られていない方は合わせてご確認ください。
- Dynamics CRM 2015/Online 2015 更新プログラム 階層化の新機能 その1
Dynamics CRM 2015 更新プラグラムでは階層構造を検索する機能が追加されています。
この機能は開発者向けとエンドユーザー向けの2つの機能に分類出来ます。
- エンドユーザー向け機能
- 開発者向け機能
エンドユーザー向け機能
高度な検索で階層構造をクエリーする為に、「未満」と「以上」の新しいオペレーターが使用出来るようになりました。
それぞれ、指定した値に一致するレコードの「未満」、「以上」で階層構造が検索されます。
取引先企業エンティティでは、取引先企業の親会社というフィールドで参照できます。このフィールド名は階層設定で使用された 1:N の自己参照関係の名前です。
尚、「未満」は FetchXML クエリの「Under」、「以上」は 「Not-Under」 の条件と同等になります。以下で紹介する FetchXML を 利用すると、この 2 つの
クエリ以外にもより柔軟なクエリを実行することが可能です。
開発者者向け機能
FetchXML
ConditionOperator
説明
above
Above
自己レコード以外のすべての親レコードを返す
eq-or-above
AboveOrEqual
自己レコードと、その上のすべての親レコードを返す
under
Under
自己レコード以外のすべての子レコードを返す
eq-or-under
UnderOrEqual
自己レコードと、その下のすべての子レコードを返す
not-under
NotUnder
自己レコード以外のすべての子レコードを除外する (詳細は後ほど説明があります)
eq-owneduseroruserhierarchy
OwnedByMeOrMyReports
階層セキュリティ モデル (*1) が使用されている場合、現在のユーザーまたはユーザーのレポート階層を等しくします。
eq-useroruserhierarchyandteams
OwnedByMeOrMyReportsAndTeams
階層セキュリティ モデル (*1) が使用されている場合、現在のユーザーとそのチームまたはユーザーのレポート階層とそのチームを等しくします。
階層化機能向けに追加された FetchXML オペレーター
(*1) 階層セキュリティモデルについては別の回で紹介します。
Above, AboveOrEqual, Under, UnderOrEqual, NotUnder オペレーターを使用する階層クエリーはリソース消費制限の為、上限が既定では 100 階層に設定されています。この制限は管理者用の PowerShell で変更する事が出来ます(詳細は Windows PowerShell を使用した展開の管理を参照下さい)。
FetchXMLクエリの説明
例として以下の階層構造を使用したクエリの動作を説明します。
NotUnder - 自己レコード以外のすべての子レコードを除外する
NotUnder は他のオペレーターと組み合わせると動作が理解しやすい為、eq-or-under, under, not-under の順で 3 段階に分けて説明します。
eq-or-under : アドベンチャーワークス
このクエリーではアドベンチャーワークスを含め、子レコードがすべて返ります。
<fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="false">
<entity name="account">
<attribute name="name" />
<attribute name="accountid" />
<order attribute="name" descending="false" />
<filter type="and">
<condition attribute="accountid" operator="eq-or-under"
value="{7696AC99-3E76-E411-810A-E83935C2E3BA}" />
</filter>
</entity>
</fetch>
実行結果
under : ファブリカム
このクエリーではファブリカム以外のすべての子レコードが返ります。
<fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="false">
<entity name="account">
<attribute name="name" />
<attribute name="accountid" />
<order attribute="name" descending="false" />
<filter type="and">
<condition attribute="accountid" operator="under"
value=”{7896AC99-3E76-E411-810A-E83935C2E3BA}" />
</filter>
</entity>
</fetch>
実行結果
eq-or-under : アドベンチャーワークス と
not-under : ファブリカム の組み合わせ
このクエリーではアドベンチャーワークスを含むすべての子レコードの中から、ファブリカムの下のレコードが除外された結果が返ります。
<fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="false">
<entity name="account">
<attribute name="name" />
<attribute name="accountid" />
<order attribute="name" descending="false" />
<filter type="and">
<condition attribute="accountid" operator="eq-or-under"
value="{7696AC99-3E76-E411-810A-E83935C2E3BA}" />
<condition attribute="accountid" operator="not-under"
value=”{7896AC99-3E76-E411-810A-E83935C2E3BA}" />
</filter>
</entity>
</fetch>
実行結果
rowaggregate - 階層構造で一致するレコード数の取得
条件に一致する子レコードが何件あるか件数を取得するには、FetchXML の rowaggregate 属性を使用します。この属性の値が CountChildren に設定されている場合、この属性の値は EntityCollection に含まれる合計の子レコード数を表します。
under : アドベンチャーワークス
rowaggregate CountChildren
以下のクエリーは AccountChildlen 集計値を持ち、「アドベンチャーワークス」が親であるレコードが持つ子レコードの件数を返します。
<fetch distinct='false' no-lock='false' mapping='logical'>
<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='{7696AC99-3E76-E411-810A-E83935C2E3BA}' />
</filter>
</entity>
</fetch>
実行結果
OData Endpoint について
階層構造クエリーをサポートする為の変更は行われていません。
まとめ
階層構造を検索する為の機能が追加され、階層構造が扱いやすくなりました。是非お試し下さい。
- Kensuke Kitazawa
参照情報
Query hierarchical data
https://msdn.microsoft.com/en-us/library/dn817893.aspx
Comments
Anonymous
February 25, 2015
コメント失礼します。 本記事で「エンドユーザー向け機能」の高度な検索で「以上」を選択すると、 Fetchで言うところの「not-under」で検索されるようなのですが、 「above」として結果を出したい場合、Fetchを利用する方法しか無いでしょうか? また、今後「未満」「以上」に加えて、「above」などのオペレーターが増えることはありますでしょうか?Anonymous
February 26, 2015
コメントありがとうございます。また早速機能をお試しいただきありがとうございます。 高度な検索での選択肢は、ご指摘のとおり Under および Not-Under の 2 種類となっております。現時点では Above などを使うには FetchXML をご利用いただく必要がございます。この点について記事自体に情報を反映させていただきます。 今後の機能については情報が入り次第、こちらのブログでも情報を発信させてただ来ますが、残念ながら現時点では情報がございません。ご了承ください。
- 中村 憲一郎