第九章 使用BI Publisher创建RTF模板的语法
RTF是Rich TextFormat的缩写,即多文本格式。这是一种类似DOC格式(Word文档)的文件,有很好的兼容性。RTF是一种非常流行的文件结构,很多文字编辑器都支持它,RTF的结构并不复杂,但内容繁多。
BI Publisher插件是为了简化RTF模板开发而对Word进行扩展的工具,它替我们完成了很多手工操作,提高了工作效率。
BI Publisher插件具有以下的功能:
Ø 插入数据字段
Ø 插入数据驱动的表格
Ø 插入数据驱动的表单
Ø 插入数据驱动的图表
Ø 使用样例数据预览模板
创建RTF模板包括如下两个基本步骤:
l 设计模板布局
使用Word格式化的功能并且将文件保存为RTF格式
l 添加标记
添加BI Publisher标记到模板中
需要在模板中定义的有两类内容:
l 数据域:需要使用XML数据动态替换的数据字段。
XML中的数据元素在模板中则是一个对应的 Placeholder,保证Placeholder中的标记名称和XML数据中的标记名称相同。
l 循环控制命令标记:当报表运行的时候,根据XML数据自动进行循环控制的命令标记。XML数据有一个层次结构,换句话说它们存在父子关系。层次关系需要在模板文件中使用嵌套循环的方式来表现出来。
XMLP和XSL-FO:
可以采取两种方式编写布局语言,一是XSL语句,二是XMLP简易语句,个人建议使用前者,因为其是国际通行标准。另外,这两种语法可以混合使用,比如上面的条件格式化行和单元格。
在RTF中直接写的只能是XMLP简易语句;在窗体域中则上述两者皆可。
XMLP提供的语法,都是一种简化的“代号”,实际都要翻译成XSL,如果你精通XSL-FO,那么也可以在窗体域中直接用该语法,自由而灵活!如下SQL可以查到转换后的XSL-FO:
SELECT t2.application_short_name,t2.template_code,
t1.LANGUAGE,t1.template_name,t3.file_name,
t3.xdo_file_type,t3.file_data
FROM xdo.xdo_templates_tl t1,xdo.xdo_templates_b t2, xdo.xdo_lobs t3
WHERE t1.template_code = t2.template_code
AND t2.template_code = t3.lob_code
AND t1.LANGUAGE = 'ZHS'
AND upper(t1.template_code) = 'CUX_WX_OMRPT01'
<?XML element tag name?>
在模板中的每个数据域都必须与XML文件中的一个元素对应起来。在设计报表模板的时候,在模板中为XML数据元素定义 Placeholder。
在报表运行的时候,模版中的 Placeholder被具有同样标记名称的XML数据替换。
<?for-each:XML group element tag name?>
……
<?end for-each?>
定义一个组的目的是告诉 XML Publisher对重复的数据行进行循环显示,也就是说需要使用for-each进行数据记录的循环显示。
使用Word内置的功能来定义页眉页脚功能
如果模板中要求多个页眉页脚,使用下面的标记来标示出报表的主体部分:
<?start:body?>
……
<?end body?>
由于在页眉和页脚中不允许使用窗体域,而当报表页眉页脚中希望插入XML数据的时候,可以考虑使用嵌套模板。
嵌套模板是在模板中定义一个子模板,然后在需要的地方调用它,如在页眉页脚中调用它。
Ø 定义子模板
子模板标记之间可以使用任何的标记和内容,和模板的主体部分没有任何区别
<?template:internaltemplate name?>
……
<?end template?>