retrieveMultipleRecords (rujukan API Klien)

Mendapatkan koleksi rekod jadual.

Sintaks

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

Parameter

Nama Jenis Wajib Penerangan
entityLogicalName String Ya Nama logik jadual bagi rekod yang ingin anda ambil. Sebagai contoh: account.
options String No Pilihan pertanyaan sistem OData atau pertanyaan FetchXML untuk mendapatkan semula data anda. Lihat Pilihan
maxPageSize Nombor No Tentukan nombor positif yang menunjukkan bilangan rekod jadual yang akan dikembalikan setiap halaman. Jika anda tidak menentukan parameter ini, nilai lalai ialah had maksimum 5,000 rekod untuk jadual standard dan 500 untuk jadual elastik.

Jika bilangan rekod yang anda ambil melebihi nilai yang ditetapkan maxPageSize atau had maksimum untuk jenis jadual, nextLink lajur dalam objek janji yang dikembalikan mengandungi pautan untuk mendapatkan rekod.
successCallback Function No Fungsi untuk memanggil apabila rekod jadual diambil. Lihat Nilai Pulangan
errorCallback Function No Fungsi untuk memanggil apabila operasi gagal. Objek dengan sifat berikut diluluskan:
- errorCode:Nombor. Kod ralat sebagai nombor perpuluhan positif. Sebagai contoh, kod ralat yang didokumentasikan sebagai akan 0x80040333 dikembalikan sebagai 2147746611.
- message:Rentetan. Mesej ralat yang menerangkan isu tersebut.

Opsyen

Opsyen pertanyaan sistem berikut disokong: $select, , $top$filter$expand, , dan $orderby.

Gunakan $expand pilihan pertanyaan sistem untuk mengawal data daripada jadual berkaitan yang dikembalikan. Jika anda hanya memasukkan nama sifat navigasi, anda menerima semua sifat untuk rekod yang berkaitan. Anda boleh mengehadkan sifat yang dikembalikan untuk rekod berkaitan dengan menggunakan $select pilihan pertanyaan sistem dalam kurungan selepas nama sifat navigasi. Gunakan pilihan ini untuk kedua-dua sifat navigasi bernilai tunggal dan bernilai koleksi . Untuk luar talian, hanya pilihan bersarang $select di dalam yang $expand disokong.

Untuk menentukan pertanyaan FetchXML, gunakan fetchXml lajur untuk menentukan pertanyaan.

Nota

Anda mesti sentiasa menggunakan $select pilihan pertanyaan sistem untuk mengehadkan sifat yang dikembalikan bagi rekod jadual dengan menyertakan senarai nama sifat yang dipisahkan koma. Amalan ini penting untuk prestasi. Jika anda tidak menentukan sifat dengan menggunakan $select, semua sifat akan dikembalikan.

Tentukan pilihan pertanyaan bermula dengan ?. Anda juga boleh menentukan berbilang pilihan pertanyaan sistem dengan menggunakan & untuk memisahkan pilihan pertanyaan.

Apabila anda menentukan rentetan pertanyaan OData untuk parameter tersebut options , kodkan pertanyaan tersebut untuk aksara khas.

Apabila anda menentukan pertanyaan FetchXML untuk parameter tersebut options , jangan encode pertanyaan tersebut.

Untuk belajar cara mentakrifkan options parameter bagi pelbagai senario pengambilan berganda, lihat Contoh.

Nilai pulangan

Apabila berjaya, mengembalikan objek janji kepada dengan successCallback sifat berikut:

Nama Jenis Penerangan
entities Tatasusunan objek JSON Setiap objek mewakili rekod jadual yang diambil yang mengandungi lajur dan nilainya sebagai key: value pasangan. ID rekod jadual diambil secara lalai.
nextLink String (pilihan) Jika bilangan rekod yang diambil adalah lebih daripada nilai yang ditentukan dalam maxPageSize parameter dalam permintaan, ini mengembalikan URL untuk mengembalikan halaman rekod seterusnya.
fetchXmlPagingCookie (pilihan) Untuk operasi berasaskan retrieveMultipleRecords fetchXML dengan paging di mana jumlah kiraan rekod adalah lebih besar daripada nilai paging, atribut ini mengembalikan kuki paging yang boleh digunakan untuk operasi fetchXml seterusnya untuk mendapatkan semula halaman rekod seterusnya.

Jenis atribut yang tidak disokong untuk pilihan pertanyaan OData di luar talian mudah alih

Jenis Lajur berikut tidak disokong apabila anda menggunakan Xrm.WebApi.retrieveMultipleRecords pilihan rentetan pertanyaan OData (seperti $select dan $filter) dalam mod luar talian mudah alih. Gunakan FetchXML jika anda perlu bekerja dengan jenis atribut dalam senarai jenis atribut yang tidak disokong ini.

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

Ciri-ciri tidak disokong dalam talian mudah alih

Ciri-ciri berikut tidak disokong dalam talian mudah alih:

  • Ciri pengelompokan dan pengagregatan

Operasi penapis yang disokong mengikut jenis atribut dalam talian mudah alih menggunakan FetchXML

Operasi berikut disokong untuk semua jenis atribut apabila bekerja dengan FetchXML:

  • Sama dengan (eq)
  • Tidak Sama (neq)
  • Batal (null)
  • Bukan Batal (not-null)

Jadual berikut menyenaraikan lebih banyak operasi yang disokong untuk setiap jenis atribut:

Jenis Atribut Operasi yang Disokong
BigInt, Perpuluhan, Berganda, Integer Lebih Besar Daripada (gt)
Lebih Besar Daripada atau Sama (gte)
Kurang daripada (lt)
Kurang daripada atau sama (lte)
Boolean, Pelanggan Dalam (in)
Tidak Dalam (not-in)
EntityName, Senarai Pilihan, Negeri, Status Seperti (like)
Tidak Seperti (not-like)
bermula dengan (begins-with)
Tidak bermula dengan (not-begin-with)
Berakhir dengan (ends-with)
Tidak Berakhir Dengan (not-end-with)
Dalam (in)
Tidak Dalam (not-in)
Guid, Carian Dalam (in)
Tidak Dalam (not-in)
Sama dengan ID Pengguna (eq-userid)
Tidak Sama dengan ID Pengguna (ne-userid)
Wang Lebih Besar Daripada (gt)
Lebih Besar Daripada atau Sama (gte)
Kurang daripada (lt)
Kurang daripada atau sama (lte)
Dalam (in)
Tidak Dalam (not-in)
Pemilik Dalam (in)
Tidak Dalam (not-in)
Sama dengan ID Pengguna (eq-userid)
Tidak Sama dengan ID Pengguna (ne-userid)
Sama dengan Pengguna Atau Pasukan (eq-useroruserteams)
String Seperti (like)
Tidak Seperti (not-like)
bermula dengan (begins-with)
Tidak bermula dengan (not-begin-with)
Berakhir dengan (ends-with)
Tidak Berakhir Dengan (not-end-with)
TarikhMasa Pada Atau Selepas (on-or-after)
Pada (on)
Pada Atau Sebelum (on-or-before)
Hari ini (today)
Esok (tomorrow)
Semalam (yesterday)
Tujuh Hari Akan Datang (next-seven-days)
Tujuh Hari Terakhir (last-seven-days)
Minggu Depan (next-week)
Minggu Lepas (last-week)
Minggu ini (this-week)
Bulan Depan (next-month)
Bulan Lepas (last-month)
Bulan ini (this-month)
Tahun Depan (next-year)
Tahun Lepas (last-year)
Tahun Ini (this-year)
X Hari Terakhir (last-x-days)
X Hari Seterusnya (next-x-days)
X Minggu Terakhir (last-x-weeks)
X Minggu Depan (next-x-weeks)
X Bulan Terakhir (last-x-months)
X Bulan Depan (next-x-months)
X Tahun Terakhir (last-x-years)
X Tahun Akan Datang (next-x-years)
Lebih Besar Daripada (gt)
Lebih Besar Daripada Atau Sama (gte)
Kurang daripada (lt)
Kurang Daripada Atau Sama (lte)

Contoh

Anda boleh menggunakan kaedah retrieveMultipleRecords untuk mencapai kebanyakan senario dan contoh yang disebut dalam Data Pertanyaan menggunakan Web API. Beberapa contoh disenaraikan dalam bahagian berikut.

Asas mendapatkan semula berbilang

Contoh ini menanyakan set jadual akaun dan menggunakan $select pilihan pertanyaan dan $top sistem untuk mengembalikan sifat nama bagi tiga akaun pertama:

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

Dapatkan semula asas berbilang dengan FetchXML

Contoh ini menanyakan account entiti menggunakan 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
    }
);

Dapatkan semula atau tapis mengikut sifat carian

Untuk kebanyakan sifat navigasi bernilai tunggal, anda akan menemui sifat baca sahaja yang dikira dan menggunakan konvensyen penamaan berikut: _<name>_value di mana the <name> ialah nama sifat navigasi bernilai tunggal. Untuk tujuan penapisan, anda juga boleh menggunakan nilai khusus bagi sifat navigasi bernilai tunggal. Walau bagaimanapun, pilihan sintaks ini tidak disokong untuk klien mudah alih dalam mod luar talian. Gunakan nama sifat navigasi nilai tunggal untuk kedua-dua pengambilan dan penapisan. Selain itu, mod luar talian tidak menyokong perbandingan sifat navigasi dengan null.

Maklumat lanjut: Sifat carian

Berikut adalah contoh kod untuk kedua-dua senario:

Untuk senario dalam talian (disambungkan ke pelayan)

Contoh ini menanyakan set jadual akaun dan menggunakan $select pilihan pertanyaan dan $filter sistem untuk mengembalikan sifat nama dan primarycontactid untuk akaun yang mempunyai kenalan utama tertentu:

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

Untuk senario luar talian mudah alih

Contoh ini membuat pertanyaan kepada set jadual akaun dan menggunakan $select pilihan pertanyaan sistem untuk $filter mengembalikan sifat nama dan primarycontactid bagi akaun yang mempunyai kenalan utama tertentu apabila bekerja dalam mod luar talian:

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

Menggunakan FetchXML untuk mendapatkan semula atau menapis mengikut sifat carian (senario dalam talian dan luar talian)

Gunakan parameter semasa FetchXML dalam talian atau luar talian untuk mendapatkan name sifat dan primarycontactid bagi rekod akaun yang mempunyai kenalan utama yang sepadan dengan syarat:

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

Tentukan bilangan jadual untuk dikembalikan dalam halaman

Contoh berikut menunjukkan cara menggunakan maxPageSize parameter untuk menentukan setiap halaman memaparkan tiga rekod.

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

Contoh ini memaparkan tiga rekod dan pautan ke halaman seterusnya. Berikut ialah contoh output daripada Konsol dalam alatan pembangun penyemak imbas:

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

Gunakan bahagian pertanyaan dalam URL dalam nextLink sifat sebagai nilai untuk options parameter dalam panggilan retrieveMultipleRecords anda yang seterusnya untuk meminta set rekod seterusnya. Jangan ubah atau tambah lagi pilihan pertanyaan sistem pada nilai tersebut. Untuk setiap permintaan seterusnya untuk lebih banyak halaman, gunakan nilai yang sama maxPageSize yang anda gunakan dalam permintaan asal untuk dapatkan berganda. Selain itu, cache hasil yang dikembalikan atau nilai sifat supaya nextLink aplikasi anda boleh mengembalikan halaman yang telah diambil sebelum ini.

Sebagai contoh, untuk mendapatkan halaman rekod seterusnya, hantar bahagian nextLink pertanyaan URL ke options parameter:

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

Permintaan ini mengembalikan halaman seterusnya dalam set hasil.

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

Penting

Nilai sifat dikodkan nextLink URI. Jika anda mengekod nilai dengan URI sebelum anda menghantarnya, maklumat kuki XML dalam URL akan menyebabkan ralat.

Contoh FetchXML (senario dalam talian)

Contoh berikut menunjukkan cara menggunakan count parameter dalam FetchXML untuk menentukan setiap halaman memaparkan tiga rekod.

Nota

Kuki paging FetchXML hanya dikembalikan untuk operasi dalam talian retrieveMultipleRecords . (Xrm.WebApi.online). Ia tidak disokong secara luar talian.

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

Contoh ini memaparkan tiga rekod dan mengembalikan kuki paging FetchXML untuk mendapatkan hasil halaman seterusnya jika terdapat lebih banyak rekod dalam set hasil. Berikut ialah contoh output daripada Konsol dalam alatan pembangun penyemak imbas:

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

Untuk mendapatkan set hasil yang besar dengan paging, gunakan seperti fetchXmlPagingCookie yang ditunjukkan dalam contoh berikut.

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

Gunakan pilihan pertanyaan sistem $expand dalam sifat navigasi untuk mengawal data yang dikembalikan daripada jadual berkaitan. Contoh berikut menunjukkan cara untuk mendapatkan kenalan bagi semua rekod akaun. Untuk rekod kenalan berkaitan, anda hanya contactid mendapatkan medan dan 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
    }
);

Kod sebelumnya mengembalikan hasil dengan skema seperti:

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

Nota

Sama seperti senario dalam talian, gunakan pilihan pertanyaan sistem $expand untuk mendapatkan semula data daripada jadual berkaitan di luar talian. Namun, hubungan banyak-ke-banyak tidak disokong secara luar talian.

Kaedah ditamatkan untuk senario luar talian mudah alih

Nota

Sudah @odata.nextLink ditamatkan untuk senario luar talian mudah alih. Walaupun ia masih disokong untuk penyesuaian sedia ada, jangan guna lagi.

Operasi $expand luar talian mengembalikan @odata.nextLink anotasi yang mengandungi maklumat tentang cara mendapatkan maklumat rekod yang berkaitan. Gunakan id, , dan options parameter anotasi tersebut untuk membina satu atau lebih permintaan tambahan Xrm.WebApi.offline.retrieveRecordentityType. Kod berikut memberikan contoh lengkap tentang cara melakukannya:

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

Untuk lebih banyak contoh mendapatkan pelbagai rekod menggunakan Web API, lihat Pertanyaan Data menggunakan Web API.

Pertanyaan Data menggunakan API Web
Xrm.WebApi.retrieveRecord
Xrm.WebApi