Формулировка проблемы: не удобно производить поиск по столбцам динамической таблицы, если заранее неизвестно количество строк в таблице.
Связанные задачи:
Решение: необходимо доработать метод
rest/api/asforms/search/advanced
следующим
образом:
Во-первых, необходимо добавить новый входной параметр:
dynParams
- массив, состоящий из массивов
параметров, использующихся в строке query
.
Массив параметров - это массив компонентов одной динамической
таблицы. То есть компоненты другой динамической таблицы должны
быть записаны в отдельном массиве параметров.
Компоненты динамической таблицы должны быть указаны в виде названия компонента без имени самой динамической таблицы.
Например. Имеется динамическая таблица с именем компонента
dyntable1
, в которой находятся два однострочных поляcmp1
,cmp2
. В запросе однострочное поле указывается в видеcmp1
.
Во-вторых, для параметров
dynParams
необходимо задействовать те же
суффиксы, что и в параметре parameters
. Они
обозначают тип данных, который содержит компонент динамической
таблицы:
TEXT
- текст
INT
- число
DATE
- дата
При отсутствии суффикса по умолчанию используется суффикс
TEXT
.
При указании параметра в массиве dynParams
с
одним из данных суффиксов поиск должен производиться по всему
столбцу всех динамических таблиц, в которых находится указанный в
запросе компонент.
Примечания
Если есть динамические таблицы, в которых присутствуют компоненты с одинаковыми названиями, то при совершении запроса по названию такого компонента, поиск будет производится во всех динамических таблицах, в которых присутствует компонент с таким названием. Это не будет являться ошибкой
ARTA Synergy
.
Запрещено использовать выражение order by
для
компонента динамической таблицы.
Если в столбце динамической таблицы присутствует несколько значений, удовлетворяющих запросу, то объект (данные по форме, документ) в массиве возвращается только один раз.
Тип запроса и выходные данные не изменяются.
Пример запроса с компонентами одной динамической таблицы:
{ "query": " where ( `user1.TEXT` = 'Иванов%' or `user1.TEXT` = 'Петров%' and ( `startdate1.DATE` > '2016-09-01 00:00:00' and `finishdate1.DATE` < '2016-10-01 00:00:00') ) ", "parameters": [], "dynParams" : [ [ "user1.TEXT", "startdate1.DATE", "finishdate1.DATE" ] ], "startRecord": 0, "recordsCount": 50, "showDeleted": "true", "searchInRegistry": "true", "registryRecordStatus": ["STATE_SUCCESSFUL"] }
Пример запроса с компонентами нескольких динамических таблиц:
{ "query": " where ( ( `startdate1.DATE` > '2016-09-01 00:00:00' and `finishdate1.DATE` < '2016-10-01 00:00:00') or (`startdate2.DATE` > '2016-09-01 00:00:00' and `finishdate2.DATE` < '2016-10-01 00:00:00') ) ", "parameters": [], "dynParams" : [ [ "startdate1.DATE", "finishdate1.DATE" ], [ "startdate2.DATE", "finishdate2.DATE" ] ], "startRecord": 0, "recordsCount": 50, "showDeleted": "true", "searchInRegistry": "true", "registryRecordStatus": ["STATE_SUCCESSFUL"] }
Пример возвращаемого ответа:
[ { "dataUUID":"08c164b0-e775-11e5-835c-525400bb7fc6", "documentID":"37c1fa90-eb62-11e5-835c-525400bb7fc6", "registryRecordStatus":"STATE_SUCCESSFUL" }, { "dataUUID":"41fd8240-b822-11e5-8630-525400bb7fc6", "documentID":"7cd33a10-dedb-11e5-8c91-525400bb7fc6", "registryRecordStatus":"STATE_SUCCESSFUL" }, { "dataUUID":"fd52s240-b822-11e5-8630-525400bb7fc6", "documentID":"a8ae8a30-c573-11e5-9020-525400bb7fc6", "registryRecordStatus":"STATE_SUCCESSFUL" }, { "dataUUID":"8cab17d0-e685-11e5-835c-525400bb7fc6", "documentID":"bf2e9ff0-f7c5-11e5-835c-525400bb7fc6", "registryRecordStatus":"STATE_SUCCESSFUL" } ]
Альтернативные потоки событий
Добавить к существующим альтернативным потокам следующие потоки:
Альтернативный поток 1. В массивах параметров
parameters
и dynParams
присутствует компонент с одинаковым названием. Сервер
возвращает ошибку HTTP 400 с сообщением:
{ "errorCode": "13", "errorMessage": "В массивах parameters и dynParams присутствует компонент с одинаковым названием" }
Альтернативный поток 2. Запрещено использовать выражение
order by
для компонента динамической
таблицы. Сервер возвращает ошибку HTTP 400 с сообщением:
{ "errorCode": "13", "errorMessage": "Запрещено использовать выражение order by для компонента динамической таблицы" }