Внимание!
Описание метода в задаче неактуально, актуальное описание смотрите в документации.
Формулировка проблемы: текущий метод 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. Для того, чтобы получить
литерал % либо _,
необходимо экранировать его обратной косой чертой
(\%).