EBS BI Publisher开发全过程
EBS BI Publisher 开发全过程
1.BI Publisher基础
1.1.关于XMLP
XMLP在EBS中的地位
XMLP是EBS的11.510之后主要的报表解决方案。每种技术都有自己的特点和应用方向,仔细阅读下表,我们可以体会何种场景该使用XMLP。
EBS中的技术 | 特点 | 企业应用 |
---|---|---|
Oracle DB | 关系型数据库,其实是最佳的设计模式和开发框架 | 所有MIS系统的基础,最可靠的数据持久存储 |
PL/SQL | 标准SQL+编程语言,Oracle所有开发工具的基石 | 用于业务逻辑实现;系统质量的优劣、性能的高低,很大程度上取决于PL/SQL |
Reports | 过去流行的可视化报表设计环境,开发效率高 | 数据检索+报表展现,尤其是单据打印 |
Discoverer | BI展现工具,基于主题视图,分析企业数据 | 因为布局工作量小,被广泛应用于普通报表开发 |
ADI/Web ADI | 从日记账和FA起家,逐步发展为EBS最强的桌面工具 | 数据检索+Excel展现、数据批量录入和修改 |
XML Publisher | 基于XML工业标准,数据抽取与展现分离,布局设计平易近人又高度灵活丰富,与Java亲密集成 | 数据检索+报表展现,除了单据打印,还可发布至合作伙伴 |
Concurrent | 基于时间的任务并发、排队,合理利用系统资源 | 立即、定时或周期执行程序、报表、维护和监控 |
Flexfield | EBS最富特色的自定义字段,智能组合、智能验证 | 会计科目、物料分类,业务特有信息的记录和传递 |
Forms | 最快捷的数据库应用系统开发环境,UI不够友好 | Windows版的数据录入+数据处理+数据检索 |
JSP/JTF/OAF | 效率比较高的基于浏览器的应用开发框架 | 纯Web版的数据录入+数据处理+数据检索 |
Workflow | 灵活的流程定义/自动化、通知发送、系统间集成 | 流程式审批、流程式数据传递、事件式系统集成 |
Alert | 基于触发器和定时器的数据监控、预警通知 | 企业核心数据监控、系统运行异常监控 |
Interface/API | 各模块开发人员留出的,除了UI外的数据“出入口” | 客户化业务、外围系统与核心ERP的集成 |
Web Service | 基于Internet的计算和服务,可用于数据交换 | 跑在Internet上的Interface/API |
官方资料
XML Publisher简称XMLP,现在叫BI Publisher,有独立版和EBS嵌入版。
BI Publisher可以使用 大多数用户熟悉的工具Microsoft Word 或 Adobe Acrobat,来设计报表格式。不需要专用的设计Studio,这意味着不需要额外的成本。
这样,业务顾问或者用户仅需要简单的培训,就可以直接完成报表的设计。
其他报表的弊端
1、PL/SQL:布局过于简单;不便于Java集成,不便于对外发布。
2、Discoverer:布局过于简单、性能较差;不便于Java集成,不便于对外发布。
3、Reports:输出Excel不方便、标题和内容漂移、PASTA配置麻烦;不便于Java集成,不便于对外发布。
BI报表的优势
优势1:完全分离数据 / 布局 / UI国际化
数据获取、布局设计、界面翻译三大工作全部分离,可由不同的人甚至第三方分工协作。
优势2:数据不限来源、最终格式丰富、传送不限目的地
BI Publisher 可以接受并格式化任何格式规范的 XML 数据,它可以与能够生成 XML 的任何数据库、应用程序或过程集成,无论是要格式化输出并发送给使用者的数据库、ERP 应用程序还是 Web 服务。BI Publisher 还允许您将来自多个数据源的数据置入单个输出文档。
可以通过打印机、电子邮件、传真和 WebDav 传送您的内容,或者将报表发布到门户。Delivery Manager 的开放式体系结构还允许您轻松地实现自定义传送通道。
优势3:卓越的性能
BI Publisher 基于 W3C XSL-FO 标准,它是当今世界上最快、伸缩性最强的实现。它可以在较短的时间内处理大量的数据输入并生成输出,而只需占用很少的 CPU 时间和内存。
优势4:开放的标准,易于集成
BI Publisher 是基于开放标准技术构建的。它是一个 J2EE 应用程序,可以部署到任何 J2EE 容器。数据将处理为 XML,在桌面应用程序中创建的布局模板将在内部转换为 XSL-FO(另一个 W3C 标准)。该应用程序生成的输出也符合业界标准,如 PDF、RTF 和 HTML。传送协议是 Internet 打印协议 (IPP)、WebDAV、FTP 和 AS2。
1.2.必要配置
服务器端Patch
最好升级到最新版本,至少也要到5.5,之前的版本可以说是Oracle的“小白鼠”。
目前最新版为Oracle XML Publisher Core Rollup Patch 5.6.2 (Patch 5097966),Notes367394.1,有比较详细的描述。
SELECT * FROM fnd_product_installations WHERE patch_level LIKE '%XDO%'
服务器端配置
除非有特别需要,如设置临时文件夹、字体映射、PDF报表文件密码控制等,否则不需要做什么配置。
新版配置:XML Publisher Administrator/Home/Administration。
旧版配置:\(XDO_TOP/resource/xdo.cfg或者\)AF_JRE_TOP/jre/lib/xdo.cfg。
该文件默认不存在,需要手工创建。文件格式要按照《Oracle XML Publisher User’s Guide》的要求来写。
如果PC机安装了XML Publisher Desktop,其实里面有个xdo example.cfg文件,可以稍微修改即可使用。
开发设计工具XML Publisher Desktop
目前最新版本是5.6.2;需要先装好JDK1.4以上版本。
下载下来后直接安装,这样会在Word中嵌入XMLP的菜单,可以用来自动生成布局、预览等。
1.3.最简单的例子.输出XML数据源
关于数据源
XMLP要求的数据,必须是XML格式的,这可以通过多种方式生成,最常见的有两种。
1、Oracle Reports:仅创建Data Module、分组、求和,不用设计布局;其中求和也可以在模版中完成。
2、PL/SQL or SQL:直接输出XML格式的内容。
如果使用XMLP的Java API来生成报表,实际上可以从任何途径获得XML格式的文件,包括本地文件、用URL指定的网络文件、其他Java函数返回的参数等等。
开发数据源
这里采用Oracle Reports,为简单起见,参数写死,SQL如下:
SELECT poh.segment1 po_num,
por.release_num release,
pv.vendor_name,
pvs.address_line1,
pvs.address_line2,
pvs.address_line3,
pol.line_num || ‘.’ || pll.shipment_num line_num,
mst.segment1 item_num,
mst.description,
pll.quantity,
pll.unit_meas_lookup_code uom,
pll.price_override unit_price,
poh.currency_code,
nvl(pll.need_by_date, pll.promised_date) need_by_date
FROM po_headers_all poh,
po_vendors pv,
po_vendor_sites_all pvs,
po_lines_all pol,
po_line_locations_all pll,
po_releases_all por,
mtl_system_items_vl mst
WHERE poh.vendor_id = pv.vendor_id(+)
AND poh.vendor_site_id = pvs.vendor_site_id(+)
AND poh.po_header_id = pol.po_header_id
AND pol.po_line_id = pll.line_location_id
AND pll.po_release_id = por.po_release_id(+)
AND pol.item_id = mst.inventory_item_id
AND pll.ship_to_organization_id = mst.organization_id
AND poh.org_id = 102
AND poh.creation_date >= sysdate - 60
在Oracle Reports中创建数据模型并分组如下:
对组名称可以改得友好些,比如这里的G_PO_HEADER和G_PO_LINE,这样生成的XML文件可读性更佳。代码参考:CUXXMLPDEMO.rdf。
注册并发程序,输出格式为XML
1、上传CUXXMLPDEMO.rdf至服务器$SCF_TOP/reports/US
2、注册可执行:
3、注册并发程序,注意输出格式:
4、分配给相应的请求组。
试运行,获得样例数据
将报表上传服务起后,请求运行结果如下(只展开了一张PO):
可以看到,Oracle Reports可以自动输出XML,Tag主要来自文件名、分组名、字段名。具体文件可参考:CUXXMLPDEMO.xml。
1.4.最简单的例子.设计RTF模版
关于布局设计
实际上和任何报表工具一样,布局设计时,先需要“想象”层次结构,如哪些内容位于页眉页脚,哪些内容是报表头,哪些内容是明细行,各部分是如何依次嵌套的,哪些地方需要合计等等。同时考虑一些特殊需求:如何进行页码编号、是否动态列、每页显示的行数是否固定、新单据是否从新页开始、行高和列宽是否固定、表头是否在新页重复等等。这些也是做布局设计的重点和难点,而且不同版本的XMLP支持的特性也不一样,总的来说5.6.2之后,应该我们常用的需求都能被满足。
布局设计最常用的工具是Word,也可以是Adobe Acrobat,也可以直接编写XSL-FO模版。实际上,当上传RTF文件到XMLP模版管理器时,将被自动转换为XSL-FO。
了解窗体域,这可是我们经常写XMLP代码的地方
用Word进行RTF模版设计时,XMLP主要是利用“窗体域”来保存分组、格式、赋值等控制信息,其类似报表中的占位符,运行时将被实际的数据替换。
先从菜单“视图/工具栏/窗体”调出窗体工具栏。
然后就可以将“窗体域”插到Word文档中,最后通过右键“窗体域”调出属性,默认文字中输入比较直观的描述,在“添加帮助文字”的“自己键入”部分输入相应的XMLP命令,格式都是。比如下面的命令是个占位符,意思是运行时,用数据文件中标记为“ITEM_CODE”的值替换:
导入样例数据
打开Word,通过Template Builder/数据/装入XML数据:
选择上一步请求输出的XML文件,这样我们可以用向导加快模版设计,同时也方便预览。
布局向导
布局设计比较灵活,可以先搭好分组框架,也可先设计数据;可以通过向导创建,也可以手工设计。这里先介绍向导,这样可以减少手工添加“窗体域”的工作量。
1、启动向导,菜单Template Builder/插入/表/表单/向导…
2、选择布局风格,我们先要做采购订单单据头,所以选择“表单”
3、选择分组依据,我们这里选择G_PO_HEADER
4、选择需要的字段,假定我们需要如下5个字段
5、设置排序字段,我们需要按照PO号和发放号同时排序
6、调整字段描述
7、完成后自动生成布局如下(可双击打开)
其中的F和E是分组起始、终止标志,我们总结如下:
字段 | 默认文字 | XMLP语句 |
---|---|---|
组开始 | F | |
订单号 | PO_NUM | |
发放号 | RELEASE | |
供应商 | VENDOR_NAME | |
地址 | ADDRESS_LINE1 | |
货币单位 | CURRENCY_CODE | |
组结束 | E |
这里要掌握分组语法和值饮用语法。
Tips:到这里就可以预览报表了。
调整布局
向导生成了基本框架,尤其是需要写代码的“窗体域”,接下来我们根据实际需求调整下布局,同时最好也改下“默认文字”,尤其是分组的。最终结果如下(可双击打开):
验证布局
菜单Template Builder/工具/验证,可以验证语法错误和不支持的特性!
完善报表
和上边的步骤类似,首先运行向导添加订单行,这次布局风格选择“表”,分组选择PO_Line,结果如下,排序选择Line_Number:
其中的F和E是分组起始、终止标志,注意这次它们所处的位置,这样可以做到根据数量自动扩张行。
同样我们需要做下调整,比如:
这个例子还缺少很多元素,仅供练习,源文件为CUXXMLPDEMO.rtf。
预览报表
通过菜单Template Builder/预览,可以选择PDF、Excel、HTML、RTF等多种格式,我们选择Excel的输出结果如下:
完整的输出文件请看CUXXMLPDEMO.xls。
1.5.最简单的例子.注册数据源和模版
注册数据源
N: XML Publisher Administrator/Home/Data Definitions/Create Data Definition
定义数据源,需要注意,数据源代码需要和并发请求的代码一致,也可以上传预览数据:
注册模版,并和数据源关联
N: XML Publisher Administrator/Home/Templates/Create Template
定义并上传模版,需要注意选对类型和上一步注册的数据源:
可以为每种语言上传一个模版。
不过这里有点缺陷,就是一个模版只能用于一个数据源。如果我编写了多个数据源,想用同一个模版来显示,就只能重复定义和上传模版了。
1.6.最简单的例子.运行报表
提交请求
操作和提交普通的请求类似,唯一注意的是多了个Layout选项,默认会选中同语言的模版:
在11.5.10 CU1或Patch3435480之前,需要分两步完成,第一步运行请求,第二步运行XML Report Publisher来生成输出:
查看输出
运行结果和我们在XMLP Desktop中预览的基本一样,下面是个PDF的结果: