Zählen von Zeilen mithilfe von OData

Zeilen in Dataverse-Tabellen mithilfe der OData-Abfrageoption $count=true mit der Web-API zählen. Diese Option enthält eine Anzahl von Zeilen, die den Filterkriterien entsprechen, bis zu 5.000 für Standardtabellen und 500 für elastische Tabellen, sodass Sie schnell ermitteln können, wie viele Datensätze eine Abfrage zurückgibt.

Anforderung:

GET [Organization URI]/api/data/v9.2/accounts?$select=accountid&$count=true
Accept: application/json
OData-MaxVersion: 4.0
OData-Version: 4.0

Antwort:

HTTP/1.1 200 OK
OData-Version: 4.0

{
    "@odata.context": "[Organization URI]/api/data/v9.2/$metadata#accounts(accountid)",
    "@odata.count": 9,
    "value": [
        {
            "@odata.etag": "W/\"81359849\"",
            "accountid": "78914942-34cb-ed11-b596-0022481d68cd"
        },
        ... <Truncated for brevity>
    ]
}

Die Antwortanmerkung @odata.count enthält die Anzahl der Zeilen, bis zu 5.000 für Standardtabellen und 500 für elastische Tabellen, die den Filterkriterien entsprechen, unabhängig von der angeforderten Seitengröße.

Hinweis

Verwenden Sie die RetrieveTotalRecordCount-Funktion, um eine Momentaufnahme innerhalb der letzten 24 Stunden der Gesamtzahl der Zeilen für eine Tabelle abzurufen, die über 5.000 für Standardtabellen und 500 für elastische Tabellen hinausgeht.

Wenn der Zählungswert dem Grenzwert für den von Ihnen verwendeten Tabellentyp entspricht und Sie wissen möchten, ob die Anzahl genau diese Zahl oder größer als diese Zahl ist, fügen Sie den Anforderungsheader "Prefer " hinzu, um die Einstellung "odata.include-annotations" für diese Anmerkungen zu senden:

  • Microsoft.Dynamics.CRM.totalrecordcount
  • Microsoft.Dynamics.CRM.totalrecordcountlimitexceeded
Prefer: odata.include-annotations="Microsoft.Dynamics.CRM.totalrecordcount,Microsoft.Dynamics.CRM.totalrecordcountlimitexceeded"

Dieser Header fügt dem Ergebnis die folgenden Anmerkungen hinzu:

  • @Microsoft.Dynamics.CRM.totalrecordcount
  • @Microsoft.Dynamics.CRM.totalrecordcountlimitexceeded

Wenn Sie diesen Header mit der $count=true Abfrageoption verwenden und mehr als 5.000 Standarddatensätze vorhanden sind, werden die folgenden Werte zurückgegeben:

"@odata.count": 5000,
"@Microsoft.Dynamics.CRM.totalrecordcount": 5000,
"@Microsoft.Dynamics.CRM.totalrecordcountlimitexceeded": true,

Wenn weniger als 5.000 Datensätze vorhanden sind, wird die tatsächliche Anzahl zurückgegeben.

"@odata.count": 58,
"@Microsoft.Dynamics.CRM.totalrecordcount": 58,
"@Microsoft.Dynamics.CRM.totalrecordcountlimitexceeded": false,

Wenn Sie die $count=true-Abfrageoption nicht aufnehmen, ist der Gesamtwert @Microsoft.Dynamics.CRM.totalrecordcount-1.

Das folgende Beispiel zeigt, dass es 10 Konten gibt, die auf die $filter passen, aber nur die ersten drei Konten werden zurückgegeben:

Anforderung:

GET [Organization URI]/api/data/v9.2/accounts?$select=name?
&$filter=contains(name,'sample')
&$count=true  
Accept: application/json  
OData-MaxVersion: 4.0  
OData-Version: 4.0  
Prefer: odata.maxpagesize=3
Prefer: odata.include-annotations="Microsoft.Dynamics.CRM.*"

Antwort:

HTTP/1.1 200 OK  
Content-Type: application/json; odata.metadata=minimal  
OData-Version: 4.0  
Preference-Applied: odata.maxpagesize=3
Preference-Applied: odata.include-annotations="Microsoft.Dynamics.CRM.*"
  
{  
   "@odata.context":"[Organization URI]/api/data/v9.2/$metadata#accounts(name)",
   "@odata.count":10,
   "@Microsoft.Dynamics.CRM.totalrecordcount": 5000,
   "@Microsoft.Dynamics.CRM.totalrecordcountlimitexceeded": true,
   "value":[  
      {  
         "@odata.etag":"W/\"502482\"",
         "name":"Fourth Coffee (sample)",
         "accountid":"655eaf89-f083-e511-80d3-00155d2a68d3"
      },
      {  
         "@odata.etag":"W/\"502483\"",
         "name":"Litware, Inc. (sample)",
         "accountid":"675eaf89-f083-e511-80d3-00155d2a68d3"
      },
      {  
         "@odata.etag":"W/\"502484\"",
         "name":"Adventure Works (sample)",
         "accountid":"695eaf89-f083-e511-80d3-00155d2a68d3"
      }
   ],
   "@odata.nextLink":"[Organization URI]/api/data/v9.2/accounts?$select=name&$filter=contains(name,'sample')&$skiptoken=%3Ccookie%20pagenumber=%222%22%20pagingcookie=%22%253ccookie%2520page%253d%25221%2522%253e%253caccountid%2520last%253d%2522%257b695EAF89-F083-E511-80D3-00155D2A68D3%257d%2522%2520first%253d%2522%257b655EAF89-F083-E511-80D3-00155D2A68D3%257d%2522%2520%252f%253e%253c%252fcookie%253e%22%20istracking=%22False%22%20/%3E"
}

Um nur eine Zahl zu erhalten, die die Anzahl einer Sammlung darstellt, hängen Sie /$count an, wie im folgenden Beispiel:

Anforderung:

GET [Organization URI]/api/data/v9.2/accounts/$count  
Accept: application/json  
OData-MaxVersion: 4.0  
OData-Version: 4.0  

Antwort:

HTTP/1.1 200 OK  
Content-Type: text/plain  
OData-Version: 4.0  
  
10  

Nächste Schritte

Erfahren Sie, wie Sie die Leistung optimieren.