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 | Eigenschaft |
---|---|---|---|
entityLogicalName |
String | Ja | Der logische Tabellenname des Datensatzes, den Sie abrufen wollen. Beispiel: account . |
options |
String | Nr. | OData-Systemabfrageoptionen oder FetchXML-Abfragen, um die Daten abzurufen. Siehe Optionen |
maxPageSize |
Number | Nr. | 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
.
Anmerkung
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 | 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 mehrfaches Abrufen 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
}
);
Verwendung von FetchXML zum Abrufen oder Filtern nach Such-Eigenschaften (Online- und Offlineszenario)
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
des FetchXML, um die Anzahl der Datensätze (3) festzulegen, die auf einer Seite angezeigt werden sollen.
Anmerkung
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
}
);
Abrufen verwandter Tabellen durch Erweitern von einfach bewerteten Navigationseigenschaften
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"
}
}
]
}
Anmerkung
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
Anmerkung
@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.
Ähnliche Artikel
Datenabfrage mit Web-API
Xrm.WebApi.retrieveRecord
Xrm.WebApi