1.1.3. Набор данных Groovy
Groovy - набор данных формируется выполнением Groovy-скрипта. Скрипт должен возвращать объект типа List<Map<String, Object>>
. Элемент этого списка, то есть объект типа Map<String, Object>
соответствует одной записи набора данных.
В скрипт передаются следующие объекты:
-
dataManager
- объект типаcom.haulmont.cuba.core.global.DataManager
, предоставляющий CRUD-функциональность для работы с персистентными хранилищами данных. Например:LoadContext<Book> loadContext = LoadContext.create(Book.class) .setId(bookId) .setView("book.edit") def book = dataManager.load(loadContext)
-
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
, позволяющий управлять транзакциями и получать ссылку наEntityManager
. Например:def tx = persistence.createTransaction() try { def em = persistence.getEntityManager() def query = em.createQuery('select g from sec$Group g') ... tx.commit() } finally { tx.end() }
Для работы с дополнительным хранилищем данных, его имя нужно указать в параметре методов
createTransaction()
иgetEntityManager()
. По умолчанию используется основная база данных.def tx = persistence.createTransaction('myStore') try { def em = persistence.getEntityManager('myStore') ... tx.commit() } finally { tx.end() }
-
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 среднего слоя можно использовать статические методы класса
|