Управление динамическими атрибутами

Вы можете управлять динамическими атрибутами в экране Administration > Dynamic attributes. Этот экран содержит список категорий слева и отображает атрибуты, связанные с выбранной категорией, справа.

dyn attr

После изменения настроек динамических атрибутов не забудьте нажать кнопку Apply changes.

Кроме того, экран Dynamic attributes предоставляет функциональность для экспорта выбранных категорий в виде ZIP или JSON файлов и их импорта в систему.

Создание категории

Перед добавлением динамического атрибута для сущности создайте для нее категорию. Укажите название и выберите сущность, с которой связана категория.

create category

Флажок Is default означает, что эта категория будет автоматически выбрана для нового экземпляра, если сущность реализует интерфейс Categorized.

Если сущность не реализует Categorized, значение флажка не имеет значения, и вы можете создать как одну категорию для сущности, так и несколько категорий. В обоих случаях атрибуты будут отображаться в соответствии с настройками видимости.

Вкладка Localization отображается в экране редактора категории, когда приложение разработано для поддержки нескольких языков. Эта вкладка позволяет пользователям определять название категории на разных языках для каждой доступной локали.

localization category

Создание атрибута

Общие настройки

На вкладке General диалога Category attribute details вы можете указать название, системный код, описание, тип значения, значение атрибута по умолчанию и скрипт валидации.

create attribute

Для всех типов значений, кроме Boolean, вы можете настроить ширину элемента formLayout в пикселях или в процентах. Если поле Width оставлено пустым, по умолчанию оно считается равным 100%.

Флажок Is collection, доступный для всех типов значений, кроме Boolean, позволяет создавать многозначные динамические атрибуты выбранного типа значения.

Для типов значений Double, Fixed-point number и Integer предусмотрены следующие поля:

  • Minimum value - гарантирует, что введенное значение атрибута будет равно или больше указанного минимального значения.

  • Maximum value - гарантирует, что введенное значение атрибута будет равно или меньше указанного максимального значения.

При работе с типом значения Fixed-point number вы можете определить шаблон формата в поле Number format pattern. Настройте шаблон в соответствии с рекомендациями, изложенными в DecimalFormat.

Для каждого типа значения у вас есть возможность ввести скрипт Groovy в поле Validation script для проверки введенного значения. Если при проверке Groovy возникает проблема, скрипт должен вернуть сообщение об ошибке. И наоборот, если проверка прошла успешно, скрипт не должен возвращать ничего или должен вернуть null. Проверяемое значение доступно в скрипте через переменную value. Сообщения об ошибках формируются с использованием формата строк Groovy, и вы можете использовать ключ $value в сообщении для получения результата.

Вот пример:

if (!value.startsWith("correctValue")) return "the value '\${value}' is incorrect"

Для типа значения Enumeration у вас есть возможность определить коллекцию именованных значений в поле Enumeration с помощью редактора списка. Каждое из этих значений перечисления может быть локализовано для языков, поддерживаемых в приложении.

enumeration

Для типов данных String, Double, Entity, Fixed-point number и Integer предусмотрен флажок Dropdown list. Включение этого флажка позволяет пользователям выбирать значение атрибута из выпадающего списка. Набор допустимых значений можно настроить на вкладке Calculated values and options.

В случае типа данных Entity конфигурация включает настройку предложений Where и Join.

Вычисляемые значения и опции

На вкладке Calculated values and options вы можете указать, от каких атрибутов зависит текущий атрибут. При изменении любого из этих атрибутов либо скрипт для вычисления значения атрибута, либо скрипт для определения списка допустимых значений будет пересчитан.

Groovy-скрипт должен предоставить новое значение параметра. Скрипт получает следующие переменные:

  • entity - редактируемая в данный момент сущность.

  • dynamicAttributes - карта, в которой код атрибута выступает в качестве key (ключа), а value (значение) представляет значение динамического атрибута.

Вот пример скрипта пересчета с использованием класса EntityValues:

calculated

Пример скрипта пересчета с использованием карты dynamicAttributes:

if (dynamicAttributes['passengerNumberOfSeats'] > 9)
return 'Bus' else return 'Passenger'

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

Если скрипт указан, поле ввода атрибута станет недоступным для редактирования.

Функциональность пересчета совместима исключительно с UI-компонентами formLayout и DynamicAttributesPanel.

Когда на вкладке General установлен флажок Dropdown list, вы можете выбрать тип загрузчика опций из выпадающего списка Options type.

Доступные типы загрузчиков опций включают Groovy, SQL и JPQL (эксклюзивно для типа данных Entity).

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

    Вот пример скрипта для атрибута типа String:

    options
  • Загрузчик опций SQL извлекает набор значений с использованием SQL-скрипта. Вы можете получить доступ к идентификатору сущности с помощью переменной ${entity}. Для получения параметров сущности используйте синтаксис ${entity.<field>}, где поле представляет имя параметра сущности. К динамическим атрибутам сущности можно получить доступ с помощью префикса \+, например, ${entity.+<поле>}. Ниже приведен пример доступа к сущности и динамическому атрибуту passengerTypeOfCar:

    select LAST_NAME from DRIVER
    where CAR_TYPE = ${entity.+passengerTypeOfCar}
  • Загрузчик опций JPQL предназначен исключительно для динамического атрибута типа Entity. Условия JPQL определяются в полях Join clause и Where clause. При работе с параметрами JPQL у вас есть доступ к переменным {entity} и {entity.<поле>}.

    Значение поля Join clause включается в предложение запроса from, обычно начиная с запятой, join или left join.

    При взаимодействии со значениями динамических атрибутов в скрипте вы можете использовать переменную entity следующим образом: ${entity.+<dynamicAttrCode>}, где <dynamicAttrCode> относится к коду соответствующего динамического атрибута.

    Плейсхолдер {E} следует использовать в качестве псевдонима для извлеченной сущности. Во время выполнения запроса он будет заменен на фактический псевдоним, назначенный в запросе.

    Например:

    join {E}.seller s

    Значение поля Where clause интегрируется в предложение запроса where с использованием условия and. Ключевое слово where не требуется, так как оно включается автоматически.

    Значения динамических атрибутов в скрипте также можно получить с помощью переменной entity. Например:

    jpql and where fields

Локализация

Вкладка Localization отображается, когда приложение поддерживает несколько языков. Локализация доступна для всех типов динамических атрибутов.

localization attr

Видимость

Вы можете определить экраны, где динамический атрибут будет видим, настроив его параметры видимости. По умолчанию атрибут скрыт.

visibility

Чтобы выбрать экран, на котором атрибут должен отображаться, в этот экран должен быть добавлен фасет dynamicAttributes, что позволит выбрать его на вкладке Visibility.

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

Когда атрибут настроен как видимый на экране, он автоматически будет видим во всех формах и таблицах данных, которые представляют сущности соответствующего типа на этом экране.

Если сущность включает интерфейс Categorized, может быть использована панель DynamicAttributesPanel.

Доступ к динамическим атрибутам может быть ограничен ресурсными ролями. Настройки безопасности для динамических атрибутов аналогичны настройкам для обычных атрибутов.

resource role