Нотатка
Доступ до цієї сторінки потребує авторизації. Можна спробувати ввійти або змінити каталоги.
Доступ до цієї сторінки потребує авторизації. Можна спробувати змінити каталоги.
Отримує колекцію записів таблиці.
Синтаксис
Xrm.WebApi.retrieveMultipleRecords(entityLogicalName, options, maxPageSize).then(successCallback, errorCallback);
Параметри
| Ім'я | Тип | Необхідний | Опис |
|---|---|---|---|
entityLogicalName |
String | Так | Логічне ім'я таблиці записів, які потрібно отримати. Наприклад: account. |
options |
String | Ні | Параметри системного запиту OData або запит FetchXML для отримання даних. Див . параметри |
maxPageSize |
Число | Ні | Укажіть додатне число, яке вказує кількість записів таблиці, які потрібно повернути на сторінці. Якщо не вказати цей параметр, значення за замовчуванням додається до максимального обмеження в 5000 записів для стандартних таблиць, 500 для еластичних таблиць. Якщо кількість записів, які отримуються, перевищує вказане maxPageSize значення або максимальне обмеження для типу таблиці, nextLink стовпець у повернутому об'єкті обіцянки міститиме посилання для отримання записів. |
successCallback |
Function | Ні | Функція для виклику під час отримання записів таблиці. Див . повернуте значення |
errorCallback |
Function | Ні | Функція для виклику, коли операція не вдається. Передано об'єкт із такими властивостями: - errorCode:Число. Код помилки як додатне десяткове число. Наприклад, код помилки, задокументований як 0x80040333 , буде повернуто як 2147746611.- message:Рядок. Повідомлення про помилку з описом проблеми. |
Параметри
Підтримуються такі параметри системного запиту: $select, , $filter$top, $expand, і $orderby.
Скористайтеся параметром системного $expand запиту, щоб керувати поверненням даних із пов'язаних таблиць. Якщо просто додати ім'я властивості навігації, ви отримаєте всі властивості пов'язаних записів. Властивості, повернуті для пов'язаних записів, можна обмежити за допомогою параметра системного $select запиту в дужках після імені властивості навігації. Використовуйте це для навігаційних властивостей з одним значенням і для колекції . Зверніть увагу, що в автономному режимі підтримується лише вкладений $select параметр усередині $expand.
Щоб указати запит FetchXML, скористайтеся fetchXml стовпцем, щоб указати запит.
Нотатка
Щоб обмежити властивості, які повертаються для запису таблиці, потрібно завжди використовувати $selectпараметр системного запиту, включно з іменами властивостей, розділеними комами. Це важлива найкраща практика продуктивності. Якщо властивості не вказано за допомогою $select, буде повернуто всі властивості.
Ви вказуєте параметри запиту, які починаються з ?. Також можна вказати кілька параметрів системного запиту, використовуючи & для відокремлення параметрів запиту.
Якщо вказати рядок запиту OData для options параметра, запит має бути закодовано для спеціальних символів.
Якщо вказати запит FetchXML для options параметра, запит не має бути закодований.
Перегляньте приклади , щоб дізнатися, як визначити options параметр для різних сценаріїв.
Повернуте значення
Після успішного виконання повертає об'єкт обіцянки successCallback з такими властивостями:
| Ім'я | Тип | Опис |
|---|---|---|
entities |
Масив об'єктів JSON | Кожен об'єкт позначає отриманий запис таблиці, що містить стовпці та їхні значення як key: value пари. Ідентифікатор запису таблиці отримується за замовчуванням |
nextLink |
String | (необов'язково) Якщо кількість записів, які отримуються, перевищує значення, указане в maxPageSize параметрі запиту, ця функція повертає URL-адресу, щоб повернути наступну сторінку записів. |
fetchXmlPagingCookie |
(необов'язково) Для операції на основі retrieveMultipleRecords fetchXml із довантаженням, коли загальна кількість записів перевищує значення довантаження, цей атрибут повертає файл cookie довантаження, який можна використовувати для подальшої операції fetchXml для отримання наступної сторінки записів. |
Непідтримувані типи атрибутів для параметрів запиту OData в автономному режимі для мобільних пристроїв
Наведені нижче типи стовпців не підтримуються під час Xrm.WebApi.retrieveMultipleRecords виконання операції з параметрами рядка запиту OData (наприклад, $select і $filter) в автономному режимі для мобільних пристроїв. Функцію FetchXML слід використовувати, якщо тип атрибута, з яким потрібно працювати, міститься в цьому списку непідтримуваних типів атрибутів.
MultiSelectPicklistFileImageManagedPropertyCalendarRulesPartyListVirtual
Непідтримувані функції в автономному режимі для мобільних пристроїв
У мобільному автономному режимі такі функції не підтримуються:
- Функції групування та агрегації
Підтримувані операції фільтрування для кожного типу атрибута в мобільному автономному режимі за допомогою FetchXML
Під час роботи з FetchXML підтримуються такі операції для всіх типів атрибутів:
- Дорівнює (
eq) - Не дорівнює (
neq) - Null-значення (
null) - Not Null (
not-null)
У таблиці нижче наведено інші операції, які підтримуються для кожного типу атрибута:
| Тип атрибута | Підтримувані операції |
|---|---|
| BigInt, Decimal, Double, Integer | Більше (gt)Більше або дорівнює ( gte)Менше ( lt)Менше або дорівнює ( lte) |
| Логічне значення, клієнт | In (in)Not In ( not-in) |
| EntityName, Picklist, State, Status | Like (like)Не подобається ( not-like)Починається з ( begins-with)Не починається з ( not-begin-with)Закінчується на ( ends-with)Не закінчується на ( not-end-with)In ( in)Not In ( not-in) |
| Guid, підстановка | In (in)Not In ( not-in)Дорівнює ідентифікатору користувача ( eq-userid)Не дорівнює ідентифікатору користувача ( ne-userid) |
| Гроші | Більше (gt)Більше або дорівнює ( gte)Менше ( lt)Менше або дорівнює ( lte)In ( in)Not In ( not-in) |
| Власник | In (in)Not In ( not-in)Дорівнює ідентифікатору користувача ( eq-userid)Не дорівнює ідентифікатору користувача ( ne-userid)Дорівнює користувачу або команді ( eq-useroruserteams) |
| String | Like (like)Не подобається ( not-like)Починається з ( begins-with)Не починається з ( not-begin-with)Закінчується на ( ends-with)Не закінчується на ( not-end-with) |
| Дата та час | Увімкнуто або після (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 в наступному виклику для отримання викликівMultipleRecords , щоб надіслати запит на наступний набір записів. Не змінюйте та не додавайте додаткові параметри системного запиту до значення. Для кожного подальшого запиту на інші сторінки слід використовувати те саме 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 закодувати значення перед надсиланням, відомості про файл cookie XML в URL-адресі спричинять помилку.
FetchXML Example (онлайновий сценарій)
У наведеному нижче прикладі показано використання count параметра FetchXML для визначення кількості записів (3), які відображатимуться на сторінці.
Нотатка
Файл cookie довантаження 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
}
);
У цьому прикладі буде відображено три записи та повернуто файл cookie paging 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
}
);
Наведений вище фрагмент коду повертає результат із такою схемою:
{
"entities": [
{
"@odata.etag": "W/\"1459919\"",
"name": "Test Account",
"accountid": "119edfac-19c6-ea11-a81a-000d3af5e732",
"primarycontactid": {
"contactid": "6c63a1b7-19c6-ea11-a81a-000d3af5e732",
"fullname": "Test Contact"
}
}
]
}
Нотатка
Подібно до онлайнового сценарію, скористайтеся параметром системного запиту $expand , щоб отримати дані з пов'язаних таблиць в автономному режимі. Проте зв'язки "багато-до-багатьох" не підтримуються в автономному режимі.
Застарілий метод для сценарію роботи в автономному режимі для мобільних пристроїв
Нотатка
Це @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