Приложение III. Использование OCL-выражений

<< Click to Display Table of Contents >>

Приложение III. Использование OCL-выражений

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

Правила вывода данных и общие свойства OCL-выражений:

через OCL-выражения могут вызываться глобальные функции — имена таких функций начинаются с символов ocl_;

результат вычисления OCL-выражения — строка;

OCL-выражения могут быть как с параметрами, так и без них.

В качестве одного из параметров OCL-выражений в функцию вычисления передается объект ProcessableObject. Этот объект служит источником данных для вычисления выражения. Например:

для прямоугольника и ячейки таблицы передаваемым объектом может быть ДСЕ, если шаблон простой, или операция, если шаблон операционный;

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

OCL-выражения без параметров

Формат записи:

#{имя выражения}

OCL-выражения без параметров:

#doc_caption

#doc_type

#enterprise

#enterprise_code

#object_name

#changing_index

#changing_page_status

#changing_designation

Описание глобальных функций, вызываемых в OCL-выражениях без параметров, приведено в Приложение II. Перечень глобальных функций.

OCL-выражения c параметрами

Общий формат записи для всех OCL-выражений с параметрами:

#{имя выражения}<param1,param2,paramN>

Пример:        #concat<"_",obozndse,dse.namedse>

В качестве параметров выражения могут быть указаны другие OCL-выражения. Таким образом, выражения могут быть вложенными.
Если выражение содержит вложенные выражения, то сначала вычисляются вложенные выражения самого нижнего уровня.

Пример:        #concat<"_",#parent<dse.namedse>,#parent<dse.obozndse>>

note

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

Перечень OCL-выражений c параметрами

 

Формат записи

Описание


#concat<"separator",
param1,param2,paramN>

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


note

Пустые строки и значения атрибутов, равные нулю (строка=”0”), не добавляются в результат.


#measure_name<attribute>

Позволяет вывести обозначение единицы измерения для текущего объекта.


#child<class.attribute,
markAsProcessed,
skipProcessed>

Позволяет вывести значение атрибута дочернего объекта для текущего объекта.


note

Если указанный атрибут дочернего объекта отсутствует или его значение не задано, он не будет выведен, т.е. будет возвращена пустая строка.


#parent<class.attribute>

Позволяет вывести значение атрибута родительского объекта для текущего объекта.


note

Поиск родительского объекта выполняется рекурсивно.
Если указанный атрибут родительского объекта отсутствует или его значение не задано, он не будет выведен, т.е. будет возвращена пустая строка.


#gather<"separator",
level,
class.attribute,
markAsProcessed,
skipProcessed>

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


#if<condition,value>

Позволяет вывести значение атрибута при выполнении условия.


#ifnot<condition,value>

Позволяет вывести значение атрибута, если условие не выполнено.

Описание параметров OCL-выражений

 

Обозначение

Описание


separator

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

Если в качестве разделителя используется символ переноса строки, то необходимо задать значение #13#10.


param1,param2,paramN

Параметр служит для получения:

текстовых данных,

значения атрибута класса или фильтра модели ТП,

других OCL-выражений.

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


attribute

Параметр служит для получения значения атрибута класса или фильтра:

головного объекта (простой шаблон — ДСЕ, операционный — операция), если выражение используется для прямоугольника или ячейки таблицы;

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


class.attribute

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


markAsProcessed

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

Если значение параметра равно true, а также у дочернего объекта имеется атрибут с указанным именем и заданным значением, то объекту присваивается статус «Обработан». Такой объект больше не участвует в формировании отчета.

Обработанный объект может повторно использоваться при формировании отчета в следующих случаях:

Если объект выводится с помощью функции или OCL-выражения, которые не учитывают статус «Обработан», например, выражение #parent.

Если объект был помечен обработанным в прямоугольнике или ячейке таблицы, а выводится с помощью OCL-выражения #child в модели вывода.
Поскольку подготовка данных для области вывода производится до заполнения прямоугольников и таблиц, статус объекта не учитывается при заполнении области вывода.

Допускается не указывать параметр. В этом случае считается, что он принимает значение false.


skipProcessed

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

Если значение параметра равно true, то при подборе объектов будет взят первый подходящий объект со статусом «Не обработан». Остальные объекты будут пропущены.

Допускается не указывать параметр. В этом случае считается, что он принимает значение false.


level

Параметр позволяет указать уровень вложенности дочерних объектов по отношению к текущему объекту:

-1 — все уровни вложенности;

0 — уровень иерархии совпадает с уровнем текущего объекта;

1, 2, 3 и т.д. — 1-й, 2-й, 3-й уровень вложенности и т.д.


condition

Параметр служит для записи условия.


value

Параметр позволяет получить значение для вывода, если результат вычисления условия — непустая (для #if) или пустая (для #ifnot) строка.