Jagamisviis:


retrieveMultipleRecords (kliendi API viide)

Toob tabelikirjete kogumi.

Süntaks

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

Parameetrid

Nimi Tüüp Nõutav Kirjeldus
entityLogicalName String Jah Toodavate kirjete tabeliloogiline nimi. Näiteks: account.
options String Ei OData süsteemipäringu suvandid või FetchXML-päring andmete toomiseks. Kuva suvandid
maxPageSize Number Ei Määrake positiivne arv, mis näitab lehel tagastatavate tabelikirjete arvu. Kui te seda parameetrit ei määra, määratakse vaikeväärtuseks standardtabelite maksimumpiirang 5000 kirjet ja elastsete tabelite puhul 500.

Kui toodavate kirjete arv on suurem kui määratud maxPageSize väärtus või tabelitüübi maksimumpiirang, nextLink sisaldab tagastatava lubaduse objekti veerg kirjete toomise linki.
successCallback Function Ei Funktsioon, mis helistab tabelikirjete toomisel. Kuva tagastusväärtus
errorCallback Function Ei Funktsioon, mida kutsuda, kui toiming nurjub. Edastatakse järgmiste atribuutidega objekt:
- errorCode:Arv. Tõrkekood positiivse kümnendarvuna. Näiteks tagastatakse kujul dokumenteeritud 0x80040333 tõrkekood.2147746611
- message:String. Probleemi kirjeldav tõrketeade.

Suvandid

Toetatud on järgmised süsteemipäringusuvandid: $select, , $top$filter, $expandja $orderby.

$expand Süsteemipäringu suvandi abil saate määrata, millised seotud tabelite andmed tagastatakse. Kui lisate lihtsalt navigeerimisatribuudi nime, saate kõik seotud kirjete atribuudid. Seotud kirjete tagastatud atribuute saate piirata, kasutades $select sulgudes pärast navigeerimisatribuudi nime süsteemipäringu suvandit. Kasutage seda nii ühe- kui ka kollektsiooniväärtusega navigeerimisatribuutide puhul. Võtke arvesse, et ühenduseta režiimis toetame ainult pesastatud $select suvandit kaustas $expand.

Päringu FetchXML määramiseks kasutage fetchXml päringu määramiseks veergu.

Märkus.

Tabelikirje tagastatavate atribuutide piiramiseks komaeraldusega atribuudinimede loendi kaasamisega peate alati kasutama $selectsüsteemipäringu suvandit. See on oluline jõudluse parim tava. Kui atribuudid pole funktsiooniga $selectmääratud, tagastatakse kõik atribuudid.

Määrate päringusuvandid, mis algavad tähega ?. Samuti saate päringusuvandite eraldamiseks määrata mitu süsteemipäringu suvandit & .

Kui määrate parameetrile options OData päringustringi, tuleks päring kodeerida erimärkide jaoks.

Kui määrate parameetri jaoks options päringu FetchXML, ei tohiks päringut kodeerida.

Mitme stsenaariumi toomise parameetri määratlemise options näited leiate teemast Näited.

Tagastatav väärtus

Edu korral tagastab lubaduse objekti järgmise successCallback atribuudiga:

Nimi Tüüp Kirjeldus
entities JSON-objektide massiiv Iga objekt tähistab toodud tabelikirjet, mis sisaldab veerge ja nende väärtusi paaridena key: value . Vaikimisi tuuakse tabelikirje ID
nextLink String (valikuline) Kui toodavate kirjete arv on suurem kui taotluses parameetris maxPageSize määratud väärtus, tagastab see URL-i, et tagastada järgmine kirjete leht.
fetchXmlPagingCookie (valikuline) Saalimisega toomispõhise retrieveMultipleRecords toimingu korral, mille kogukirjete arv on suurem kui saalimisväärtus, tagastab see atribuut saaleküpsise, mida saab järgmise kirjelehe toomiseks kasutada järgmise toomiseXml-toimingu jaoks.

OData päringusuvandite jaoks toetuseta atribuuditüübid mobiilsideseadmes

Järgmisi veerutüüpe ei toetata OData päringustringi suvandite (nt $select ja $filter) toimingu tegemisel Xrm.WebApi.retrieveMultipleRecords mobiilses ühenduseta režiimis. Kasutage fetchXML-i, kui atribuuditüüp, millega peate töötama, on toetuseta atribuutide tüüpide loendis.

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

Toetuseta funktsioonid ühenduseta mobiilsideseadmes

Võrguühenduseta mobiilsideseadmes ei toetata järgmisi funktsioone:

  • Rühmitamis- ja koondamisfunktsioonid

Toetatud filtritoimingud atribuuditüübi kohta mobiilsideseadmes ühenduseta režiimis FetchXML-i abil

FetchXML-iga töötamisel toetatakse kõiki atribuuditüüpe.

  • Võrdub (eq)
  • Pole võrdne (neq)
  • Tühi (null)
  • Not Null (not-null)

Järgmises tabelis on loetletud rohkem toiminguid, mida iga atribuuditüübi puhul toetatakse:

Atribuudi tüüp Toetatud toimingud
BigInt, Decimal, Double, Integer Suurem kui (gt)
Suurem kui või võrdub (gte)
Väiksem kui (lt)
Väiksem või võrdne (lte)
Kahendmuutuja, klient in()
Pole (not-in)
EntityName, Picklist, State, Status Like (like)
Mitte meeldida (not-like)
Algab väärtusega (begins-with)
Ei alga väärtusega (not-begin-with)
Lõpeb väärtusega (ends-with)
Ei lõpe väärtusega (not-end-with)
in()
Pole (not-in)
GUID, otsing in()
Pole (not-in)
Võrdub kasutaja ID-ga (eq-userid)
Pole võrdne kasutaja ID-ga (ne-userid)
Money Suurem kui (gt)
Suurem kui või võrdub (gte)
Väiksem kui (lt)
Väiksem või võrdne (lte)
in()
Pole (not-in)
Omanik in()
Pole (not-in)
Võrdub kasutaja ID-ga (eq-userid)
Pole võrdne kasutaja ID-ga (ne-userid)
Võrdub kasutaja või meeskonnaga (eq-useroruserteams)
String Like (like)
Mitte meeldida (not-like)
Algab väärtusega (begins-with)
Ei alga väärtusega (not-begin-with)
Lõpeb väärtusega (ends-with)
Ei lõpe väärtusega (not-end-with)
Kuupäev ja kellaaeg Kuupäeval või pärast (on-or-after)
Sees (on)
Sees või varem (on-or-before)
Täna (today)
Homme (tomorrow)
Eile (yesterday)
Järgmised seitse päeva (next-seven-days)
Viimased seitse päeva (last-seven-days)
Järgmisel nädalal (next-week)
Eelmisel nädalal (last-week)
Sel nädalal (this-week)
Järgmisel kuul (next-month)
Eelmine kuu (last-month)
Sel kuul (this-month)
Järgmine aasta (next-year)
Eelmine aasta (last-year)
See aasta (this-year)
Viimased X päeva (last-x-days)
Järgmised X-päevad (next-x-days)
Viimased X nädalat (last-x-weeks)
Järgmised X-nädalad (next-x-weeks)
Viimased X kuud (last-x-months)
Järgmised X kuud (next-x-months)
Viimased X-i aastad (last-x-years)
Järgmised X-aastad (next-x-years)
Suurem kui (gt)
Suurem või võrdne (gte)
Väiksem kui (lt)
Väiksem või võrdne (lte)

Näited

Enamikku veebi-API abil päringuandmetes mainitud stsenaariumidest/näidetest on võimalik saavutada meetodiga retrieveMultipleRecords . Mõned näited on loetletud allpool.

Põhiline mitmekordne toomine

Selles näites esitatakse päringud tabelikomplekti kontode kohta ning kasutatakse $select kolme esimese konto nimeatribuudi tagastamiseks süsteemipäringu $top suvandeid.

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

Multiple toomine funktsiooniga FetchXML

Selles näites kasutatakse olemi jaoks account päringuid toomiseXML-i abil.

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

Otsinguatribuutide järgi toomine või filtreerimine

Enamiku ühe väärtusega navigeerimisatribuutide korral leiate arvutatud kirjutuskaitstud atribuudi, mis kasutab järgmist nimetamistava: _<name>_value kus <name> on ühe väärtusega navigeerimisatribuudi nimi. Filtreerimiseks saab kasutada ka üheväärtuselise navigeerimisatribuudi konkreetset väärtust. Ühenduseta režiimis mobiilklientide puhul neid süntaksisuvandeid ei toetata ja ühe väärtusega navigeerimisatribuudi nime tuleks kasutada nii toomiseks kui ka filtreerimiseks. Ühenduseta režiimis ei toetata ka navigeerimisatribuutide võrdlust nulliga.

Lisateave: Otsinguatribuudid

Siin on mõlema stsenaariumi koodinäidised.

Võrgustsenaarium (serveriga ühendatud)

Selles näites esitatakse päringud tabelikomplekti kontode kohta ning kasutatakse $select neid ja $filter süsteemipäringu suvandeid, et tagastada nimi ja atribuut primarycontactid nende kontode jaoks, millel on kindel esmane 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
    }
);

Mobiiliühenduseta stsenaarium

Selles näites esitatakse päringud tabelikomplekti kontode kohta ning kasutatakse $select neid ja $filter süsteemipäringu suvandeid, et tagastada ühenduseta režiimis töötades kindla primaarkontaktiga kontode nimi ja atribuut primarycontactid.

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

FetchXML-i kasutamine otsinguatribuutide järgi toomiseks või filtreerimiseks (võrguühendusega ja ühenduseta stsenaarium)

Parameetrit saate kasutada FetchXML võrguühendusega või ühenduseta režiimis, et tuua nameprimarycontactid ja atribuudid kontokirjetele, millel on peamine kontakt, mis vastab järgmisele tingimusele:

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

Lehel tagastatavate tabelite arvu määramine

Järgmises näites demonstreeritakse parameetri kasutamist maxPageSize lehel kuvatavate kirjete arvu (3) määramiseks.

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

Selles näites kuvatakse kolm kirjet ja link järgmisele lehele. Siin on brauseri arendusriistade konsooli näidisväljund.

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

Kasutage atribuudi URL-is nextLink olevat päringuosa järgmise retrieveMultipleRecords-kutse parameetri väärtusenaoptions, et taotleda järgmist kirjete kogumit. Ärge muutke ega lisage väärtusele rohkem süsteemipäringu suvandeid. Iga järgneva lisalehe taotluse korral peaksite kasutama sama maxPageSize väärtust, mida kasutati algses toomistaotluses. Samuti talletage tagastatud tulemid või atribuudi NextLink väärtus vahemällu, et varem toodud lehti saaks tagastada.

Näiteks järgmise kirjelehe saamiseks edastame URL-i options päringuosasse nextLink parameetri:

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

See tagastab tulemikomplekti järgmise lehe:

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

Oluline

Atribuudi väärtus nextLink on URI kodeeritud. Kui kodeerite väärtuse enne saatmist URI-ga, põhjustab URL-is olev XML-küpsiseteave tõrke.

ToomineXML-i näide (veebistsenaarium)

Järgmises näites demonstreeritakse FetchXML-i parameetri kasutamist count lehel kuvatavate kirjete arvu (3) määramiseks.

Märkus.

FetchXML-i saaleküpsist tagastatakse ainult võrgutoimingute retrieveMultipleRecords jaoks. (Xrm.WebApi.online). Seda ei toetata ühenduseta režiimis.

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

Selles näites kuvatakse kolm kirjet ja tagastatakse fetchXML-i saaleküpsis järgmise lehe tulemite toomiseks, kui tulemikomplekti kuulub rohkem kirjeid. Siin on brauseri arendusriistade konsooli näidisväljund.

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

Saalimisega suurte tulemikomplektide toomiseks saame kasutada fetchXmlPagingCookie alltoodud näites toodud juhiseid.

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

Seotud tabelitest tagastatavate andmete juhtimiseks kasutage navigeerimisatribuutide $expand süsteemipäringu suvandit. Järgmises näites kirjeldatakse kontakti toomist kõigi kontokirjete jaoks. Seotud kontaktikirjete puhul laadime alla ainult järgmisi kirjeidcontactid: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
    }
);

Ülaltoodud koodilõik tagastab tulemi järgmise skeemiga:

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

Märkus.

Sarnaselt võrgustsenaariumile kasutage $expand süsteemipäringu suvandit andmete toomiseks seotud tabelitest ühenduseta režiimis. Ühenduseta režiimis ei toetata siiski mitu-mitmele seoseid.

Taunitud meetod ühenduseta mobiilsideseadme stsenaariumi jaoks

Märkus.

See @odata.nextLink on iganenud mobiilsideseadmete ühenduseta stsenaariumide korral. Kuigi olemasolevaid kohandusi toetatakse endiselt, ei soovitata seda enam kasutada.

Ühenduseta $expand toiming tagastab @odata.nextLink marginaali, mis sisaldab teavet selle kohta, kuidas seostuva kirje teave kätte saada. Kasutame idselle marginaali parameetrit , entityTypeja options ühe või mitme täiendava Xrm.WebApi.offline.retrieveRecord taotluse koostamiseks. Järgmises koodilõigus on toodud täielik näide selle kohta, kuidas seda teha.

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

Rohkem näiteid veebi-API abil mitme kirje toomise kohta leiate teemast Päringuandmed veebi API abil.

Andmete päring veebi API abil
Xrm.WebApi.retrieveRecord
Xrm.WebApi