5.9.9.1. Папки приложения

Для создания папок приложения пользователь должен иметь специфическое право Создание/изменение папок приложения (код cuba.gui.appFolder.global).

Простейшая папка приложения может быть создана из контекстного меню панели папок. Такая папка не связана с экранами системы и предназначена только для группировки других папок в иерархии.

Для создания папки, открывающей некоторый экран с фильтром, необходимо выполнить следующее:

  • Открыть экран и отобрать записи по нужному фильтру.

  • В меню кнопки Фильтр…​ выбрать команду Сохранить как папку приложения.

  • В окне добавления заполнить атрибуты папки:

    • Наименование папки

    • Заголовок окна - строка, добавляемая к заголовку окна, когда он открывается из папки

    • Родительская папка - определяет место создаваемой папки в иерархии

    • Скрипт видимости - скрипт Groovy, выполняемый в начале сеанса пользователя, и определяющий доступность для него данной папки.

      Скрипт должен вернуть булевское значение. Если скрипт не задан, либо возвращает null, папка доступна. Пример:

      userSession.currentOrSubstitutedUser.login == 'admin'
    • Cкрипт количества - скрипт Groovy, выполняемый в начале сеанса пользователя и по таймеру, для вычисления количества записей для данной папки и ее стиля отображения.

      Скрипт должен вернуть числовое значение, целая часть которого будет использована в качестве счетчика. Если скрипт не задан, либо возвращает null, счетчик не будет отображаться. Кроме возвращаемого значения скрипт может установить переменную style, которая будет использована как имя стиля отображения папки. Пример:

      def em = persistence.getEntityManager()
      def q = em.createQuery('select count(o) from sales$Order o')
      def count = q.getSingleResult()
      
      style = count > 0 ? 'emphasized' : null
      return count

      Для отображения указанного скриптом стиля тема приложения должна содержать описание этого стиля для элемента v-tree-node внутри cuba-folders-pane, например:

      .c-folders-pane .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.