Используйте в запросе параметр $filter, чтобы фильтровать результаты запроса по условию фильтрации. Условие описывается с помощью операторов и функций.
Формат URL:
{Протокол https или http}://{имя сервера, на котором установлен сервис интеграции}/{имя сервиса интеграции}/odata/{Интерфейс типа сущности во множественном числе}?$filter={Имя свойства} {Оператор сравнения} {Значение}
Пример:
GET /Integration/odata/ISimpleDocuments?$filter=HasVersions eq false HTTP/1.1
Host: DirectumRXServer.com
Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=
Content-Type: application/json
Accept: application/json
В ответе придет список всех простых документов (SimpleDocument), у которых нет версий:
|
Пример кода для создания аналогичного запроса, написанного на языке C# с использованием библиотеки Simple.OData.Client:
// URL сервиса интеграции.
private const string IntegrationServiceUrl = "https://DirectumRXServer.com/Integration/odata/";
// Логин для Basic-аутентификации.
private const string Login = "IntegrationUser";
// Пароль для Basic-аутентификации.
private const string Password = "11111";
// Настройки Simple OData Client: добавление URL сервиса и заголовка
// с данными аутентификации ко всем запросам.
var odataClientSettings = new ODataClientSettings(new Uri(IntegrationServiceUrl));
odataClientSettings.BeforeRequest += (HttpRequestMessage message) =>
{
var authenticationHeaderValue = Convert.ToBase64String(Encoding.UTF8.GetBytes($"{Login}:{Password}"));
message.Headers.Add("Authorization", "Basic" + authenticationHeaderValue);
};
var odataClient = new ODataClient(odataClientSettings);
// Создание запроса.
var document = await odataClient.For("ISimpleDocuments")
.Filter("HasVersions eq false")
.FindEntriesAsync();
Операторы
Оператор |
Значение |
Пример |
---|---|---|
eq |
Равно |
Name eq 'Записка' |
ne |
Не равно |
Name ne 'Договор' |
gt |
Больше чем |
Id gt 20 |
ge |
Больше или равно |
Id ge 10 |
lt |
Меньше |
Id lt 20 |
le |
Меньше или равно |
Id le 100 |
and |
Логическое И |
Price le 200 and Price gt 3.5 |
or |
Логическое ИЛИ |
Price le 3.5 or Price gt 200 |
not |
Логическое НЕ |
not endswith(DocumentKind,'р аренды') |
add |
Сложение |
Id add 5 gt 10 |
sub |
Вычитание |
Id sub 5 gt 10 |
mul |
Умножение |
Id mul 2 gt 2000 |
div |
Деление |
Id div 2 gt 4 |
mod |
Остаток от деления |
Id mod 2 eq 0 |
( ) |
Группировка вычислений по приоритету |
(Id sub 5) gt 10 |
Функции
Кроме операторов, можно использовать встроенные функции для фильтрации. Функции обрабатывают строки, числа и даты, а также округляют числа.
Формат URL:
{Протокол https или http}://{имя сервера, на котором установлен сервис интеграции}/{имя сервиса интеграции}/odata/{Интерфейс типа сущности во множественном числе}?$filter={Функция}({Условие})
Функция |
Описание |
Пример |
---|---|---|
Для работы со строками |
||
contains |
Строка содержит указанную подстроку |
contains(Department,'отдел') |
startswith |
Строка начинается с указанной подстроки |
startswith(DocumentKind,'Счет-ф') |
endswith |
Строка заканчивается указанной подстрокой |
endswith(DocumentKind,'р аренды') |
indexof |
Строка содержит указанную подстроку, начиная с указанного символа (индексация начинается с 0) |
indexof(Department,'маркетинга') eq 6 |
length |
Длина строки равна указанному количеству символов |
length(Name) eq 15 |
substring |
Начиная с указанного символа, строка содержит указанную подстроку (индексация начинается с 0) |
substring(Department,1) eq 'тдел маркетинга' |
tolower |
Приведенная к нижнему регистру строка содержит указанное значение |
tolower(DocumentKind) eq 'договор' |
toupper |
Приведенная к верхнему регистру строка содержит указанное значение |
toupper(DocumentKind) eq 'ДОГОВОР' |
trim |
Строка содержит указанное значение без учета пробелов в начале и в конце строки |
trim(Name) eq 'Договор' |
Для работы с датами |
||
date |
Указанная дата сравнивается полностью |
date(Modified) ne date(Created) |
time |
Указанное время сравнивается полностью |
time(Modified) le StartOfDay |
year |
Из указанной даты для сравнения берется год |
year(Created) ge 2020 |
month |
Из указанной даты для сравнения берется месяц |
month(Created) eq 12 |
day |
Из указанной даты для сравнения берется день |
day(Modified) eq 1 |
hour |
Из указанного времени для сравнения берутся часы |
hour(Modified) eq 13 |
minute |
Из указанного времени для сравнения берутся минуты |
minute(Created) eq 0 |
second |
Из указанного времени для сравнения берутся секунды |
second(Created) eq 0 |
now |
Указанное время сравнивается с текущим |
Modified ge now() |
Для работы с числами |
||
ceiling |
Для сравнения берется значение с округлением вверх |
ceiling(Freight) eq 33 |
floor |
Для сравнения берется значение с округлением вверх |
floor(Freight) eq 32 |
round |
Для сравнения берется округленное по правилам значение |
round(Freight) eq 32 |
Для преобразования типа |
||
cast |
Тип указанного значения преобразован к указанному типу |
cast(Name,Edm.String) |
Пример:
GET /Integration/odata/ISimpleDocuments?$filter=contains(Name,'Инструкция') HTTP/1.1
Host: DirectumRXServer.com
Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=
Content-Type: application/json
Accept: application/json
В ответе придет список всех простых документов, в названии которых есть слово «Инструкция».
Пример кода для создания аналогичного запроса, написанного на языке C# с использованием библиотеки Simple.OData.Client:
// URL сервиса интеграции.
private const string IntegrationServiceUrl = "https://DirectumRXServer.com/Integration/odata/";
// Логин для Basic-аутентификации.
private const string Login = "IntegrationUser";
// Пароль для Basic-аутентификации.
private const string Password = "11111";
// Настройки Simple OData Client: добавление URL сервиса и заголовка
// с данными аутентификации ко всем запросам.
var odataClientSettings = new ODataClientSettings(new Uri(IntegrationServiceUrl));
odataClientSettings.BeforeRequest += (HttpRequestMessage message) =>
{
var authenticationHeaderValue = Convert.ToBase64String(Encoding.UTF8.GetBytes($"{Login}:{Password}"));
message.Headers.Add("Authorization", "Basic" + authenticationHeaderValue);
};
var odataClient = new ODataClient(odataClientSettings);
// Создание запроса c $filter=contains(Name,'Инструкция')
var document = await odataClient.For("ISimpleDocuments")
.Filter("contains(Name, 'Инструкция')")
.FindEntriesAsync();
Условия в запросах можно комбинировать при помощи логических операторов and и or. Например, чтобы получить список всех простых документов, у которых есть версии и свойство Идентификатор (Id) в которых больше 100, используйте запрос:
GET /Integration/odata/ISimpleDocuments?$filter=HasVersions eq true and Id gt 100 HTTP/1.1
Host: DirectumRXServer.com
Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=
Content-Type: application/json
Accept: application/json
Пример кода для создания аналогичного запроса, написанного на языке C# с использованием библиотеки Simple.OData.Client:
// URL сервиса интеграции.
private const string IntegrationServiceUrl = "https://DirectumRXServer.com/Integration/odata/";
// Логин для Basic-аутентификации.
private const string Login = "IntegrationUser";
// Пароль для Basic-аутентификации.
private const string Password = "11111";
// Настройки Simple OData Client: добавление URL сервиса и заголовка
// с данными аутентификации ко всем запросам.
var odataClientSettings = new ODataClientSettings(new Uri(IntegrationServiceUrl));
odataClientSettings.BeforeRequest += (HttpRequestMessage message) =>
{
var authenticationHeaderValue = Convert.ToBase64String(Encoding.UTF8.GetBytes($"{Login}:{Password}"));
message.Headers.Add("Authorization", "Basic" + authenticationHeaderValue);
};
var odataClient = new ODataClient(odataClientSettings);
// Создание запроса.
var document = await odataClient.For("ISimpleDocuments")
.Filter("HasVersions eq true and Id gt 100")
.FindEntriesAsync();
© Компания Directum, 2024 |