二次开发中附件的使用实例
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Oralce ERP二次开发中附件的使用实例
Oracle ERP二次开发中使用的方式有两种,一是通过标准功能,在系统管理员中定义即可,不用写代码,就可以使几乎任何Form具有附件功能,具体参考系统管理员文档,或者
[u][color=#0000ff][url=/viewthread.php?tid=36637]/vi ewthread.php?tid=36637[/url][/color][/u]
二是通过PL/SQL Gateway,需要我们便写代码完成。该方式其实和上述方式一的后台实现是一样的。我写了个Package,大体可以演示改写的代码。简单说明如下:
1、Package功能,测试通过PL/SQL Gateway(MOD PL/SQL)完成文件上传下载
2、本Package直接使用EBS的DAD,所以对应的Document表为APPS.fnd_lobs_document
在非EBS环境开发,需要自己定义DAD请参考9ias_plsql.pdf和9ias.pdf,步骤如下
a、创建Document表,参照fnd_lobs_document和fnd_lobs_documentpart,表名自己起
b、配置DAD,配置文件为$IAS_ORACLE_HOME/Apache/modplsql/cfg/wdbsvr.app
c、参照fnd_gfm,改写成自己的包,或者简单点改写本Package也行
3、需要把我们写的包在system administrator --> security --> Web PL/SQL里面注册一下,
不然通过IE打开会提示用户名和密码
4、本测试把在“接口”fnd_lobs_document中的附件,按照EBS的做法保存到fnd_lobs,
也可以改写代码保存到自己的表,一般没必要,我们自己的表保存File_ID即可
5、一个表中的BLOB等数据可以直接插入另一个表
[code]
CREATE OR REPLACE PACKAGE oracle_up_down AUTHID CURRENT_USER IS
/********************************************
1、Package功能,测试通过PL/SQL Gateway(MOD PL/SQL)完成文件上传下载
2、本Package直接使用EBS的DAD,所以对应的Document表为APPS.fnd_lobs_document
在非EBS环境开发,需要自己定义DAD请参考9ias_plsql.pdf和9ias.pdf,步骤如下
1、创建Document表,参照fnd_lobs_document和fnd_lobs_documentpart,表名自己起
2、配置DAD,配置文件为$IAS_ORACLE_HOME/Apache/modplsql/cfg/wdbsvr.app
3、参照fnd_gfm,改写成自己的包,或者简单点改写本Package也行
3、需要把我们写的包在system administrator --> security --> Web PL/SQL里面注册一下,
不然通过IE打开会提示用户名和密码
4、本测试把在“接口”fnd_lobs_document中的附件,按照EBS的做法保存到fnd_lobs,
也可以改写代码保存到自己的表,一般没必要,我们自己的表保存File_ID即可
5、一个表中的BLOB等数据可以直接插入另一个表
********************************************/
/***************上传文件下载过程*************
1、初始化access id
select fnd_gfm.authorize(-1) from dual;
2、准备url,下面是例子
SELECT fnd_web_config.trail_slash(fnd_profile.VALUE('APPS_WEB_AGENT')) ||
'oracle_up_down.upload_form?p_access_id=上面1的查询结果'
FROM dual;
3、用浏览器打开url即可。如果是通过Form打开url上传,那么把上面代码放入form的相应trigger
4、查看File_ID
SELECT fnd_web_config.trail_slash(fnd_profile.VALUE('APPS_WEB_AGENT')) ||
'oracle_up_down.upload_form?p_access_id=上面1的查询结果'
FROM dual;
4、把文件下载下来验证
SELECT fnd_web_config.trail_slash(fnd_profile.VALUE('APPS_WEB_AGENT')) ||
'oracle_up_down.download_file?p_file_id=上面4的查询结果' || chr(38) ||
'p_access_id=上面1的查询结果'
FROM dual;
5、可以直接在PL/SQL Developer 6以上中Select出来点击File_Data察看
Test脚本
:8003/pls/scp/fnd_web.SHOWENV;
select fnd_gfm.authorize(-1) from dual;
select * from applsys.fnd_lob_access t where t.access_id = 354896931892;
:8003/pls/SCP/oracle_up_down.upload_form?p_access_id=354896931892; select * from applsys.fnd_lob_access t where t.access_id = 354896931892;
select * from applsys.fnd_lobs_document t;
:8003/pls/SCP/oracle_up_down.download_file?p_file_id=3548970&p_acce ss_id=354896931892;
Select * from fnd_lobs flb where flb.file_id = 3548970;
****************上传文件下载过程*****************/
g_agent CONSTANT VARCHAR2(100) := fnd_web_config.trail_slash(fnd_profile.VALUE('APPS_WEB_AGENT'));
g_package_name CONSTANT VARCHAR2(100) := 'oracle_up_down';
g_upload_url CONSTANT VARCHAR2(100) := g_package_name || '.upload_file';
g_download_url CONSTANT VARCHAR2(100) := g_package_name ||
'.download_file';
g_cancel_url CONSTANT VARCHAR2(100) := g_package_name || '.cancel_file';
--完成上传:把在网关中的数据抓到自己的表
PROCEDURE upload_file(p_file_name IN VARCHAR2, p_access_id IN NUMBER);
--显示HTML取消页面
PROCEDURE upload_cancel;
--显示HTML上传页面
PROCEDURE upload_form(p_access_id IN NUMBER DEFAULT NULL);
--下载文件
PROCEDURE download_file(p_file_id IN NUMBER,