4.1.3. Набор данных Groovy
Groovy – набор данных формируется выполнением Groovy-скрипта. Скрипт возвращает объект типа List<Map<String, Object>>. Элемент этого списка, то есть объект типа Map<String, Object> соответствует одной записи набора данных.
В скрипт передаются следующие объекты:
-
dataManager– объект типаcom.haulmont.cuba.core.global.DataManager, предоставляющий CRUD-функциональность для работы с персистентными хранилищами данных. Например:def book = dataManager.load(Book.class).id(bookId).view("book.edit").one; -
metadata– объект типаcom.haulmont.cuba.core.global.Metadata, позволяющий обращаться к метаданным приложения, например:def metaClass = metadata.getClassNN('sec$User') -
params– мэп внешних параметров отчёта. Пример получения значения параметра:def active = params['active'] -
parentBand– родительская полоса в виде объекта типаcom.haulmont.yarg.structure.BandData. Через этот объект методомgetParameterValue()можно получить значение поля родительской полосы, например:def groupId = parentBand.getParameterValue('groupId') -
persistence– объект типаcom.haulmont.cuba.core.Persistence, позволяющий получать источники данных (datasources).По умолчанию используется основное хранилище данных. Для работы с дополнительным хранилищем данных, его имя нужно указать в параметре метода
getDataSource():def sql = new Sql(persistence.getDataSource('myStore')) def rows = sql.rows('select e.name from SEC_GROUP e') -
security– объект типаcom.haulmont.cuba.core.global.Security, используемый для проверки прав пользователя на доступ к различным объектам системы. Пример использования:if (security.isEntityOpPermitted(Book.class, EntityOp.READ) { ... } -
timeSource– объект типаcom.haulmont.cuba.core.global.TimeSource, используемый для получения текущего времени, например:def currentDate = timeSource.currentTimestamp() -
transactional– метод, принимающий на вход замыкание, которое нужно выполнить в новой транзакции. Параметром замыкания становится текущийEntityManager. Пример использования:transactional { em -> def query = em.createQuery('select g from sec$Group g') ... }Пример Groovy-скрипта извлечения пользователей по группе, выводимой в родительской полосе и по внешнему параметру
active:def result = [] transactional { em -> def query = em.createQuery('select u from sec$User u where u.group.id = ?1 and u.active = ?2') query.setParameter(1, parentBand.getParameterValue('groupId')) query.setParameter(2, params['active']) query.resultList.each { user -> result.add(['userLogin': user.login, 'userName': user.name]) } } return result -
userSession– объект типаcom.haulmont.cuba.security.global.UserSession, связанный с текущим пользователем системы, например:def user = userSession.currentOrSubstitutedUser -
userSessionSource– объект типаcom.haulmont.cuba.core.global.UserSessionSource, используемый для получения текущей сессии пользователя. Пример использования:def locale = userSessionSource.locale
|
Tip
|
Для обращения к любым бинам Spring среднего слоя используйте статические методы класса
|