Основные правила
Строковые константы задаются в одинарных кавычках. Для использования одинарных кавычек внутри строковой константы, знак одинарной кавычки удваивается.
'Раздел', 'Тема: ''Для согласования'''
Для обозначения того, что значение атрибута не определено, используется специальное значение null.
registration == null ? false : true
Обращение к атрибуту объекта происходит по названию соответствующего Свойства схемы объекта (например, registration). Для обращения к атрибутам комплексных свойств указывается иерархический путь к атрибуту (например, registration.number.prefix).
'№' + registration.number.prefix + registration.number.number + registration.number.suffix
Однако, если РКК не зарегистрирована, то значение атрибута registration.number будет неопределенно, и такое выражение может привести к ошибке. Чтобы этого избежать, можно использовать условный оператор, который вернет пустую строку, если номер не определен:
registration ==null ? '': registration.number==null ? '' : '№' + registration.number.prefix + registration.number.number + registration.number.suffix
Другой способ избежать ошибок, если значения атрибутов не определены – использование «безопасной адресации». Тогда если неопределенно значение объекта, к атрибуту которого нужно обратиться, вместо ошибки будет возвращено значение Null. Для «безопасной адресации» перед точкой добавляется знак вопроса:
'№' + registration?.number?.prefix + registration?.number?.number + registration?.number?.suffix
Операции сравнения
Операция | Равно | Не равно | Меньше | Меньше или равно | Больше | Больше или равно |
---|---|---|---|---|---|---|
Знак | == | != | < | <= | > | >= |
Буквенное выражение | eq | ne | lt | le | gt | ge |
Математические операции
Операция | Сложение | Вычитание | Умножение | Деление | Остаток от деления | Степень |
---|---|---|---|---|---|---|
Знак | + | - | * | / | % | ^ |
Буквенное выражение | div | mod |
Логические операции
Операция | И | Или | Отрицание |
---|---|---|---|
Знак | && | || | ! |
Буквенное выражение | and | or |
Условный оператор
<Условие> ? <Значение, если условие выполнено> : <Значение, если условие не выполнено>
Специальные зарегистрированные функции и переменные
Здесь описаны наиболее востребованные переменные и функции. Дополнительные возможности использования зарегистрированных функций нужно уточнять у разработчиков.
#this
Переменная для обращения к контекстному объекту, над которым вычисляется SpEL-выражение.
#hasRole(<объект>, <идентификатор_роли>)
Функция, определяющая наличие указанной роли у текущего пользователя в контексте указанного объекта. В качестве объекта в данный момент допустимо использовать переменную #this. Идентификатор роли передается как строковая константа. Функция возвращает значение «true» или «false».
#hasRole(#this, 'Supervisor')
#isClerk(<объект>, <иерархический_путь_к_атрибуту>)
Функция, определяющая наличие у текущего пользователя системной роли «Делопроизводитель» для указанного в параметрах функции подразделения в контексте указанного объекта. В качестве объекта в данный момент допустимо использовать переменную #this. Иерархический путь к атрибуту должен указывать на атрибут с типом SOBeard, соответствующий подразделению. Если в качестве значения параметра передать значение null, то будет определено наличие роли «Делопроизводитель» для места регистрации. Функция возвращает значение «true» или «false».
#isClerk(#this,null)
#isClerk(#this,'sending.department')
#getUserDepartment()
Функция для вычисления подразделения текущего пользователя.
#hasLink(<объект>, <идентификатор_типа_отношения>)
функция, проверяющая наличие у объекта ссылки с указанным типом отношения. В качестве объекта в данный момент допустимо использовать переменную #this. Возможные типы отношения для объекта нужно уточнять у разработчика. Функция возвращает значение «true» или «false».
Например, наличие у объекта ссылки с типом отношения «verification», говорит о том, что документ был заверен ЭП.
#hasLink(#this,'verification')
При использовании функции нужно учесть, что могут существовать нестандартные ссылки, для которых использование функции недопустимо.
Примеры
Текущий пользователь
T(ru.intertrust.cmj.af.core.AFSession).get().currentUser().getBeard()
Текущая дата
T(ru.intertrust.cmj.af.misc.AFDate).createCurrent()
Увеличение / уменьшение даты
функции rollYears, rollMounths, rollDays класса AFDate изменяют дату на указанное в параметре количество лет, месяцев, дней соответственно. Отрицательный параметр уменьшает дату. Доступны с версии 4.6
Пример: в поле соответствующее свойству схемы, устанавливается значение на месяц раньше текущей даты
T(ru.intertrust.cmj.af.misc.AFDate).createCurrent().rollMounths(-1)
Первый элемент %-имени пользователя, указанного в свойстве схемы SDepartment с типом SOBeard
не массив
SDepartment != null ? SDepartment.toString(T(ru.intertrust.cmj.af.so.SOBeard.ToStringFormat).CMDOMINO_STD).split('%')[0] : ''
массив, берем первый элемент списка
SDepartment != null ? T(com.google.common.collect.Lists).transform(SDepartment, T(ru.intertrust.cmj.rest.vcards.VCardResource).vcardTobeard).get(0).toString(T(ru.intertrust.cmj.af.so.SOBeard.ToStringFormat).CMDOMINO_STD).split('%')[0] : ''