客制化_快速导出功能_开发
本教程主要是介绍Form客制化_快速导出功能_开发的相关功能,包含如下几个部分:
l 功能优势和缺点
l 开发逻辑以及使用约束
l 相关设定以及说明
l 开发实例
l 测试/预览导出效果
功能优势和缺点
该功能” Form客制化_快速导出功能”是和标准功能的导出功能很类似的。都是对数据块的内容做批量导出。
一、相对于标准的导出功能,本次客制化开发的快速导出功能的优势在:
1) 导出的速度快!特别是大量的数据。
这个优势也是做这次客制化的最重要的目的。
用标准的导出功能都有一个感觉:导出速度慢。其慢的原因是,标准的导出功能是通过对每一行的每一个Item进行复杂的判断,再获取值,将对应的值用CHR(9)分隔符写入FND_LOBS表,再输出的。
举个简单的例子,如果一个Block块有30个栏位,查询出的数据有1000行,那标准的Export功能就需要做30*1000=30000次的Item取值。所以应该明白为什么当导出超过100行的时候,标准要问你:是否要继续。。。?
2) 新的功能是自动提交请求导出数据,不需要写FND_LOBS表,所以长远来说对系统的优化是一大好处!
因为标准导出功能,每次导出都要写一笔记录到FND_LOBS表,FND_LOBS表的日益增加,对数据库的性能是很大的挑战。
二、有优势当然有缺点,它的缺点在:
新的导出功能的缺陷在,对于非数据库栏位的Item,是不可以导出的。是一个比较大的缺点。所以,如果希望用这个导出功能,那对应的Item必须是基于数据库的Item,不可以是格式化的Item或者是别的非数据库栏位的Item。
另外,List Item也只可以获取其Value,没办法获取Value对应的Meaning。
开发逻辑以及使用约束
XYG公用导出功能代码:XYG_FORM_EXPORT.EXPORT
功能用途:Form数据导出。
功能开发逻辑:
一、动态抓取对应要导出的Form Block的栏位。就是抓:SELECTXXX的部分。
其中,栏位别名用Form BLock Item对应的提示。
特别要注意的是:
新增Profile设定值:XYG_EXPORT_ALL_BLOCK_COLUMN(信义:导出Form所有栏位标识)。是否导出所有栏位。
当Profile值:XYG_EXPORT_ALL_BLOCK_COLUMN设为N的时候:
报表不显示的Item的4种情况
1)非数据库栏位的Item
2)Item是对应数据库表格(视图)的栏位,并且不可以是ROW_ID的栏位。
3)Item的属性的显示行数=1的栏位
4)Item是隐藏的栏位。
当Profile值:XYG_EXPORT_ALL_BLOCK_COLUMN设为Y的时候:
就是显示Form中的所有栏位。对于没有别名提示的栏位,就以栏位的名称代替。
报表不显示的Item的3种情况
1)非数据库栏位的Item
2) Item是对应数据库表格(视图)的栏位,并且不可以是ROW_ID的栏位。
3)Item的属性的显示行数=1的栏位
二、动态抓取对应要导出的Form Block的Last Query。就是抓:FROM XXX WHERE XXX的部分。
三、将第一步和第二步抓取的内容合并起来,合并为一个完整的SQL语句,将这个语句塞到临时表:XYG_FND_FORM_REPORT_TEMP
四、根据XYG_FND_FORM_REPORT_TEMP的表格ID,传给请求"XYG_信义玻璃Form导出报表"作为提交报表的SQL语句。然后自动提交报表。
五、公用标准导出功能的GLOBAL.FND_EXPORT_DEBUG,它是调试的标识。设为TRUE则表示会调试,空或者FALSE则为不调试。
六、公用导出功能的导出权限XYG_FILE_EXPORT_PERMISSION(信义:可导出Form文件标识),如果设为N,则不可以用导出的功能。
开发难点:
主要有2个地方:
一、如何动态逐个找对应要导出的Form-Block的Item以及其栏位意义。
二、动态栏位的报表如何实现。
只是一个引导作用。具体代码大家可以自己编写。
实践证明,这个功能还是非常的实用。因为可以将Form的内容简单直接导出到Excel里面,User在Excel操作数据,方便性和可操作行大大提高!
from:http://blog.csdn.net/samt007/article/details/8569806