Partekatu bidez


retrieveMultipleRecords (bezeroaren APIaren erreferentzia)

Taulako erregistroen bilduma bat eskuratzen du.

Sintaxia

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

Parametroak

Izena Mota Beharrezkoa Deskribapena
entityLogicalName String Bai Eskuratu nahi dituzun erregistroen taularen izen logikoa. Adibidez: account.
options String Ez OData sistemaren kontsulta-aukerak edo FetchXML kontsulta datuak eskuratzeko. Ikusi aukerak
maxPageSize Zenbakia Ez Zehaztu orrialde bakoitzeko itzuliko diren taulako erregistro kopurua adierazten duen zenbaki positiboa. Parametro hau zehazten ez baduzu, balioa lehenetsia izango da 5.000 erregistro taula estandarretarako, eta 500 taula elastikoentzat.

Berreskuratzen ari diren erregistroen kopurua zehaztutako maxPageSize balioa edo taula motaren gehienezko muga baino handiagoa bada, itzulitako promesa objektuko zutabeak nextLink esteka bat izango du erregistroak eskuratzeko.
successCallback Function Ez Taulako erregistroak eskuratzean deitu beharreko funtzioa. Ikusi itzulitako balioa
errorCallback Function Ez Eragiketan akats bat gertatzen denean deitzen zaion funtzioa. Propietate hauek dituen objektu bat pasatzen da:
- errorCode: Zenbakia. Errore-kodea zenbaki hamartar positibo gisa. Adibidez, dokumentatutako errore-kodea honela 0x800403332147746611itzuliko da.
- message: String. Arazoa deskribatzen duen akats-mezua.

aukerak

Sistemaren kontsulta-aukera hauek onartzen dira: $select, , $top$filter, $expand, eta $orderby.

Erabili sistema-kontsulta $expand aukera erlazionatutako tauletako datuak itzultzen diren kontrolatzeko. Nabigazio-propietatearen izena soilik sartzen baduzu, erlazionatutako erregistroen propietate guztiak jasoko dituzu. Erlazionatutako erregistroetarako itzulitako propietateak muga ditzakezu nabigazio-propietatearen izenaren ondoren parentesi artean dagoen sistemaren kontsulta aukera erabiliz $select . Balio bakarra eta bilduma-balioa duten nabigazio-propietateetarako erabiltzen da. Kontuan izan lineaz kanpoko aukera $expandhabiaratua $select soilik onartzen dugula .

FetchXML kontsulta zehazteko, erabili zutabea fetchXml kontsulta zehazteko.

Oharra

Sistema-kontsulta $selectaukera erabili behar duzu beti taulako erregistro baterako itzulitako propietateak mugatzeko, komaz bereizitako propietate-izenen zerrenda bat sartuta. Errendimendu handiko praktika gomendatua da. Propietateak ez badira zehazten $select, propietate guztiak itzuliko dira.

Zehaztu zein aukera dauden ?kontsultatzeko. Sistemaren kontsulta-aukera & anitz ere zehaztu ditzakezu kontsulta-aukerak bereizteko.

Parametroarentzat options OData kontsulta-kate bat zehazten duzunean, kontsulta karaktere berezietarako kodetu behar da.

Parametroarentzat options FetchXML kontsulta bat zehazten duzunean, kontsulta ez da kodetu behar.

Ikus Adibideak hainbat eszenatoki berreskuratzeko parametroa options nola definitu dezakezun ikusteko.

Itzuli balioa

Arrakasta izanez gero, promesa-objektu bat honako propietate hauekin itzultzen du successCallback :

Izena Mota Deskribapena
entities JSON objektuen matrizea Objektu bakoitzak berreskuratutako taulako erregistroa adierazten du, zutabeak eta haien balioak bikote gisa dituena key: value . Taulako erregistroaren IDa lehenespenez eskuratzen da
nextLink String (aukerakoa) Berreskuratzen ari diren erregistroen kopurua eskaeraren parametroan maxPageSize zehaztutako balioa baino handiagoa bada, URLa itzultzen du erregistroen hurrengo orrialdera itzultzeko.
fetchXmlPagingCookie (aukerakoa) Erregistro kopurua paging-aren balioa baino handiagoa den fetchXml-n retrieveMultipleRecords oinarritutako eragiketa batean, atributu honek hurrengo erregistro-orrialdea berreskuratzeko fetchXml eragiketa baterako erabil daitekeen paging-cookiea itzultzen du.

Onartzen ez diren atributu motak OData kontsulta-aukeren Mobile Offline-n

Honako zutabe motak ez dira onartzen OData kontsulta-kate-aukerekin (adibidez, $select eta $filter) eragiketa bat Xrm.WebApi.retrieveMultipleRecords egitean mugikorretarako lineaz kanpoko moduan. FetchXML erabili beharko zenuke lan egin behar duzun atributu mota onartzen ez diren atributu moten zerrenda honetan badago.

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

Onartzen ez diren eginbideak Mobile Offline-n

Honako eginbide hauek ez dira onartzen Mobile Offline-n:

  • Taldekatzea eta agregatzeko eginbideak

Onartzen diren iragazki-eragiketak atributu mota bakoitzeko FetchXML erabiliz FetchXML erabiliz

Eragiketa hauek onartzen dira atributu mota guztientzat FetchXMLrekin lan egitean:

  • Funtzio berdina (eq)
  • Berdina ezneq da ()
  • Nulua (null)
  • Ez da nulua (not-null)

Ondorengo taulan atributu mota bakoitzerako onartutako eragiketa gehiago agertzen dira:

Atributu mota Onartutako eragiketak
BigInt, hamartarra, bikoitza, osoko zenbakia Baino handiagoa (gt)
Handiagoa edo berdina (gte)
Baino txikiagoa (lt)
Txikiagoa edo berdina (lte)
Boolean, bezeroa Barruan (in)
Ez barruan (not-in)
Entitate-izena, hauta-zerrenda, egoera, egoera Adibidez (like)
Ez bezalakoa (not-like)
Honela hasten da (begins-with)
Ez da hasiko (not-begin-with)
Honela amaitzen da (ends-with)
Ez da honela amaitzen (not-end-with)
Barruan (in)
Ez barruan (not-in)
Guid, Bilatu Barruan (in)
Ez barruan (not-in)
Erabiltzailearen IDaren berdina (eq-userid)
Erabiltzailearen IDa ez da berdina (ne-userid)
Dirua Baino handiagoa (gt)
Handiagoa edo berdina (gte)
Baino txikiagoa (lt)
Txikiagoa edo berdina (lte)
Barruan (in)
Ez barruan (not-in)
Jabea Barruan (in)
Ez barruan (not-in)
Erabiltzailearen IDaren berdina (eq-userid)
Erabiltzailearen IDa ez da berdina (ne-userid)
Erabiltzailea edo taldea berdina da (eq-useroruserteams)
String Adibidez (like)
Ez bezalakoa (not-like)
Honela hasten da (begins-with)
Ez da hasiko (not-begin-with)
Honela amaitzen da (ends-with)
Ez da honela amaitzen (not-end-with)
Data eta ordua Ondoren edo ondoren (on-or-after)
Aktibatua (on)
Aurretik edo aurretik (on-or-before)
Gaur (today)
Bihar (tomorrow)
Atzo (yesterday)
Hurrengo zazpi egunak (next-seven-days)
Azken zazpi egunak (last-seven-days)
Datorren astean (next-week)
Aurreko astea (last-week)
Aste honetan (this-week)
Hurrengo hilabetea (next-month)
Azken hilabetea (last-month)
Hilabete honetan (this-month)
Datorren urtean (next-year)
Iaz (last-year)
Aurten (this-year)
Azken X egunak (last-x-days)
Hurrengo X egunak (next-x-days)
Azken X asteak (last-x-weeks)
Hurrengo X asteak (next-x-weeks)
Azken X hilabeteak (last-x-months)
Hurrengo X hilabeteak (next-x-months)
Azken X urteak (last-x-years)
Hurrengo X urteak (next-x-years)
Baino handiagoa (gt)
Berdina edo handiagoa (gte)
Baino txikiagoa (lt)
Txikiagoa edo berdina (lte)

Adibideak

Web APIa erabiliz Kontsulta datuak atalean aipatzen diren agertoki / adibide gehienak retrieveMultipleRecords metodoa erabiliz lor daitezke. Adibide batzuk behean zerrendatzen dira.

Oinarrizko eskuratu anizkoitza

Adibide honek kontuen taula multzoa kontsultatzen du, eta eta sistemaren $top kontsulta-aukerak erabiltzen $select ditu lehenengo hiru kontuen izena propietatea itzultzeko:

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

Oinarrizko eskuratu anizkoitza FetchXML-rekin

Adibide honek entitateari kontsulta egiten dio account fetchXML erabiliz.

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

Eskuratu edo iragazi bilaketa-propietateen arabera

Balio bakarreko nabigazio-propietate gehienetan, irakurtzeko soilik kalkulatutako propietate bat aurkituko duzu, izendatzeko konbentzio hau erabiltzen duena: _<name>_value non the <name> balio bakarreko nabigazio-propietatearen izena den. Iragazkia egiteko, balio bakarreko nabigazio-propietatearen balio espezifikoa ere erabil daiteke. Hala ere, lineaz kanpoko moduan dauden mugikorretarako bezeroentzat, sintaxi-aukera hauek ez dira onartzen, eta balio bakarreko nabigazio-propietatearen izena erabili behar da berreskuratzeko eta iragazteko. Gainera, nabigazio-propietateak nuluarekin konparatzea ez da onartzen lineaz kanpoko moduan.

Informazio gehiago: Bilaketaren propietateak

Hona hemen bi agertokietarako kode-adibideak:

Lineako eszenatokietarako (zerbitzariarekin konektatuta)

Adibide honek kontuen taula multzoa kontsultatzen du, eta eta sistemaren $filter kontsulta-aukerak erabiltzen $select ditu kontaktu nagusi jakin bat duten kontuen izena eta primarycontactid propietatea itzultzeko:

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

Mugikorretarako lineaz kanpoko agertokietarako

Adibide honek kontuen taula multzoa kontsultatzen du, eta sistemaren $filter kontsulta-aukerak $select erabiltzen ditu lineaz kanpoko moduan lan egitean kontaktu nagusi jakin bat duten kontuen izena eta primarycontactid propietatea itzultzeko:

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 erabiltzea bilaketa-propietateak eskuratzeko edo iragazteko (lineako eta lineaz kanpoko agertokia)

Parametroa FetchXML erabil dezakezu linean edo lineaz kanpo zaudenean, baldintza batekin bat datorren kontaktu nagusia duten kontu-erregistroen eta primarycontactid propietatea eskuratzekoname:

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

Zehaztu orri batean itzuli beharreko taula kopurua

Ondorengo adibideak erakusten du parametroa maxPageSize erabili dela orrialde batean bistaratu beharreko erregistro kopurua (3) zehazteko.

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

Adibide honek hiru erregistro eta hurrengo orrialderako esteka bat bistaratuko ditu. Hona hemen kontsolaren irteera adibide bat:

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

Erabili propietatearen nextLink URLko kontsulta-zatia hurrengo retrieveMultipleRecords deiaren parametroaren options balio gisa, hurrengo erregistro multzoa eskatzeko. Ez aldatu edo erantsi sistema-kontsulta aukera gehiago balioari. Orrialde gehiagorako ondorengo eskaera bakoitzeko, jatorrizko eskuratzeko eskaera anizkoitzean erabilitako balio bera maxPageSize erabili beharko zenuke. Gainera, gordetzen ditu itzulitako emaitzak edo nextLink propietatearen balioa, aurretik berreskuratutako orriak itzuli ahal izateko.

Adibidez, erregistroen hurrengo orrialdea lortzeko, URLaren kontsulta-zatia nextLink parametrora options pasatuko dugu:

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

Honek emaitzen hurrengo orrialdera itzuliko da:

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

Garrantzitsua da

Propietatearen nextLink balioa URI kodetuta. Bidali aurretik balioa URIa kodetzen baduzu, URLko XML cookiearen informazioak errorea eragingo du.

FetchXML adibidea (lineako agertokia)

Ondorengo adibidean count FetchXML parametroa erabiltzen da orrialde batean bistaratu beharreko erregistro kopurua (3) zehazteko.

Oharra

FetchXML orrialde-cookiea lineako retrieveMultipleRecords eragiketetarako soilik itzultzen da. (Xrm.WebApi.online). Ez lineaz kanpo onartzen.

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

Adibide honek hiru erregistro bistaratuko ditu eta FetchXML Paging Cookie bat itzuliko du hurrengo orrialdeko emaitzak berreskuratzeko, emaitza multzoari dagozkion erregistro gehiago badaude. Hona hemen kontsolaren irteera adibide bat:

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

Beheko adibidean erakusten den bezala erabil fetchXmlPagingCookie dezakegu emaitza multzo handiak paging-arekin lortzeko.

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

Erabili $expand sistemaren kontsulta aukera nabigazio-propietateetan, erlazionatutako tauletatik itzultzen diren datuak kontrolatzeko. Ondorengo adibidean kontuaren erregistro guztien kontaktua nola berreskuratu erakusten da. Erlazionatutako kontaktuen erregistroetarako, eta honako contactid hauek fullnamebakarrik eskuratuko ditugu:

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

Goiko kodeak emaitza bat itzultzen du eskema batekin:

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

Oharra

Lineako eszenatokiaren antzera, erabili $expand sistemaren kontsulta aukera erlazionatutako tauletako datuak lineaz kanpo berreskuratzeko. Hala ere, askotan harremanak ez dira onartzen lineaz kanpo.

Mugikorretarako lineaz kanpoko agertokirako metodo zaharkitua

Oharra

Mugikorretarako lineaz kanpoko agertokietarako zaharkituta @odata.nextLink . Lehendik dauden pertsonalizazioetarako onartzen den arren, ez da gomendagarria gehiago erabiltzea.

Lineaz kanpoko $expand eragiketa batek oharpen bat @odata.nextLink itzultzen du, erlazionatutako erregistroaren informazioa nola iritsi jakiteko. Oharpen horren , entityType, eta options parametroa erabiltzen iddugu eskaera gehigarri Xrm.WebApi.offline.retrieveRecord bat edo gehiago eraikitzeko. Ondorengo kodeak adibide osoa eskaintzen du hori egiteko:

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

Web APIa erabiliz erregistro anitz berreskuratzeko adibide gehiago lortzeko, ikus Web APIa erabiliz kontsultatu datuak.

Datuak kontsultatzea WEB API bidez
Xrm.WebApi.retrieveRecord
Xrm.WebApi