หมายเหตุ
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลอง ลงชื่อเข้าใช้หรือเปลี่ยนไดเรกทอรีได้
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลองเปลี่ยนไดเรกทอรีได้
เรียกใช้คอลเลกชันของระเบียนตาราง
ไวยากรณ์
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) |
ตัวอย่าง
สถานการณ์/ตัวอย่างส่วนใหญ่ที่กล่าวถึงในข้อมูลคิวรีโดยใช้ API เว็บสามารถทําได้โดยใช้เมธอด retrieveMultipleRecords ตัวอย่างบางส่วนจะแสดงอยู่ด้านล่าง
ดึงข้อมูลพื้นฐานหลายรายการ
ตัวอย่างนี้จะคิวรีตารางบัญชีที่ตั้งค่าและใช้ $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 พารามิเตอร์เพื่อระบุจํานวนระเบียน (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
}
);
ตัวอย่างนี้จะแสดงสามเรกคอร์ดและลิงก์ไปยังหน้าถัดไป นี่คือตัวอย่างผลลัพธ์จาก คอนโซล ในเครื่องมือสําหรับนักพัฒนาเบราว์เซอร์:
{@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 เพื่อระบุจํานวนเรกคอร์ด (3) ที่จะแสดงในหน้า
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 Paging Cookie ไปยังผลลัพธ์ของหน้าถัดไปหากมีเรกคอร์ดเพิ่มเติมที่อยู่ในชุดผลลัพธ์ นี่คือตัวอย่างผลลัพธ์จาก คอนโซล ในเครื่องมือสําหรับนักพัฒนาเบราว์เซอร์:
{
"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 ส่งกลับคําอธิบายประกอบที่ประกอบด้วยข้อมูลเกี่ยวกับวิธีการรับข้อมูลของระเบียนที่เกี่ยวข้อง เราใช้พารามิเตอร์ , entityTypeและ options ของidคําอธิบายประกอบนั้นเพื่อสร้างคําขอเพิ่มเติม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