DataManager
может выполнять последовательную выборку данных из результатов предыдущего
запроса. Эта возможность используется в универсальном фильтре при
последовательном наложении фильтров.
Данный механизм работает следующим образом:
-
При получении
LoadContext
с установленными атрибутамиprevQueries
иqueryKey
DataManager
выполняет выборку по предыдущему запросу и сохраняет идентификаторы полученных сущностей в таблице SYS_QUERY_RESULT (соответствующей сущностиsys$QueryResult
), разделяя наборы записей по идентификаторам пользовательских сессий и ключу сеанса выборкиqueryKey
. -
Текущий запрос модифицируется для объединения с результатами предыдущего, так что в итоге возвращает данные, соответствующие условиям обоих запросов, объединенных по "И".
-
Далее процесс может повторяться, при этом уменьшающийся набор предыдущих результатов удаляется из таблицы SYS_QUERY_RESULT и заполняется заново.
Таблицу SYS_QUERY_RESULT необходимо периодически чистить от ненужных результатов
запросов, оставленных завершенными пользовательскими сессиями. Для этого предназначен метод
deleteForInactiveSessions
бина QueryResultsManagerAPI
. В прикладном проекте с
включенным параметром cuba.allowQueryFromSelected необходимо
вызывать этот метод из назначенных заданий, например:
<task:scheduled-tasks scheduler="scheduler"> <task:scheduled ref="cuba_QueryResultsManager" method="deleteForInactiveSessions" fixed-rate="600000"/> </task:scheduled-tasks>