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的结果:

posted @ 2023-03-29 15:40  胖大海527  阅读(1239)  评论(0)    收藏  举报