Kongsi melalui


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 kepada had maksimum 5,000 rekod untuk jadual standard, 500 untuk jadual elastik.

Jika bilangan rekod yang diambil adalah lebih daripada nilai yang ditentukan maxPageSize atau had maksimum untuk jenis jadual, nextLink lajur dalam objek janji yang dikembalikan akan mengandungi pautan untuk mendapatkan semula 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, , $filter$top$expand, , dan $orderby.

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

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

Nota

Anda mesti sentiasa menggunakan $selectopsyen pertanyaan sistem untuk mengehadkan sifat yang dikembalikan bagi rekod jadual dengan memasukkan senarai nama sifat yang dipisahkan koma. Ini adalah amalan terbaik prestasi yang penting. Jika sifat tidak ditentukan menggunakan $select, semua sifat akan dikembalikan.

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

Apabila anda menentukan rentetan pertanyaan OData untuk options parameter, pertanyaan hendaklah dikodkan untuk aksara khas.

Apabila anda menentukan pertanyaan FetchXML untuk options parameter, pertanyaan tidak boleh dikodkan.

Lihat Contoh untuk melihat cara anda boleh mentakrifkan options parameter untuk pelbagai mendapatkan semula berbilang senario.

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 Tidak Disokong untuk opsyen pertanyaan OData dalam Luar Talian Mudah Alih

Jenis Lajur berikut tidak disokong apabila melakukan Xrm.WebApi.retrieveMultipleRecords operasi dengan pilihan rentetan pertanyaan OData (contohnya $select dan $filter) dalam mod luar talian mudah alih. Anda harus menggunakan FetchXML jika jenis atribut yang perlu anda gunakan berada dalam senarai jenis atribut yang tidak disokong ini.

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

Ciri yang tidak disokong dalam Luar Talian Mudah Alih

Ciri berikut tidak disokong dalam Luar Talian Mudah Alih:

  • Ciri Pengumpulan dan Pengagregatan

Operasi Penapis Disokong Setiap Jenis Atribut dalam Luar 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

Kebanyakan senario/contoh yang disebut dalam Data Pertanyaan menggunakan API Web boleh dicapai menggunakan kaedah retrieveMultipleRecords . Beberapa contoh disenaraikan di bawah.

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 yang menggunakan konvensyen penamaan berikut: _<name>_value di mana ialah <name> nama sifat navigasi bernilai tunggal. Untuk tujuan penapisan, nilai khusus sifat navigasi bernilai tunggal juga boleh digunakan. Walau bagaimanapun, untuk klien mudah alih dalam mod luar talian, opsyen sintaks ini tidak disokong dan nama sifat navigasi nilai tunggal hendaklah digunakan untuk mendapatkan semula dan menapis. Selain itu, perbandingan sifat navigasi kepada null tidak disokong dalam mod luar talian.

Maklumat lanjut: Sifat carian

Berikut ialah 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 menanyakan set jadual akaun dan menggunakan $select pilihan pertanyaan dan $filter sistem untuk mengembalikan nama dan sifat contactid utama untuk 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)

Anda boleh menggunakan FetchXML parameter semasa dalam talian atau luar talian untuk mendapatkan semula name dan primarycontactid sifat untuk 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 penggunaan maxPageSize parameter untuk menentukan bilangan rekod (3) yang akan dipaparkan dalam halaman.

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 akan 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 tambahkan sebarang pilihan pertanyaan sistem lagi pada nilai. Untuk setiap permintaan berikutnya untuk lebih banyak halaman, anda harus menggunakan nilai yang sama yang digunakan maxPageSize dalam permintaan berbilang pengambilan asal. Juga, cache hasil yang dikembalikan atau nilai sifat nextLink supaya halaman yang diambil sebelum ini boleh dikembalikan.

Sebagai contoh, untuk mendapatkan halaman rekod seterusnya, kami akan menghantar bahagian nextLink pertanyaan URL kepada 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
    }
);

Ini akan mengembalikan halaman seterusnya set keputusan:

{@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 URI sebelum anda menghantarnya, maklumat kuki XML dalam URL akan menyebabkan ralat.

Contoh FetchXML (senario dalam talian)

Contoh berikut menunjukkan penggunaan count parameter FetchXML untuk menentukan bilangan rekod (3) yang akan dipaparkan dalam halaman.

Nota

Kuki paging FetchXML hanya dikembalikan untuk operasi dalam talian retrieveMultipleRecords . (Xrm.WebApi.online). Ia tidak disokong di 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 akan memaparkan tiga rekod dan mengembalikan Kuki Paging FetchXML untuk mendapatkan semula hasil halaman seterusnya jika terdapat lebih banyak rekod yang tergolong dalam set keputusan. 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\" />"
}

Kita boleh menggunakan seperti yang fetchXmlPagingCookie ditunjukkan dalam contoh di bawah untuk mengambil set hasil yang besar dengan paging.

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 mendapatkan semula kenalan untuk semua rekod akaun. Untuk rekod hubungan yang berkaitan, kami hanya mendapatkan semula dan 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
    }
);

Sekeping kod di atas 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. Walau bagaimanapun, perhubungan banyak ke banyak tidak disokong di 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, tidak disyorkan untuk menggunakannya lagi.

Operasi $expand luar talian mengembalikan @odata.nextLink anotasi yang mengandungi maklumat tentang cara mendapatkan maklumat rekod yang berkaitan. Kami menggunakan id, , dan options parameter anotasi itu untuk membina satu atau lebih permintaan tambahan Xrm.WebApi.offline.retrieveRecordentityType. Sekeping kod berikut memberikan contoh lengkap tentang cara melakukan ini:

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 contoh lanjut mendapatkan semula berbilang rekod menggunakan API Web, lihat Data Pertanyaan menggunakan API Web.

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