FetchXML の使用によるクエリの作成
公開日: 2017年1月
対象: Dynamics 365 (online)、Dynamics 365 (on-premises)、Dynamics CRM 2016、Dynamics CRM Online
Microsoft Dynamics 365 および Microsoft Dynamics 365 (オンライン) で FetchXML クエリを実行するには、まず XML クエリ文字列を作成しておく必要があります。 クエリ文字列を作成したら、IOrganizationService.RetrieveMultiple メソッドを使用してクエリ文字列を実行します。 ログオンしているユーザーの特権は、返される一連のレコードに影響します。 ログオンしているユーザーが読み取りアクセス権を持っているレコードのみが返されます。
FetchXML クエリ文字列は、FetchXML 言語のスキーマ定義に従っている必要があります。 詳細については、「FetchXML schema」を参照してください。
サンプル: 保存済みクエリの検証および実行で説明するように、SavedQuery レコードの作成によりクエリを保存できます。link-entity ノードの visible を false に設定し、[高度な検索] ユーザー インターフェイス内のリンクされたエンティティを非表示にします。 非表示にしてもクエリの実行には参加しており、適切な結果を返します。
警告
パフォーマンスへの悪影響があるため、クエリの全属性を取得しないようにしてください。 これは、クエリが更新要求へのパラメーターとして使用される場合は特に true になります。 更新では、すべての属性が含まれている場合、これによりすべてのフィールド値が、変更されなくても設定されます。また、多くの場合子レコードへ更新の伝播が発生します。
クエリ文字列の作成
以下の例の FetchXML 文はすべての取引先企業を取得します。
<fetch mapping='logical'>
<entity name='account'>
<attribute name='accountid'/>
<attribute name='name'/>
</entity>
</fetch>
以下の例では FetchXML 文は、所有ユーザーの姓が Cannon に等しくないすべての取引先企業を取得します。
<fetch mapping='logical'>
<entity name='account'>
<attribute name='accountid'/>
<attribute name='name'/>
<link-entity name='systemuser' to='owninguser'>
<filter type='and'>
<condition attribute='lastname' operator='ne' value='Cannon' />
</filter>
</link-entity>
</entity>
</fetch>
次の例では、FetchXML 文でカウントを使用してクエリから返されるレコードの最大数を設定します。 この場合、最初の 3 つの取引先企業がクエリで返され、
<fetch mapping='logical' count='3'>
<entity name='account'>
<attribute name='name' alias='name'/>
</entity></fetch>
この例は、EntityMapID が一致する EntityMap と AttributeMap 間での内部結合を示しています。
<fetch version='1.0' mapping='logical' distinct='false'>
<entity name='entitymap'>
<attribute name='sourceentityname'/>
<attribute name='targetentityname'/>
<link-entity name='attributemap' alias='attributemap' to='entitymapid' from='entitymapid' link-type='inner'>
<attribute name='sourceattributename'/>
<attribute name='targetattributename'/>
</link-entity>
</entity>
</fetch>
クエリの実行
以下のコードは、FetchXML クエリの実行方法を示しています。
// Retrieve all accounts owned by the user with read access rights to the accounts and
// where the last name of the user is not Cannon.
string fetch2 = @"
<fetch mapping='logical'>
<entity name='account'>
<attribute name='accountid'/>
<attribute name='name'/>
<link-entity name='systemuser' to='owninguser'>
<filter type='and'>
<condition attribute='lastname' operator='ne' value='Cannon' />
</filter>
</link-entity>
</entity>
</fetch> ";
EntityCollection result = _serviceProxy.RetrieveMultiple(new FetchExpression(fetch2));foreach (var c in result.Entities) { System.Console.WriteLine(c.Attributes["name"]); }
クエリ結果
RetrieveMultiple メソッドを使用して FetchXML クエリを実行した場合、戻り値は、クエリの結果を含む EntityCollection です。 これで、エンティティ コレクション内を反復できます。 前述の例では、foreach ループを使用して、FetchXML クエリの結果コレクション内を反復しています。
関連項目
FetchXML を使用したクエリの構築
FetchXML 集計の使用
FetchXML schema
Microsoft Dynamics 365
© 2017 Microsoft. All rights reserved. 著作権