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 ノードの visiblefalse に設定し、[高度な検索] ユーザー インターフェイス内のリンクされたエンティティを非表示にします。 非表示にしてもクエリの実行には参加しており、適切な結果を返します。

警告

パフォーマンスへの悪影響があるため、クエリの全属性を取得しないようにしてください。 これは、クエリが更新要求へのパラメーターとして使用される場合は特に 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. 著作権