XLS Templates в Oracle BI Publisher (XML Publisher)

в 21:03, , рубрики: Excel, oracle, template, xls, метки: , , ,

Доброго времени суток, в этой статье хочу рассказать о своём опыте работы с BI Publisher и составлении шаблонов для MS Excel в родном для этой программы формате *.xls.

Небольшое предисловие

Работая с Oracle eBS, время от времени возникает необходимость создания дополнительных репортов (а соответственно и шаблонов в BI Publisher). В данном случае был довольно сложный репорт, который собирался из таблиц, заполняющихся данными в BEFORE REPORT триггере этого же репорта. Количество колонок в репорте могло динамичиски меняться.

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

XLS Templates в Oracle BI Publisher (XML Publisher)

Возникшие проблемы

Когда выходящий файл является XLS файлом мы можем столкнуться со следующими проблемами, или если быть более точными, ограничениями:

1) Мы хотим чтобы Excel output файл выглядел именно, так как нам нужно — нужные столбцы находились именно там, где нам нужно, а не уезжали куда-то.
2) Чтобы типы данных передавались в Excel output, то есть чтобы у чисел был числовой тип данных в Excel, у дат — тип даты, и тому подобное…
3) При передачи данных, которые начинаются с «0» (leading zeroes), ведущие нули обрезаются, то есть нам нужно сохранить целостность данных.
4) Та же проблема появляется и при передачи данных с нулями после запятой (дробной частью).

Если 3 и 4 проблемы можно решить добавив два пробела или специальные символы в начало/конец аттрибута, то с остальными немного сложнее.

В моём случае мне нужно было передать значение «0000» в Excel при этом не потеряв ни одного нуля и не допуская никаких других символов в клетке.

Подробнее о других ограничения Excel output файлов, созданных с использованием RTF шаблонов можно прочитать здесь

Озарение

В результате долгих поисков в интернетах, в блоге Oracle было найдено упомянание о Real Excel Template.

То есть теперь можно создавать шаблоны не отходя от кассы не покидая MS Excel. Для этого нам нужно создать стандартный *.XLS файл и начать воять в нём наш чудо-шаблон.

Для начала немного о различиях между RTF и XLS шаблонами.

1) В RTF для обозначения элементов мы должны были ставить тег <?ELEMENT_NAME?>, а в XLS мы должны писать в свойствах ячейки, где у нас будет находиться элемент тег XDO_?ELEMENT_NAME?. Пример:

XLS Templates в Oracle BI Publisher (XML Publisher)

2) В RTF для обозначания открытия групп мы должны были ставить тег <? for-each: GROUP_NAME?> и для закрытия групп должны были ставить тег <?end for-each?> ,a в XLS мы должны выделить ячейки, которые будут заполнены данными из нашей группы и поставить им в качестве свойства XDO_GROUP_?GROUP_NAME?. Это быдет выглядеть так:

XLS Templates в Oracle BI Publisher (XML Publisher)

3) Будьте внимательными с тем, что пишете в самой клетке, так как вы можете задавать тип данных, которые будут находиться в клетке с помощью обычного Excel функционала, то и то, что написано в клетке должно соответствовать этому типу. Единственное, что у меня не получилось, это получить на выходе дату как даты, пришлось писать для этого небольшой макрос. Ах да, теперь мы можем дополнять наши габлоны макросами, что не было возможно в RTF шаблонах для Excel.

4) Обязательно должна присутствовать отдельная вкладка XDO_METADATA:

XLS Templates в Oracle BI Publisher (XML Publisher)

Всё, что написано до «Data Constraints:» включая менять не нужно и это должно присутствовать во всех XLS шаблонах. То, что ниже уже ваши функции. Поддерживается XSL, не знаю насчёт остальных. Если элемент находится вне групп, то его нужно получать через xsl:value-of select. Ко всем элементам в этой вкладке нужно обращаться через .//ELEMENT_NAME.

Послесловие

При использовании XLS шаблона мне больше не нужно было создавать для каждого поличества колонок отдельный вариант таблицы. Достаточно сделать таблицу для максимального количества колонок. Колонки, в которых будут присутствовать данные будут заполняться автоматически, в которых данных не будет так и будут оставаться пустыми. Это позволяет избежать лишней работы.

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

Надеюсь кому-то это поможет избежать лишних хлопот с составление шаблонов.

Автор: InTrX


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js