Для создания папок приложения пользователь должен иметь специфическое право Создание/изменение папок приложения (код cuba.gui.appFolder.global
).
Простейшая папка приложения может быть создана из контекстного меню панели папок. Такая папка не связана с экранами системы и предназначена только для группировки других папок в иерархии.
Для создания папки, открывающей некоторый экран с фильтром, необходимо выполнить следующее:
-
Открыть экран и отобрать записи по нужному фильтру.
-
В меню кнопки
выбрать команду . -
В окне добавления заполнить атрибуты папки:
-
Наименование папки
-
Заголовок окна - строка, добавляемая к заголовку окна, когда он открывается из папки
-
Родительская папка - определяет место создаваемой папки в иерархии
-
Скрипт видимости - скрипт Groovy, выполняемый в начале сеанса пользователя, и определяющий доступность для него данной папки.
Скрипт должен вернуть булевское значение. Если скрипт не задан, либо возвращает null, папка доступна. Пример:
userSession.currentOrSubstitutedUser.login == 'admin'
-
Cкрипт количества - скрипт Groovy, выполняемый в начале сеанса пользователя и по таймеру, для вычисления количества записей для данной папки и ее стиля отображения.
Скрипт должен вернуть числовое значение, целая часть которого будет использована в качестве счетчика. Если скрипт не задан, либо возвращает
null
, счетчик не будет отображаться. Кроме возвращаемого значения скрипт может установить переменнуюstyle
, которая будет использована как имя стиля отображения папки. Пример:import com.haulmont.cuba.core.EntityManager import com.haulmont.cuba.core.Query EntityManager em = persistence.getEntityManager() Query q = em.createQuery('select count(o) from sales$Order o') Number count = q.getSingleResult() style = count > 0 ? 'emphasized' : null return count
Для отображения указанного скриптом стиля тема приложения должна содержать описание этого стиля для элемента
v-tree-node
внутриfolderspane
, например:.folderspane .v-tree-node.emphasized { font-weight: bold; }
-
В скриптах доступны следующие переменные, установленные в контексте groovy.lang.Binding
:
-
folder
- экземпляр сущностиAppFolder
- папка, для которой выполняется скрипт -
userSession
- экземплярUserSession
- текущая пользовательская сессия -
persistence
- реализация интерфейсаPersistence
-
metadata
- реализация интерфейсаMetadata
При обновлении папок для всех скриптов используется один экземпляр groovy.lang.Binding
, поэтому между ними можно передавать переменные для исключения дублирующихся запросов и повышения производительности.
Тексты скриптов могут содержаться либо непосредственно в атрибутах сущности AppFolder
, либо в отдельных файлах. В последнем случае атрибут должен содержать путь к файлу скрипта (обязательно с расширением ".groovy")
по правилам интерфейса
Resources
. Таким образом, если содержимое атрибута представляет собой строку, заканчивающуюся на ".groovy", текст скрипта загружается
из указанного файла, в противном случае в качестве скрипта используется само содержимое атрибута.
Папки приложения представляют собой экземпляры сущности AppFolder
и хранятся в связанных таблицах SYS_FOLDER и SYS_APP_FOLDER.