|
|
|||||||||||||||||||||||||||||
|
XLS Templates в Oracle BI Publisher (XML Publisher)Источник: habrahabr InTrX
Доброго времени суток, в этой статье хочу рассказать о своём опыте работы с BI Publisher и составлении шаблонов для MS Excel в родном для этой программы формате *.xls. Небольшое предисловиеРаботая с Oracle eBS, время от времени возникает необходимость создания дополнительных репортов (а соответственно и шаблонов в BI Publisher). В данном случае был довольно сложный репорт, который собирался из таблиц, заполняющихся данными в BEFORE REPORT триггере этого же репорта. Количество колонок в репорте могло динамичиски меняться. Первоначально шаблон был сделан в формате RTF. Для каждого количества колонок был предусмотрен свой вариант репорта. На выходе мы должны были получить XLS файл с желаемыми для нас данными. Возникшие проблемыКогда выходящий файл является XLS файлом мы можем столкнуться со следующими проблемами, или если быть более точными, ограничениями: 1) Мы хотим чтобы Excel output файл выглядел именно, так как нам нужно - нужные столбцы находились именно там, где нам нужно, а не уезжали куда-то. 2) Чтобы типы данных передавались в Excel output, то есть чтобы у чисел был числовой тип данных в Excel, у дат - тип даты, и тому подобное… 3) При передачи данных, которые начинаются с "0" (leading zeroes), ведущие нули обрезаются, то есть нам нужно сохранить целостность данных. 4) Та же проблема появляется и при передачи данных с нулями после запятой (дробной частью). Если 3 и 4 проблемы можно решить добавив два пробела или специальные символы в начало/конец аттрибута, то с остальными немного сложнее. В моём случае мне нужно было передать значение "0000" в Excel при этом не потеряв ни одного нуля и не допуская никаких других символов в клетке. Подробнее о других ограничения Excel output файлов, созданных с использованием RTF шаблонов можно прочитать здесь ОзарениеВ результате долгих поисков в интернетах, в блоге Oracle было найдено упомянание о Real Excel Template. То есть теперь можно создавать шаблоны Для начала немного о различиях между RTF и XLS шаблонами. 1) В RTF для обозначения элементов мы должны были ставить тег <?ELEMENT_NAME?> , а в XLS мы должны писать в свойствах ячейки, где у нас будет находиться элемент тег XDO_?ELEMENT_NAME? . Пример: 2) В RTF для обозначания открытия групп мы должны были ставить тег <? for-each: GROUP_NAME?> и для закрытия групп должны были ставить тег <?end for-each?> ,a в XLS мы должны выделить ячейки, которые будут заполнены данными из нашей группы и поставить им в качестве свойства XDO_GROUP_?GROUP_NAME? . Это быдет выглядеть так:3) Будьте внимательными с тем, что пишете в самой клетке, так как вы можете задавать тип данных, которые будут находиться в клетке с помощью обычного Excel функционала, то и то, что написано в клетке должно соответствовать этому типу. Единственное, что у меня не получилось, это получить на выходе дату как даты, пришлось писать для этого небольшой макрос. Ах да, теперь мы можем дополнять наши габлоны макросами, что не было возможно в RTF шаблонах для Excel. 4) Обязательно должна присутствовать отдельная вкладка XDO_METADATA: Всё, что написано до "Data Constraints:" включая менять не нужно и это должно присутствовать во всех XLS шаблонах. То, что ниже уже ваши функции. Поддерживается XSL, не знаю насчёт остальных. Если элемент находится вне групп, то его нужно получать через xsl:value-of select . Ко всем элементам в этой вкладке нужно обращаться через .//ELEMENT_NAME.ПослесловиеПри использовании XLS шаблона мне больше не нужно было создавать для каждого поличества колонок отдельный вариант таблицы. Достаточно сделать таблицу для максимального количества колонок. Колонки, в которых будут присутствовать данные будут заполняться автоматически, в которых данных не будет так и будут оставаться пустыми. Это позволяет избежать лишней работы. Дополнительную информацию по возможностям создания таких шаблонов можно найти по этой ссылке. Надеюсь кому-то это поможет избежать лишних хлопот с составление шаблонов. Ссылки по теме
|
|