TEC1401.Report开发技术总结 - 第一章 使用PLSQL开发HTML报表
来源:互联网 发布:淘宝企业店铺入口 编辑:程序博客网 时间:2024/05/29 03:16
第一章 使用PLSQL开发HTML报表
使用PLSQL存储过程准备好数据源,并控制输出的逻辑,最后生成带HTML标签的文本输出,再通过在EBS中设置报表的输出格式为HTML。
如果熟悉Web前端的设计和开发,我感觉用这种方法很方便。
完全将报表开发转变成Web开发了,报表的灵活行被无限放大了。
开发示例:
使用PLSQL开发HTML样式的销售订单报表,并通过javascript将数据导出到Excel中
1. PLSQL代码编写
CREATE OR REPLACE PACKAGE CUX_WX_OMRPT01 IS -- Author : ALLEN -- Created : 2014/5/16 10:46:31 -- Purpose : EBS REPORT TRAINING PROCEDURE MAIN(ERRBUF OUT VARCHAR2, RETCODE OUT VARCHAR2, P_ORDER_FROM IN VARCHAR2, P_ORDER_TO IN VARCHAR2); END CUX_WX_OMRPT01; / CREATE OR REPLACE PACKAGE BODY CUX_WX_OMRPT01 -- Author : ALLEN -- Created : 2014/5/16 10:46:31 -- Purpose : EBS REPORT TRAINING IS c_sprt VARCHAR2(2) := ','; --ouput log PROCEDURE WRITE_LOG(p_log VARCHAR2) IS BEGIN FND_FILE.PUT_LINE(FND_FILE.LOG, p_log); EXCEPTION WHEN OTHERS THEN NULL; END WRITE_LOG; --output content PROCEDURE WRITE_OUTPUT(p_content VARCHAR2) IS BEGIN FND_FILE.PUT_LINE(FND_FILE.OUTPUT, p_content); EXCEPTION WHEN OTHERS THEN NULL; END WRITE_OUTPUT; --BEGIN PROCEDURE MAIN(ERRBUF OUT VARCHAR2, RETCODE OUT VARCHAR2, P_ORDER_FROM IN VARCHAR2, P_ORDER_TO IN VARCHAR2) IS CURSOR getdata_header_cur(p_order_from VARCHAR2, p_order_to VARCHAR2) IS SELECT oh.order_number, --订单头 订单号码 ot.name, --订单头 订单类型 party.party_name, --订单头 客户名称 cust.account_number, --订单头 客户代码 oh.header_id FROM oe_order_headers_all oh, hz_cust_accounts cust, hz_parties party, oe_transaction_types_tl ot WHERE cust.party_id = party.party_id AND oh.sold_to_org_id = cust.cust_account_id AND oh.order_type_id = ot.transaction_type_id AND ot.language = userenv('LANG') AND oh.org_id = fnd_profile.VALUE('ORG_ID') AND oh.order_number between p_order_from and p_order_to ORDER BY oh.order_number; CURSOR getdata_line_cur(p_header_id NUMBER) IS SELECT ol.line_number || '.' || ol.shipment_number || decode(ol.component_number, null, null, '.') || ol.component_number line_num, --订单行 行号 ship_from_org.organization_code, --订单行 仓库代码 ol.ordered_item, --订单行 商品型号 ol.ordered_quantity, --订单行 数量 ol.unit_selling_price, --订单行 销售单价 ol.ordered_quantity * ol.unit_selling_price amount, --订单行 销售金额 ol.flow_status_code, --订单行 订单状态 ol.shipping_method_code --订单行 发运方法 FROM oe_order_lines_all ol, mtl_parameters ship_from_org WHERE ol.header_id = p_header_id AND ol.ship_from_org_id=ship_from_org.organization_id(+) ORDER BY ol.line_number; BEGIN -- Parameter Log WRITE_LOG('****************************************'); WRITE_LOG('*** Parameter List ***'); WRITE_LOG('****************************************'); WRITE_LOG('P_ORDER_FROM = ' || P_ORDER_FROM); WRITE_LOG('P_ORDER_TO = ' || P_ORDER_TO); WRITE_LOG('****************************************'); --HTML FORMAT start WRITE_OUTPUT('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html" /> <title>PLSQL生成HTML报表</title> <script type="text/javascript" language="javascript"> function PrintTableToExcel(objTab) { try { var xls = new ActiveXObject( "Excel.Application" ); } catch(e) { alert("要打印该表,您必须安装Excel电子表格软件,同时浏览器须使用“ActiveX 控件”,您的浏览器须允许执行控件。 请点击【帮助】了解浏览器设置方法!"); return false; } xls.visible = true; var xlBook = xls.Workbooks.Add; var xlsheet = xlBook.Worksheets(1); var x = 1; var y = 1; for (var i = 0; i < objTab.rows.length; i++) { y = 1; for (var j = 0; j < objTab.rows[i].cells.length; j++) { xlsheet.Cells(x, y).Value = objTab.rows[i].cells[j].innerHTML; xlsheet.Cells(x, y).Borders.LineStyle = 1; y++; } x++; } xlsheet.Columns.AutoFit; //自动适应大小 return; } </script> </head> <body>'); WRITE_OUTPUT('<input type="button" value="导出至Excel" onclick=PrintTableToExcel(test) />'); WRITE_OUTPUT('<table id="test">'); FOR getdata_header_rec IN getdata_header_cur(P_ORDER_FROM,P_ORDER_TO) LOOP WRITE_OUTPUT('<tr>'); WRITE_OUTPUT('<th colspan="2">订单号码:' || getdata_header_rec.order_number || '</th>'); WRITE_OUTPUT('<th colspan="2">订单类型:' || getdata_header_rec.name || '</th>'); WRITE_OUTPUT('<th colspan="2">客户名称:' || getdata_header_rec.party_name || '</th>'); WRITE_OUTPUT('<th colspan="2">客户代码:' || getdata_header_rec.account_number || '</th>'); WRITE_OUTPUT('</tr>'); WRITE_OUTPUT('<tr> <td>行号</td><td>仓库代码</td> <td>商品型号</td><td>数量</td> <td>销售单价</td><td>销售金额</td> <td>订单状态</td><td>发运方法</td></tr>'); FOR getdata_line_rec IN getdata_line_cur(getdata_header_rec.header_id) LOOP WRITE_OUTPUT('<tr>'); WRITE_OUTPUT('<td>' || getdata_line_rec.line_num || '</td>'); WRITE_OUTPUT('<td>' || getdata_line_rec.organization_code || '</td>'); WRITE_OUTPUT('<td>' || getdata_line_rec.ordered_item || '</td>'); WRITE_OUTPUT('<td>' || getdata_line_rec.ordered_quantity || '</td>'); WRITE_OUTPUT('<td>' || getdata_line_rec.unit_selling_price || '</td>'); WRITE_OUTPUT('<td>' || getdata_line_rec.amount || '</td>'); WRITE_OUTPUT('<td>' || getdata_line_rec.flow_status_code || '</td>'); WRITE_OUTPUT('<td>' || getdata_line_rec.shipping_method_code || '</td>'); WRITE_OUTPUT('</tr>'); END LOOP; WRITE_OUTPUT('<tr></tr>'); END LOOP; WRITE_OUTPUT('</table>'); WRITE_OUTPUT('</body></html>'); --HTML FORMAT end EXCEPTION WHEN OTHERS THEN ERRBUF := SQLERRM; RETCODE := SQLCODE; END MAIN; BEGIN NULL; END CUX_WX_OMRPT01;
2. 在EBS应用中注册Report
1) 定义可执行并发程序
l 职责:系统管理员(或应用开发者)
l 菜单:并发->程序->可执行
可执行和简称:一般为package名。
应用产品:选择相应的开发环境。
执行方法:选择PL/SQL存储过程。
执行文件名:指定调用package的程序入口,一般是MAIN方法,注意写法。
2) 定义并发程序
l 职责:系统管理员(或应用开发者)
l 菜单:并发->程序->定义
程序:一般为报表名称。
简称:一般同可执行的名称。
应用产品:与可执行的设置保持一致。
说明:输入该报表的详细说明。
可执行:选择之前定义好的可执行程序。
格式:报表输出格式设置,选择HTML。
如果报表有输入参数,则点击【参数】按钮进行设置:
序号:参数次序。一般以10为间隔设置,方便以后按次序再添加新的参数。
参数: 一般与报表中的参数名一致。
说明:参数说明信息。
值集:选择合适的值集名称。
提示:参数的显示标签。
变量:必须与package程序入口中的参数的参数名一致。(也可以省略)
3. 将Report运行权限赋给相应的职责
1) 查找相应职责的请求组
职责:系统管理员
菜单:安全性->职责->定义
2) 将定义好的Report加入请求组
职责:系统管理员
菜单:安全性->职责->请求
查询出相应的请求组。
如果该请求组包含了Report注册时使用的应用,可以不用专门将Report加入到该请求组;
否则需要将并发程序添加到该请求组。
注意添加应用和并发程序的类型区别。
3) 测试Report
切换至相应的职责,选择请求,输入参数后提交。
- TEC1401.Report开发技术总结 - 第一章 使用PLSQL开发HTML报表
- TEC1401.Report开发技术总结 - 第二章 使用Oracle Reports开发报表-创建一个简单报表(1/4)
- TEC1401.Report开发技术总结 - 第三章 使用Oracle Reports开发报表-创建一个分组报表(2/4)
- TEC1401.Report开发技术总结 - 第四章 使用Oracle Reports开发报表-创建一个矩阵报表(3/4)
- TEC1401.Report开发技术总结 - 第六章 使用BI Publisher开发报表-创建XML数据源(1/5)
- TEC1401.Report开发技术总结 - 第十章 使用BI Publisher开发报表-其他注意事项(5/5)
- TEC1401.Report开发技术总结 - 第五章 使用Oracle Reports开发报表-在EBS应用中注册Report的注意事项(4/4)
- TEC1401.Report开发技术总结 - 第八章 使用BI Publisher开发报表-在EBS应用中部署BIP报表(3/5)
- TEC1401.Report开发技术总结 - 第九章 使用BI Publisher开发报表-使用BI Publisher创建RTF模板的语法(4/5)
- TEC1401.Report开发技术总结 - 第七章 使用BI Publisher开发报表-创建一个简单的RTF模板(2/5)
- [iReport总结3] EBS使用jasper report进行报表开发
- 使用Grid++report开发报表功能
- 使用pentaho report 开发web报表
- Crystal Report开发报表
- Crystal Report开发报表
- Report 开发-简单报表
- flex开发报表Report
- Crystal Report.net Web报表开发日记
- Android Studio发布项目到Maven私有库(Nexus)
- amp
- (四)静态库和动态库的生成和使用(windows(基于vs)和Linux(基于Ubuntu))
- hibernate的环境搭建(以一个小例子讲解)
- httpd.conf_httpd-2.4.25-x86
- TEC1401.Report开发技术总结 - 第一章 使用PLSQL开发HTML报表
- 处理机调度
- Javascript
- nc 对字段的校验 编辑前时件和编辑后时件
- 弱校计算机网络试卷(2012-2013)
- php.ini_php-5.6.29-Win32-VC11-x86
- CS231n作业笔记2.1:两层全连接神经网络的分层实现
- javaWeb之HttpServletResponse
- 接口的调用及xml的解析