3

CRM 2016 Web APIをfetchxmlクエリパラメータで使用していますが、クエリが長すぎます。IN演算子がINリストに渡されたパラメータの数が300個時間はそれ以上になるでしょう。リクエストURLがfetchXmlクエリタイプで長すぎます

私の問題は、GET HTTPリクエストではクエリが大きすぎるためです。私はHTTPメッセージの本文でクエリを送信しようとしましたが、それは動作しませんでしたので、この問題の解決策は何ですか?

は、ここで私が使用fetchxmlクエリのコードスニペットです:

<fetch mapping="logical" distinct="true"> 
    <entity name="entity"> 
     <attribute name="new_classopportunityid" /> 
     <attribute name="new_trainingproduct" /> 
     <attribute name="new_gtgstatus" /> 
     <attribute name="new_scheduledstartdate" /> 
     <attribute name="new_scheduledenddate" /> 
     <attribute name="new_remainingnumberofseats" /> 
     <attribute name="new_liveclassroom" /> 
     <attribute name="new_maxlive" /> 
     <attribute name="new_xavieruniversity" /> 
     <attribute name="new_partnerlive" /> 
     <attribute name="new_blended" /> 
     <filter> 
     <condition attribute="new_classopportunityid" operator="in"> 
      <value>001943ea-e263-e611-8158-00155d002810</value> 
      <value>0071e4ea-bd9b-e611-8163-00155d002810</value> 
      <value>00c32774-1c8f-e611-8161-00155d002810</value> 
      <value>00d513fa-f0bb-e611-8169-00155d002810</value> 
      <value>....</value> 
      <value>....</value> 
      <value>....</value> 
     </condition> 
     </filter> 
    </entity> 
</fetch> 

私が要求するCRMのWeb APIエンドポイントは次のとおりです。

GET http://<org>/api/data/v8.0/<entity>?fetchXml=<fetch mapping="logical" distinct="true"> 
     <entity name="entity"> 
      <attribute name="new_classopportunityid" /> 
      <attribute name="new_trainingproduct" /> 
      <attribute name="new_gtgstatus" /> 
      <attribute name="new_scheduledstartdate" /> 
      <attribute name="new_scheduledenddate" /> 
      <attribute name="new_remainingnumberofseats" /> 
      <attribute name="new_liveclassroom" /> 
      <attribute name="new_maxlive" /> 
      <attribute name="new_xavieruniversity" /> 
      <attribute name="new_partnerlive" /> 
      <attribute name="new_blended" /> 
      <filter> 
      <condition attribute="new_classopportunityid" operator="in"> 
       <value>001943ea-e263-e611-8158-00155d002810</value> 
       <value>0071e4ea-bd9b-e611-8163-00155d002810</value> 
       <value>00c32774-1c8f-e611-8161-00155d002810</value> 
       <value>00d513fa-f0bb-e611-8169-00155d002810</value> 
       <value>....</value> 
       <value>....</value> 
       <value>....</value> 
      </condition> 
      </filter> 
     </entity> 
    </fetch> 

は、これは私がAPIから得た応答です。

答えて

3

あなたがポストを使用する必要があります、ではないのGet:

https://dreamingincrm.com/2017/01/15/executing-large-fetchxml-with-webapi/

+0

エンティティのエンドポイントでpostを使用しようとしましたが、これはRESTであり、エンティティを作成しないエンティティを作成することを意味します。送信したURLを確認します。ありがとう –

+0

はい!私はちょうどこれも昨日見て、私の答えのフォローアップとして投稿することを意味しました。良い発見。 –

+0

ありがとう、あなたのコードは私の人生を保存する –

1

"in"演算子をidsの大きなリストとともに使用することは、おそらくこれまで見てきたように、クエリに最適な方法ではありません。

<fetch mapping="logical" distinct="true" > 
    <entity name="entity" > 
    <!-- ... all your attributes ... --> 
    <link-entity name="new_classopportunity" from="new_classopportunityid" to="new_classopportunityid" > 
     <attribute name="new_name" /> 
     <filter> 
     <condition attribute="statecode" operator="eq" value="0" /> 
     </filter> 
    </link-entity> 
    </entity> 
</fetch> 

はあなたにもlink-entityから属性を引き出すことができる注意:あなたはこのように、link-entityを使用してnew_classopportunityエンティティの属性でフィルタすることができれば良いだろう。この場合、私は名前を引っ張っていて、アクティブなレコードはnew_classopportunityだけ取得するためにフィルタを使用しています。

new_classopportunityにフィルタを適用して同じリストを取得できるフィールドがない場合は、追加してください。 :)

+0

私は、リンクの実体が何であるかを知らないが、それはあなたが範囲クエリを使用するように示唆されているようです(つまり、x1とx2の間にx1があり、x2は整数ではなく、GUID文字列です)。 –

+0

これはSQLのINNER JOINに似ています。あなたは、あなたの主要なエンティティレコードをすべて引き出し、関連するエンティティに参加させます。そのリンクエンティティをフィルタリングすることができます。その結果、new_classopportunityレコードが一致するメインエンティティレコードのリストになります。このようにして、idsの大きなリストを渡すことはありません。エンティティリンクに同じidを返すフィルタを渡します。 –

+0

残念ながら、IDの長いリストを取り除く方法はありません。 –

関連する問題