Задача [API42]: Расширенный поиск по формам и реестрам

Внимание!

Описание метода в задаче неактуально, актуальное описание смотрите в документации.

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

Количество параметров в запросе не соответствует переданному количеству параметров

Описание остальных параметров и виды возвращаемых значений см. в описании метода rest/api/asforms/search, за исключением параметров getDocIds, searchInRegistry, sortField, sortDir, и sortType:

[
   {
      "dataUUID": "uuid1",
      "documentID": "docID1"
   },
   {
      "dataUUID": "uuid2",
      "documentID": "docID2"
   },
   {
      "dataUUID": "uuid3",
      "documentID": "docID3"
   }
]
[
   {
      "dataUUID": "uuid1"
   },
   {
      "dataUUID": "uuid2"
   },
   {
      "dataUUID": "uuid3"
   }
]

где dataUUID - UUID данных по форме, а documentID - идентификатор документа.

Альтернативные потоки событий

  1. Передано некорректное значение в параметре query: использование ключевых слов, отличных от описанных, несовпадающее количество открывающих и закрывающих скобок, неправильные левые или правые операнды и т.п.

Соответствующее сообщение об ошибке:

Синтаксическая ошибка в поисковом запросе

  1. Количество ? в параметре не совпадает с количеством переданных параметров. Сообщение об ошибке указано выше.

  2. Некорректные символы в параметре. Зарезервировано на будущее.

Сообщение:

Некорректные символы в параметре

  1. Пустое значение параметра query (либо содержащее только пробельные символы).

Сообщение:

Поисковый запрос пуст



[13] При использовании операции сравнения LIKE символы % и _ будут использованы как спецсимволы оператора SQL LIKE. Для того, чтобы получить литерал % либо _, необходимо экранировать его обратной косой чертой (\%).