Задача [0563] : Доработка метода API расширенного поиска advancedSearch

Формулировка проблемы: не удобно производить поиск по столбцам динамической таблицы, если заранее неизвестно количество строк в таблице.

Связанные задачи:

Решение: необходимо доработать метод rest/api/asforms/search/advanced следующим образом:

Во-первых, необходимо добавить новый входной параметр:

Например. Имеется динамическая таблица с именем компонента dyntable1, в которой находятся два однострочных поля cmp1, cmp2. В запросе однострочное поле указывается в виде cmp1.

Во-вторых, для параметров dynParams необходимо задействовать те же суффиксы, что и в параметре parameters. Они обозначают тип данных, который содержит компонент динамической таблицы:

При отсутствии суффикса по умолчанию используется суффикс TEXT.

При указании параметра в массиве dynParams с одним из данных суффиксов поиск должен производиться по всему столбцу всех динамических таблиц, в которых находится указанный в запросе компонент.

Примечания

Если есть динамические таблицы, в которых присутствуют компоненты с одинаковыми названиями, то при совершении запроса по названию такого компонента, поиск будет производится во всех динамических таблицах, в которых присутствует компонент с таким названием. Это не будет являться ошибкой ARTA Synergy.

Запрещено использовать выражение order by для компонента динамической таблицы.

Если в столбце динамической таблицы присутствует несколько значений, удовлетворяющих запросу, то объект (данные по форме, документ) в массиве возвращается только один раз.

Тип запроса и выходные данные не изменяются.

Метод на Javadoc

Пример запроса с компонентами одной динамической таблицы:


{
    "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
                    для компонента динамической таблицы"
}