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