Как использовать OData $ orderby с функциями - PullRequest
0 голосов
/ 05 апреля 2020

Я запрашиваю данные с внутреннего сервера с помощью API Rest с использованием OData v3.0.

У меня есть таблица (и URL-адрес соответствующего ресурса) Contact, и у каждого контакта есть либо CompanyName, либо * 1005. *. Однако во внешнем интерфейсе отображается только Name.

Я хочу достичь $orderby этих двух полей, в зависимости от того, что доступно. Возможным способом является объединение этих двух полей, например $orderby=concat(CompanyName,PersonName), но я получил эту ошибку

Пожалуйста, проверьте ваш запрос OData: поддерживается только упорядочение по свойствам на уровне root не примитивные коллекции. Вложенные свойства и выражения не поддерживаются.

Есть ли другой способ сделать этот порядок? Спасибо.

1 Ответ

0 голосов
/ 05 апреля 2020

Вопрос

Как я могу заказать ЛИБО одно поле или другое?

Гипотетический ответ

Вы можете использовать выражение в вашем заказе. Как и вы, вот рабочий пример:

https://services.odata.org/V3/Northwind/Northwind.svc/Customers/? $ orderby = concat (Телефон, Факс)

Но почему это не работает?

В соответствии со спецификацией ODATA это должно работать, но правда в том, что большинство реализаций бэкэнда не полностью соответствуют спецификации. Это довольно нормальная вещь.

Многие известные мне реализации бэкэнда просто НЕ ПОДДЕРЖИВАЮТ вложенные свойства или выражения в их порядке.

Особенно, когда серверная часть предоставляется системами, основанными на реляционных базах данных (более старые системы SAP, NAV или AX Systems ..), они, как правило, не поддерживают его, главным образом потому, что хотят напрямую выполнить запрос sh. вплоть до базы данных, или они просто не реализовали ее до сегодняшнего дня.

Вы никогда не сможете предположить, что бэкэнд полностью реализует все спецификации ODATA, большую часть времени, бэкэнд реализует только то, что было необходимо до сих пор .

Итак, практический ответ

Это не проблема спецификации ODATA. Ваш подход правильный. Вместо этого у вас есть не полностью реализованный бэкэнд. Ваше единственное решение - попросить их реализовать его или обработать на стороне клиента.

Кстати

ODATA v3 - очень странная и редко поддерживаемая версия ODATA. Обычно в наши дни есть ODataV2 или ODataV4.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...