retrieveMultipleRecords (Client-API-Referenz)

Ruft eine Sammlung von Tabellendatensätzen ab.

Syntax

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

Parameter

Name typ 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 Tabellendatensätze angibt, die pro Seite zurückgegeben werden sollen. Wenn Sie diesen Parameter nicht angeben, ist der Standardwert die maximale Grenze von 5.000 Datensätzen für Standardtabellen und 500 für elastische Tabellen.

Wenn die Anzahl der datensätze, die Sie abrufen, größer als der angegebene maxPageSize Wert oder der maximale Grenzwert für den Tabellentyp ist, enthält die nextLink Spalte im zurückgegebenen Zusageobjekt 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. Es wird ein Objekt mit den folgenden Eigenschaften übergeben:
- errorCode: Zahl. Der Fehlercode als positive Dezimalzahl. Der als 0x80040333 dokumentierte Fehlercode wird zum Beispiel als 2147746611 zurückgegeben.
- message: Zeichenfolge Eine Fehlermeldung, die das Problem beschreibt.

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 für verwandte Datensätze zurückgegebenen Eigenschaften einschränken, indem Sie die $select Systemabfrageoption in Klammern nach dem Namen der Navigationseigenschaft verwenden. Verwenden Sie diese Option sowohl für einzelwertige als auch für eigenschaften mit Sammlungswerten . Bei Offline wird nur die geschachtelte $select Option innerhalb der $expand Option unterstützt.

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

Anmerkung

Sie müssen immer die $select Systemabfrageoption verwenden, um die eigenschaften einzuschränken, die für einen Tabellendatensatz zurückgegeben werden, indem Sie eine durch Trennzeichen getrennte Liste von Eigenschaftennamen einschließen. Diese Praxis ist wichtig für die Leistung. Wenn Sie keine Eigenschaften mithilfe von $selectEigenschaften angeben, werden alle Eigenschaften zurückgegeben.

Geben Sie die Abfrageoptionen beginnend mit ?. 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, codieren Sie die Abfrage für Sonderzeichen.

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

Informationen zum Definieren des options Parameters für verschiedene Abrufen mehrerer Szenarien finden Sie in den Beispielen.

Zurückgegebener Wert

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

Name typ 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 im mobilen Offlinemodus

Die folgenden Spaltentypen werden nicht unterstützt, wenn Sie OData-Abfragezeichenfolgenoptionen (z$select. B. und $filter) im mobilen Offlinemodus verwendenXrm.WebApi.retrieveMultipleRecords. Verwenden Sie FetchXML, wenn Sie mit einem Attributtyp in dieser Liste nicht unterstützter Attributtypen arbeiten müssen.

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

Nicht unterstützte Features im mobilen Offlinemodus

Die folgenden Features werden im mobilen Offlinemodus nicht unterstützt:

  • Gruppierungs- und Aggregationsfeatures

Unterstützte Filtervorgänge pro Attributtyp im mobilen Offlinemodus mithilfe von FetchXML

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

  • Gleich (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)
Ein (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

Sie können die retrieveMultipleRecords-Methode verwenden, um die meisten szenarien und Beispiele zu erzielen, die in Abfragedaten mithilfe der Web-API erwähnt werden. Einige beispiele sind im folgenden Abschnitt aufgeführt.

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 mehrfaches Abrufen mit FetchXML

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

var fetchXml = "?fetchXml=<fetch><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 Benennungskonvention verwendet: _<name>_value Dabei handelt es sich um <name> den Namen der einzelwertigen Navigationseigenschaft. Für Filterzwecke können Sie auch den spezifischen Wert der einzelwertigen Navigationseigenschaft verwenden. Diese Syntaxoptionen werden jedoch für mobile Clients im Offlinemodus nicht unterstützt. Verwenden Sie den Namen der einzelwertigen Navigationseigenschaft zum Abrufen und Filtern. Außerdem unterstützt der Offlinemodus den Vergleich von Navigationseigenschaften nicht mit Null.

Weitere Informationen: Such-Eigenschaften

Hier sind 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

In diesem Beispiel werden die Kontentabellensatz abfragen und die $select Abfrageoptionen und $filter Systemabfrageoptionen verwendet, um die Eigenschaft "Name" und "primarycontactid" für Konten zurückzugeben, die einen bestimmten primären Kontakt haben, wenn Sie im Offlinemodus 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
    }
);

Verwendung von FetchXML zum Abrufen oder Filtern nach Such-Eigenschaften (Online- und Offlineszenario)

Verwenden Sie den FetchXML Parameter, während sie online oder offline sind, um die name Und-Eigenschaft primarycontactid für Kontodatensätze abzurufen, die einen primären Kontakt haben, der einer Bedingung entspricht:

var fetchXml = `?fetchXml=
    <fetch>
       <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

Das folgende Beispiel zeigt, wie sie den maxPageSize Parameter verwenden, um anzugeben, dass jede Seite drei Datensätze anzeigt.

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
    }
);

In diesem Beispiel werden drei Datensätze und ein Link zur nächsten Seite angezeigt. 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 Abfrageteil in der URL in der nextLink Eigenschaft als Wert für den options Parameter im nächsten retrieveMultipleRecords-Aufruf , um den nächsten Datensatzsatz anzufordern. Ändern Oder fügen Sie dem Wert keine weiteren Systemabfrageoptionen hinzu. Verwenden Sie für jede nachfolgende Anforderung für weitere Seiten denselben maxPageSize Wert, den Sie im ursprünglichen Abrufen mehrerer Anforderungen verwendet haben. Zwischenspeichern Sie außerdem die zurückgegebenen Ergebnisse oder den Wert der nextLink Eigenschaft, damit Ihre App zuvor abgerufene Seiten zurückgeben kann.

Um beispielsweise die nächste Seite von Datensätzen abzurufen, übergeben Sie den Abfrageteil der nextLink URL an den options Parameter:

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
    }
);

Diese Anforderung 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. Wenn Sie den Wert vor dem Senden codieren, verursacht die XML-Cookieinformationen in der URL einen Fehler.

FetchXML-Beispiel (Onlineszenario)

Das folgende Beispiel zeigt, wie Sie den count Parameter in FetchXML verwenden, um anzugeben, dass jede Seite drei Datensätze anzeigt.

Anmerkung

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

var fetchXml = "?fetchXml=<fetch 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
    }
);

In diesem Beispiel werden drei Datensätze angezeigt und ein FetchXML-Paging-Cookie zurückgegeben, um die Ergebnisse der nächsten Seite abzurufen, wenn weitere Datensätze im Resultset vorhanden sind. 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\" />"
}

Um große Resultsets mit Paging abzurufen, verwenden Sie die fetchXmlPagingCookie im folgenden Beispiel gezeigte Methode.

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><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 $expand Systemabfrageoption in den Navigationseigenschaften, um die Daten zu steuern, die aus verwandten Tabellen zurückgegeben werden. Das folgende Beispiel zeigt, wie der Kontakt für alle Kontodatensätze abgerufen wird. Für die zugehörigen Kontaktdatensätze rufen Sie nur die und fullname die contactid Felder 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 vorangehende Code gibt ein Ergebnis mit einem Schema wie:

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

Anmerkung

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

Veraltete Methode für mobile offline Szenarien

Anmerkung

@odata.nextLink ist für mobile Offline-Szenarien veraltet. Während es für vorhandene Anpassungen weiterhin unterstützt wird, verwenden Sie sie nicht mehr.

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. Verwenden Sie die idParameter entityTypeund options Parameter dieser Anmerkung, um eine oder mehrere zusätzliche Xrm.WebApi.offline.retrieveRecord Anforderungen zu erstellen. Der folgende Code enthält ein vollständiges Beispiel für die vorgehensweise:

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 zum Abrufen mehrerer Datensätze mithilfe der Web-API finden Sie unter "Abfragedaten mithilfe der Web-API".

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