Zdieľať cez


retrieveMultipleRecords (odkaz na rozhranie API klienta)

Načíta kolekciu záznamov tabuľky.

Syntax

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

Parametre

Meno Typ Požaduje sa Popis
entityLogicalName String Áno Logický názov tabuľky záznamov, ktoré chcete načítať. Napríklad: account.
options String Nie Možnosti dotazu systému OData alebo dotaz FetchXML na načítanie údajov. Pozrite si tému Možnosti
maxPageSize Číslo Nie Zadajte kladné číslo, ktoré udáva počet záznamov tabuľky, ktoré sa majú vrátiť na stranu. Ak tento parameter nezadáte, hodnota sa nastaví na maximálny limit 5 000 záznamov pre štandardné tabuľky, 500 pre elastické tabuľky.

Ak je počet načítaných záznamov vyšší ako zadaná maxPageSize hodnota alebo maximálny limit pre typ tabuľky, nextLink stĺpec vo vrátenom objekte sľubu bude obsahovať prepojenie na načítanie záznamov.
successCallback Function Nie Funkcia, ktorá sa zavolá pri načítavaní záznamov tabuľky. Zobraziť vrátenú hodnotu
errorCallback Function Nie Funkcia, ktorá sa volá v prípade zlyhania operácie. Odovzdá sa objekt s nasledujúcimi vlastnosťami:
- errorCode:Číslo. Kód chyby ako kladné desatinné číslo. Napríklad kód chyby zdokumentovaný ako 0x80040333 sa vráti ako 2147746611.
- message:Povrázok. Chybové hlásenie popisujúce problém.

Možnosti

Podporované sú nasledujúce možnosti systémového dotazu: $select, $top, $filter, $expanda $orderby.

Pomocou možnosti systémového $expand dotazu môžete kontrolovať, ktoré údaje zo súvisiacich tabuliek sa vrátia. Ak zahrniete len názov vlastnosti navigácie, zobrazia sa všetky vlastnosti súvisiacich záznamov. Vlastnosti vrátené pre súvisiace záznamy môžete obmedziť pomocou možnosti systémového $select dotazu v zátvorkách za názvom vlastnosti navigácie. Použite túto možnosť pre navigačné vlastnosti s jednou hodnotou aj s hodnotou kolekcie . Všimnite si, že v režime offline podporujeme len vnorené $select možnosti v rámci služby $expand.

Ak chcete zadať dotaz FetchXML, použite tento fetchXml stĺpec na zadanie dotazu.

Nota

Vždy musíte použiť možnosť systémového $selectdotazu na obmedzenie vlastností vrátených pre záznam tabuľky zahrnutím čiarkami oddeleného zoznamu názvov vlastností. Toto je dôležitý osvedčený postup výkonu. Ak vlastnosti nie sú zadané pomocou $select, vrátia sa všetky vlastnosti.

Možnosti dotazu zadajte začínajúce na ?. Môžete tiež zadať viacero možností systémového dotazu pomocou na & oddelenie možností dotazu.

Keď pre options parameter zadáte reťazec dotazu OData, dotaz by mal byť kódovaný pre špeciálne znaky.

Keď pre options parameter zadáte dotaz FetchXML, tento dotaz by nemal byť kódovaný.

Pozrite si časť Príklady a zistite, ako môžete definovať options parameter pre rôzne načítanie viacerých scenárov.

Vrátená hodnota

Po úspešnom dokončení vráti objekt sľubu successCallback s nasledujúcimi vlastnosťami:

Meno Typ Popis
entities Pole objektov JSON Každý objekt predstavuje načítaný záznam tabuľky obsahujúci stĺpce a ich hodnoty ako key: value páry. ID záznamu tabuľky sa predvolene načíta
nextLink String (voliteľné) Ak je počet načítaných záznamov vyšší ako hodnota zadaná v maxPageSize parametri v požiadavke, vráti sa URL adresa, ktorá vráti nasledujúcu stránku záznamov.
fetchXmlPagingCookie (voliteľné) Pre operáciu založená na retrieveMultipleRecords jazyku fetchXml so stránkovaním, kde je celkový počet záznamov väčší ako hodnota stránkovania, tento atribút vráti stránkovací súbor cookie, ktorý možno použiť na následnú operáciu jazyka fetchXml na načítanie ďalšej stránky záznamov.

Nepodporované typy atribútov pre možnosti dotazu OData v režime Mobile Offline

Nasledujúce typy stĺpcov nie sú podporované pri Xrm.WebApi.retrieveMultipleRecords operácii s možnosťami reťazca dotazu OData (napríklad $select a $filter) v režime mobilnej offline. Jazyk FetchXML by ste mali použiť, ak sa typ atribútu, s akým musíte pracovať, nachádza v tomto zozname nepodporovaných typov atribútov.

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

Nepodporované funkcie v režime Mobile Offline

V režime Mobile Offline nie sú podporované tieto funkcie:

  • Funkcie zoskupenia a agregácie

Podporované operácie filtrovania na typ atribútu v mobilnej režime offline pomocou jazyka FetchXML

Pri práci s jazykom FetchXML sú podporované nasledujúce operácie pre všetky typy atribútov:

  • Rovná sa (eq)
  • Nerovná sa (neq)
  • Hodnota Null (null)
  • Not Null (not-null)

Nasledujúca tabuľka obsahuje zoznam ďalších operácií podporovaných pre každý typ atribútu:

Typ atribútu Podporované operácie
BigInt, Decimal, Double, Integer Väčšie ako (gt)
Väčšie ako alebo rovná sa (gte)
Menšie ako (lt)
Menšie ako alebo rovná sa (lte)
Booleovská hodnota, zákazník In (in)
Nie je in (not-in)
EntityName, Picklist, State, Status Páči sa mi to (like)
Nie ako (not-like)
Začína na (begins-with)
Nezačína sa na (not-begin-with)
Končí na (ends-with)
Nekončí sa na (not-end-with)
In (in)
Nie je in (not-in)
Guid, Lookup In (in)
Nie je in (not-in)
Rovná sa IDENTIFIKÁCIA používateľa (eq-userid)
Nerovná sa ID používateľa (ne-userid)
Peniaze Väčšie ako (gt)
Väčšie ako alebo rovná sa (gte)
Menšie ako (lt)
Menšie ako alebo rovná sa (lte)
In (in)
Nie je in (not-in)
Vlastník In (in)
Nie je in (not-in)
Rovná sa IDENTIFIKÁCIA používateľa (eq-userid)
Nerovná sa ID používateľa (ne-userid)
Rovná sa používateľovi alebo tímu (eq-useroruserteams)
String Páči sa mi to (like)
Nie ako (not-like)
Začína na (begins-with)
Nezačína sa na (not-begin-with)
Končí na (ends-with)
Nekončí sa na (not-end-with)
Dátum a čas Dňa alebo neskôr (on-or-after)
Zapnuté (on)
On alebo Before (on-or-before)
Dnes (today)
Zajtra (tomorrow)
Včera (yesterday)
Nasledujúcich sedem dní (next-seven-days)
Posledných sedem dní (last-seven-days)
Budúci týždeň (next-week)
Posledný týždeň (last-week)
Tento týždeň (this-week)
Nasledujúci mesiac (next-month)
Posledný mesiac (last-month)
Tento mesiac (this-month)
Nasledujúci rok (next-year)
Minulý rok (last-year)
Tento rok (this-year)
Posledných X dní (last-x-days)
Nasledujúcich X dní (next-x-days)
Posledné X týždne (last-x-weeks)
Nasledujúce X týždne (next-x-weeks)
Posledné X mesiace (last-x-months)
Nasledujúcich X mesiacov (next-x-months)
Posledné X roky (last-x-years)
Nasledujúce X roky (next-x-years)
Väčšie ako (gt)
Väčšie ako alebo rovná sa (gte)
Menšie ako (lt)
Menšie ako alebo rovná sa (lte)

Príklady

Väčšinu scenárov alebo príkladov uvedených v článku Údaje dotazu pomocou webového rozhrania API možno získať pomocou metódy retrieveMultipleRecords . Niektoré z príkladov sú uvedené nižšie.

Základné načítanie viacerých

Tento príklad dotazuje množinu tabuľky kont a používa možnosti systémových $select$top dotazov na vrátenie vlastnosti názvu prvých troch kont:

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

Základné načítanie viacerých pomocou jazyka FetchXML

Tento príklad dotazuje entitu account pomocou jazyka 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
    }
);

Načítanie alebo filtrovanie podľa vlastností vyhľadávania

Vo väčšine vlastností navigácie s jednou hodnotou nájdete vypočítanú vlastnosť iba na čítanie, ktorá používa nasledujúcu konvenciu pomenovania: _<name>_value kde <name> je názov vlastnosti navigácie s jednou hodnotou. Na účely filtrovania možno použiť aj konkrétnu hodnotu vlastnosti navigácie s jednou hodnotou. Pre mobilných klientov v režime offline však tieto možnosti syntaxe nie sú podporované a názov vlastnosti navigácie s jednou hodnotou by sa mal použiť na načítanie aj filtrovanie. Porovnanie vlastností navigácie s hodnotou null nie je podporované ani v režime offline.

Ďalšie informácie: Vlastnosti vyhľadávania

Tu sú príklady kódu pre oba scenáre:

Scenár online (pripojený k serveru)

Tento príklad dotazuje množinu tabuliek kont a používa $select$filter možnosti systémových dotazov na vrátenie názvu a vlastnosti primarycontactid pre kontá, ktoré majú konkrétny primárny kontakt:

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

Scenár pre mobilné režimy offline

Tento príklad dotazuje množinu tabuliek kont a používa $select$filter možnosti systémových dotazov na vrátenie názvu a vlastnosti primarycontactid pre kontá, ktoré majú pri práci v režime offline konkrétny primárny kontakt:

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

Načítanie alebo filtrovanie pomocou jazyka FetchXML podľa vlastností vyhľadávania (scenár online a offline)

Parameter môžete použiť v FetchXML režime online alebo offline na načítanie name vlastnosti a primarycontactid pre záznamy konta, ktoré majú primárny kontakt, ktorý spĺňa podmienku:

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

Zadanie počtu tabuliek, ktoré sa majú vrátiť na strane

Nasledujúci príklad ukazuje použitie parametra maxPageSize na určenie počtu záznamov (3), ktoré sa majú zobraziť na strane.

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 tomto príklade sa zobrazia tri záznamy a prepojenie na nasledujúcu stránku. Tu je príklad výstupu z konzoly v nástrojoch vývojárov prehliadača:

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

Použite časť dotazu v URL adrese vo nextLink vlastnosti ako hodnotu options parametra v následnom volaní načítania hodnoty RetrieveMultipleRecords a požiadajte o ďalšiu množinu záznamov. K hodnote nemeňte ani nepripájajte žiadne ďalšie možnosti systémového dotazu. Pre každú nasledujúcu žiadosť o viac strán by ste mali použiť rovnakú maxPageSize hodnotu, ktorá sa použila v pôvodnej žiadosti o načítanie viacerých strán. Do vyrovnávacej pamäte tiež môžete zadať vrátené výsledky alebo hodnotu vlastnosti nextLink, aby sa mohli vrátiť predtým načítané strany.

Ak napríklad chceme získať ďalšiu stránku záznamov, odovzdáme časť nextLink dotazu v URL adrese do parametra options :

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

Vráti sa nasledujúca strana množiny výsledkov:

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

Dôležité

Hodnota nextLink vlastnosti je kódovaná použitím identifikátora URI. Ak hodnotu pred odoslaním kódujete pomocou identifikátora URI, informácie XML v URL adrese spôsobia chybu.

Príklad jazyka FetchXML (online scenár)

Nasledujúci príklad ukazuje použitie count parametra jazyka FetchXML na určenie počtu záznamov (3), ktoré sa majú zobraziť na strane.

Nota

Stránkovací súbor cookie FetchXML sa vráti len pre online retrieveMultipleRecords operácie. (Xrm.WebApi.online). Nie je podporovaná offline.

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 tomto príklade sa zobrazia tri záznamy a vráti sa stránkovací súbor Cookie FetchXML, ktorý načíta výsledky ďalšej stránky, ak do množiny výsledkov patrí viac záznamov. Tu je príklad výstupu z konzoly v nástrojoch vývojárov prehliadača:

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

Na načítanie veľkých množín výsledkov pomocou stránkovania môžeme použiť fetchXmlPagingCookie množiny výsledkov, ako je to znázornené v príklade nižšie.

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

Pomocou možnosti systémového dotazu $expand vo vlastnostiach navigácie môžete ovládať údaje vrátené zo súvisiacich tabuliek. Nasledujúci príklad ukazuje, ako načítať kontakt pre všetky záznamy konta. V prípade súvisiacich záznamov kontaktov načítame len contactid záznamy a fullname:

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

Vyššie uvedený kód vráti výsledok so schémou, ako napríklad:

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

Nota

Podobne ako v prípade online môžete načítať údaje zo súvisiacich tabuliek v režime offline pomocou možnosti $expand systémového dotazu. Vzťahy typu many-to-many však nie sú podporované v režime offline.

Zastaraná metóda pre scenár mobilnej offline

Nota

Je @odata.nextLink zastaraný pre mobilné offline scenáre. Hoci je v prípade existujúcich prispôsobení stále podporovaný, už sa ho neodporúča používať.

Operácia offline $expand vráti @odata.nextLink komentár obsahujúci informácie o tom, ako sa dostať k informáciám súvisiaceho záznamu. Na vytvorenie jednej alebo viacerých ďalších požiadaviek použijeme idparameter , entityTypea options tohto komentára.Xrm.WebApi.offline.retrieveRecord Nasledujúci kód obsahuje úplný príklad toho, ako to urobiť:

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

Ďalšie príklady načítania viacerých záznamov pomocou webového rozhrania API nájdete v téme Údaje dotazu pomocou webového rozhrania API.

Dotazovanie údajov pomocou webového rozhrania API
Xrm.WebApi.retrieveRecord
Xrm.WebApi