retrieveMultipleRecords (sklic na API odjemalca)

Pridobi zbirko zapisov tabele.

Sintaksa

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

Parametri

Imenu Vrsta Zahtevano Opis
entityLogicalName String Da Logično ime tabele zapisov, ki jih želite pridobiti. Primer: account.
options String Ne Možnosti sistemske poizvedbe OData ali poizvedba FetchXML za pridobivanje podatkov. Oglejte si možnosti
maxPageSize Število Ne Navedite pozitivno število, ki označuje število zapisov tabele, ki bodo vrnjeni na stran. Če tega parametra ne navedete, je vrednost privzeto nastavljena na največ 5000 zapisov za standardne tabele, 500 za elastične tabele.

Če je število zapisov maxPageSize , ki so pridobljeni, večje od določene vrednosti ali največje omejitve za vrsto tabele, nextLink stolpec v vrnjenem predmetu obljube vsebuje povezavo za pridobivanje zapisov.
successCallback Function Ne Funkcija, ki pokliče, ko so pridobljeni zapisi tabele. Glejte Vrnjena vrednost
errorCallback Function Ne Funkcija, ki jo pokličete, ko operacija ne uspe. Podan je predmet s temi lastnostmi:
- errorCode:Številka. Koda napake kot pozitivno decimalno število. Koda napake, dokumentirana kot 0x80040333 bo na primer vrnjena kot 2147746611.
- message:Niz. Sporočilo o napaki, ki opisuje težavo.

Možnosti

Podprte so te možnosti sistemske poizvedbe: $select, $top, $filter, $expandin $orderby.

Z možnostjo $expand sistemske poizvedbe lahko nadzorujete, kateri podatki iz povezanih tabel bodo vrnjeni. Če vključite le ime lastnosti krmarjenja, boste prejeli vse lastnosti povezanih zapisov. Lastnosti, vrnjene za sorodne zapise, $select lahko omejite z možnostjo sistemske poizvedbe v oklepajih za imenom lastnosti krmarjenja. To uporabite za lastnosti krmarjenja z eno vrednostjo in za lastnosti zbirke . Upoštevajte, da za način brez povezave podpiramo le ugnezdeno $select možnost v $expand.

Če želite določiti poizvedbo FetchXML, s fetchXml stolpcem določite poizvedbo.

opomba,

Če želite omejiti lastnosti, vrnjene $selectza zapis tabele, morate vedno uporabiti možnost sistemske poizvedbe, tako da dodate seznam imen lastnosti, ločenih z vejico. To je pomembna najboljša praksa uspešnosti. Če lastnosti niso določene z uporabo $select, bodo vrnjene vse lastnosti.

Določite možnosti poizvedbe, ki se začnejo z ?. Določite lahko tudi več sistemskih možnosti poizvedbe, tako da & ločite možnosti poizvedbe.

Ko določite niz poizvedbe OData za options parameter, mora biti poizvedba kodirana za posebne znake.

Ko določite poizvedbo FetchXML za options parameter, poizvedbe ne morete kodirati.

Glejte Primeri, če si želite ogledati, kako lahko določite options parameter za različne primere za pridobivanje več scenarijev.

Vrednost vračila

Ob uspehu vrne obljubni predmet s successCallback temi lastnostmi:

Imenu Vrsta Opis
entities Matrika predmetov JSON Vsak predmet predstavlja pridobljen zapis tabele, ki vsebuje stolpce in njihove vrednosti kot key: value pare. ID zapisa tabele je privzeto pridobljen
nextLink String (izbirno) Če je število zapisov, ki jih želite maxPageSize pridobiti, večje od vrednosti, določene v parametru v zahtevi, ta vrne URL, da vrne naslednjo stran zapisov.
fetchXmlPagingCookie (izbirno) Za operacijo, ki temelji na fetchXml retrieveMultipleRecords , z ostranjevanjem, pri katerem je skupno število zapisov večje od vrednosti ostranjevalne vrednosti, ta atribut vrne piškotek za ostranjevanje, ki ga je mogoče uporabiti za nadaljnjo operacijo fetchXml za pridobivanje naslednje strani zapisov.

Nepodprte vrste atributov za možnosti poizvedbe OData v mobilnem načinu brez povezave

Te vrste stolpcev niso podprte pri postopku Xrm.WebApi.retrieveMultipleRecords z možnostmi niza poizvedbe OData ( $select$filterna primer in ) v načinu mobilnega načina brez povezave. Če je vrsta atributa, s katero morate delati, na tem seznamu nepodprtih vrst atributov, uporabite FetchXML.

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

Nepodprte funkcije v mobilnem načinu brez povezave

V mobilni napravi brez povezave niso podprte te funkcije:

  • Funkcije združevanja in združevanja

Podprte operacije filtriranja na vrsto atributa v mobilnem načinu brez povezave s funkcijo FetchXML

Pri delu s funkcijo FetchXML so podprte te operacije za vse vrste atributov:

  • Je enako (eq)
  • Ni enako (neq)
  • Nič (null)
  • Brez vrednosti (not-null)

V spodnji tabeli je navedenih več operacij, ki so podprte za vsako vrsto atributa:

Vrsta atributa Podprte operacije
BigInt, Decimalno, Dvojno, Celo število Večje kot (gt)
Večje ali enako (gte)
Manjše kot (lt)
Manjše ali enako (lte)
Logična vrednost, stranka V (in)
Ni v (not-in)
EntityName, Picklist, State, Status Všeč mi je (like)
Ni kot (not-like)
Se začne z (begins-with)
Se ne začne z (not-begin-with)
Se konča z (ends-with)
Se ne konča z (not-end-with)
V (in)
Ni v (not-in)
Guid, iskanje V (in)
Ni v (not-in)
Je enako ID-ju uporabnika (eq-userid)
Ni enako ID-ju uporabnika (ne-userid)
Denar Večje kot (gt)
Večje ali enako (gte)
Manjše kot (lt)
Manjše ali enako (lte)
V (in)
Ni v (not-in)
Lastnik V (in)
Ni v (not-in)
Je enako ID-ju uporabnika (eq-userid)
Ni enako ID-ju uporabnika (ne-userid)
Je enako uporabniku ali skupini (eq-useroruserteams)
String Všeč mi je (like)
Ni kot (not-like)
Se začne z (begins-with)
Se ne začne z (not-begin-with)
Se konča z (ends-with)
Se ne konča z (not-end-with)
Datum in čas Ob ali za (on-or-after)
Vklop (on)
Ob ali pred (on-or-before)
Danes (today)
Jutri (tomorrow)
Včeraj (yesterday)
Naslednjih sedem dni (next-seven-days)
Zadnjih sedem dni (last-seven-days)
Naslednji teden (next-week)
Prejšnji teden (last-week)
Ta teden (this-week)
Naslednji mesec (next-month)
Prejšnji mesec (last-month)
Ta mesec (this-month)
Naslednje leto (next-year)
Zadnje leto (last-year)
To leto (this-year)
Zadnji X dnevi (last-x-days)
Naslednji X dnevi (next-x-days)
Zadnji X tedni (last-x-weeks)
Naslednji X tedni (next-x-weeks)
Zadnji x meseci (last-x-months)
Naslednji x meseci (next-x-months)
Zadnja X leta (last-x-years)
Naslednja X leta (next-x-years)
Večje kot (gt)
Večje ali enako (gte)
Manjše kot (lt)
Manjše ali enako (lte)

Primeri

Večino scenarijev/primerov, omenjenih v podatkih poizvedbe z uporabo spletnega API-ja , je mogoče doseči z metodo retrieveMultipleRecords . Nekateri primeri so navedeni spodaj.

Osnovno pridobivanje več

V tem primeru je poizvedba za nabor tabel z $select$top računi uporabljena ter možnosti sistemske poizvedbe za vrnitev lastnosti imena za prve tri račune:

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

Basic retrieve multiple with FetchXML

V tem primeru se poizvedba za account entiteto uporabi fetchXML.

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

Pridobivanje ali filtriranje po lastnostih iskanja

Za večino lastnosti krmarjenja z eno vrednostjo boste našli izračunano lastnost samo za branje, ki uporablja to konvencijo poimenovanja: _<name>_value<name> kjer je ime lastnosti krmarjenja z eno vrednostjo. Za namene filtriranja je mogoče uporabiti tudi določeno vrednost lastnosti krmarjenja z eno vrednostjo. Vendar pa za mobilne odjemalce v načinu brez povezave te možnosti sintakse niso podprte, ime lastnosti krmarjenja z eno vrednostjo pa je treba uporabiti za pridobivanje in filtriranje. Primerjava lastnosti krmarjenja z ničelno vrednostjo ni podprta v načinu brez povezave.

Več informacij: Lastnosti iskanja

Tukaj so primeri kod za oba scenarija:

Za scenarij v spletu (povezava s strežnikom)

V tem primeru je poizvedba $select$filter v tabeli z računi nastavljena in uporablja možnosti sistemske poizvedbe za vrnitev imena in lastnosti primarycontactid za račune, ki imajo določen primarni stik:

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

Za scenarij brez povezave za mobilne naprave

V tem primeru se izvede $select$filter poizvedba v tabeli z računi ter uporabi možnosti sistemske poizvedbe za vrnitev imena in lastnosti primarycontactid za račune, ki imajo določen primarni stik, ko delajo v načinu brez povezave:

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

Uporaba fetchXML-a za pridobivanje ali filtriranje po lastnostih iskanja (scenarij s povezavo in brez povezave)

S parametrom lahko v FetchXML spletu nameprimarycontactid ali brez povezave pridobite lastnost in za zapise računa, ki imajo primarni stik, ki se ujema s pogojem:

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

Navedite število tabel, ki jih želite vrniti na strani

V spodnjem primeru je prikazana uporaba maxPageSize parametra za določanje števila zapisov (3), ki bodo prikazani na strani.

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

V tem primeru bodo prikazani trije zapisi in povezava do naslednje strani. Oglejte si primer izhoda iz konzole v orodjih za razvijalce brskalnika:

{@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

Uporabite del poizvedbe v URL-ju nextLinkoptions v lastnosti kot vrednost za parameter v naslednjem klicu retrieveMultipleRecords , da zahtevate naslednji nabor zapisov. Vrednosti ne spreminjajte ali dodajte več možnosti sistemske poizvedbe. Za vsako nadaljnjo zahtevo za več strani uporabite isto maxPageSize vrednost, uporabljeno v prvotni zahtevi za pridobivanje več strani. Poleg tega predpomnite vrnjene rezultate ali vrednost lastnosti nextLink, tako da je mogoče vrniti predhodno pridobljene strani.

Če želite na primer dobiti naslednjo stran zapisov, nextLink bomo del URL-ja poizvedbe preneseli v 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
    }
);

To bo vrnilo naslednjo stran nabora rezultatov:

{@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

Pomembno

Vrednost lastnosti je nextLink kodirana z URI-jem. Če URI kodiraj vrednost, preden jo pošljete, bodo informacije o piškotkih XML v URL-ju povzročile napako.

Primer FetchXML (spletni scenarij)

V spodnjem primeru je prikazana uporaba count parametra parametra FetchXML za določanje števila zapisov (3), ki bodo prikazani na strani.

opomba,

Piškotek za ostranjevanje FetchXML je vrnjen le za spletne retrieveMultipleRecords operacije. (Xrm.WebApi.online). Funkcija ni podprta brez povezave.

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

V tem primeru bodo prikazani trije zapisi, piškotek za ostranjevanje FetchXML pa bo vrnjen v pridobivanje rezultatov naslednje strani, če obstaja več zapisov, ki pripadajo naboru rezultatov. Oglejte si primer izhoda iz konzole v orodjih za razvijalce brskalnika:

{
   "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\" />"
}

Za pridobivanje velikih naborov fetchXmlPagingCookie rezultatov z ostranjevanjem lahko uporabite, kot je prikazano v spodnjem primeru.

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

Uporabite možnost $expand v lastnostih krmarjenja za nadzor podatkov, ki so vrnjeni iz povezanih tabel. V spodnjem primeru je prikazano, kako pridobite stik za vse zapise kupca. Za povezane zapise stikov pridobivamo contactidfullnamele in :

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

Zgornji del kode vrne rezultat s shemo, kot je:

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

opomba,

Podobno kot pri spletnem scenariju lahko z možnostjo $expand sistemska poizvedba pridobite podatke iz povezanih tabel v načinu brez povezave. Vendar pa relacije »mnogo proti mnogo« niso podprte v načinu brez povezave.

Zastarela metoda za scenarij brez povezave za mobilne naprave

opomba,

Naprava @odata.nextLink je zastarela za scenarije brez povezave za prenosne naprave. Čeprav je še vedno podprta za obstoječe prilagoditve, je ne priporočamo več.

Funkcija brez $expand vrne opombo @odata.nextLink z informacijami o tem, kako pridobiti informacije o povezanem zapisu. Za izdelavo idene entityTypeali več options dodatnih Xrm.WebApi.offline.retrieveRecord zahtev uporabljamo , in parameter te opombe. V tem delu kode je popoln primer, kako to naredite:

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

Če želite več primerov pridobivanja več zapisov s spletnim API-jem, glejte Podatki poizvedbe s spletnim API-jem.

Poizvedovanje podatkov s spletnim API-jem
Xrm.WebApi.retrieveRecord
Xrm.WebApi