Развернуть несколько полей в конечной точке Acumatica REST API

Как можно расширить несколько полей в вызове Acumatica REST API?

/entity/Default/17.200.001/Customer?$expand=Contacts

работает, и

/entity/Default/17.200.001/Customer?$expand=Salespersons

работает, но

/entity/Default/17.200.001/Customer?$expand=Contacts,Salespersons

не делает, оставляя ни один из них расширенным.

Согласно документации Acumatica:

Интеграция->Работа с контрактным REST API->Параметры получения записей->$expand

они говорят, что следуют соглашениям OData (https://www.odata.org/documentation/odata-version-3-0/url-conventions/)

которого я считаю, что этот запрос придерживается.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
1 185
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я спросил коллегу об этом поведении. Гипотеза состоит в том, что расширение нескольких запросов с помощью синтаксиса OData работает, но не может расширить более 1 массива сущностей. Я говорю «гипотеза», потому что ошибка веб-службы, возвращаемая при попытке расширить 2 массива сущностей, слишком общая, чтобы точно определить это как проблему.

Выпущенная в настоящее время документация, по-видимому, не затрагивает это ограничение, но вскоре она должна появиться вместе с обновленной документацией веб-сервиса. Обратите внимание, что это применимо только при извлечении всего объекта. Если бы вы выбрали один объект (например, выберите 1 клиента по идентификатору), вы могли бы расширить более 1 массива. Для одного объекта меньше ограничений, потому что меньше необходимости оптимизировать производительность для 1 по сравнению с X объектами.

Вы можете расширить несколько отдельных объектов и массив:

$expand=Contacts,MainContact,BillingContact

Но нельзя расширить несколько массивов:

$expand=Contacts,Salespersons

На левой панели экрана конечной точки веб-службы в виде дерева объект массива имеет обозначение массива [] (выделено красным на изображении ниже), а отдельный объект не имеет []:

Это работает, когда конечная точка содержит идентификатор клиента, например /entity/Default/17.200.001/Customer/MYCUSTOMER?$expand=Conta‌​cts,Salespersons.

J. McNerney 07.02.2019 16:11

Да, я знаю об этом, проблема возникает только при запросе всех клиентов. Расширение одного объекта имеет меньше ограничений. Это обычное явление для веб-сервисов. Неспособность вернуть данные чаще всего связана с преднамеренной попыткой ограничить количество отправляемых данных или время обработки для получения этих данных. Однако веб-служба должна была выдать тип ошибки «невозможно оптимизировать» в сценарии, с которым вы столкнулись.

Hugues Beauséjour 07.02.2019 16:15

Я добавил подробности о том, как это влияет только на получение нескольких объектов без ключа в моем ответе.

Hugues Beauséjour 07.02.2019 16:32

Возможные обходные пути:

1) Если требуется расширенный список всех Клиентов и всех полей

a) Write a Generic Inquiry
b) Make multiple calls, expanding only one list each time

2) Если количество клиентов довольно мало

a) Use the /Customer/{id}?$expand=... for each customers {id}

Преимущество (2a) заключается в том, что делегаты BQL поддерживаются, поскольку (1b) может получить ошибку «Просмотр ответов содержит делегат BQL». (1a), вероятно, требует наибольшей работы.

Другие вопросы по теме