Формулировка проблемы: сейчас при получении записи реестров нет возможности поиска записей по различным условиям (с использованием нескольких условий, с использованием разных логических операций).
Решение: необходимо реализовать 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
}