请求正常完成后,点击“检视输出”可以在浏览器打开输出文件,大概了解一下系统原理。
(event = ‘WHEN-BUTTON-PRESSED’) then
editor_pkg.report(:jobs.request_id, :jobs.save_output_flag);
editor_pkg.report 函数主要是根据请求的ID,创建输出的URL然后打开。
此函数在标准PLL文件“FNDCONC.PLL”中定义,只能在表单中调用,不能在数据库PL/SQL中调用。
库文件中:使用了editor_pkg2.browser_show
PROCEDURE browser_show(
fname varchar2,
node varchar2,
mtype varchar2,
req_id number default null)
获取路径:
fnd_profile.get(‘APPS_CGI_AGENT’, base);
创建temp_id
id := fnd_webfile.create_id(fname,svc,10,mtype,req_id,x_mode,‘Y’);
获取URL
url := base || ‘FNDWRR.exe?’ || ‘temp_id=’ || id;
打开URL:
fnd_utilities.open_url(url);
set_application_property(CURSOR_STYLE,‘DEFAULT’);
每次点击“检视输出”都会产生一个不同的temp_Id,产生的URL举例如下:
http://EBS网址/OA_CGI/FNDWRR.exe?temp_id=2799922536
Q1: temp_id似乎可以客制产生?会不会影响“检视输出”按钮temp_id的产生?
A1: 产生temp_id的函数fnd_webfile.create_id在数据库中定义, 且此函数有将参数保存到表fnd_file_temp中:
我们运行一个请求,检视输出,然后查看产生temp_id参数:
--在PLSQL中运行函数,产生temp_id
--第三个参数10的意思是产生temp_id后,10s内可以使用temp_id产生文件
--标准点击“检视输出”按钮,浏览器立刻使用temp_id,所以默认的10s时间足够
--我们的测试可以将temp_id的lifetime改久一点
declare
id number;
begin
id := fnd_webfile.create_id(
'/u01/DEV/appldev/devcomn/admin/out/DEV_dev/o5499166.out',
'FNDFS_DEV',
10,
'application/vnd.ms-excel',
5499166,
'TEXT',
'Y');
dbms_output.put_line(id);
end;
–验证output的ID能否在浏览器中产生文件,结论: 可以
–注意:如果报错Authentication failed. 可能是temp_id过期,也有可能是URL只能使用一次的系统BUG
–temp_id不是流水号,不需要知道具体产生的逻辑,只需要知道每次产生的temp_id都是唯一的
–所以我们在PLSQL中调用函数产生temp_id,并不会影响点击“检视输出”按钮temp_id的产生
Q2: FNDWRR.exe是怎么运行的,是否可以修改它返还给浏览器的文件的名字?
A:FNDWRR全称FND Web Report Review,执行程序位于
F
N
D
T
O
P
/
b
i
n
和
FND_TOP/bin和
FNDTOP/bin和OA_HTML/bin下(两个位置的文件是一样的)。这个程序的作用就是把服务器上的日志文件或者报表输出结果在客户端的浏览器展示出来,换句话说就是客户端通过这个程序来访问服务器上的文件。
A:在PLSQL中运行函数产生temp_id后,修改并行程式处的请求名称,此时在浏览器中访问文件,
文件名称是更新后的请求名+日期,所以文件名应该是运行FNDWRR.exe时产生的,并不能客制修改。
Q3: FNDWRR.exe客制测试?
不建议使用 FNDWRR.exe访问服务器上的文件,而是使用WEB.SHOW_DOCUMENT
测试1:参数请求ID设置为NULL依旧可以产生temp_id,并通过FNDWRR.exe访问到。
测试2:将输出文件移到另一个目录,也可以产生temp_id,并通过FNDWRR.exe访问到。