Внимание!
Описание метода в задаче неактуально, актуальное описание смотрите в документации.
Формулировка проблемы: текущий метод API поиска
по данным форм и реестров rest/api/asforms/search
не позволяет задавать разные term
-ы для связки
условий (может быть либо OR
, либо
AND
для всех). Пример нереализуемого в рамках
этого метода поискового запроса:
(автор = Толстой ИЛИ заглавие = Бородино) И язык = русский
Решение: необходимо реализовать расширенный метод поиска по данным форм и реестров
URL
метода:
rest/api/asforms/search/advanced
. Тип запроса:
POST
.
Метод принимает в качестве параметров JSON
следующего вида:
{ "query": "(field=? AND value LIKE ?) OR (field=? AND value=?)", "parameters": [ "surname", "Ivanov%", "surname", "Petrov_" ], "startRecord": 0, "recordsCount": 50, "showDeleted": "true", "searchInRegistry": "true" }
где:
query
- строка
SQL
-подобного поискового запроса, которая
может содержать круглые скобки (
,
)
, логические операторы
AND
, OR
,
NOT
, XOR
и их синонимы
&&
, ||
,
!
(у XOR
нет синонимов), а
также сравнения следующих видов:
Левым операндом сравнения может являться
field
, value
либо
uuid
Возможные операции сравнения: =
,
LIKE
Правым операндом должен являться ?
Наличие параметра query
обязательно, а его
значение - регистронезависимо (case-insensitive).
parameters
- массив
строковых параметров, которые
будут использоваться вместо подстановок ?
в
запросе[13]. Количество параметров в массиве должно точно
совпадать с количеством ?
в запросе, иначе
должна быть возвращена ошибка
Количество параметров в запросе не соответствует переданному количеству параметров
Описание остальных параметров и виды возвращаемых значений см. в
описании метода rest/api/asforms/search
, за
исключением параметров getDocIds
,
searchInRegistry
, sortField
,
sortDir
, и sortType
:
Параметр getDocIds
упраздняется
Если параметр searchInRegistry
равен
true
, то результат запроса имеет следующий
вид:
[ { "dataUUID": "uuid1", "documentID": "docID1" }, { "dataUUID": "uuid2", "documentID": "docID2" }, { "dataUUID": "uuid3", "documentID": "docID3" } ]
Если параметр searchInRegistry
равен
false
, то результат запроса имеет следующий
вид:
[ { "dataUUID": "uuid1" }, { "dataUUID": "uuid2" }, { "dataUUID": "uuid3" } ]
где dataUUID
- UUID
данных по
форме, а documentID
- идентификатор документа.
Альтернативные потоки событий
Передано некорректное значение в параметре
query
: использование ключевых слов, отличных
от описанных, несовпадающее количество открывающих и закрывающих
скобок, неправильные левые или правые операнды и т.п.
Соответствующее сообщение об ошибке:
Синтаксическая ошибка в поисковом запросе
Количество ?
в параметре не совпадает с
количеством переданных параметров. Сообщение об ошибке указано
выше.
Некорректные символы в параметре. Зарезервировано на будущее.
Сообщение:
Некорректные символы в параметре
Пустое значение параметра query
(либо
содержащее только пробельные символы).
Сообщение:
Поисковый запрос пуст
[13]
При использовании операции сравнения LIKE
символы %
и _
будут
использованы как спецсимволы оператора
SQL LIKE
. Для того, чтобы получить
литерал %
либо _
,
необходимо экранировать его обратной косой чертой
(\%
).