1

Wenn ich eine Abfrage habe, wie: Bekanntmachungfür eine OData Abfrage Rückkehr Zählung

http://myCRMOrg/api/data/v8.1/accounts?$filter=_chr_accountstatusid_value%20eq%2079A024B5-3D7C-E211-8B29-00155DC86B6F%20and%20accountid%20eq%20e929baaf-483b-e711-9425-00155dc0d345&$count=true 

Bitte, dass ich $count=true

Es zurückkehrt bin Angabe wird:

{ 
    "@odata.context":"http://myCRMORG/api/data/v8.1/$metadata#accounts","@odata.count":1,"value":[ 
    { 
     "@odata.etag":"W/\"1812635\""," 
     //100 fields and lots of data 
    } 
    ] 
} 

Wie können wir rekonstruieren diese Abfrage einfach zurückgeben?

Antwort

1

Ich hatte das gleiche Problem. Was ich getan habe, ist, dass ich vor Filter gezählt habe und es hat funktioniert. Beispiel:

req.open("GET", Xrm.Page.context.getClientUrl() + "/api/data/v8.2/accounts/$count/?$select=accountid&$filter=accountid%20eq%20D1C4CD52-1E51-E711-8122-6C3BE5B3B698&", true); 
3

Ich bin mir nicht sicher, ob ich Ihre Frage richtig verstehe, denn wenn Sie Accounts nach AccountId filtern, erhalten Sie nur 0 oder 1 Ergebnisse. Also, wenn Sie ein Ergebnis bekommen, wissen Sie, die Zählung 1.

ist Wie auch immer, eine Zählung zu erhalten, können Sie eine richtige FetchXml Aggregat wie so verwenden:

https://xedev29.api.crm.dynamics.com/api/data/v8.2/accounts?fetchXml= 
<fetch aggregate='true'> 
    <entity name='account'> 
     <attribute name='accountid' aggregate='count' alias='Count' /> 
    </entity> 
</fetch> 

Welche zurück:

{ 
    "@odata.context":"https://xedev29.api.crm.dynamics.com/api/data/v8.2/$metadata#accounts","value":[ 
    { 
     "Count":337 
    } 
    ] 
} 

Und fühlen Sie sich frei, Ihre Filter zum FetchXml hinzuzufügen:

https://xedev29.api.crm.dynamics.com/api/data/v8.2/accounts?fetchXml= 
<fetch aggregate='true'> 
    <entity name='account'> 
    <attribute name='accountid' aggregate='count' alias='Count' /> 
     <filter type='and' > 
      <condition attribute='chr_accountstatusid' operator='eq' value='D1C4CD52-1E51-E711-8122-6C3BE5B3B698'/> 
      <condition attribute='statecode' operator='eq' value='0' /> 
     </filter> 
    </entity> 
</fetch> 

natürlich können Sie unterliegen den üblichen FETC Einschränkungen des hXml-Aggregats (d. h. Zählung übersteigt bei 50K Reihen). Obwohl ich Wege um dieses gefunden habe, wenn Sie es brauchen.

Ich hätte auch erwähnen sollen, dass es nicht notwendig ist, alle Felder zurückzugeben, so dass wir & $ select = accountid verwenden können.

Sie können die @ odata.count mit einem assoziativen Bezug erhalten: result["@odata.count"]

Hier ist ein vollständiges Beispiel:

function count(){ 
    var req = new XMLHttpRequest(); 
    req.open("GET", Xrm.Page.context.getClientUrl() + "/api/data/v8.2/accounts?$select=accountid&$filter=accountid%20eq%20D1C4CD52-1E51-E711-8122-6C3BE5B3B698&$count=true", true); 
    req.setRequestHeader("OData-MaxVersion", "4.0"); 
    req.setRequestHeader("OData-Version", "4.0"); 
    req.setRequestHeader("Accept", "application/json"); 
    req.setRequestHeader("Content-Type", "application/json; charset=utf-8"); 
    req.setRequestHeader("Prefer", "odata.include-annotations=\"*\""); 
    req.onreadystatechange = function() { 
     if (this.readyState === 4) { 
      req.onreadystatechange = null; 
      if (this.status === 200) { 
       var result = JSON.parse(this.response); 
       console.log(result["@odata.count"]); 
      } else { 
       Xrm.Utility.alertDialog(this.statusText); 
      } 
     } 
    }; 
    req.send(); 
} 

Außerdem sollte ich erwähnen, dass, wenn Sie mit dem WebAPI bedeutende Arbeit sind , Jason Lattimer's CRMRESTBuilder ist sehr praktisch.

Und Sie können auch überprüfen, David Yack's WebAPI helper.

+1

gut, ich bin nur der schnellste Weg, um zu bestimmen versuchen, zu wissen, ob die Ergebnismenge leer –

+0

in Ordnung ist, dann könnte es helfen, Ihren onSuccess Rückruf Code zu schreiben ... Da drin vorstellen, ich werde Sie möchte überprüfen, ob Ergebnisse == null oder Ergebnisse [0] == null sind. – Aron

Verwandte Themen