您的位置:首页 > 数据库 > Oracle

TEC1401.Report开发技术总结 - 第九章 使用BI Publisher开发报表-使用BI Publisher创建RTF模板的语法(4/5)

2016-12-28 02:56 501 查看
 
 

第九章   使用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'



1.     创建Placeholder

<?XML element tag name?>
在模板中的每个数据域都必须与XML文件中的一个元素对应起来。在设计报表模板的时候,在模板中为XML数据元素定义
Placeholder。
在报表运行的时候,模版中的 Placeholder被具有同样标记名称的XML数据替换。



                      




2.     定义组

<?for-each:XML group element tag name?>
……
<?end for-each?>
定义一个组的目的是告诉 XML Publisher对重复的数据行进行循环显示,也就是说需要使用for-each进行数据记录的循环显示。




3.     定义页眉和页脚

使用Word内置的功能来定义页眉页脚功能
如果模板中要求多个页眉页脚,使用下面的标记来标示出报表的主体部分:
<?start:body?>
……
<?end body?>
由于在页眉和页脚中不允许使用窗体域,而当报表页眉页脚中希望插入XML数据的时候,可以考虑使用嵌套模板。


4.     嵌套模板

嵌套模板是在模板中定义一个子模板,然后在需要的地方调用它,如在页眉页脚中调用它。
Ø 定义子模板
子模板标记之间可以使用任何的标记和内容,和模板的主体部分没有任何区别
<?template:internaltemplate name?>
……
<?end template?>
Ø 调用子模板
<?call:internaltemplate name?>


5.     插入图片

Ø 直接插入图片
可以直接在模板中插入 jpg、gif或 png格式图片
Ø 插入URL链接图片
在模板中随意插入一张图片
在设置图片对话框中的网站标签页中,在可选文字中输入如下的URL格式链接
url:{’http://image location’}
Ø OA
Media库图片
在模板中随意插入一张图片
在设置图片对话框中的网站标签页中,在可选文字中输入如下的URL格式链接
url:{’${OA_MEDIA}/image name’}


6.     Word内置的格式化功能

l  自选图形
BIP支持Word中的自选图形,可以将这些对象打印到PDF输出中。
支持如下的自选图形类型:
n  线条
– 直线、箭头、双箭头、曲线、任意多边形和自由曲线
n  连接符
– 只支持直接连接符
n  基本形状
– 所有此类型都支持
n  箭头总汇
– 支持此类型的所有箭头
n  流程图
– 所有图形都支持
n  星与旗帜
– 支持所有
n  标注
– 线形标注不支持
n  剪贴画
– 通过剪贴画库添加
l  图形其他功能
BIP除了支持自选图形之外还支持如下的其它图形功能:
n  叠放层次
n  公式,方程式
n  组织结构图
n  艺术字
BIP不致支持三维效果
l  分页符
在分组结束标记之前添加 Ctrl+Enter,使用这个功能会使报表打印的最后有一空白页,为了避免打印空白页,需要使用BIP的分页别名。
l  页码
使用Word的插入页码功能来给模板添加页码。
l  对齐
使用Word中的对齐功能来对齐文本、图像、对象和表格。
l  支持的表格功能
n  嵌套表格
n  单元格对齐
n  行合并和列合并
n  表格自动调整:在运行的时候,根据选择的方法自动调整
n  单元格样式和颜色
n  重复标题行
n  防止跨页断行
n  固定列宽
l  日期
使用Word的插入日期功能来定义模板的日期,这个日期对应的是报表的发布日期而不是请求允许的日期。
l  分栏
BIP支持Word中的分栏功能,使报表输出能够以多栏的方式打印。
l  背景功能
BIP支持Word中的背景功能,可以为模版指定渐变、纹理、图案或者图片的背景,这个功能仅对PDF输出有效。
l  水印功能
XMLP支持Word中的水印功能,可以为模版指定文字或者图片水印,这个功能仅对PDF输出有效。


7.     模板功能

l  分页符
为了在特定的元素之后进行分页,只要在元素之前插入如下的命令标记:
<?split-by-page-break:?>
l  页码初始值
有些报表要求报表的页码被设置为一个特定值,可以使用如下标记来设置初始化页码:
<?initial-page-number:pagenumber?>



l  超链接
n  使用word中的插入超链接功能来插入静态链接
n  如果超链接包括了模板中的数据元素,可以在运行时动态的创建超链接,在链接地址中按如下格式输入:
{URL_LINK}
URL_LINK可以是一个完整的URL地址,也可以使URL地址中的一部分。它是动态传入的数据元素,如下传入URL的参数: http://www.oracle.com?product={PRODUCT_NAME} PRODUCT_NAME是运行时传入值的数据元素名称
如下是一个完整的URL地址:
{SUPPLIER_URL}
SUPPLIER_URL是运行时传入值的数据元素名称
l  表格
BIP支持通过XML数据来动态创建表格内容和题头
l  复选框
可以在模板中定义复选框,并根据传入的值来决定是否被选中。
定义复选框的步骤:
n  使用word中的复选框型窗体域功能添加复选框
n  打开复选框型窗体域选项窗口
n  设置默认值:未选中或选中
n  在窗体域帮助文字中输入复选框选中的条件表达式,它必须是一个布尔表达式,只能返回true或false
如:XML数据中包括了<order_number>的元素,如果< order_number
>的值大于10000则复选框被选中,则在窗体域帮助文字中输入如下的条件表达式:
<?order_number
>10000?>


8.     条件格式化

l  IF语句
<?if:condition?>
……
<?end if?>
例子:
<?if:line_num=‘1.1’?>
… …
<?end if?>



l  在模板文本中使用IF语句
在文本中如果直接使用<?if:condition?>来进行判断,结果输出会自动换行。
为了防止换行,需要使用<?if@inlines:condition?>的方式来判断



l  If-then-Else语句
<?xdofx:if element_condition then result1 else result2 end if?>
例:
<?xdofx:if AMOUNT > 1000 then 'Higher’
Else
if AMOUNT < 1000 then 'Lower’
Else
    'Equal’
end if?>
l  Choose语句
<?choose:?>
<?when:expression?>
……
<?when:expression?>
……
<?otherwise?>



l  格式化列
根据条件系显示或隐藏列:

<?if@column:/items/@type="PRIVATE"?>

    <?quantity?>

<?end if?>

l  格式化行
根据条件来格式化表格的行:
<?if@row:condition?>
<xsl:attribute name="background-color" xdofo:ctx="incontext">lightgray
</xsl:attribute>
<?end if?>
l  单元格加亮
可以根据条件来加亮单元格,在目标单元格内写下:
<?if:debit>1000?>
<xsl:attribute xdofo:ctx="block" name="background-color">red</xsl:attribute>
<?end if?>
l  偶数行底色为灰色,可在行的任何单元格内写下:
<?if@row:position() mod 2=0?>
<xsl:attribute xdofo:ctx="incontext" name="background-color">Gray
</xsl:attribute>
<?end if?>


9.     页面级别的计算

l  计算合计值
可以对多个字段进行合计,由于页合计在XML数据中是不存在的,所以需要定义一个变量,定义变量的同时将计算的字段关联起来了
l  显示页合计
l  结转合计
l  连续合计


10.   数据处理

Ø 排序
可以使用组中的字段对组进行排序,在组标记内插入如下的命令标记:
<?sort:element name?> <?sort: ORDER_NUMBER?>
也可以对组中的多个字段进行排序:
<?sort:element name?><?sort:element name?>……
<?sort:LINE_NUM?> <?sort:AMOUNT?>
Ø 对XML数据重新分组
XML Publisher提供了对XML数据从新分组的功能,这样报表可以根据需要随意进行层次结构的重新组织,无需按照原有的结构显示:
<?for-each-group: BASE-GROUP;GROUPING-ELEMENT?>
为了在已定义的分组中再进行分组,使用如下的命令标记实现嵌套分组:
<?for-each:current-group(); GROUPING-ELEMENT?>
在运行时,XML Publisher根据新的分组规则,循环显示模板中定义的字段值,使用如下的命令标记显示显示的信息:
<?for-each:currentgroup()?> <?end for-each?>
使用上述的语法方式可以通过表达式来进行分组:
<?for-each:BASE-GROUP; GROUPING-EXPRESSION?>
<?for-each-group:temp;floor(degree div 10?>


11.   变量、参数和属性

Ø 使用变量
变量使用“set get”的方式来分配、更新和取得变量的值。
<?xdoxslt:set_variable($_XDOCTX,‘variable
name’, value)?>
<?xdoxslt:get_variable($_XDOCTX,‘variable
name’)?>
<?xdoxslt:set_variable($_XDOCTX,‘x’,xdoxslt:get_variable($_XDOCTX,‘x’
+ 1)?>
Ø 定义参数
可以传递运行时参数给模板,但是Oracle Application并发管理器不支持传参数给模板,只能在程序中通过API传递参数。
<xsl:param name="P_NAME" select="DEFAULT" xdofo:ctx="begin"/>
P_NAME:参数的名称;
DEFAULT:参数的默认值,select可以省略;
xdofo:ctx=“begin”是必须的,它代表了在模板开始的时候就声明变量;
这个语法必须在窗体域帮助文字中使用,窗体域可以放到模板中的任意位置。
Ø 引用参数
模板中使用参数的方法是在参数名称前添加$字符,
如:声明了参数“InvThresh”,则通过”$InvThresh”来引用它;
也可以在API中通过程序来引用参数值
Properties prop = new Properties();
prop.put("xslt.InvThresh", "1000");


12.   数字和日期格式化

Ø 数字格式化
BIP支持两种数据格式化方式:Word本身的数字格式掩码和Oracle的format-number功能: 
<?format-number:fieldname;‘999G999D99’?>
Ø 日期格式化
BIP支持两种日期格式化方式:Word本身的日期格式掩码和Oracle的format-date功能:
<?format-date:date_string;‘FORMAT_MASK’?>
例:<?format-date:hiredate;‘YYYY-MM-DD’?>
Ø 抽象日期格式化
Oracle的抽象日期格式掩码语法:
<?format-date:fieldname;‘MASK’?>
例:<?format-date:hiredate;‘SHORT’?>
<?format-date:hiredate;‘LONG_TIME_TZ’?>
抽象日期格式掩码列表:
掩码
US输出实例
SHORT
2/31/99
MEDIUM
Dec 31, 1999
LONG
Friday, December 31, 1999
SHORT_TIME
12/31/99 6:15 PM
MEDIUM_TIME
Dec 31, 1999 6:15 PM
LONG_TIME
Friday, December 31, 1999 6:15 PM
SHORT_TIME_TZ
12/31/99 6:15 PM GMT
MEDIUM_TIME_TZ
Dec 31, 1999 6:15 PM GMT
LONG_TIME_TZ
Friday, December 31, 1999 6:15 PM GMT


13.   截行处理

由于到目前版本(5.6),BIP还不支持Word表格中的固定行高的功能,虽然有固定列宽的功能,还是不能够实现截行的功能,所以只能通过XSL来实现。
在需要进行截行的单元格中使用窗体域添加如下两条命令:
<xsl:attribute xdofo:ctx="block" name="wrap-option">no-wrap</xsl:attribute>
<xsl:attribute xdofo:ctx="block" name="overflow">hidden</xsl:attribute>
第一条命令的作用是静止折行。
第二条命令的作用是隐藏掉超长的部分,即截掉超长的数据。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐