Примеры запросов на выборку с фильтрацией
Glossary Item Box
Рекомендуем предварительно ознакомиться со статьей "Работа с объектами bpm'online по протоколу OData с использованием Http-запросов".
Конструкция $filter протокола OData используется для построения условий фильтрации данных.
В выражениях $filter можно использовать ссылки на свойства, литералы, а также строки, числа и логические выражения (true, false). Выражения $filter поддерживают арифметические, логические операции, а также операции группировки, операции со строками, датой и временем.
Логические операторы
Сигнатура | Наименование | Описание |
eq | Равно |
Все контакты, у которых поле [Name] равно значению 'SomeUserName'. Строка запроса: GET <Адрес приложения BPMonline>/0/ServiceModel/EntityDataService.svc/ContactCollection?$filter=Name eq 'SomeUserName' |
ne | Не равно |
Все контакты, у которых поле [Name] не равно значению 'SomeUserName'. Строка запроса: GET <Адрес приложения BPMonline>/0/ServiceModel/EntityDataService.svc/ContactCollection?$filter=Name ne 'SomeUserName' |
gt | Больше |
Все контакты, у которых поле [BirthDate] больше значения '1990-12-12T12:00'. Строка запроса: GET <Адрес приложения BPMonline>/0/ServiceModel/EntityDataService.svc/ContactCollection?$filter=BirthDate gt datetime'1990-12-12T12:00' |
ge | Больше или равно |
Все контакты, у которых поле [BirthDate] больше или равно значению '1990-12-12T12:00'. Строка запроса: GET <Адрес приложения BPMonline>/0/ServiceModel/EntityDataService.svc/ContactCollection?$filter=BirthDate ge datetime'1990-12-12T12:00' |
lt | Меньше |
Все контакты, у которых поле [BirthDate] меньше значения '1990-12-12T12:00'. Строка запроса: GET <Адрес приложения BPMonline>/0/ServiceModel/EntityDataService.svc/ContactCollection?$filter=BirthDate lt datetime'1990-12-12T12:00' |
le | Меньше или равно |
Все контакты, у которых поле [BirthDate] меньше или равно значению '1990-12-12T12:00'. Строка запроса: GET <Адрес приложения BPMonline>/0/ServiceModel/EntityDataService.svc/ContactCollection?$filter=BirthDate le datetime'1990-12-12T12:00' |
and | И |
Все контакты, у которых поле [Name] равно значению 'SomeUserName' и поле [BirthDate] меньше или равно значению '1990-12-12T12:00'. Строка запроса: GET <Адрес приложения BPMonline>/0/ServiceModel/EntityDataService.svc/ContactCollection?$filter=Name eq 'SomeUserName' and BirthDate le datetime'1990-12-12T12:00' |
or | Или |
Все контакты, у которых поле [Name] равно значению 'SomeUserName' или поле [BirthDate] меньше или равно значению '1990-12-12T12:00'. Строка запроса: GET <Адрес приложения BPMonline>/0/ServiceModel/EntityDataService.svc/ContactCollection?$filter=Name eq 'SomeUserName' or BirthDate le datetime'1990-12-12T12:00' |
not | Не |
Все контакты, у которых поле [Name] не заканчивается на 'ame'. Строка запроса: GET <Адрес приложения BPMonline>/0/ServiceModel/EntityDataService.svc/ContactCollection?$filter=not endswith(Name, 'ame') |
Арифметические операторы
Сигнатура | Наименование | Описание |
add | Сложение |
Выбрать все продукты, для которых цена (поле Price) удовлетворяет условию (Price + 2) = 35.55 Строка запроса: GET <Адрес приложения BPMonline>/0/ServiceModel/EntityDataService.svc/ProductCollection?$filter=Price add 2.00m eq 35.55m |
sub | Вычитание |
Выбрать все продукты, для которых цена (поле Price) удовлетворяет условию (Price - 2) = 35.55 Строка запроса: GET <Адрес приложения BPMonline>/0/ServiceModel/EntityDataService.svc/ProductCollection?$filter=Price sub 2.00m eq 35.55m |
mul | Умножение |
Выбрать все продукты, для которых цена (поле Price) удовлетворяет условию (Price * 2) = 35.55 Строка запроса: GET <Адрес приложения BPMonline>/0/ServiceModel/EntityDataService.svc/ProductCollection?$filter=Price mul 2.00m eq 35.55m |
div | Деление |
Выбрать все продукты, для которых цена (поле Price) удовлетворяет условию (Price / 2) = 35.55 Строка запроса: GET <Адрес приложения BPMonline>/0/ServiceModel/EntityDataService.svc/ProductCollection?$filter=Price div 2 eq 35.55m |
Для построения сложных условий фильтрации данных в конструкции $filters можно использовать различные функции:
- арифметические;
- функции работы со строками;
- функции работы с датой и временем;
- функции работы с коллекциями объектов.
Более подробно они описаны в статье "Работа с объектами bpm'online по протоколу OData с использованием Http-запросов".
Полный перечень функций протокола OData приведен в официальной спецификации OData.
Оператор any
Оператор any применяет логическое выражение к каждому члену коллекции и возвращает true, если выражение правдиво хотя бы для одного из членов коллекции. Оператор any без аргрумента вернет true, если коллекция содержит хотя бы один элемент.
Пример.
Выбрать все счета, в которых есть хотя бы один продукт с именем 'SomeProductName'.
Строка запроса:
GET <Адрес приложения BPMonline>/0/ServiceModel/EntityDataService.svc/InvoiceCollection?$filter=InvoiceProductCollectionByInvoice/any(d:d/Product/Name eq 'SomeProductName')
Типы данных протокола OData
При построении запросов необходимо учитывать типы данных, которые фильтруются. Литерал в правой части логического выражения должен иметь тот же тип данных, что и поле в левой части. Аналогичное правило касается и использования арифметических функций: строки, числа, литералы, участвующие в построении выражения, должны иметь одинаковые типы данных.
Тип данных | Определение | Примеры |
Edm.Binary |
Бинарные данные фиксированной или плавающей длины. Маска ввода: binary'[A-Fa-f0-9][A-Fa-f0-9]*' X'[A-Fa-f0-9][A-Fa-f0-9]*' ВАЖНО Х и binary регистрозависимы. Не должно быть пробела между служебным словом и значением.
|
Пример: X'23AB' Пример: binary'23ABFF' |
Edm.Boolean |
Логическое значение. Маска ввода: true | false |
Пример: true Пример: false |
Edm.Byte |
Беззнаковое 8-битное целое значение. Маска ввода: [0-9]+ |
Пример: 255 |
Edm.DateTime |
Дата и время в диапазоне от 12:00:00 midnight, January 1, 1753 A.D. до 11:59:59 P.M, December 9999 A.D. Маска ввода: datetime'yyyy-mm-ddThh:mm[:ss[.fffffff]]' ВАЖНО datetime регистрозависимо Не должно быть пробела между служебным словом и значением. |
Пример: datetime'2000-12-12T12:00' |
Edm.Decimal |
Числовое значение с фиксированной точностью. Этот тип описывает значение в диапазоне от отрицательного 10^255 + 1 до положительного 10^255 -1. Маска ввода: [0-9]+.[0-9]+M|m |
Пример: 2.345M |
Edm.Double |
Числовое значение с плавающей точкой с точностью до 15 знаков. Маска ввода: [0-9]+ ((.[0-9]+) | [E[+ | -][0-9]+])d |
Пример: 1E+10d Пример: 2.029d Пример: 2.0d
|
Edm.Single |
Числовое значение с плавающей точкой с точностью до 7 знаков. Маска ввода: [0-9]+.[0-9]+f |
Пример: 2.0f |
Edm.Guid |
128-разрядное значение, уникальный идентификатор. Маска ввода: guid'dddddddd-dddd-dddd-dddd-dddddddddddd', где d — [A-Fa-f0-9] ВАЖНО guid регистрозависимо. Не должно быть пробела между служебным словом и значением. |
Пример: guid'12345678-aaaa-bbbb-cccc-ddddeeeeffff' |
Edm.Int16 |
Целое 16-разрядное значение со знаком. Маска ввода: [-][0-9]+ |
Пример: 16 Пример: -16 |
Edm.Int32 |
Целое 32-разрядное значение со знаком. Маска ввода: [-] [0-9]+ |
Пример: 32 Пример: -32 |
Edm.Int64 |
Целое 64-разрядное значение со знаком. Маска ввода: [-] [0-9]+L |
Пример1: 64L Пример: -64L |
Edm.SByte |
Represents a signed 8-bit integer value. Маска ввода: [-] [0-9]+ |
Пример: 8 Пример: -8 |
Edm.String |
Символьные данные фиксированной или плавающей длины. Маска ввода: '<any UTF-8 character>' |
Пример: 'Hello OData' |