Share via


retrieveMultipleRecords (Client-API-Referenz)

Ruft eine Sammlung von Tabellendatensätzen ab.

Syntax

Xrm.WebApi.retrieveMultipleRecords(entityLogicalName, options, maxPageSize).then(successCallback, errorCallback);

Parameter

Name des Dataflows Type Erforderlich Beschreibung
entityLogicalName String Ja Der logische Tabellenname des Datensatzes, den Sie abrufen wollen. Beispiel: account.
options String Nein OData-Systemabfrageoptionen oder FetchXML-Abfragen, um die Daten abzurufen. Siehe Optionen
maxPageSize Number Nein Geben Sie eine positive Zahl an, die die Anzahl der Tabelleneinträge angibt, die pro Seite zurückgegeben werden sollen. Wenn Sie diesen Parameter nicht angeben, wird der Wert standardmäßig auf maximal 5.000 Datensätze festgelegt.

Wenn die Anzahl der abzurufenden Datensätze mehr als der angegebene maxPageSize-Wert oder 5000 Datensätze beträgt, enthält die Spalte nextLink im zurückgegebenen Promise-Objekt einen Link zum Abrufen von Datensätzen.
successCallback Function Nein Eine Funktion, die aufgerufen wird, wenn Tabellendatensätze abgerufen werden. Siehe Rückgabewert
errorCallback Function Nein Eine Funktion zum Aufrufen, wenn der Vorgang fehlschlug.

Optionen

Die folgenden Systemabfrageoptionen werden unterstützt: $select, $top, $filter, $expand und $orderby.

Verwenden Sie die $expand-Systemabfrageoption, um zu steuern, welche Daten von den verbundenen Tabellen zurückgegeben werden. Wenn Sie nur den Namen der Navigationseigenschaft einschließen, rufen Sie alle Eigenschaften für in Verbindung stehende Datensätze ab. Sie können die Eigenschaften begrenzen, die für in Verbindung stehende Aufzeichnungen unter Verwendung der Systemabfrageoption $select in Klammern nach dem Namen der Navigationseigenschaft zurückgegeben werden. Verwenden Sie dieses für einzelwertige und sammlungswertige Navigationseigenschaften. Beachten Sie, dass wir für Offline nur die verschachtelte $select-Option innerhalb von $expand unterstützen.

Um eine FetchXML-Abfrage anzugeben, verwenden Sie die Spalte fetchXml, um die Abfrage anzugeben.

Hinweis

Sie müssen immer die Systemabfrageoption $select verwenden, um die für einen Tabellendatensatz zurückgegebenen Eigenschaften zu begrenzen, indem Sie eine kommagetrennte Liste von Eigenschaftsnamen einschließen. Dies ist eine wichtige Methode für die Leistungssteigerung. Wenn Eigenschaften nicht mithilfe von $select angegeben wurden, werden alle Eigenschaften zurückgegeben.

Sie geben die Abfrageoptionen beginnend mit ?an. Sie können auch mehrere Systemabfrageoptionen festlegen, indem Sie & zum Trennen der Abfrageoptionen verwenden.

Wenn Sie eine OData-Abfragezeichenfolge für den options-Parameter angeben, sollte die Abfrage für Sonderzeichen codiert werden.

Wenn Sie eine FetchXML-Abfrage für den options-Parameter angeben, sollte die Abfrage nicht codiert werden.

Siehe Beispiele weiter unten in diesem Thema, um zu sehen, wie Sie den options-Parameter für den Abruf mehrerer Szenarios definieren können.

Rückgabewert

Bei Erfolg gibt dies ein Versprechen-Objekt mit den folgenden Eigenschaften an successCallback zurück:

Name des Dataflows Type Beschreibung
entities Array von JSON-Objekten Jedes Objekt stellt einen abgerufenen Tabellendatensatz mit Spalten und ihren Werten als key: value-Paare dar. Die ID des Tabellendatensatzes wird standardmäßig abgerufen
nextLink String (Optional) Wenn die Anzahl von Datensätzen, die abgerufen werden, mehr als der Wert ist, der im maxPageSize-Parameter in der Anforderung angegeben ist, gibt dies die URL an, um die folgende Datensatzseite zurückzugeben.
fetchXmlPagingCookie (Optional) Für einen FetchXML-basierten retrieveMultipleRecords-Vorgang mit Paging, bei der die Gesamtzahl der Datensätze größer ist als der Paging-Wert, gibt dieses Attribut das Paging-Cookie zurück, das für einen nachfolgenden FetchXML-Vorgang zum Abrufen der nächsten Seite von Datensätzen verwendet werden kann.

Nicht unterstützte Attributtypen für OData-Abfrageoptionen in Mobile Offline

Die folgenden Spaltentypen werden nicht unterstützt, wenn ein Xrm.WebApi.retrieveMultipleRecords-Vorgang mit OData-Abfragezeichenfolgeoptionen (z. B. $select und $filter) im mobilen Offline-Modus durchgeführt wird. Sie sollten FetchXML verwenden, wenn der Attributtyp, mit dem Sie arbeiten müssen, in dieser Liste der nicht unterstützten Attributtypen enthalten ist.

  • MultiSelectPicklist
  • File
  • Image
  • ManagedProperty
  • CalendarRules
  • PartyList
  • Virtual

Nicht unterstützte Funktionen in Mobile Offline

Die folgenden Funktionen werden in Mobile Offline nicht unterstützt:

  • Funktionen für Gruppierung und Aggregation

Unterstützte Filtervorgänge pro Attributtyp in Mobile Offline mit FetchXML

Beim Arbeiten mit FetchXML werden die folgenden Operationen für alle Attributtypen unterstützt:

  • Equals (eq)
  • Nicht gleich (neq)
  • Null (null)
  • Nicht Null (not-null)

Die folgende Tabelle listet weitere Vorgänge auf, die für jeden Attributtyp unterstützt werden:

Attributtyp Unterstützte Vorgänge
BigInt, Dezimal, Double, Integer Größer als (gt)
Größer als oder gleich (gte)
Kleiner als (lt)
Kleiner als oder gleich (lte)
Boolesch, Kunde In (in)
Nicht In (not-in)
EntityName, Auswahlliste, Bundesland, Status Wie (like)
Nicht wie (not-like)
Beginnt mit (begins-with)
Beginnt nicht mit (not-begin-with)
Endet mit (ends-with)
Endet nicht mit (not-end-with)
In (in)
Nicht In (not-in)
Guid, Suche In (in)
Nicht In (not-in)
Entspricht der Benutzer-ID (eq-userid)
Entspricht nicht der Benutzer-ID (ne-userid)
Money Größer als (gt)
Größer als oder gleich (gte)
Kleiner als (lt)
Kleiner als oder gleich (lte)
In (in)
Nicht In (not-in)
Besitzer In (in)
Nicht In (not-in)
Entspricht der Benutzer-ID (eq-userid)
Entspricht nicht der Benutzer-ID (ne-userid)
Entspricht Benutzer oder Team (eq-useroruserteams)
String Wie (like)
Nicht wie (not-like)
Beginnt mit (begins-with)
Beginnt nicht mit (not-begin-with)
Endet mit (ends-with)
Endet nicht mit (not-end-with)
DateTime Bei oder nach (on-or-after)
On (on)
Am oder bevor (on-or-before)
Heute (today)
Morgen (tomorrow)
Gestern (yesterday)
Nächste sieben Tage (next-seven-days)
Letzte sieben Tage (last-seven-days)
Nächste Woche (next-week)
Letzte Woche (last-week)
Diese Woche (this-week)
Nächster Monat (next-month)
Letzter Monat (last-month)
Diesen Monat (this-month)
Nächstes Jahr (next-year)
Letztes Jahr (last-year)
Dieses Jahr (this-year)
Letzte X Tage (last-x-days)
Nächste X Tage (next-x-days)
Letzte X Wochen (last-x-weeks)
Nächste X Wochen (next-x-weeks)
Letzte X Monate (last-x-months)
Nächste X Monate (next-x-months)
Letzte X Jahre (last-x-years)
Nächste X Jahre (next-x-years)
Größer als (gt)
Größer als oder gleich (gte)
Kleiner als (lt)
Kleiner oder gleich (lte)

Beispiele

Die meisten der Szenarien und Beispiele, die in Abfragen-Daten mit Internet von beschrieben werden, können mithilfe der retrieveMultipleRecords-Methode erzielt werden. Einige der Beispiele werden unten aufgelistet.

Grundlegendes mehrfaches Abrufen

Dieses Beispiel fragt den Firmen-Tabellensatz ab und verwendet die $select und $top-Systemabfrageoptionen, um die Name-Eigenschaft für ersten drei Firmen zurückzugeben:

Xrm.WebApi.retrieveMultipleRecords("account", "?$select=name&$top=3").then(
    function success(result) {
        for (var i = 0; i < result.entities.length; i++) {
            console.log(result.entities[i]);
        }                    
        // perform additional operations on retrieved records
    },
    function (error) {
        console.log(error.message);
        // handle error conditions
    }
);

Grundlegendes Abrufen von mehreren mit FetchXML

In diesem Beispiel wird die Entität account mit fetchXML abgefragt.

var fetchXml = "?fetchXml=<fetch mapping='logical'><entity name='account'><attribute name='accountid'/><attribute name='name'/></entity></fetch>";

Xrm.WebApi.retrieveMultipleRecords("account", fetchXml).then(
    function success(result) {
        for (var i = 0; i < result.entities.length; i++) {
            console.log(result.entities[i]);
        }                    

        // perform additional operations on retrieved records
    },
    function (error) {
        console.log(error.message);
        // handle error conditions
    }
);

Abrufen oder Filtern nach Sucheigenschaften

Für die meisten einzelwertigen Navigationseigenschaften finden Sie eine berechnete, schreibgeschützte Eigenschaft, die die folgende Namenskonvention verwendet: _<name>_value wobei <name> der Name der einzelwertigen Navigationseigenschaft ist. Zu Filterzwecken kann auch der spezifische Wert der einwertigen Navigationseigenschaft verwendet werden. Für mobile Clients im Offline-Modus werden diese Syntaxoptionen jedoch nicht unterstützt, und der Name der einwertigen Navigationseigenschaft sollte sowohl zum Abrufen als auch zum Filtern verwendet werden. Außerdem wird der Vergleich der Navigationseigenschaften mit null im Offline-Modus nicht unterstützt.

Weitere Informationen: Such-Eigenschaften

Im Anschluss finden Sie Codebeispiele für beide Szenarien:

Für Online-Szenario (Verbindung mit Server)

Dieses Beispiel fragt den Firmen-Tabellensatz ab und verwendet die $select und $filter-Systemabfrageoptionen, um die Name-Eigenschaft und die primarycontactid-Eigenschaft für Firmen zurückzugeben, die einen bestimmten primären Kontakt haben:

Xrm.WebApi.retrieveMultipleRecords("account", "?$select=name,_primarycontactid_value&$filter=primarycontactid/contactid eq a0dbf27c-8efb-e511-80d2-00155db07c77").then(
    function success(result) {
        for (var i = 0; i < result.entities.length; i++) {
            console.log(result.entities[i]);
        }                    
        // perform additional operations on retrieved records
    },
    function (error) {
        console.log(error.message);
        // handle error conditions
    }
);

Für mobile offline Szenarien

Dieses Beispiel fragt den Firmen-Tabellensatz ab und verwendet die $select und $filter-Systemabfrageoptionen, um die Name-Eigenschaft und die primarycontactid-Eigenschaft für Firmen zurückzugeben, die einen bestimmten primären Kontakt haben, wenn Sie im Offline-Modus arbeiten:

Xrm.WebApi.retrieveMultipleRecords("account", "?$select=name,primarycontactid&$filter=primarycontactid eq a0dbf27c-8efb-e511-80d2-00155db07c77").then(
    function success(result) {
        for (var i = 0; i < result.entities.length; i++) {
            console.log(result.entities[i]);
        }                    
        // perform additional operations on retrieved records
    },
    function (error) {
        console.log(error.message);
        // handle error conditions
    }
);

Verwenden von FetchXML zum Abrufen oder Filtern von Sucheigenschaften (Online- und Offline-Szenario)

Sie können den FetchXML-Parameter online oder offline verwenden, um die Eigenschaften name und primarycontactid für Firmendatensätze abzurufen, die einen primären Kontakt haben, der einer Bedingung entspricht:

var fetchXml = `?fetchXml=
    <fetch mapping='logical'>
       <entity name='account'>
          <attribute name='name'/>
          <attribute name='primarycontactid'/>
          <link-entity name='contact' from='contactid' to='primarycontactid'>
             <filter type='and'>
                <condition attribute='lastname' operator='eq' value='Contoso'/>
             </filter>
          </link-entity>
       </entity>
    </fetch>`;

Xrm.WebApi.retrieveMultipleRecords("account", fetchXml).then(
    function success(result) {
        for (var i = 0; i < result.entities.length; i++) {
            console.log(result.entities[i]);
        }                    

        // perform additional operations on retrieved records
    },
    function (error) {
        console.log(error.message);
        // handle error conditions
    }
);

Geben Sie die Anzahl der in einer Seite zurückzugebenden Tabellen an

Im folgenden Beispiel wird gezeigt die Verwendung der maxPageSize-Parameter, um die Anzahl der in einer Seite anzuzeigenden Datensätze (3) anzugeben.

Xrm.WebApi.retrieveMultipleRecords("account", "?$select=name", 3).then(
    function success(result) {
        for (var i = 0; i < result.entities.length; i++) {
            console.log(result.entities[i]);
        }
        console.log("Next page link: " + result.nextLink);
        // perform additional operations on retrieved records
    },
    function (error) {
        console.log(error.message);
        // handle error conditions
    }
);

Dieses Beispiel veranschaulicht drei Datensätze und einen Link zur nächsten Seite. Im Folgenden finden Sie eine Beispielausgabe aus der Konsole in den Browserentwicklertools:

{@odata.etag: "W/"1035541"", name: "A. Datum", accountid: "475b158c-541c-e511-80d3-3863bb347ba8"}
@odata.etag: "W/"1035541""accountid: "475b158c-541c-e511-80d3-3863bb347ba8"name: "A. Datum"__proto__: Object
VM5595:4 
{@odata.etag: "W/"947306"", name: "Adventure Works", accountid: "a8a19cdd-88df-e311-b8e5-6c3be5a8b200"}
VM5595:4 
{@odata.etag: "W/"1033754"", name: "Alpine Ski House", accountid: "aaa19cdd-88df-e311-b8e5-6c3be5a8b200"}
VM5595:6 
Next page link: [Organization URI]/api/data/v9.0/accounts?$select=name&$skiptoken=%3Ccookie%20pagenumber=%222%22%20pagingcookie=%22%253ccookie%2520page%253d%25221%2522%253e%253caccountid%2520last%253d%2522%257bAAA19CDD-88DF-E311-B8E5-6C3BE5A8B200%257d%2522%2520first%253d%2522%257b475B158C-541C-E511-80D3-3863BB347BA8%257d%2522%2520%252f%253e%253c%252fcookie%253e%22%20istracking=%22False%22%20/%3E

Verwenden Sie den Abfragenanteil der URL nextLink-Eigenschaft als Wert für den options-Parameter in dem nächsten retrieveMultipleRecords-Aufruf, um die nächste Datensatzgruppe abzurufen. Sie sollten keine weiteren Systemabfrageoptionen für den Wert ändern oder anfügen. Für jede nachfolgende Anforderung weiterer Seiten sollten Sie denselben maxPageSize-Einstellungswert verwenden, der sich in der ursprünglichen Mehrfachanforderungen verwendet wurde. Zwischenspeichern Sie auch die zurückgegebenen Ergebnisse oder den Wert der nextLink-Eigenschaft, sodass Sie zu zuvor abgerufenen Seiten zurückkehren können.

Beispielsweise zum Anzeigen der nächsten Seite von Datensätzen abzurufen, werden wir die Abfrage als Teil die nextLink-URL dem options-Parameter übergeben:

Xrm.WebApi.retrieveMultipleRecords("account", "?$select=name&$skiptoken=%3Ccookie%20pagenumber=%222%22%20pagingcookie=%22%253ccookie%2520page%253d%25221%2522%253e%253caccountid%2520last%253d%2522%257bAAA19CDD-88DF-E311-B8E5-6C3BE5A8B200%257d%2522%2520first%253d%2522%257b475B158C-541C-E511-80D3-3863BB347BA8%257d%2522%2520%252f%253e%253c%252fcookie%253e%22%20istracking=%22False%22%20/%3E", 3).then(
    function success(result) {
        for (var i = 0; i < result.entities.length; i++) {
            console.log(result.entities[i]);
        }
        console.log("Next page link: " + result.nextLink);
        // perform additional operations on retrieved records
    },
    function (error) {
        console.log(error.message);
        // handle error conditions
    }
);

Gibt die nächste Seite des Resultsets zurück:

{@odata.etag: "W/"1035542"", name: "Blue Yonder Airlines", accountid: "aca19cdd-88df-e311-b8e5-6c3be5a8b200"}
VM5597:4 
{@odata.etag: "W/"1031348"", name: "City Power & Light", accountid: "aea19cdd-88df-e311-b8e5-6c3be5a8b200"}
VM5597:4 
{@odata.etag: "W/"1035543"", name: "Coho Winery", accountid: "b0a19cdd-88df-e311-b8e5-6c3be5a8b200"}
VM5597:6 
Next page link: [Organization URI]/api/data/v9.0/accounts?$select=name&$skiptoken=%3Ccookie%20pagenumber=%223%22%20pagingcookie=%22%253ccookie%2520page%253d%25222%2522%253e%253caccountid%2520last%253d%2522%257bB0A19CDD-88DF-E311-B8E5-6C3BE5A8B200%257d%2522%2520first%253d%2522%257bACA19CDD-88DF-E311-B8E5-6C3BE5A8B200%257d%2522%2520%252f%253e%253c%252fcookie%253e%22%20istracking=%22False%22%20/%3E

Wichtig

Der Wert der nextLink-Eigenschaft ist URI-codiert. Falls Sie den Wert vor dem Senden URI-codieren, verursachen die XML-Cookieinformationen in der URI einen Fehler.

FetchXML-Beispiel (Online-Szenario)

Das folgende Beispiel demonstriert die Verwendung des Parameters count der FetchXML, um die Anzahl der Datensätze (3) festzulegen, die auf einer Seite angezeigt werden sollen.

Hinweis

Der FetchXML-Paging-Cookie wird nur bei Online-Operationen mit retrieveMultipleRecords zurückgegeben. (Xrm.WebApi.online). Sie wird offline nicht unterstützt.

var fetchXml = "?fetchXml=<fetch mapping='logical' count='3'><entity name='account'><attribute name='accountid'/><attribute name='name'/></entity></fetch>";

Xrm.WebApi.online.retrieveMultipleRecords("account", fetchXml).then(
    function success(result) {
        for (var i = 0; i < result.entities.length; i++) {
            console.log(result.entities[i]);
        }          

        console.log("Paging cookie: " + result.fetchXmlPagingCookie);

        // perform additional operations on retrieved records
    },
    function (error) {
        console.log(error.message);
        // handle error conditions
    }
);

Dieses Beispiel zeigt drei Datensätze an und gibt ein FetchXML-Paging-Cookie zurück, um die Ergebnisse der nächsten Seite abzurufen, falls weitere Datensätze zur Ergebnismenge gehören. Im Folgenden finden Sie eine Beispielausgabe aus der Konsole in den Browserentwicklertools:

{
   "entities": [
      {
         "@odata.etag": "W/\"1035542\"",
         "accountid": "aca19cdd-88df-e311-b8e5-6c3be5a8b200",
         "name": "Blue Yonder Airlines"
      },
      {
         "@odata.etag": "W/\"1031348\"",
         "accountid": "aea19cdd-88df-e311-b8e5-6c3be5a8b200",
         "name": "City Power & Light"
      },
      {
         "@odata.etag": "W/\"1035543\"",
         "accountid": "b0a19cdd-88df-e311-b8e5-6c3be5a8b200",
         "name": "Coho Winery"
      }
   ],
   "fetchXmlPagingCookie": "<cookie pagenumber=\"2\" pagingcookie=\"%253ccookie%2520page%253d%25221%2522%253e%253caccountid%2520last%253d%2522%257b0748C6EC-55A8-EB11-B1B5-000D3AFEF6FA%257d%2522%2520first%253d%2522%257bFC47C6EC-55A8-EB11-B1B5-000D3AFEF6FA%257d%2522%2520%252f%253e%253c%252fcookie%253e\" istracking=\"False\" />"
}

Wir können die fetchXmlPagingCookie wie im folgenden Beispiel verwenden, um große Ergebnismengen mit Paging abzurufen.

function CreateXml(fetchXml, pagingCookie, page, count) {
  var domParser = new DOMParser();
  var xmlSerializer = new XMLSerializer();

  var fetchXmlDocument = domParser.parseFromString(fetchXml, "text/xml");

  if (page) {
    fetchXmlDocument
      .getElementsByTagName("fetch")[0]
      .setAttribute("page", page.toString());
  }

  if (count) {
    fetchXmlDocument
      .getElementsByTagName("fetch")[0]
      .setAttribute("count", count.toString());
  }

  if (pagingCookie) {
    var cookieDoc = domParser.parseFromString(pagingCookie, "text/xml");
    var innerPagingCookie = domParser.parseFromString(
      decodeURIComponent(
        decodeURIComponent(
          cookieDoc
            .getElementsByTagName("cookie")[0]
            .getAttribute("pagingcookie")
        )
      ),
      "text/xml"
    );
    fetchXmlDocument
      .getElementsByTagName("fetch")[0]
      .setAttribute(
        "paging-cookie",
        xmlSerializer.serializeToString(innerPagingCookie)
      );
  }

  return xmlSerializer.serializeToString(fetchXmlDocument);
}

function retrieveAllRecords(entityName, fetchXml, page, count, pagingCookie) {
  if (!page) {
    page = 0;
  }

  return retrievePage(entityName, fetchXml, page + 1, count, pagingCookie).then(
    function success(pageResults) {
      if (pageResults.fetchXmlPagingCookie) {
        return retrieveAllRecords(
          entityName,
          fetchXml,
          page + 1,
          count,
          pageResults.fetchXmlPagingCookie
        ).then(
          function success(results) {
            if (results) {
              return pageResults.entities.concat(results);
            }
          },
          function error(e) {
            throw e;
          }
        );
      } else {
        return pageResults.entities;
      }
    },
    function error(e) {
      throw e;
    }
  );
}

function retrievePage(entityName, fetchXml, pageNumber, count, pagingCookie) {
  var fetchXml =
    "?fetchXml=" + CreateXml(fetchXml, pagingCookie, pageNumber, count);

  return Xrm.WebApi.online.retrieveMultipleRecords(entityName, fetchXml).then(
    function success(result) {
      return result;
    },
    function error(e) {
      throw e;
    }
  );
}

var count = 3;
var fetchXml =
  '<fetch mapping="logical"><entity name="account"><attribute name="accountid"/><attribute name="name"/></entity></fetch>';

retrieveAllRecords("account", fetchXml, null, count, null).then(
  function success(result) {
    console.log(result);

    // perform additional operations on retrieved records
  },
  function error(error) {
    console.log(error.message);
    // handle error conditions
  }
);

Verwenden Sie die $erweitern-Systemabfrageoption in den Navigationseigenschaften, um zu steuern, welche Daten von den verbundenen Entitäten zurückgegeben werden. Im folgenden Beispiel wird gezeigt, wie der Kontakt für alle Firmendatensätze abgerufen wird. Für die in Verbindung stehenden Kontaktdatensätze rufen wir nur die contactid und fullname ab:

Xrm.WebApi.retrieveMultipleRecords("account", "?$select=name&$top=3&$expand=primarycontactid($select=contactid,fullname)", 3).then(
    function success(result) {
        for (var i = 0; i < result.entities.length; i++) {
            console.log(result.entities[i]);
        }        
        // perform additional operations on retrieved records
    },
    function (error) {
        console.log(error.message);
        // handle error conditions
    }
);

Der obige Code gibt ein Ergebnis mit einem Schema wie dem folgenden zurück:

{
   "entities": [
      {
         "@odata.etag": "W/\"1459919\"",
         "name": "Test Account",
         "accountid": "119edfac-19c6-ea11-a81a-000d3af5e732",
         "primarycontactid": {
            "contactid": "6c63a1b7-19c6-ea11-a81a-000d3af5e732",
            "fullname": "Test Contact"
         }
      }
   ]
}

Hinweis

Verwenden Sie ähnlich wie im Online-Szenario die $expand-Systemabfrageoption zum Abrufen von Daten aus verwandten Tabellen im Offline-Modus. N:N-Beziehungen werden jedoch im Offline-Modus nicht unterstützt.

Veraltete Methode für mobile offline Szenarien

Hinweis

@odata.nextLink ist für mobile Offline-Szenarien veraltet. Es wird zwar weiterhin für vorhandene Anpassungen unterstützt, es wird jedoch nicht mehr empfohlen, es zu verwenden.

Eine $expand-Offline-Operation gibt eine @odata.nextLink-Anmerkung mit Informationen darüber zurück, wie Sie zu den Informationen des zugehörigen Datensatzes gelangen. Wir benutzen die Parameter id, entityType und options dieser Anmerkung, um eine oder mehrere zusätzliche Xrm.WebApi.offline.retrieveRecord-Anfragen zu konstruieren. Der folgende Code stellt ein vollständiges Beispiel dafür bereit:

Xrm.WebApi.offline.retrieveMultipleRecords("account", "?$select=name&$top=3&$expand=primarycontactid($select=contactid,fullname)").then(function(resultSet) {
    /**
     *  resultSet has a structure like:
     *  {
     *      "entities": [
     *          {
     *              "accountid": "119edfac-19c6-ea11-a81a-000d3af5e732",
     *              "name": "Test Account",
     *              "primarycontactid@odata.nextLink": {
     *                  "API": "{Xrm.Mobile.offline}.{retrieveRecord}",
     *                  "id": "119edfac-19c6-ea11-a81a-000d3af5e732",
     *                  "entityType": "account",
     *                  "options": "?$select=accountid&$expand=primarycontactid($select=contactid,fullname)&$getOnlyRelatedEntity=true"
     *              },
     *              "primarycontactid": {}
     *          }
     *      ]
     *  }
     *
     *  Notice the empty `primarycontactid` property but an additional `primarycontactid@odata.nextLink` 
     *  annotation that lets us know how to get to the linked data that we need.
     **/

    var promises = resultSet.entities.map(function(outerItem) {
        // We do a retrieveRecord() for every item in the result set of retrieveMultipleRecords() and then
        // combine the results into the retrieveMultipleRecords() result set itself.
       return Xrm.WebApi.offline.retrieveRecord(
           outerItem["primarycontactid@odata.nextLink"].entityType, 
           outerItem["primarycontactid@odata.nextLink"].id,
           outerItem["primarycontactid@odata.nextLink"].options
        ).then(function(innerResult) {            
            if (innerResult.value.length === 0) {
                return outerItem;
            }
            outerItem.primarycontactid = innerResult.value[0];
            return outerItem;
        });
    });

    return Promise.all(promises);
}).then(function(allResults) {
    for (var i = 0; i < allResults.length; i++) {
        console.log(allResults[i]);
    }
    // perform additional operations on retrieved records
}, function(error) {
    console.error(error);
    // handle error conditions
});

Weitere Beispiele des Abrufens von mehreren Datensätzen mit dem Internet API siehe Abrufen von Daten mit der Web-API.

Datenabfrage mit Web-API
Xrm.WebApi.retrieveRecord
Xrm.WebApi

Hinweis

Können Sie uns Ihre Präferenzen für die Dokumentationssprache mitteilen? Nehmen Sie an einer kurzen Umfrage teil. (Beachten Sie, dass diese Umfrage auf Englisch ist.)

Die Umfrage dauert etwa sieben Minuten. Es werden keine personenbezogenen Daten erhoben. (Datenschutzbestimmungen).