หมายเหตุ
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลอง ลงชื่อเข้าใช้หรือเปลี่ยนไดเรกทอรีได้
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลองเปลี่ยนไดเรกทอรีได้
เรียกใช้คอลเลกชันของระเบียนตาราง
ไวยากรณ์
Xrm.WebApi.retrieveMultipleRecords(entityLogicalName, options, maxPageSize).then(successCallback, errorCallback);
พารามิเตอร์
| ชื่อ | ประเภท | ต้องมี | คำอธิบาย |
|---|---|---|---|
entityLogicalName |
สตริง | ใช่ | ชื่อตรรกะตารางของระเบียนที่คุณต้องการเรียกใช้ ตัวอย่างเช่น: account |
options |
สตริง | ไม่ | ตัวเลือกคิวรีระบบ OData หรือคิวรี FetchXML เพื่อดึงข้อมูลของคุณ ดู ตัวเลือก |
maxPageSize |
หมายเลข | ไม่ | ระบุจํานวนบวกที่ระบุจํานวนเรกคอร์ดตารางที่จะส่งคืนต่อหน้า ถ้าคุณไม่ได้ระบุพารามิเตอร์นี้ ค่าเริ่มต้นคือขีดจํากัดสูงสุดของบันทึก 5,000 รายการสําหรับตารางมาตรฐานและ 500 รายการสําหรับตารางแบบยืดหยุ่น ถ้าจํานวนของระเบียนที่คุณจะเรียกข้อมูลมีมากกว่าค่าที่ระบุ maxPageSize หรือขีดจํากัดสูงสุดสําหรับชนิด nextLink ตาราง คอลัมน์ในวัตถุสัญญาที่ส่งคืนจะมีลิงก์เพื่อดึงข้อมูลเรกคอร์ด |
successCallback |
ฟังก์ชัน | ไม่ | ฟังก์ชันที่จะเรียกใช้เมื่อมีการเรียกใช้ระเบียนตาราง ดู ค่าที่ส่งกลับ |
errorCallback |
ฟังก์ชัน | ไม่ | ฟังก์ชันที่จะเรียกใช้เมื่อการดําเนินการล้มเหลว วัตถุที่มีคุณสมบัติต่อไปนี้จะถูกส่งผ่าน: - errorCode:เลข รหัสข้อผิดพลาดเป็นเลขทศนิยมบวก ตัวอย่างเช่น รหัสข้อผิดพลาดที่จัดทําเป็น 0x80040333 จะถูกส่งกลับเป็น2147746611- message:เชือก ข้อความแสดงข้อผิดพลาดที่อธิบายปัญหา |
ตัวเลือก
ตัวเลือกคิวรีของระบบต่อไปนี้ได้รับการสนับสนุน: $select, $top, $filter$expand, และ$orderby
$expandใช้ตัวเลือกคิวรีของระบบเพื่อควบคุมว่าจะส่งกลับข้อมูลจากตารางที่เกี่ยวข้องข้อมูลใด ถ้าคุณเพียงแค่ใส่ชื่อของคุณสมบัติการนําทาง คุณจะได้รับคุณสมบัติทั้งหมดสําหรับระเบียนที่เกี่ยวข้อง คุณสามารถจํากัดคุณสมบัติที่ส่งกลับสําหรับระเบียนที่เกี่ยวข้องได้โดยใช้ $select ตัวเลือกแบบสอบถามของระบบในวงเล็บหลังชื่อคุณสมบัติการนําทาง ใช้ตัวเลือกนี้สําหรับคุณสมบัติการนําทางทั้งแบบค่าเดียวและแบบค่าคอลเลกชัน สําหรับออฟไลน์ รองรับเฉพาะตัวเลือกที่ $select ซ้อนกันภายใน $expand เท่านั้น
หากต้องการระบุคิวรี FetchXML ให้ใช้ fetchXml คอลัมน์เพื่อระบุคิวรี
Note
คุณต้องใช้ $select ตัวเลือกคิวรีของระบบเพื่อจํากัดคุณสมบัติที่ส่งกลับสําหรับเรกคอร์ดตารางโดยรวมรายการคุณสมบัติที่คั่นด้วยจุลภาค แนวทางปฏิบัตินี้มีความสําคัญต่อประสิทธิภาพการทํางาน ถ้าคุณไม่ได้ระบุคุณสมบัติโดยใช้ $selectคุณสมบัติทั้งหมดจะถูกส่งกลับ
ระบุตัวเลือกคิวรีที่เริ่มต้นด้วย? คุณยังสามารถระบุตัวเลือกคิวรีของระบบหลายตัวได้โดยใช้ & เพื่อแยกตัวเลือกคิวรี
เมื่อคุณระบุสตริงคิวรี OData สําหรับพารามิเตอร์ ให้optionsเข้ารหัสคิวรีสําหรับอักขระพิเศษ
เมื่อคุณระบุคิวรี FetchXML สําหรับ options พารามิเตอร์ อย่าเข้ารหัส คิวรี
หากต้องการเรียนรู้วิธีการกําหนดoptionsพารามิเตอร์สําหรับสถานการณ์การดึงข้อมูลแบบต่างๆ โปรดดู ตัวอย่าง
ค่าที่ส่งกลับ
ในความสําเร็จ ส่งกลับวัตถุสัญญาไปยัง successCallback ด้วยคุณสมบัติต่อไปนี้:
| ชื่อ | ประเภท | คำอธิบาย |
|---|---|---|
entities |
อาร์เรย์ของออบเจ็กต์ JSON | วัตถุแต่ละรายการแสดงระเบียนตารางที่เรียกใช้ซึ่งมีคอลัมน์และค่าเป็น key: value คู่ รหัสของเรกคอร์ดตารางจะถูกดึงตามค่าเริ่มต้น |
nextLink |
สตริง | (ไม่บังคับ) ถ้าจํานวนระเบียนที่ดึงมานั้นมากกว่าค่าที่ระบุใน maxPageSize พารามิเตอร์ในคําขอ สิ่งนี้จะส่งกลับ URL เพื่อส่งกลับหน้าถัดไปของระเบียน |
fetchXmlPagingCookie |
(ไม่บังคับ) สําหรับการดําเนินการตาม retrieveMultipleRecords fetchXml กับการแบ่งหน้าที่จํานวนเรกคอร์ดทั้งหมดมากกว่าค่าการแบ่งหน้า แอตทริบิวต์นี้ส่งกลับคุกกี้หน้าที่สามารถใช้สําหรับการดําเนินการ fetchXml ที่ตามมาเพื่อดึงข้อมูลหน้าถัดไปของเรกคอร์ด |
ชนิดแอตทริบิวต์ที่ไม่สนับสนุนสําหรับตัวเลือกคิวรี OData ในอุปกรณ์เคลื่อนที่แบบออฟไลน์
ชนิดคอลัมน์ต่อไปนี้ไม่ได้รับการสนับสนุนเมื่อคุณใช้กับXrm.WebApi.retrieveMultipleRecordsตัวเลือกสตริงของคิวรี OData (เช่น $select และ $filter) ในโหมดออฟไลน์บนอุปกรณ์เคลื่อนที่ ใช้ FetchXML หากคุณต้องการทํางานกับประเภทแอตทริบิวต์ในรายการประเภทแอตทริบิวต์ที่ไม่รองรับนี้
MultiSelectPicklistFileImageManagedPropertyCalendarRulesPartyListVirtual
ฟีเจอร์ที่ไม่รองรับในอุปกรณ์เคลื่อนที่แบบออฟไลน์
คุณลักษณะต่อไปนี้ไม่ได้รับการสนับสนุนในอุปกรณ์เคลื่อนที่แบบออฟไลน์:
- คุณลักษณะการจัดกลุ่มและการรวม
การดําเนินการตัวกรองที่สนับสนุนต่อชนิดแอตทริบิวต์ในแบบออฟไลน์บนอุปกรณ์เคลื่อนที่โดยใช้ FetchXML
การดําเนินการต่อไปนี้ได้รับการสนับสนุนสําหรับชนิดแอตทริบิวต์ทั้งหมดเมื่อทํางานกับ FetchXML:
- เท่ากับ (
eq) - ไม่เท่ากับ (
neq) - Null (
null) - ไม่ใช่ Null (
not-null)
ตารางต่อไปนี้แสดงรายการการดําเนินการเพิ่มเติมที่สนับสนุนสําหรับแต่ละประเภทแอตทริบิวต์:
| ชนิดแอตทริบิวต์ | การปฏิบัติงานที่ได้รับการสนับสนุน |
|---|---|
| BigInt, Decimal, Double, Integer | มากกว่า (gt)มากกว่าหรือเท่ากับ ( gte)น้อยกว่า ( lt)น้อยกว่าหรือเท่ากับ ( lte) |
| บูลีน, ลูกค้า | ใน (in)ไม่อยู่ใน ( not-in) |
| EntityName, Picklist, State, Status | ถูกใจ (like)ไม่ถูกใจ ( not-like)เริ่มต้นด้วย ( begins-with)ไม่ได้เริ่มต้นด้วย ( not-begin-with)ลงท้ายด้วย ( ends-with)ไม่ลงท้ายด้วย ( not-end-with)ใน ( in)ไม่อยู่ใน ( not-in) |
| Guid, ลุคชวล | ใน (in)ไม่อยู่ใน ( not-in)เท่ากับ ID ผู้ใช้ ( eq-userid)ID ผู้ใช้ไม่เท่ากับ ( ne-userid) |
| เงิน | มากกว่า (gt)มากกว่าหรือเท่ากับ ( gte)น้อยกว่า ( lt)น้อยกว่าหรือเท่ากับ ( lte)ใน ( in)ไม่อยู่ใน ( not-in) |
| เจ้าของ | ใน (in)ไม่อยู่ใน ( not-in)เท่ากับ ID ผู้ใช้ ( eq-userid)ID ผู้ใช้ไม่เท่ากับ ( ne-userid)เท่ากับผู้ใช้หรือทีม ( eq-useroruserteams) |
| สตริง | ถูกใจ (like)ไม่ถูกใจ ( not-like)เริ่มต้นด้วย ( begins-with)ไม่ได้เริ่มต้นด้วย ( not-begin-with)ลงท้ายด้วย ( ends-with)ไม่ลงท้ายด้วย ( not-end-with) |
| DateTime | เมื่อหรือหลังจาก (on-or-after)เมื่อ ( on)เมื่อหรือก่อน ( on-or-before)วันนี้ ( today)วันพรุ่งนี้ ( tomorrow)เมื่อวานนี้ ( yesterday)เจ็ดวันถัดไป ( next-seven-days)เจ็ดวันที่ผ่านมา ( last-seven-days)สัปดาห์ถัดไป ( next-week)สัปดาห์ที่แล้ว ( last-week)สัปดาห์นี้ ( this-week)เดือนถัดไป ( next-month)เดือนที่แล้ว ( last-month)เดือนนี้ ( this-month)ปีถัดไป ( next-year)ปีที่แล้ว ( last-year)ปีนี้ ( this-year)X วันที่ผ่านมา ( last-x-days)X วันถัดไป ( next-x-days)X สัปดาห์ที่แล้ว ( last-x-weeks)X สัปดาห์ถัดไป ( next-x-weeks)X เดือนที่แล้ว ( last-x-months)X เดือนถัดไป ( next-x-months)ปี X ล่าสุด ( last-x-years)X ปีถัดไป ( next-x-years)มากกว่า ( gt)มากกว่าหรือเท่ากับ ( gte)น้อยกว่า ( lt)น้อยกว่าหรือเท่ากับ ( lte) |
ตัวอย่าง
คุณสามารถใช้เมธอด retrieveMultipleRecords เพื่อให้ได้สถานการณ์และตัวอย่างส่วนใหญ่ที่กล่าวถึงในข้อมูลคิวรีโดยใช้ API เว็บ ตัวอย่างบางส่วนจะแสดงอยู่ในส่วนต่อไปนี้
ดึงข้อมูลพื้นฐานหลายรายการ
ตัวอย่างนี้จะคิวรีตารางบัญชีที่ตั้งค่าและใช้ $select ตัวเลือกคิวรีของระบบ และ $top เพื่อส่งกลับคุณสมบัติชื่อสําหรับบัญชีสามบัญชีแรก:
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
}
);
ดึงข้อมูลพื้นฐานที่มี FetchXML
ตัวอย่างนี้คิวรี account เอนทิตีโดยใช้ 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
}
);
เรียกใช้หรือกรองตามคุณสมบัติการค้นหา
สําหรับคุณสมบัติการนําทางค่าเดียวส่วนใหญ่ คุณจะพบคุณสมบัติแบบอ่านอย่างเดียวที่คํานวณและใช้รูปแบบการตั้งชื่อต่อไปนี้: _<name>_value โดยที่ คือ <name> ชื่อของคุณสมบัติการนําทางแบบค่าเดียว สําหรับวัตถุประสงค์ในการกรอง คุณยังสามารถใช้ค่าเฉพาะของคุณสมบัติการนําทางแบบค่าเดียวได้ อย่างไรก็ตาม ตัวเลือกไวยากรณ์เหล่านี้ไม่ได้รับการสนับสนุนสําหรับไคลเอ็นต์บนอุปกรณ์เคลื่อนที่ในโหมดออฟไลน์ ใช้ชื่อคุณสมบัติการนําทางค่าเดียวสําหรับทั้งการดึงและการกรอง นอกจากนี้ โหมดออฟไลน์ยังไม่สนับสนุนการเปรียบเทียบคุณสมบัติการนําทางเป็น null
ข้อมูลเพิ่มเติม: คุณสมบัติการค้นหา
ต่อไปนี้คือตัวอย่างโค้ดสําหรับทั้งสองสถานการณ์:
สําหรับสถานการณ์ออนไลน์ (เชื่อมต่อกับเซิร์ฟเวอร์)
ตัวอย่างนี้คิวรีตารางบัญชีชุดและใช้ $select ตัวเลือกคิวรีของระบบ และ $filter เพื่อส่งกลับชื่อและคุณสมบัติ primarycontactid สําหรับบัญชีที่มีผู้ติดต่อหลักเฉพาะ:
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
}
);
สําหรับสถานการณ์สมมติแบบออฟไลน์บนอุปกรณ์เคลื่อนที่
ตัวอย่างนี้คิวรีตารางบัญชีชุดและใช้ $select ตัวเลือกคิวรีของระบบ และ $filter เพื่อส่งกลับชื่อและคุณสมบัติ primarycontactid สําหรับบัญชีที่มีผู้ติดต่อหลักเฉพาะเมื่อทํางานในโหมดออฟไลน์:
Xrm.WebApi.retrieveMultipleRecords("account", "?$select=name,primarycontactid&$filter=primarycontactid eq a0dbf27c-8efb-e511-80d2-00155db07c77").then(
function success(result) {
for (var i = 0; i < result.entities.length; i++) {
console.log(result.entities[i]);
}
// perform additional operations on retrieved records
},
function (error) {
console.log(error.message);
// handle error conditions
}
);
การใช้ FetchXML เพื่อดึงหรือกรองตามคุณสมบัติการค้นหา (สถานการณ์ออนไลน์และออฟไลน์)
FetchXMLใช้พารามิเตอร์ขณะออนไลน์หรือออฟไลน์เพื่อดึงข้อมูลnameคุณสมบัติ และ primarycontactid สําหรับระเบียนบัญชีที่มีผู้ติดต่อหลักที่ตรงกับเงื่อนไข:
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
}
);
ระบุจํานวนตารางที่จะส่งกลับในหน้า
ตัวอย่างต่อไปนี้แสดงวิธีการใช้ maxPageSize พารามิเตอร์เพื่อระบุว่าแต่ละหน้าจะแสดงบันทึกสามรายการ
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
}
);
ตัวอย่างนี้แสดงสามเรกคอร์ดและลิงก์ไปยังหน้าถัดไป นี่คือตัวอย่างผลลัพธ์จาก คอนโซล ในเครื่องมือสําหรับนักพัฒนาเบราว์เซอร์:
{@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
ใช้ส่วนคิวรีใน URL ใน nextLink คุณสมบัติ เป็นค่าสําหรับ options พารามิเตอร์ใน การเรียก retrieveMultipleRecords ถัดไปของคุณเพื่อร้องขอระเบียนชุดถัดไป อย่าเปลี่ยนแปลงหรือเพิ่มตัวเลือกคิวรีระบบเพิ่มเติมไปยังค่า สําหรับคําขอที่ตามมาทุกครั้งสําหรับหน้าเพิ่มเติม ให้ใช้ค่าเดียวกันกับ maxPageSize ที่คุณใช้ในการร้องขอเดิมที่เรียกใช้หลายรายการ นอกจากนี้ แคชผลลัพธ์ที่ส่งกลับหรือค่าของ nextLink คุณสมบัติ เพื่อให้แอปของคุณสามารถส่งกลับหน้าที่ได้รับก่อนหน้านี้
ตัวอย่างเช่น หากต้องการรับหน้าถัดไปของระเบียน ให้ส่งผ่านส่วนคิวรีของ nextLink URL ไปยัง 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
}
);
คําขอนี้จะส่งกลับหน้าถัดไปของชุดผลลัพธ์
{@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
สําคัญ
ค่าของ nextLink คุณสมบัติ ถูกเข้ารหัส URI หากคุณเข้ารหัส URI ค่าก่อนที่จะส่ง ข้อมูลคุกกี้ XML ใน URL จะทําให้เกิดข้อผิดพลาด
ตัวอย่าง FetchXML (สถานการณ์ออนไลน์)
ตัวอย่างต่อไปนี้แสดงวิธีการใช้ count พารามิเตอร์ใน FetchXML เพื่อระบุว่าแต่ละหน้าแสดงสามเรกคอร์ด
Note
คุกกี้หน้า FetchXML จะถูกส่งกลับสําหรับการดําเนินการออนไลน์ retrieveMultipleRecords เท่านั้น (Xrm.WebApi.online) ไม่ได้รับการสนับสนุนแบบออฟไลน์
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
}
);
ตัวอย่างนี้แสดงสามเรกคอร์ดและส่งกลับคุกกี้หน้า FetchXML เพื่อดึงผลลัพธ์ของหน้าถัดไปหากมีเรกคอร์ดเพิ่มเติมในชุดผลลัพธ์ นี่คือตัวอย่างผลลัพธ์จาก คอนโซล ในเครื่องมือสําหรับนักพัฒนาเบราว์เซอร์:
{
"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\" />"
}
เมื่อต้องการดึงข้อมูลชุดผลลัพธ์ขนาดใหญ่พร้อมการแบ่งหน้า ให้ใช้ fetchXmlPagingCookie ดังที่แสดงในตัวอย่างต่อไปนี้
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
}
);
ดึงข้อมูลตารางที่เกี่ยวข้องโดยการขยายคุณสมบัติการนําทาง
ใช้ตัวเลือก คิวรีของระบบ $expand ในคุณสมบัติการนําทางเพื่อควบคุมข้อมูลที่ส่งกลับจากตารางที่เกี่ยวข้อง ตัวอย่างต่อไปนี้แสดงวิธีการดึงข้อมูลผู้ติดต่อสําหรับเรกคอร์ดบัญชีทั้งหมด สําหรับเรกคอร์ดผู้ติดต่อที่เกี่ยวข้อง คุณดึงข้อมูลฟิลด์ contactid และ 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
}
);
โค้ดก่อนหน้าส่งกลับผลลัพธ์ที่มี schema เช่น:
{
"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
คล้ายกับสถานการณ์ออนไลน์ ใช้ตัวเลือกคิวรีระบบ $expand เพื่อดึงข้อมูลจากตารางที่เกี่ยวข้องในแบบออฟไลน์ อย่างไรก็ตาม ความสัมพันธ์แบบกลุ่ม-ต่อ-กลุ่มไม่ได้รับการสนับสนุนในแบบออฟไลน์
วิธีการที่ยกเลิกการสนับสนุนสําหรับสถานการณ์แบบออฟไลน์บนอุปกรณ์เคลื่อนที่
Note
@odata.nextLinkถูกเลิกใช้งานสําหรับสถานการณ์แบบออฟไลน์บนอุปกรณ์เคลื่อนที่ แม้ว่าจะยังได้รับการสนับสนุนสําหรับการกําหนดค่าที่มีอยู่ อย่าใช้อีกต่อไป
การดําเนินการ $expand แบบออฟไลน์จะ @odata.nextLink ส่งกลับคําอธิบายประกอบที่ประกอบด้วยข้อมูลเกี่ยวกับวิธีการรับข้อมูลของระเบียนที่เกี่ยวข้อง
idใช้พารามิเตอร์ , entityTypeและ options ของคําอธิบายประกอบนั้นเพื่อสร้างคําขอเพิ่มเติมXrm.WebApi.offline.retrieveRecordอย่างน้อยหนึ่งรายการ โค้ดต่อไปนี้แสดงตัวอย่างที่สมบูรณ์ของวิธีการทําเช่นนี้:
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
});
สําหรับตัวอย่างเพิ่มเติมของการเรียกใช้หลายระเบียนโดยใช้ API เว็บ ดูข้อมูลคิวรีโดยใช้ API เว็บ
บทความที่เกี่ยวข้อง
คิวรีข้อมูลโดยใช้ API เว็บ
Xrm.WebApi.retrieveRecord
Xrm.WebApi