Дерево страниц
Skip to end of metadata
Go to start of metadata

Вы просматриваете старую версию данной страницы. Смотрите текущую версию.

Сравнить с текущим просмотр истории страницы

« Предыдущий Версия 3 Следующий »

Разбор и хранение выражений на языке DOEL обеспечиваются классом DoelExpression.

Выражения на DOEL применяются к доменным объектам и позволяют получить поля из них или связанных с ними доменных объектов, а также сами связанные объекты. Простейшим DOEL-выражением является просто имя поля, в таком случае значением выражения становится значение поля исходного доменного объекта. Однако, если это поле является связью (reference, см. {@link ru.intertrust.cm.core.config.ReferenceFieldConfig}), то значением становится сам связанный объект, который, в свою очередь, может быть использован для извлечения его полей (через точку). Например, для объекта "Персона" можно получить имя руководителя его подразделения:

Department.Head.Name

Также возможно извлечение дочерних или просто связанных объектов, хранящих ссылки на исходный внутри себя.
Для этого используется конструкция тип дочернего объекта^имя поля связи. Например, так можно получить имена всех исполнителей поручений по документу:

Commission^Document.Assignee^Commission.Name

Звёздочка, указанная после имени поля, означает повторный переход по связи, причём он может выполняться неограниченное число раз. Остальная часть выражения будет вычисляться для всех объектов, полученных на каждом шаге такого перехода. Например, если у поручения могут быть дочерние поручения, образующие иерархию неизвестной глубины, исполнители всех дочерних поручений могут быть получены таким выражением:

Commission^Parent*.Assignee^Commission.Name

Корректность DOEL-выражения (существование указанных типов объектов и полей в соответствующих типах) проверяется в момент загрузки конфигурации. Его вычисление никогда не может привести к ошибке. Если на каком-либо этапе связанные доменные объекты отсутствуют, то результатом вычисления становится пустой набор объектов.

:func(arg1,arg2,...)

Вызов функции может быть добавлен после любого элемента DOEL-выражения. Аргументы необязательны, их число (и семантика) зависит от конкретной функции; некоторые функции могут поддерживать переменное число параметров. Строковые аргументы могут заключаться в кавычки.

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

Имя функции используется для выбора класса, содержащего её реализацию.


Статус

В РАБОТЕ

Раздел


2.2. Список функций

Таблица 1 Общий список функций

Название функции

Пример использования

Краткое описание

Обязательные

параметры

Опциональные

параметры

Принимаемые типы

Возвращаемые типы

Принимает

множественные значения

Возвращает

множественные значения

StatusCommission^parent:Status(Assigned,Executing).Job^parent.AssigneeФильтрует доменные объекты по статусуДопустимый статусДопустимые статусы до 999REFERENCEREFERENCEДаДа
isEmptyRegDate:isEmpty - не заполнено поле дата регистрацииПроверяет, что в поле нет значения (в колонке лежит null), для типов String/Text длина строки отлична равно 0ОтсутствуютОтсутствуютЛюбойBOOLНетНет
isNotEmptyRegDate:isNotEmpty - заполнено поле дата регистрацииПроверяет, есть ли значение (в поле не null), для типов String/Text длина строки отлична от 0ОтсутствуютОтсутствуютЛюбойBOOLНетНет
format

HierRoot.createdDate:format("dd-MM-yyyy") - преобразует дату создания корневого объект в строку по формату "dd-MM-yyyy"

sum:format("#.####") - ограничивает отображение 3-мя знаками после запятой

Выполняет форматирование числовых и временных значений.

1 - шаблон форматирования

Отсутствуют

DATETIME

DATETIMEWITHTIMEZONE

TIMELESSDATE

DECIMAL

LONG

STRINGДаДа
splitSubject:split(";") - разбивает заголовок на массив строк по символу ";"Производит разбиение строк по regex. Является обёрткой для java.lang.String#split(java.lang.String)1 - regex делимитерОтсутствуют

STRING

TEXT

LIST<STRING>Да (в этом случае возвращает LIST<LIST<STRING>Да
get*Subject:split(";"):getString("1") - разбивает заголовок на подстроки и берёт вторую из нихПолучение из массива значений, значения под порядковым номером. Для каждого типа выделена отдельная функция, т.к. DOEL жестко типизирован и для дальнейшей работы необходимо однозначно знать, что вернулось из массива, на этапе построения цепочки вызовов. Функции по типам описаны в таблице 21 - номер элемента массиваОтсутствуютLISTЗависит от функции, подробно в таблице 2ДаНет (в случае LIST<LIST> возвращается элемент LIST, который внутри себя содержит множественное значение)
inModule.Type.Alias:in("OutputDocs", "OutputDocsPrev") - проверяет, что в ss_moduletype, который получается стандартной цепочкой вызовов, лежит строка "OutputDocs" или "OutputDocsPrev" с учётом регистраПроверяет, есть ли значение результат вычисления в переданном массиве параметров с учётом регистра.от 1 до (Integer.MAX_VALUE-1) список допустимых значения для поляОтсутствуютSTRINGBOOLДа (если подходит хоть одно значение из массива, считаем что попадаем условие соблюдено)Нет
inIgnoreCaseModule.Type.Alias:inIgnoreCase("OUTPUTDOCS", "OutputDOcsPrev") - проверяет, что в ss_moduletype, который получается стандартной цепочкой вызовов, лежит строка "OUTPUTDOCS" или "OutputDocsPrev" без учёта регистраПроверяет, есть ли значение результат вычисления в переданном массиве параметров без учёта регистра.от 1 до (Integer.MAX_VALUE-1) список допустимых значения для поляОтсутствуютSTRINGBOOLДа (если подходит хоть одно значение из массива, считаем что попадаем условие соблюдено)Нет
max

F_DP_Rkk_SigningInfo^Owner.idx:max - возвращает максимальный порядковый номер подписанта (позволяет определить количество подписантов)

Определяет максимальное значение из предоставленного спискаОтсутствуютОтсутствуют

DATETIME

DATETIMEWITHTIMEZONE

TIMELESSDATE

DECIMAL

LONG

Совпадает с переданнымДаНет
minLog_OpenEvent_Apr^owner.createdDate:min - возвращает время, в которое первый из раз ЛС был открыт пользователемОпределяет минимальное значение из предоставленного спискаОтсутствуютОтсутствуют

DATETIME

DATETIMEWITHTIMEZONE

TIMELESSDATE

DECIMAL

LONG

Совпадает с переданнымДаНет
notactive:notОтрицание для bool значениеОтсутствуютОтсутствуютBOOLBOOLНетНет
qtyF_DP_Rkk_SigningInfo^Owner:qty - подсчёт количества подписантов

Возвращает количество значений в списке. Не имеет параметров. При подсчёте количества значений учитываются только значения, отличные от NULL (заполненные).

ОтсутствуютОтсутствуютЛюбойLONGДаНет
idpunid:split("FF"):getString("0"):id - получение id объекта из nunid2punid_map, по punidПреобразует строковое представление platformId к ReferenceОтсутствуютОтсутствуютSTRINGREFERENCEДаДа
joinF_DP_Rkk_SigningInfo^Owner.signer.orig_shortname:join(", ") - объединяет shortName подписантов через запятуюОбъединяет массив строк в одну строку через сепаратор1- сепаратор, через который нужно объединить строкиОтсутствуютLIST<STRING>STRINGДаНет
toStringvolume:toString

Приводит значение к строке. Для REFERENCE - строит stringRepresentation, для LIST рекурсивно вызывает себя для для элементов массива. Для остальных типов вызывает java.lang.Object#toString, для value

ОтсутствуютОтсутствуютЛюбой

STRING

LIST<STRING>

ДаНет


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

Таблица 2 Детализация get функций

Имя функции

Тип для обработки

getBoolBOOL
getDateTimeDATETIME
getDateTimeWithZoneDATETIMEWITHTIMEZONE
getDecimalDECIMAL
getListLIST
getLongLONG
getRefREFERENCE
getStringSTRING
getTimelessDateTIMELESSDATE
  • Нет меток