Freigeben über


Tabellen mit OData verknüpfen

Um zu steuern, welche Daten aus den Datensätzen der Bezugstabelle zurückgegeben werden, verwenden Sie die $expandAbfrageoption mit Navigationseigenschaften.

  • Sie können bis zu 15 $expand-Optionen in eine Abfrage aufnehmen. Jede $expand-Option erstellt eine Verknüpfung, die die Leistung beeinträchtigen kann.
  • Abfragen, die Navigationseigenschaften mit Sammlungswert erweitern, geben möglicherweise zwischengespeicherte Daten für die Eigenschaften zurück, welche die letzten Änderungen nicht widerspiegeln. Es wird empfohlen, eine If-None-Match-Kopfzeile mit dem Wert null zu verwenden, um das Browserzwischenspeichern zu überschreiben. Hier finden Sie weitere Details zu HTTP-Kopfzeilen.

Die folgende Tabelle beschreibt die Abfrageoptionen, die Sie in bestimmten $expand-Optionen anwenden können:

Option Beschreibung Weitere Informationen
$select Wählen Sie aus, welche Eigenschaften zurückgegeben werden. Spalten auswählen
$filter Begrenzen Sie für sammlungswertige Navigationseigenschaften die zurückgegebenen Datensätze. Zeilen filtern
$orderby Steuern Sie für sammlungswertige Navigationseigenschaften die Reihenfolge zurückgegebener Datensätze. Wird nicht mit verschachteltem $expand unterstützt. Verschachteltes $expand auf sammlungswertigen Navigationseigenschaften
$top Beschränken Sie für sammlungswertige Navigationseigenschaften die Anzahl zurückgegebener Datensätze. Wird nicht mit verschachteltem $expand unterstützt. Verschachteltes $expand auf sammlungswertigen Navigationseigenschaften
$expand Erweitern Sie die Navigationseigenschaften im verknüpften Entitätssatz. Die Verwendung von $expand in einem $expand wird als Verschachtelung von $expand bezeichnet. Geschachtelte Erweiterung von einzelwertigen Navigationseigenschaften und Geschachtelte $expand für sammlungswertige Navigationseigenschaften

Diese Optionen ist eine Teilmenge der Abfrageoptionen, die unter OData-Version 4.0 Teil 1: Protokoll plus Errata 02 11.2.4.2.1 Optionen erweitern beschrieben sind. Die Optionen $skip, $count, $search und $levels werden für die Dataverse-Web-API nicht unterstützt.

Verwenden Sie diese Optionen mit $expand, indem Sie sie in Klammern nach dem Namen der Navigationseigenschaft hinzufügen. Trennen Sie jede Option mit einem Semikolon (;).

Beispielsweise in der folgenden Abfrage:

  • Anfordert die account.name Eigenschaft

  • Tritt der AccountTasks sammlungswertigen Navigationseigenschaftsanfrage bei:

    • Die task.subject-Eigenschaft.
    • Wo task.subject die Zeichenfolge „Task“ enthält
    • Sortiert nach task.createdon Datum, absteigend
/accounts?$select=name&$expand=Account_Tasks($select=subject;$filter=contains(subject,'Task');$orderby=createdon desc)

Spalten mit $select begrenzen

Begrenzen Sie die zurückgegebenen Spalten immer mit $select, wenn Sie $expand in einer Anfrage verwenden. Die folgende Abfrage gibt zum Beispiel die Werte contact.fullname und task.subject in den erweiterten Ergebnissen des Typs account zurück:

Anforderung:

GET [Organization URI]/api/data/v9.2/accounts?$select=name
&$expand=primarycontactid($select=fullname),Account_Tasks($select=subject)
Prefer: odata.maxpagesize=1
If-None-Match: null
Accept: application/json  
OData-MaxVersion: 4.0  
OData-Version: 4.0  

Antwort:

HTTP/1.1 200 OK
OData-Version: 4.0
Preference-Applied: odata.maxpagesize=1

{
    "@odata.context": "[Organization URI]/api/data/v9.2/$metadata#accounts(name,primarycontactid(fullname),Account_Tasks(subject))",
    "value": [
        {
            "@odata.etag": "W/\"80649578\"",
            "name": "Litware, Inc. (sample)",
            "accountid": "78914942-34cb-ed11-b596-0022481d68cd",
            "primarycontactid": {
                "fullname": "Susanna Stubberod (sample)",
                "contactid": "70bf4d48-34cb-ed11-b596-0022481d68cd"
            },
            "Account_Tasks": [
                {
                    "@odata.etag": "W/\"80649460\"",
                    "subject": "Task 1 for Litware",
                    "_regardingobjectid_value": "78914942-34cb-ed11-b596-0022481d68cd",
                    "activityid": "f68393c1-34cb-ed11-b597-000d3a993550"
                }
            ],
            "Account_Tasks@odata.nextLink": "[Organization URI]/api/data/v9.2/accounts(78914942-34cb-ed11-b596-0022481d68cd)/Account_Tasks?$select=subject"
        }
    ],
    "@odata.nextLink": "[Organization URI]/api/data/v9.2/accounts?$select=name&$expand=primarycontactid($select=fullname),Account_Tasks($select=subject)&$skiptoken=%3Ccookie%20pagenumber=%222%22%20pagingcookie=%22%253ccookie%2520page%253d%25221%2522%253e%253caccountid%2520last%253d%2522%257b78914942-34CB-ED11-B596-0022481D68CD%257d%2522%2520first%253d%2522%257b78914942-34CB-ED11-B596-0022481D68CD%257d%2522%2520%252f%253e%253c%252fcookie%253e%22%20istracking=%22False%22%20/%3E"
}

Von Bedeutung

Denken Sie daran, dass zwei Arten von Navigationseigenschaften vorhanden sind. Weitere Informationen über Web-API-Navigationseigenschaften

  • Einzeln bewertete Navigationseigenschaften entsprechen Suchattributen, die viele-zu-eins-Beziehungen ermöglichen und eine Referenz auf einen anderen Datensatz zulassen.

  • Sammlungswertige Navigationseigenschaften entsprechen 1:n- oder n:n-Beziehungen.

Das Erweitern einer sammlungswertigen Navigationseigenschaft kann die Größe der Antwort auf eine Weise vergrößern, die schwer vorhersehbar ist. Es ist wichtig, dass Sie Grenzwerte einschließen, um zu steuern, wie viele Daten zurückgegeben werden. Sie können die Anzahl der Datensätze mit Hilfe der Paginierung begrenzen. Weitere Informationen über Paging-Ergebnisse

Es gibt einen erheblichen Unterschied in der Art und Weise, wie das Paging auf geschachtelte $expand-Optionen für sammlungswertige Navigationseigenschaften angewendet wird. Weitere Informationen darüber, wie Sie sammlungswertbasierte Navigationseigenschaften erweitern

Einzelwertige Navigationseigenschaften erweitern

Das folgende Beispiel zeigt, wie Kontaktdatensätze abgerufen werden, einschließlich des primären Kontakts und des Benutzers, der die Datensätze erstellt hat.

Anforderung:

GET [Organization URI]/api/data/v9.2/accounts?$select=name
&$expand=primarycontactid($select=contactid,fullname),createdby($select=fullname)  
Prefer: odata.maxpagesize=2
If-None-Match: null
Accept: application/json  
OData-MaxVersion: 4.0  
OData-Version: 4.0

Antwort:

HTTP/1.1 200 OK  
Content-Type: application/json; odata.metadata=minimal
Preference-Applied: odata.maxpagesize=2
OData-Version: 4.0  
  
{
    "@odata.context": "[Organization URI]/api/data/v9.2/$metadata#accounts(name,primarycontactid(contactid,fullname),createdby(fullname))",
    "value": [
        {
            "@odata.etag": "W/\"80649578\"",
            "name": "Litware, Inc. (sample)",
            "accountid": "78914942-34cb-ed11-b596-0022481d68cd",
            "primarycontactid": {
                "contactid": "70bf4d48-34cb-ed11-b596-0022481d68cd",
                "fullname": "Susanna Stubberod (sample)"
            },
            "createdby": {
                "fullname": "System Administrator",
                "systemuserid": "4026be43-6b69-e111-8f65-78e7d1620f5e",
                "ownerid": "4026be43-6b69-e111-8f65-78e7d1620f5e"
            }
        },
        {
            "@odata.etag": "W/\"80649580\"",
            "name": "Adventure Works (sample)",
            "accountid": "7a914942-34cb-ed11-b596-0022481d68cd",
            "primarycontactid": {
                "contactid": "72bf4d48-34cb-ed11-b596-0022481d68cd",
                "fullname": "Nancy Anderson (sample)"
            },
            "createdby": {
                "fullname": "System Administrator",
                "systemuserid": "4026be43-6b69-e111-8f65-78e7d1620f5e",
                "ownerid": "4026be43-6b69-e111-8f65-78e7d1620f5e"
            }
        }
    ],
    "@odata.nextLink": "[Organization URI]/api/data/v9.2/accounts?$select=name%0A&$expand=primarycontactid($select=contactid,fullname),createdby($select=fullname)&$skiptoken=%3Ccookie%20pagenumber=%222%22%20pagingcookie=%22%253ccookie%2520page%253d%25221%2522%253e%253caccountid%2520last%253d%2522%257b7A914942-34CB-ED11-B596-0022481D68CD%257d%2522%2520first%253d%2522%257b78914942-34CB-ED11-B596-0022481D68CD%257d%2522%2520%252f%253e%253c%252fcookie%253e%22%20istracking=%22False%22%20/%3E"
}

Die einwertige Navigationseigenschaft createdby liefert eine Instanz des Entitätstyps systemuser zurück. Sowohl systemuserid als auch ownerid-Eigenschaften werden zurückgegeben. Dies liegt daran, dass systemuser vom Principal EntityType erbt und den ownerid Primärschlüssel mit Team-EntityType über diese Vererbung teilt.

Die Benutzer (SystemUser)-Tabelle hat jedoch den Primärschlüssel SystemUserId. Die beiden Eigenschaften systemuserid und ownerid haben denselben Wert. Weitere Informationen zur Vererbung von Entitätstyp

Referenzen zurückgeben

Anstatt Daten zurückzugeben, können Sie auch Verweise oder Links zu den zugehörigen Datensätzen zurückgeben, indem Sie die einwertige Navigationseigenschaft mit der /$ref Option erweitern. Das folgende Beispiel gibt JSON-Objekte mit einer @odata.id-Eigenschaft zurück, die eine URL für jeden primären Kontakt enthält.

Anforderung:

GET [Organization URI]/api/data/v9.2/accounts?$select=name
&$expand=primarycontactid/$ref  
Accept: application/json  
OData-MaxVersion: 4.0  
OData-Version: 4.0  

Antwort:

HTTP/1.1 200 OK  
Content-Type: application/json; odata.metadata=minimal
Preference-Applied: odata.maxpagesize=2
OData-Version: 4.0  
  
{
    "@odata.context": "[Organization URI]/api/data/v9.2/$metadata#accounts(name,primarycontactid,primarycontactid/$ref())",
    "value": [
        {
            "@odata.etag": "W/\"80649578\"",
            "name": "Litware, Inc. (sample)",
            "_primarycontactid_value": "70bf4d48-34cb-ed11-b596-0022481d68cd",
            "accountid": "78914942-34cb-ed11-b596-0022481d68cd",
            "primarycontactid": {
                "@odata.id": "[Organization URI]/api/data/v9.2/contacts(70bf4d48-34cb-ed11-b596-0022481d68cd)"
            }
        },
        {
            "@odata.etag": "W/\"80649580\"",
            "name": "Adventure Works (sample)",
            "_primarycontactid_value": "72bf4d48-34cb-ed11-b596-0022481d68cd",
            "accountid": "7a914942-34cb-ed11-b596-0022481d68cd",
            "primarycontactid": {
                "@odata.id": "[Organization URI]/api/data/v9.2/contacts(72bf4d48-34cb-ed11-b596-0022481d68cd)"
            }
        }
    ],
    "@odata.nextLink": "[Organization URI]/api/data/v9.2/accounts?$select=name%0A&$expand=primarycontactid/$ref&$skiptoken=%3Ccookie%20pagenumber=%222%22%20pagingcookie=%22%253ccookie%2520page%253d%25221%2522%253e%253caccountid%2520last%253d%2522%257b7A914942-34CB-ED11-B596-0022481D68CD%257d%2522%2520first%253d%2522%257b78914942-34CB-ED11-B596-0022481D68CD%257d%2522%2520%252f%253e%253c%252fcookie%253e%22%20istracking=%22False%22%20/%3E"
}

Sie können die /$ref-Option nur mit Einzelwert-Navigationseigenschaften verwenden. Wenn Sie sie mit einer Navigationseigenschaft mit Sammelwert verwenden, erhalten Sie den folgenden Fehler:

{
    "error": {
        "code": "0x80060888",
        "message": "Expand with $ref is only supported on lookup type navigation property."
    }
}

Verschachtelte Erweiterung einzelwertiger Navigationseigenschaften

Sie können Navigationseigenschaften mit einem Einzelwert auf mehrere Ebenen erweitern, indem Sie eine $expand-Option in einer anderen $expand-Option verschachteln.

Die folgende Abfrage gibt die Datensätze task zurück und erweitert den zugehörigen Datensatz contact, den Datensatz account, der sich auf den Datensatz contact bezieht, und den Datensatz systemuser, der den Datensatz account erstellt hat:

Anforderung:

GET [Organization URI]/api/data/v9.2/tasks?$select=subject
&$expand=regardingobjectid_contact_task($select=fullname;
 $expand=parentcustomerid_account($select=name;
  $expand=createdby($select=fullname)))  
Accept: application/json  
OData-MaxVersion: 4.0  
OData-Version: 4.0  
Prefer: odata.maxpagesize=2

Antwort:

HTTP/1.1 200 OK  
Content-Type: application/json; odata.metadata=minimal
Preference-Applied: odata.maxpagesize=2
OData-Version: 4.0 

{
    "@odata.context": "[Organization URI]/api/data/v9.2/$metadata#tasks(subject,regardingobjectid_contact_task(fullname,parentcustomerid_account(name,createdby(fullname))))",
    "value": [
        {
            "@odata.etag": "W/\"80730855\"",
            "subject": "Task 1 for Susanna Stubberod",
            "activityid": "e9a8c72c-dbcc-ed11-b597-000d3a993550",
            "regardingobjectid_contact_task": {
                "fullname": "Susanna Stubberod (sample)",
                "contactid": "70bf4d48-34cb-ed11-b596-0022481d68cd",
                "parentcustomerid_account": {
                    "name": "Litware, Inc. (sample)",
                    "accountid": "78914942-34cb-ed11-b596-0022481d68cd",
                    "createdby": {
                        "fullname": "System Administrator",
                        "systemuserid": "4026be43-6b69-e111-8f65-78e7d1620f5e",
                        "ownerid": "4026be43-6b69-e111-8f65-78e7d1620f5e"
                    }
                }
            }
        },
        {
            "@odata.etag": "W/\"80730861\"",
            "subject": "Task 2 for Susanna Stubberod",
            "activityid": "c206f534-dbcc-ed11-b597-000d3a993550",
            "regardingobjectid_contact_task": {
                "fullname": "Susanna Stubberod (sample)",
                "contactid": "70bf4d48-34cb-ed11-b596-0022481d68cd",
                "parentcustomerid_account": {
                    "name": "Litware, Inc. (sample)",
                    "accountid": "78914942-34cb-ed11-b596-0022481d68cd",
                    "createdby": {
                        "fullname": "System Administrator",
                        "systemuserid": "4026be43-6b69-e111-8f65-78e7d1620f5e",
                        "ownerid": "4026be43-6b69-e111-8f65-78e7d1620f5e"
                    }
                }
            }
        }
    ],
    "@odata.nextLink": "[Organization URI]/api/data/v9.2/tasks?$select=subject&$expand=regardingobjectid_contact_task($select=fullname;$expand=parentcustomerid_account($select=name;$expand=createdby($select=fullname)))&$skiptoken=%3Ccookie%20pagenumber=%222%22%20pagingcookie=%22%253ccookie%2520page%253d%25221%2522%253e%253cactivityid%2520last%253d%2522%257bC206F534-DBCC-ED11-B597-000D3A993550%257d%2522%2520first%253d%2522%257bE9A8C72C-DBCC-ED11-B597-000D3A993550%257d%2522%2520%252f%253e%253c%252fcookie%253e%22%20istracking=%22False%22%20/%3E"
}

Sammlungswertige Navigationseigenschaften erweitern

Es gibt einige wichtige Unterschiede in der Antwort, die davon abhängen, ob Sie verschachteltes $expand mit einer Navigationseigenschaft mit Sammlungswert irgendwo in Ihrer Abfrage verwenden.

Verschachteltes $expand Einzelnes $expand
Paging Paging bei erweiterten Zeilen. Paging nur bei EntitySet-Ressource. <property name>@odata.nextLink URLs für erweiterte Zeilen enthalten keine Informationen zum Paging.
$top oder $orderby unterstützt Nein Ja
Unterstützte N:N-Beziehungen Nein. Siehe Verschachtelte $expand mit N:N-Beziehungen Ja

Einzelne $expand für Navigationseigenschaften mit Sammlungswert

Wenn Sie nur eine Einzel-Ebene $expand verwenden, wird kein Paging auf die erweiterten Zeilen angewendet. Wenn Sie den Anforderungsheader Prefer: odata.maxpagesize einschließen, wird Paging nur auf die Entitätssatz-Ressource der Abfrage angewendet.

Jede erweiterte Navigationseigenschaft mit Sammlungswert gibt eine <property>@odata.nextLink-URL zurück, die keine Paging-Informationen enthält. Es ist eine URL, die die gefilterte Sammlung für die Beziehung mit Ihren angehängten Abfrageoptionen darstellt. Sie können diese URL verwenden, um eine separate GET-Anforderung zu senden, und sie gibt dieselben Zeilen zurück, die in Ihrer ursprünglichen Anforderung zurückgegeben wurden. Sie können Paging auf diese Anforderung anwenden.

Da kein Paging auf die erweiterten Datensätze angewendet wird, können bis zu 5.000 verknüpfte Tabellendatensätze für jede erweiterte Navigationseigenschaft mit Sammlungswert zurückgegeben werden. Abhängig von Ihren Daten und der Abfrage kann es sich um eine Menge Daten handeln. Das Zurückgeben so vieler Daten kann die Leistung beeinträchtigen und möglicherweise einen Timeout Ihrer Anfrage verursachen. Seien Sie vorsichtig bei der Erstellung Ihrer Abfragen. Sie können die Optionen $top, $filter und $orderby verwenden, um die Gesamtzahl der zurückgegebenen Datensätze zu steuern.

Das folgende Beispiel enthält eine einfache Erweiterung der Account_Tasks und contact_customer_accounts beim Abrufen von Datensätzen für Konten. Die Abfragekopfzeile Prefer: odata.maxpagesize=1 stellt sicher, dass nur ein Datensatz des Kontos auf der ersten Seite zurückgegeben wird.

Anforderung:

GET [Organization URI]/api/data/v9.2/accounts?$select=name,accountid
&$expand=Account_Tasks($select=subject),contact_customer_accounts($select=fullname)
Prefer: odata.maxpagesize=1
Accept: application/json  
OData-MaxVersion: 4.0  
OData-Version: 4.0  

Antwort:

HTTP/1.1 200 OK  
Content-Type: application/json; odata.metadata=minimal
Preference-Applied: odata.maxpagesize=1
OData-Version: 4.0 

{
    "@odata.context": "[Organization URI]/api/data/v9.2/$metadata#accounts(name,accountid,Account_Tasks(subject),contact_customer_accounts(fullname))",
    "value": [
        {
            "@odata.etag": "W/\"80649578\"",
            "name": "Litware, Inc. (sample)",
            "accountid": "78914942-34cb-ed11-b596-0022481d68cd",
            "Account_Tasks": [
                {
                    "@odata.etag": "W/\"80730894\"",
                    "subject": "Task 1 for Litware",
                    "_regardingobjectid_value": "78914942-34cb-ed11-b596-0022481d68cd",
                    "activityid": "be9f6557-e2cc-ed11-b597-000d3a993550"
                },
                {
                    "@odata.etag": "W/\"80730903\"",
                    "subject": "Task 2 for Litware",
                    "_regardingobjectid_value": "78914942-34cb-ed11-b596-0022481d68cd",
                    "activityid": "605dbd65-e2cc-ed11-b597-000d3a993550"
                },
                {
                    "@odata.etag": "W/\"80730909\"",
                    "subject": "Task 3 for Litware",
                    "_regardingobjectid_value": "78914942-34cb-ed11-b596-0022481d68cd",
                    "activityid": "a718856c-e2cc-ed11-b597-000d3a993550"
                }
            ],
            "Account_Tasks@odata.nextLink": "[Organization URI]/api/data/v9.2/accounts(78914942-34cb-ed11-b596-0022481d68cd)/Account_Tasks?$select=subject",
            "contact_customer_accounts": [
                {
                    "@odata.etag": "W/\"80648695\"",
                    "fullname": "Susanna Stubberod (sample)",
                    "_parentcustomerid_value": "78914942-34cb-ed11-b596-0022481d68cd",
                    "contactid": "70bf4d48-34cb-ed11-b596-0022481d68cd"
                }
            ],
            "contact_customer_accounts@odata.nextLink": "[Organization URI]/api/data/v9.2/accounts(78914942-34cb-ed11-b596-0022481d68cd)/contact_customer_accounts?$select=fullname"
        }
    ],
    "@odata.nextLink": "[Organization URI]/api/data/v9.2/accounts?$select=name,accountid&$expand=Account_Tasks($select=subject),contact_customer_accounts($select=fullname)&$skiptoken=%3Ccookie%20pagenumber=%222%22%20pagingcookie=%22%253ccookie%2520page%253d%25221%2522%253e%253caccountid%2520last%253d%2522%257b7A914942-34CB-ED11-B596-0022481D68CD%257d%2522%2520first%253d%2522%257b78914942-34CB-ED11-B596-0022481D68CD%257d%2522%2520%252f%253e%253c%252fcookie%253e%22%20istracking=%22False%22%20/%3E"
}

Vergleichen Sie diese Antwort mit dem folgenden Beispiel, das eine verschachtelte $expand enthält. Scrollen Sie in der Beispielantwort horizontal, um zu sehen, dass nur die URL @odata.nextLink für das Kontoergebnis Paging-Informationen enthält.

Verschachteltes $expand auf kollektionsbasierten Navigations-Eigenschaften

Wenn Sie eine geschachtelte $expand irgendwo in Ihrer Abfrage verwenden und den Prefer: odata.maxpagesize-Anforderungsheader einbinden, wird Paging auf jede der erweiterten Sammlungen angewendet.

Jede erweiterte Navigationseigenschaft mit Sammlungswert gibt eine URL <property>@odata.nextLink zurück, die Informationen zum Paging enthält. Sie können diese URL verwenden, um eine separate GET-Anforderung zu senden, und sie gibt den nächsten Satz an Datensätzen zurück, die in Ihrer ursprünglichen Anforderung nicht einbezogen wurden.

Sie können die Optionen $top oder $orderby nicht verwenden, um die Gesamtzahl der Datensätze zu begrenzen, die mit einem verschachtelten $expand zurückgegeben werden. Der folgende Fehler wird zurückgegeben, wenn Sie diese Optionen verwenden:

{
    "error": {
        "code": "0x80060888",
        "message": "Only $select and $filter clause can be provided while doing $expand on many-to-one relationship or nested one-to-many relationship."
    }
}

Das folgende Beispiel basiert auf dem vorherigen Beispiel und verwendet die gleichen Daten. Der einzige Unterschied ist der Zusatz in der URL des verschachtelten $expand auf einer einwertigen Navigationseigenschaft, um den Besitzer des Kontakts zurückzugeben: ;$expand=owninguser($select=fullname).

Anforderung:

GET [Organization URI]/api/data/v9.2/accounts?$select=name,accountid
&$expand=Account_Tasks($select=subject),contact_customer_accounts($select=fullname;
$expand=owninguser($select=fullname))
Prefer: odata.maxpagesize=1
Accept: application/json  
OData-MaxVersion: 4.0  
OData-Version: 4.0  

Antwort:

HTTP/1.1 200 OK  
Content-Type: application/json; odata.metadata=minimal
Preference-Applied: odata.maxpagesize=1
OData-Version: 4.0 

{
    "@odata.context": "[Organization URI]/api/data/v9.2/$metadata#accounts(name,accountid,Account_Tasks(subject),contact_customer_accounts(fullname,owninguser(fullname)))",
    "value": [
        {
            "@odata.etag": "W/\"80649578\"",
            "name": "Litware, Inc. (sample)",
            "accountid": "78914942-34cb-ed11-b596-0022481d68cd",
            "Account_Tasks": [
                {
                    "subject": "Task 1 for Litware",
                    "activityid": "be9f6557-e2cc-ed11-b597-000d3a993550"
                }
            ],
            "Account_Tasks@odata.nextLink": "[Organization URI]/api/data/v9.2/accounts(78914942-34cb-ed11-b596-0022481d68cd)/Account_Tasks?$select=subject,description&$skiptoken=%3Ccookie%20pagenumber=%222%22%20pagingcookie=%22%253ccookie%2520page%253d%25221%2522%2520countOfRecords%253d%25221%2522%253e%253cactivityid%2520last%253d%2522%257bbe9f6557-e2cc-ed11-b597-000d3a993550%257d%2522%2520first%253d%2522%257bbe9f6557-e2cc-ed11-b597-000d3a993550%257d%2522%2520%252f%253e%253c%252fcookie%253e%22%20istracking=%22False%22%20/%3E",
            "contact_customer_accounts": [
                {
                    "fullname": "Susanna Stubberod (sample)",
                    "contactid": "70bf4d48-34cb-ed11-b596-0022481d68cd",
                    "owninguser": {
                        "fullname": "System Administrator",
                        "systemuserid": "4026be43-6b69-e111-8f65-78e7d1620f5e",
                        "ownerid": "4026be43-6b69-e111-8f65-78e7d1620f5e"
                    }
                }
            ],
            "contact_customer_accounts@odata.nextLink": "[Organization URI]/api/data/v9.2/accounts(78914942-34cb-ed11-b596-0022481d68cd)/contact_customer_accounts?$select=fullname&$expand=owninguser($select=fullname)&$skiptoken=%3Ccookie%20pagenumber=%222%22%20pagingcookie=%22%253ccookie%2520page%253d%25221%2522%2520countOfRecords%253d%25221%2522%253e%253ccontactid%2520last%253d%2522%257b70bf4d48-34cb-ed11-b596-0022481d68cd%257d%2522%2520first%253d%2522%257b70bf4d48-34cb-ed11-b596-0022481d68cd%257d%2522%2520%252f%253e%253c%252fcookie%253e%22%20istracking=%22False%22%20/%3E"
        }
    ],
    "@odata.nextLink": "[Organization URI]/api/data/v9.2/accounts?$select=name,accountid&$expand=Account_Tasks($select=subject,description),contact_customer_accounts($select=fullname;$expand=owninguser($select=fullname))&$skiptoken=%3Ccookie%20pagenumber=%222%22%20pagingcookie=%22%253ccookie%2520page%253d%25221%2522%2520countOfRecords%253d%25221%2522%253e%253caccountid%2520last%253d%2522%257b78914942-34cb-ed11-b596-0022481d68cd%257d%2522%2520first%253d%2522%257b78914942-34cb-ed11-b596-0022481d68cd%257d%2522%2520%252f%253e%253c%252fcookie%253e%22%20istracking=%22False%22%20/%3E"
}

Vergleichen Sie diese Antwort mit dem vorhergehenden Beispiel, das kein verschachteltes $expand verwendet. In dieser Antwort:

  • Der Prefer: odata.maxpagesize=1-Anforderungsheader wird auf die task-Datensätze angewendet, die mit Account_Tasks zurückgegeben werden.
  • Statt drei wird nur eine Aufgabe zurückgegeben.
  • Die URL Account_Tasks@odata.nextLink gibt die nächsten beiden Aufgaben zurück.
  • Scrollen Sie in der Beispielantwort horizontal, um zu sehen, dass die URLs Account_Tasks@odata.nextLink, contact_customer_accounts@odata.nextLink und @odata.nextLink Paging-Informationen enthalten.

Verschachtelte $expand mit N:N-Beziehungen

Wenn eine auflistungswertige Navigationseigenschaft eine n:n-Beziehung darstellt, erhalten Sie den folgenden Fehler, wenn Sie verschachtelte $expand Anweisungen verwenden:

{
   "error": {
      "code": "0x80060888",
      "message": "The navigation property '<NAME>' cannot be expanded. Only many-to-one relationships are supported for nested expansion."
   }
}

Wenn Sie beispielsweise die Dynamics Leadtabelle verwenden, die eine contactleads_association N:N-Beziehung mit der contact-Tabelle aufweist gibt die folgende Abfrage den Fehler zurück, da sie ;$expand=createdby enthält.

GET [Organization URI]/contacts?$select=fullname$expand=contactleads_association($select=fullname;$expand=createdby)

Um diesen Fehler zu vermeiden, können Sie die Abfrage mithilfe von FetchXml erstellen. Zum Beispiel:

<fetch>
  <entity name='contact'>
    <attribute name='fullname' />
    <link-entity name='contactleads' 
      from='contactid' 
      to='contactid' 
      alias='cl'>
      <link-entity name='lead' 
         from='leadid' 
         to='leadid' 
         alias='lead'>
        <attribute name='fullname' />
        <link-entity name='systemuser' 
           from='systemuserid' 
           to='createdby' 
           alias='systemuser'>
          <attribute name='fullname' />
        </link-entity>
      </link-entity>
    </link-entity>
  </entity>
</fetch>

Weitere Informationen zum Verknüpfen von Tabellen mithilfe von N:N-Beziehungen mit FetchXml

Nächste Schritte,

Erfahren Sie, wie Sie Zeilen anordnen.