Интерфейс, печатные формы и JEXL#

Выборки и отображения#

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

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

  • атрибуты класса;

  • характеристики;

  • коллекции;

  • технические атрибуты.

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

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

Вычисляемые поля#

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

Если вычисляемое поле начинает использоваться в нескольких процессах, отчетах или интеграциях, необходимо рассмотреть перенос логики в Api, Pkg или модель данных.

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

Универсальный фильтр#

При добавлении проектных атрибутов нужно учитывать, как они попадут в универсальный фильтр.

Для класса в универсальный фильтр формируются:

  • атрибуты класса;

  • объектные характеристики;

  • универсальные характеристики;

  • коллекции;

  • технические атрибуты.

Если атрибут не должен быть доступен в универсальном фильтре, это нужно явно отключить в ODM.

<attr name="bError">
    <uniFilter isActive="false"/>
</attr>

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

Печатные формы#

Печатная форма — это способ построения отчета в виде файла заданного формата.

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

Печатная форма должна иметь:

  • системное имя по правилам проектного именования;

  • пользовательское наименование;

  • модуль;

  • тип шаблона;

  • версию шаблона;

  • настройки доступности;

  • роли или профили доступа, если форма не должна быть доступна всем пользователям;

  • условия формирования, если доступность зависит от состояния или данных объекта.

Выбор типа шаблона#

Тип шаблона выбирается по назначению формы:

Тип

Когда использовать

Jasper

сложные отчеты, несколько форматов вывода, сложная структура данных

Xlsx

табличные формы, расчетные таблицы, выгрузки в форматах xls/xlsx

Docx

текстовые документы, договоры, акты, письма, шаблоны с текстовой структурой

Не следует выбирать тип шаблона только по привычке. Нужно учитывать формат итогового документа, сложность данных и требования к сопровождению.

Версионирование печатных форм#

Изменение шаблона печатной формы должно оформляться новой версией.

В версии печатной формы необходимо фиксировать:

  • дату изменения;

  • причину изменения;

  • автора;

  • задачу или основание;

  • совместимость с текущей версией проектного модуля.

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

JEXL-скрипты#

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

Для JEXL-скрипта необходимо фиксировать:

  • название;

  • описание;

  • место применения;

  • тип JEXL;

  • текст скрипта;

  • задачу или основание изменения.

Если JEXL вызывает Scala-метод, в описании нужно указать этот метод и его назначение.

Ограничения по JEXL#

В JEXL не следует размещать:

  • длинные алгоритмы;

  • массовую обработку данных;

  • сложные SQL-запросы;

  • повторяющуюся логику;

  • критичную бизнес-логику, которую необходимо покрывать тестами на уровне кода.

Если JEXL-скрипт становится большим или начинает дублироваться в нескольких местах, логику необходимо перенести в Scala-код, а в JEXL оставить только вызов подготовленного метода.

Доступность интерфейсных элементов#

Если доступность вкладки, операции, печатной формы или поля зависит от состояния объекта, роли пользователя или значения атрибута, условие должно быть описано в настройке или JEXL-скрипте.

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