3

CRM 2016 웹 API를 fetchxml 쿼리 매개 변수와 함께 사용하고 있지만 쿼리가 너무 길어서 IN 연산자에서 전달 된 매개 변수의 수가 300 개 요소이고 일부는 300 개 요소입니다 시대는 그 이상이 될 것입니다.fetchXml 쿼리 유형이 너무 긴 URL 요청 URL

그래서 내 문제는 쿼리가 GET HTTP 요청에 비해 너무 큽니다. http 메시지 본문에서 쿼리를 보내려고했지만 그게 작동하지 않아서이 문제의 해결책은 무엇입니까? 나는이 요청

<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을 웹 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에서 가져온 응답입니다

여기 내가 사용하는 fetchxml 쿼리의 코드입니다.

Error code: 414: HTTP/1.1 414 Request-URI Too Long Response : "<!DOCTYPE HTML PUBLIC \"-\/\/W3C\/\/DTD HTML 4.01\/\/EN\"\"http:\/\/www.w3.org\/TR\/html4\/strict.dtd\">\r\n<HTML><HEAD><TITLE>Request URL Too Long<\/TITLE>\r\n<META HTTP-EQUIV=\"Content-Type\" Content=\"text\/html; charset=us-ascii\"><\/HEAD>\r\n<BODY><h2>Request URL Too Long<\/h2>\r\n<hr><p>HTTP Error 414. The request URL is too long.<\/p>\r\n<\/BODY><\/HTML>\r\n" [] [] 

답변

3

당신은 게시물을 사용해야합니다 아니라 가져 오기 :

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

+0

엔티티 엔드 포인트에서 post를 사용하려고 시도했지만 이것이 REST이며 엔티티를 생성하지 않는 엔티티를 생성한다는 것을 의미하므로 전송 한 URL을 검사합니다. 감사합니다 –

+0

예! 방금 어제도 보았고 내 대답에 대한 후속 조치로 게시하려고했습니다. 좋은 발견. –

+0

감사합니다. –

1

"in"연산자를 큰 ID 목록과 함께 사용하면 아마도 가장 좋은 쿼리 방법이 아닐 것입니다.

<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 레코드가있는 주요 엔티티 레코드 목록이됩니다. 이렇게하면 큰 ID 목록을 전달하지 않고 엔티티 링크에서 동일한 ID를 반환하는 필터를 전달합니다. –

+0

불행히도 ID의 긴 목록을 제거 할 수있는 방법이 없습니다. –