Jaa


retrieveMultipleRecords (asiakas-ohjelmointirajapinnan viittaus)

Hakee taulukkotietueiden kokoelman.

Syntaksi

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

Parametrit

Nimi Tyyppi Pakollinen Description
entityLogicalName Merkkijono Kyllä Noudettavan tietueen looginen nimi taulukossa. Esimerkki: account.
options Merkkijono Ei OData-järjestelmän kyselyasetukset tai FetchXML-kysely tietojen noutamiseksi. Näytä asetukset
maxPageSize Numero Ei Määritä positiivinen luku, joka ilmaisee sivulla palautettavien taulukkotietueiden määrän. Jos et määritä tätä parametria, arvon oletusarvoksi asetetaan vakiotaulukoiden 5 000 tietueen enimmäismäärä, elastic-taulukoille 500.

Jos noudettavien tietueiden määrä on suurempi kuin määritetty maxPageSize arvo tai taulukkotyypin enimmäisraja, nextLink palautetun lupausobjektin sarake sisältää linkin tietueiden noutamiseen.
successCallback Function Ei Funktio, jota kutsutaan, kun taulukon tietueet noudetaan. Katso Palautusarvo
errorCallback Function Ei Funktio, jota kutsutaan, kun toiminto epäonnistuu. Objekti, jolla on seuraavat ominaisuudet, välitetään:
- errorCode:Numero. Virhekoodi positiivisena desimaalilukuna. Esimerkiksi virhekoodi, joka on dokumentoitu muodossa 0x80040333 , palautetaan muodossa 2147746611.
- message:Merkkijono. Ongelmaa kuvaava virheilmoitus.

Asetukset

Seuraavia järjestelmän kyselyvaihtoehtoja tuetaan: $select, , $top$filter, $expand, ja $orderby.

Järjestelmäkysely-asetuksen $expand avulla voit hallita, mitä tietoja liittyvistä taulukoista palautetaan. Jos sisällytät vain siirtymisominaisuuden nimen, saat kaikki liittyvien tietueiden ominaisuudet. Voit rajoittaa liittyvien tietueiden palautettuja ominaisuuksia käyttämällä $select järjestelmäkyselyasetusta sulkeissa siirtymisominaisuuden nimen jälkeen. Käytä tätä sekä yksiarvoisissa että kokoelma-arvoisissa siirtymisominaisuuksissa. Huomaa, että offline-tilassa tuemme vain sisäkkäistä $select asetusta -palvelussa $expand.

Määritä FetchXML-kysely fetchXml käyttämällä saraketta kyselyn määrittämiseen.

Note

Sinun on aina käytettävä $selectjärjestelmäkyselytoimintoa taulukkotietueelle palautettujen ominaisuuksien rajoittamiseksi sisällyttämällä mukaan pilkuin eroteltu ominaisuusnimien luettelo. Tämä on tärkeä suorituskyvyn paras käytäntö. Jos ominaisuuksia ei määritetä -toiminnolla $select, kaikki ominaisuudet palautetaan.

Määrität kyselyn asetukset, jotka alkavat .? Voit myös määrittää useita järjestelmäkyselyasetuksia käyttämällä - & menetelmää kyselyn asetusten erottamiseen.

Kun määrität parametrille options OData-kyselymerkkijonon, kysely tulee koodata erikoismerkkejä varten.

Kun määrität FetchXML-kyselyn parametrille options , kyselyä ei pidä koodata.

Katso esimerkeistä , miten voit määrittää parametrin usean skenaarion options noutamiseen.

Palautusarvo

Kun onnistuminen onnistuu, palauttaa lupausobjektin kohteeseen successCallback seuraavilla ominaisuuksilla:

Nimi Tyyppi Description
entities JSON-objektien matriisi Jokainen objekti edustaa noudettua taulukon tietuetta, joka sisältää sarakkeet ja niiden arvot pareina key: value . Taulukkotietueen tunnus noudetaan oletusarvoisesti
nextLink Merkkijono (valinnainen) Jos noudettavien tietueiden määrä on suurempi kuin pyynnössä parametrissa maxPageSize määritetty arvo, tämä palauttaa URL-osoitteen, joka palauttaa seuraavan tietuesivun.
fetchXmlPagingCookie (valinnainen) FetchXml-pohjainen retrieveMultipleRecords toiminto sivutustoiminnolla, jossa tietueiden kokonaismäärä on suurempi kuin sivutusarvo, tämä määrite palauttaa sivutusevästeiden, jota voidaan käyttää seuraavassa fetchXml-toiminnossa seuraavan tietuesivun noutamiseen.

OData-kyselyasetusten määritetyypit, joita ei tueta mobiililaitteiden offline-tilassa

Seuraavia saraketyyppejä ei tueta, kun suoritat Xrm.WebApi.retrieveMultipleRecords OData-kyselymerkkijonoasetuksia (esimerkiksi $select ja $filter) offline-mobiilitilassa. Käytä FetchXML:ää, jos käsiteltävä määritetyyppi on tässä tukemattomien määritetyyppien luettelossa.

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

Ominaisuudet, joita ei tueta Mobile Offlinessa

Seuraavia ominaisuuksia ei tueta mobile offline -tilassa:

  • Ryhmittely- ja koostamisominaisuudet

Tuetut suodatustoiminnot määritetyyppiä kohden mobiili-offline-tilassa FetchXML:n avulla

Seuraavia toimintoja tuetaan kaikille määritetyypeille, kun käytät FetchXML:ää:

  • Yhtä suuri kuin (eq)
  • Ei yhtä suuri kuin (neq)
  • Tyhjäarvo (null)
  • Ei tyhjäarvoinen (not-null)

Seuraavassa taulukossa on lueteltu jokaisen määritetyypin tukemat lisätoiminnot:

Määritetyyppi Tuetut toiminnot
BigInt, Decimal, Double, Integer Suurempi kuin (gt)
Suurempi tai yhtä suuri kuin (gte)
Pienempi kuin (lt)
Pienempi tai yhtä suuri kuin (lte)
Totuusarvo, asiakas Kohteessa (in)
Ei kohteessa (not-in)
Entiteetin nimi, valintaluettelo, osavaltio, tila Like (like)
Not Like (not-like)
Alkaa merkkijonolla (begins-with)
Ei ala merkkijonolla (not-begin-with)
Päättyy merkkijonoon (ends-with)
Ei pääty merkkijonoon (not-end-with)
Kohteessa (in)
Ei kohteessa (not-in)
Guid, Lookup Kohteessa (in)
Ei kohteessa (not-in)
On yhtä suuri kuin käyttäjätunnus (eq-userid)
Ei ole yhtä suuri kuin käyttäjätunnus (ne-userid)
Money Suurempi kuin (gt)
Suurempi tai yhtä suuri kuin (gte)
Pienempi kuin (lt)
Pienempi tai yhtä suuri kuin (lte)
Kohteessa (in)
Ei kohteessa (not-in)
Omistaja Kohteessa (in)
Ei kohteessa (not-in)
On yhtä suuri kuin käyttäjätunnus (eq-userid)
Ei ole yhtä suuri kuin käyttäjätunnus (ne-userid)
On yhtä suuri kuin käyttäjä tai ryhmä (eq-useroruserteams)
Merkkijono Like (like)
Not Like (not-like)
Alkaa merkkijonolla (begins-with)
Ei ala merkkijonolla (not-begin-with)
Päättyy merkkijonoon (ends-with)
Ei pääty merkkijonoon (not-end-with)
Päivämäärä ja aika Käytössä tai sen jälkeen (on-or-after)
Päivänä (on)
Käytössä tai ennen (on-or-before)
Tänään (today)
Huomenna (tomorrow)
Eilen (yesterday)
Seuraavat seitsemän päivää (next-seven-days)
Viimeiset seitsemän päivää (last-seven-days)
Ensi viikko (next-week)
Viime viikko (last-week)
Tämä viikko (this-week)
Ensi kuussa (next-month)
Viime kuukausi (last-month)
Tämä kuukausi (this-month)
Ensi vuosi (next-year)
Viime vuosi (last-year)
Tänä vuonna (this-year)
Edelliset X päivää (last-x-days)
Seuraavat X päivää (next-x-days)
Edelliset X viikkoa (last-x-weeks)
Seuraavat X viikkoa (next-x-weeks)
Edelliset X kuukautta (last-x-months)
Seuraavat X kuukautta (next-x-months)
Edelliset X vuotta (last-x-years)
Seuraavat X vuotta (next-x-years)
Suurempi kuin (gt)
Suurempi tai yhtä suuri (gte)
Pienempi kuin (lt)
Pienempi tai yhtä suuri (lte)

Esimerkit

Useimmat VERKKO-ohjelmointirajapintaa käyttävissä kyselytiedoissa /esimerkeissä voidaan tehdä käyttämällä retrieveMultipleRecords-menetelmää . Osa esimerkeistä on lueteltu alla.

Perustodennon monikerta

Tässä esimerkissä lähetetään kysely accounts-taulukkoon ja käytetään - $select ja $top -järjestelmäkyselyasetuksia palauttamaan kolmen ensimmäisen tilin nimiominaisuus:

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

Perussaata useita FetchXML:n avulla

Tässä esimerkissä account entiteetti kyselee 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
    }
);

Nouda tai suodata hakuominaisuuksien mukaan

Useimmille yksiarvoisille siirtymisominaisuuksille on laskettu vain luku -ominaisuus, joka käyttää seuraavaa nimeämiskäytäntöä: _<name>_value jossa <name> on yksiarvoisen siirtymisominaisuuden nimi. Suodatuksessa voidaan käyttää myös yksiarvoisen siirtymisominaisuuden tiettyä arvoa. Mobiiliohjelmissa offline-tilassa näitä syntaksiasetuksia ei kuitenkaan tueta, ja yksiarvoisen siirtymisominaisuuden nimeä tulee käyttää sekä noutamiseen että suodattamiseen. Myöskään siirtymisominaisuuksien vertaamista tyhjäarvoon ei tueta offline-tilassa.

Lisätietoja: Haun ominaisuudet

Tässä on koodiesimerkkejä kummastakin syystä:

Online-skenaario (yhdistetty palvelimeen)

Tässä esimerkissä lähetetään kysely accounts-taulukkoon ja käytetään $select - ja $filter -järjestelmäkyselyasetuksia palauttamaan nimi- ja primarycontactid-ominaisuus tileille, joilla on tietty ensisijainen yhteyshenkilö:

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

Mobiililaitteiden offline-skenaario

Tässä esimerkissä lähetetään kysely accounts-taulukkoon ja käytetään $select - ja $filter -järjestelmäkyselyasetuksia, joilla palautetaan nimi- ja primarycontactid-ominaisuus tileille, joilla on tietty ensisijainen yhteyshenkilö offline-tilassa toimittaessa:

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:n käyttäminen hakuominaisuuksien perusteella noutamiseen tai suodattamiseen (online- ja offline-skenaario)

-parametria FetchXML voidaan käyttää online- tai offline-tilassa - ja primarycontactid -ominaisuuden name noutamiseen niille tilitietueille, joiden ensisijainen yhteyshenkilö vastaa ehtoa:

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

Sivulla palautettavien taulukoiden määrän määrittäminen

Seuraavassa esimerkissä näytetään, miten parametria maxPageSize käytetään määrittämään sivulla näytettävien tietueiden määrä (3).

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

Tässä esimerkissä näytetään kolme tietuetta ja linkki seuraavalle sivulle. Tässä on esimerkki tuloste konsolista selaimen kehittäjätyökaluissa:

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

Käytä -ominaisuuden URL-osoitteen kyselyosaa nextLink parametrin options arvona myöhemmässä retrieveMultipleRecords-kutsussa seuraavan tietuejoukon pyytämiseksi. Älä muuta tai liitä enää järjestelmäkyselyasetuksia arvoon. Jokaisessa myöhemmässä useamman sivun pyynnössä tulee käyttää samaa maxPageSize arvoa, jota käytetään alkuperäisessä usean pyynnön noutamisessa. Tallenna myös palautetut tulokset välimuistiin tai NextLink-ominaisuuden arvo, jotta aiemmin noudetut sivut voidaan palauttaa.

Jos haluat esimerkiksi seuraavan tietuesivun, välitämme URL-osoitteen kyselyosan nextLink parametriin 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
    }
);

Tämä palauttaa tulosjoukkoon seuraavan sivun:

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

Tärkeää

Ominaisuuden nextLink arvo on URI-koodattu. Jos URI koodata arvon ennen sen lähettämista, URL-osoitteen XML-evästetiedot aiheuttavat virheen.

FetchXML-esimerkki (online-skenaario)

Seuraavassa esimerkissä esitellään FetchXML-parametrin käyttöä count sivulla näytettävien tietueiden määrän (3) määrittämiseen.

Note

FetchXML-sivutuseväste palautetaan vain verkkotoimintoja retrieveMultipleRecords varten. (Xrm.WebApi.online). Sitä ei tueta offline-tilassa.

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

Tässä esimerkissä näytetään kolme tietuetta ja palautetaan FetchXML Paging -eväste seuraavan sivun tulosten noutamiseksi, jos tulosjoukkoon kuuluu enemmän tietueita. Tässä on esimerkki tuloste konsolista selaimen kehittäjätyökaluissa:

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

Voimme käyttää - fetchXmlPagingCookie kohdetta alla olevan esimerkin mukaisesti suurten tulosjoukkojen noutamiseen sivutusta käyttäen.

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

Siirtymisominaisuuksien $expand järjestelmäkyselytoiminnolla voit hallita liittyvistä taulukoista palautettavat tiedot. Seuraavassa esimerkissä näytetään, miten voit noutaa kaikkien tilitietueiden yhteyshenkilön. Liittyvien yhteystietotietueiden osalta noudetaan vain ja contactidfullname:

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

Yllä oleva koodiyksikkö palauttaa tuloksen, jossa on seuraavankaltainen rakenne:

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

Note

Kuten verkkoskenaariossa, nouda tietoja aiheeseen liittyvistä taulukoista offline-tilassa $expand järjestelmäkyselytoiminnon avulla. Moni-moneen-yhteyksiä ei kuitenkaan tueta offline-tilassa.

Vanhentunut menetelmä mobiililaitteiden offline-skenaariossa

Note

@odata.nextLink on poistettu käytöstä offline-mobiilikäyttötilanteissa. Vaikka sitä tuetaan edelleen olemassa olevissa mukautuksissa, sitä ei enää suositella käytettäväksi.

Offline-tilassa oleva $expand toiminto palauttaa @odata.nextLink huomautuksen, joka sisältää tietoja siitä, miten pääset liittyvän tietueen tietoihin. idKäytämme tämän huomautuksen -, entityType- ja options -parametria yhden tai useamman lisäpyynnön Xrm.WebApi.offline.retrieveRecord muodostamiseen. Seuraavassa koodissa on täydellinen esimerkki siitä, miten tämä tehdään:

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

Lisää esimerkkejä useiden tietueiden noutamisesta WWW-ohjelmointirajapinnan avulla on kohdassa Tietojen kyseleminen WWW-ohjelmointirajapinnan avulla.

Tietojen kyseleminen WWW-ohjelmointirajapinnan avulla
Xrm.WebApi.retrieveRecord
Xrm.WebApi