Формулировка проблемы: сейчас при получении записи реестров нет возможности поиска записей по различным условиям (с использованием нескольких условий, с использованием разных логических операций).
Решение: необходимо реализовать API методы, которые позволяют получить записи реестра с расширенными возможностями поиска.
Метод №1:
URL метода: rest/api/registry/data_ext
Тип запроса: GET
.
Метод №2 (для передачи данных большего размера):
URL метода: rest/api/registry/data_ext_post
Тип запроса: POST
.
Описание метода (для обоих):
Метод принимает следующие входные параметры:
registryID
- идентификатор реестра;
registryCode
- код реестра;
В запросе должен обязательно присутствовать параметр
registryID
либо
registryCode
. При наличии обоих входных
параметров поиск производится по значению параметра
registryCode
.
searchString
- поисковая строка;
pageNumber
- номер отображаемой страницы
(начиная с 0);
countInPart
- количество записей на странице;
locale
(не обяз.) - код локали (при
отсутствии параметра используется
язык
системы по умолчанию);
sortCmpID
- идентификатор компонента, по
которому будет производиться сортировка. При отсутствии
применяется сортировка для реестра по умолчанию.
sortDesc
- направление сортировки. Может
принимать следующие значения:
true
- по возрастанию;
false
- по убыванию;
Данный параметр влияет только на значения параметра
sortCmpID
.
groupTerm
- тип склеивания групп условий.
Может принимать следующие значения (по умолчанию
and
):
and
- логическое И;
or
- логическое ИЛИ;
loadData
- признак возврата данных записи
реестра. Может принимать следующие значения (по умолчанию
true
):
true
- данные возвращаются (значения
полей возвращаются только для тех компонентов, которые
отмечены для отображения при просмотре реестра);
false
- данные не возвращаются;
группы условий
- используются при
необходимости отфильтровать записи реестра с учетом нескольких
условий. Групп условий может быть передано несколько, тогда для
каждой последующей группы названия параметров должны
заканчиваться на суффикс, равный порядковому номеру группы
начиная с единицы. Каждая группа содержит следующие параметры:
field
- идентификатор поля. Может быть
передано несколько значений;
condition
- код условия. Может быть
передано несколько значений, но количество значений должно
быть равно количеству переданных параметров
field
. Может принимать следующие
значения:
MORE
- больше (для чисел, дат);
MORE_OR_EQUALS
- больше или равно
(для чисел, дат);
LESS
- меньше (для чисел, дат);
LESS_OR_EQUALS
- меньше или равно
(для чисел, дат);
EQUALS
- равно (для чисел, дат);
NOT_EQUALS
- не равно (для чисел,
дат);
CONTAINS
- одно из выбранных в
компоненте значений равно переданному параметру
(используется для выпадающих списков, переключателей
вариантов, выбора вариантов);
NOT_CONTAINS
- ни одно из выбранных в
компоненте значений не равно переданному параметры
(используется для выпадающих списков, переключателей
вариантов, выбора вариантов);
START
- строка начинается с
переданного параметра;
NOT_START
- строка не начинается с
переданного параметра;
NOT_END
- строка не заканчивается на
переданный параметр;
END
- строка заканчивается на
переданный параметр;
TEXT_NOT_EQUALS
- строка не равна;
TEXT_EQUALS
- строка равна;
value
- параметр для поиска по полю
value
. Может быть передано несколько
значений, но количество значений должно быть равно
количеству переданных параметров field
;
key
- параметр для поиска по полю
key
. Может быть передано несколько
значений, но количество значений должно быть равно
количеству переданных параметров field
;
term
- тип склеивания условий внутри
группы при нескольких условиях. Может принимать следующие
значения (по умолчанию and
):
and
- логическое И;
or
- логическое ИЛИ.
Метод возвращает записи реестра, которые соответствуют указанным условиям, с данными или без.
При значении параметра loadData
равному
true
, метод возвращает объект JSON, состоящий из
следующих полей:
result
- массив, состоящий из полученных
записей реестра:
registryID
- идентификатор реестра;
dataUUID
- идентификатор данных по форме;
documentID
- идентификатор документа;
fieldValue
- объект JSON, содержащий
данные записи реестра:
cmpID
- идентификатор компонента;
value
- текстовое значение компонента
cmpID
;
status
- статус записи реестра.
Возвращает одно из значений:
NO_ROUTE
- статус записи
"Подготовка";
STATE_NOT_FINISHED
- статус записи
"В процессе";
STATE_SUCCESSFUL
- статус записи
"Активная";
STATE_UNSUCCESSFUL
- статус записи
"Неуспешная";
state
- код статуса записи реестра.
Возвращает одно из значений:
0 - статус "Подготовка";
1 - статус "В процессе";
2 - статус "Активная";
3 - статус "Неуспешная";
recordsCount
- количество записей реестра.
При значении параметра loadData
равному
false
, метод возвращает объект JSON, состоящий из
следующих полей:
data
- массив, состоящий из полученных
записей реестра:
dataUUID
- идентификатор данных по форме;
documentID
- идентификатор документа;
count
- количество записей реестра.
Пример запроса всех записей реестра, в которых значение
числового поля numberField1
> 200 И значение
компонента listBox
= 1:
rest/api/registry/data_ext?registryID=0454848c-683d-40bb-8d92-729341823dcf&pageNumber=0&countInPart=15&loadData=true&field=numberField1&condition=MORE&key=200&field=listBox&condition=CONTAINS&key=1&term=and
Пример запроса всех записей реестра, в которых значение числового поля numberField1
> 200 ИЛИ значение компонента listBox
= 1:
rest/api/registry/data_ext?registryID=0454848c-683d-40bb-8d92-729341823dcf&pageNumber=0&countInPart=15&loadData=true&field=numberField1&condition=MORE&key=200&field=listBox&condition=CONTAINS&key=1&term=or
Пример запроса всех записей реестра, в которых (значение числового поля numberField1
> 200 И значение компонента listBox
= 1) ИЛИ (значение числового поля numberField1
< 30):
rest/api/registry/data_ext?registryID=0454848c-683d-40bb-8d92-729341823dcf&pageNumber=0&countInPart=15&loadData=true&groupTerm=or&field=numberField1&condition=MORE&key=200&field=listBox&condition=CONTAINS&key=1&term=and&field1=numberField1&condition1=LESS&key1=30
Пример возвращаемого объекта при
loadData
=true
:
{ "result": [ { "registryID": "014a88d2-6d86-4974-bb6f-97dc14b6d6fd", "dataUUID": "8862e0fb-d334-462b-a8e8-e83b4f4e8f58", "documentID": "c56b2970-d3d8-11e6-833d-001ef892a4ee", "fieldValue": { "cmp-2u3uie": null, "number": "", "start_date": "2017-01-20", "finish_date": "2017-01-26" }, "status": "STATE_NOT_FINISHED", "state": 1 }, { "registryID": "014a88d2-6d86-4974-bb6f-97dc14b6d6fd", "dataUUID": "0112b29b-95ad-45fd-b5c3-317613b3ab46", "documentID": "ba4b6a00-d3d8-11e6-833d-001ef892a4ee", "fieldValue": { "cmp-2u3uie": null, "number": "" }, "status": "STATE_UNSUCCESSFUL", "state": 3 } ], "recordsCount": 2 }
Пример возвращаемого объекта при
loadData
=false
:
{ "data": [ { "dataUUID": "8862e0fb-d334-462b-a8e8-e83b4f4e8f58", "documentID": "c56b2970-d3d8-11e6-833d-001ef892a4ee" }, { "dataUUID": "0112b29b-95ad-45fd-b5c3-317613b3ab46", "documentID": "ba4b6a00-d3d8-11e6-833d-001ef892a4ee" } ], "count": 35 }