Megosztás:


retrieveMultipleRecords (Ügyfél API-referencia)

Táblarekordok gyűjteményét kéri le.

Szemantika

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

Paraméterek

Név Típus Kötelező Description
entityLogicalName Lánc Igen A lekérni kívánt rekordok tábla logikai neve. Például: account.
options Lánc Nem OData rendszerlekérdezési beállítások vagy FetchXML-lekérdezés az adatok lekéréséhez. Lásd: Beállítások
maxPageSize Szám Nem Adjon meg egy pozitív számot, amely az oldalanként visszaadandó táblarekordok számát jelzi. Ha nem adja meg ezt a paramétert, az érték alapértelmezés szerint a standard táblák esetében legfeljebb 5000 rekordot, rugalmas táblák esetében pedig 500 rekordot jelent.

Ha a lekért rekordok száma meghaladja a megadott maxPageSize értéket vagy a táblatípus maximális korlátját, a nextLink visszaadott ígéret objektum oszlopa tartalmaz egy hivatkozást a rekordok lekéréséhez.
successCallback Funkció Nem A táblarekordok lekérésekor meghívandó függvény. Lásd : Visszatérési érték
errorCallback Funkció Nem A művelet sikertelensége esetén meghívandó függvény. A következő tulajdonságokkal rendelkező objektumok átadása történik:
- errorCode:Szám. A hibakód pozitív decimális számként. Például a dokumentált 0x80040333 hibakód a következőként 2147746611lesz visszaadva: .
- message:Húr. A problémát leíró hibaüzenet.

Beállítások

A rendszer a következő lekérdezési lehetőségeket támogatja: $select, $top, $filter, $expandés $orderby.

A rendszer lekérdezési beállításával $expand szabályozhatja, hogy a rendszer milyen adatokat ad vissza a kapcsolódó táblákból. Ha csak a navigációs tulajdonság nevét adja meg, a kapcsolódó rekordok összes tulajdonságát megkapja. A kapcsolódó rekordokhoz visszaadott tulajdonságokat a $select navigációs tulajdonság neve után zárójelben lévő rendszer lekérdezési beállítással korlátozhatja. Ezt az egyértékű és a gyűjteményértékű navigációs tulajdonságokhoz is használhatja. Vegye figyelembe, hogy offline esetén csak a beágyazott $select beállítást támogatjuk a $expand.

FetchXML-lekérdezés megadásához használja az fetchXml oszlopot a lekérdezés megadásához.

Megjegyzés:

A táblarekordhoz visszaadott tulajdonságok korlátozásához mindig a $selectrendszer lekérdezési beállításával kell korlátoznia a tulajdonságnevek vesszővel tagolt listáját. Ez egy fontos teljesítménybeli bevált gyakorlat. Ha a tulajdonságok nincsenek megadva a használatával $select, a rendszer az összes tulajdonságot visszaadja.

A lekérdezési beállításokat a következővel ?kezdheti meg: . A lekérdezési beállítások elválasztásával & több rendszer-lekérdezési beállítást is megadhat.

Amikor oData lekérdezési sztringet ad meg a options paraméterhez, a lekérdezést speciális karakterekhez kell kódolni .

Amikor fetchXML-lekérdezést ad meg a options paraméterhez, a lekérdezés nem kódolható.

Példák a különböző lekéréses forgatókönyvek paraméterének options meghatározására.

Visszaadott érték

Siker esetén egy ígéretobjektumot ad vissza a successCallback következő tulajdonságokkal:

Név Típus Description
entities JSON-objektumok tömbje Minden objektum az oszlopokat és azok értékeit párként key: value tartalmazó beolvasott táblarekordot jelöli. A rendszer alapértelmezés szerint lekéri a táblarekord azonosítóját
nextLink Lánc (nem kötelező) Ha a lekért rekordok száma meghaladja a kérelem paraméterében maxPageSize megadott értéket, akkor a következő rekordoldal visszaadásához az URL-címet adja vissza.
fetchXmlPagingCookie (nem kötelező) Olyan fetchXml-alapú retrieveMultipleRecords művelet esetén, amelyben a teljes rekordszám nagyobb, mint a lapozási érték, ez az attribútum visszaadja a lapozási cookie-t, amely egy későbbi fetchXml-művelethez használható a rekordok következő oldalának lekéréséhez.

Az OData-lekérdezési beállítások nem támogatott attribútumtípusai offline mobileszközökben

Az alábbi oszloptípusok nem támogatottak oData lekérdezési sztringbeállításokkal Xrm.WebApi.retrieveMultipleRecords (például $select$filtermobil offline módban) végzett műveletek esetén. A FetchXML-t akkor érdemes használni, ha a használni kívánt attribútumtípus szerepel a nem támogatott attribútumtípusok listájában.

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

Nem támogatott funkciók a Mobile Offline szolgáltatásban

A Mobile Offline nem támogatja a következő funkciókat:

  • Csoportosítási és összesítési funkciók

Támogatott szűrőműveletek attribútumtípusonként a Mobile Offline szolgáltatásban a FetchXML használatával

A FetchXML használatakor az alábbi műveletek minden attribútumtípus esetében támogatottak:

  • Egyenlő (eq)
  • Nem egyenlő (neq)
  • Null (null)
  • Nem null (not-null)

Az alábbi táblázat az egyes attribútumtípusokhoz támogatott további műveleteket sorolja fel:

Attribútum típusa Támogatott műveletek
BigInt, Decimális, Dupla, Egész szám Nagyobb, mint (gt)
Nagyobb vagy egyenlő (gte)
Kisebb, mint (lt)
Kisebb vagy egyenlő (lte)
Logikai, ügyfél In (in)
Nincs be (not-in)
EntityName, Picklist, State, Status Like (like)
Nem tetszik (not-like)
Kezdődik (begins-with)
Nem kezdődik (not-begin-with)
Végződés: (ends-with)
Nincs vége (not-end-with)
In (in)
Nincs be (not-in)
Guid, Lookup In (in)
Nincs be (not-in)
Egyenlő felhasználói azonosító (eq-userid)
Nem egyenlő felhasználói azonosító (ne-userid)
Pénz Nagyobb, mint (gt)
Nagyobb vagy egyenlő (gte)
Kisebb, mint (lt)
Kisebb vagy egyenlő (lte)
In (in)
Nincs be (not-in)
Tulajdonos In (in)
Nincs be (not-in)
Egyenlő felhasználói azonosító (eq-userid)
Nem egyenlő felhasználói azonosító (ne-userid)
Egyenlő felhasználó vagy csapat (eq-useroruserteams)
Lánc Like (like)
Nem tetszik (not-like)
Kezdődik (begins-with)
Nem kezdődik (not-begin-with)
Végződés: (ends-with)
Nincs vége (not-end-with)
DateTime Be- vagy után (on-or-after)
Bekapcsolva (on)
Be- vagy előző (on-or-before)
Ma (today)
Holnap (tomorrow)
Tegnap (yesterday)
Következő hét nap (next-seven-days)
Elmúlt hét nap (last-seven-days)
Jövő hét (next-week)
Múlt hét (last-week)
Ezen a héten (this-week)
Következő hónap (next-month)
Múlt hónap (last-month)
Ebben a hónapban (this-month)
Következő év (next-year)
Tavaly (last-year)
Ebben az évben (this-year)
Utolsó X nap (last-x-days)
Következő X nap (next-x-days)
Elmúlt X hét (last-x-weeks)
Következő X hét (next-x-weeks)
Elmúlt X hónap (last-x-months)
Következő X hónap (next-x-months)
Elmúlt X év (last-x-years)
Következő X év (next-x-years)
Nagyobb, mint (gt)
Nagyobb vagy egyenlő (gte)
Kisebb, mint (lt)
Kisebb vagy egyenlő (lte)

Példák

A lekérdezési adatok webes API-val történő lekérdezési adataiban említett legtöbb forgatókönyv/példa a retrieveMultipleRecords metódussal érhető el. Néhány példa alább látható.

Több egyszerű lekérése

Ez a példa lekérdezi a fióktáblakészletet, és a rendszer és $top a $select rendszer lekérdezési beállításaival adja vissza az első három fiók névtulajdonságát:

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

Több egyszerű lekérése a FetchXML használatával

Ez a példa lekérdezi az entitást a account fetchXML használatával.

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

Keresési tulajdonságok lekérése vagy szűrése

A legtöbb egyértékű navigációs tulajdonsághoz egy számított, írásvédett tulajdonságot talál, amely a következő elnevezési konvencióval rendelkezik: _<name>_value ahol az <name> egyértékű navigációs tulajdonság neve. Szűrési célokra az egyértékű navigációs tulajdonság adott értéke is használható. Az offline módban lévő mobilalkalmazások esetében azonban ezek a szintaxisbeállítások nem támogatottak, és az egyértékű navigációs tulajdonság nevét kell használni a beolvasáshoz és a szűréshez is. Offline módban a navigációs tulajdonságok null értékre történő összehasonlítása sem támogatott.

További információ: Keresési tulajdonságok

Az alábbi példakódok mindkét forgatókönyvre használhatók:

Online forgatókönyv esetén (kiszolgálóhoz csatlakoztatva)

Ez a példa lekérdezi a fióktáblakészletet, és a rendszer és $filter a $select rendszer lekérdezési beállításaival adja vissza az adott elsődleges kapcsolattartóval rendelkező fiókok nevét és primarycontactid tulajdonságát:

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

Mobil offline forgatókönyv esetén

Ez a példa lekérdezi a fióktáblakészletet, és a rendszer és $filter a $select rendszer lekérdezési beállításaival adja vissza az adott elsődleges kapcsolattartóval rendelkező fiókok nevét és elsődlegescontactid tulajdonságát offline módban:

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

A FetchXML használata keresési tulajdonságok alapján történő lekéréshez vagy szűréshez (online és offline forgatókönyv)

A paramétert FetchXML online vagy offline állapotban is használhatja a name feltételnek megfelelő elsődleges kapcsolattartóval rendelkező fiókrekordok és primarycontactid -rekordok tulajdonságának lekéréséhez:

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

A lapon visszaadandó táblák számának megadása

Az alábbi példa bemutatja, hogy a maxPageSize paraméter a lapon megjelenítendő rekordok számát (3) határozza meg.

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

Ez a példa három rekordot és egy hivatkozást jelenít meg a következő oldalra. Íme egy példa a konzol kimenetére a böngésző fejlesztői eszközeiben:

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

Használja a tulajdonság URL-címében lévő nextLink lekérdezési részt a options következő retrieveMultipleRecords hívás paraméterének értékeként a következő rekordkészlet lekéréséhez. Ne módosítsa vagy fűzze hozzá a rendszer lekérdezési beállításait az értékhez. Minden további lapra vonatkozó kérésnél ugyanazt maxPageSize az értéket kell használnia, amelyet az eredeti több kérelem lekérésekor használt. Emellett gyorsítótárazza a visszaadott eredményeket vagy a nextLink tulajdonság értékét, hogy a korábban lekért lapok visszaadhatók legyenek.

A rekordok következő oldalának lekéréséhez például az URL lekérdezési részét nextLink továbbítja a options paraméternek:

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

Ez az eredményhalmaz következő oldalát adja vissza:

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

Fontos

A tulajdonság értéke nextLink kódolt URI. Ha az URI a küldés előtt kódolja az értéket, az URL-ben található XML-cookie-információk hibát fognak okozni.

FetchXML-példa (online forgatókönyv)

Az alábbi példa a FetchXML paraméterének count használatát mutatja be az oldalon megjelenítendő rekordok számának (3) megadásához.

Megjegyzés:

A FetchXML lapozó cookie csak online retrieveMultipleRecords műveletekhez lesz visszaadva. (Xrm.WebApi.online). Offline nem támogatott.

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

Ez a példa három rekordot jelenít meg, és egy FetchXML lapozó cookie-t ad vissza a következő oldal eredményeinek lekéréséhez, ha az eredményhalmazhoz több rekord tartozik. Íme egy példa a konzol kimenetére a böngésző fejlesztői eszközeiben:

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

Az alábbi példában látható módon nagy eredményhalmazokat hívhatunk fetchXmlPagingCookie le lapozással.

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

A navigációs tulajdonságok $expand rendszer lekérdezési beállításával szabályozhatja a kapcsolódó táblákból visszaadott adatokat. Az alábbi példa bemutatja, hogyan kérhető le a partner az összes fiókrekordhoz. A kapcsolódó kapcsolattartási rekordok esetében csak a contactid következőt fullnamekérjük le:

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

A fenti kódrészlet egy olyan sémával rendelkező eredményt ad vissza, mint a következő:

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

Megjegyzés:

Az online forgatókönyvhöz hasonlóan a $expand rendszer lekérdezési lehetőségével offline állapotban is lekérheti az adatokat a kapcsolódó táblákból. A több-a-többhöz kapcsolatok azonban offline állapotban nem támogatottak.

Elavult módszer mobil offline forgatókönyv esetén

Megjegyzés:

A @odata.nextLink mobil offline forgatókönyvek elavultak. Bár a meglévő testreszabások esetében továbbra is támogatott, többé nem ajánlott használni.

Az offline $expand művelet egy @odata.nextLink jegyzetet ad vissza, amely információkat tartalmaz a kapcsolódó rekord adatainak eléréséhez. idA széljegyzet , entityTypeés options paraméter használatával létrehozunk egy vagy több további Xrm.WebApi.offline.retrieveRecord kérést. A következő kódrészlet teljes példával szolgál erre:

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

Több rekord webes API-val történő lekérésére további példákat a Webes API-val végzett adatlekérdezés című témakörben talál.

Adatok lekérdezése a webes API használatával
Xrm.WebApi.retrieveRecord
Xrm.WebApi