壹佰网|ERP100 - 企业信息化知识门户

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 967|回复: 2

[二次开发] fnd_request.submit_request

[复制链接]
发表于 2011/10/18 10:21:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。如果您注册时有任何问题请联系客服QQ: 83569622  。

您需要 登录 才可以下载或查看,没有帐号?注册

x
  1.   --submit the request
  2. l_req_id_fee := fnd_request.submit_request('PO',
  3. 'REQIMPORT',
  4. '',
  5. '',
  6. FALSE,
  7. 'POP_REQUEST',
  8. to_char(SYSDATE, 'YYYYMMDD'),
  9. 'ALL',
  10. '',
  11. 'N',
  12. 'N');

  13. if (l_req_id_fee is null) or (l_req_id_fee = 0) then
  14. raise l_submit_req;
  15. else
  16. --提交请求
  17. COMMIT;
  18. --更新状态(只有请求成功,状态才更改)
  19. UPDATE hek_om_pop_headers_all
  20. SET flow_status = 'reg_purchase'
  21. --select * from hek_om_pop_headers_all
  22. WHERE header_id IN (SELECT h.header_id
  23. FROM hek_om_pop_headers_v h
  24. WHERE h.flow_status = 'wait');
  25. COMMIT;
  26. end if;
复制代码

1、关于fnd_request.submit_request的用法
fnd_request.submit_request的用法:
FND_REQUEST.SUBMIT_REQUEST 函数是用来提交一个请求的,它返回一个NUMBER值.具体调用如下
:result := fnd_request.submit_request(application CHAR, --AP模快
program CHAR, --应用程序
description CHAR, --请求说明(可选)
start_time CHAR, --RUN 时间(可选)
sub_request BOOLEAN, --立刻提交请求
argument1 CHAR, --参数1
argument2 CHAR, --参数2
argument3 CHAR, --参数3
argument4 CHAR, --参数4
argument5 CHAR, --参数5.......
argument100 CHAR);
英文说明(zt Oracle) :
Parameters are as follows:
application - Short name of the application associated with the concurrent
request to be submitted.
program - Short name of the concurrent program (not the executable) for which
the request should be submitted.
description - Description of the request that is displayed in the Concurrent
Requests form (Optional.)
start_time - Time at which the request should start running, formatted as HH24:
MI or HH24:MI:SS (Optional.)
sub_request - Set to TRUE if the request is submitted from another request and
should be treated as a sub-request.
argument1...100 - Arguments for the concurrent request; up to 100
arguments are permitted. If submitted from Oracle Forms, you must specify all
100 arguments.
补充说明:
在用fnd_request.submit_request的时候,第五个参数用false,不要被参数名称误导;
这个函数有105个参数,前面五个定义请求本身,后面100个是传递给请求的具体参数,都是Char类型,
我们需要转换,默认值是chr(0),代表这个参数不用传递给调用的请求;
在Package里面调用只需要传递需要的参数个数,因为它有默认值指示结束;
在form里面则不行,要写满105个,而且我们参数结束之后要用一个chr(0)来表示结束

fnd_request.submit_request('AR',
'SVAINEX_P',
'',
'',
FALSE,
:parameter.invoice_store,
chr(0),
'','','',
'','','','','','','','','','','','','','','','','','','','',
'','','','','','','','','','','','','','','','','','','','',
'','','','','','','','','','','','','','','','','','','','',
'','','','','','','','','','','','','','','','','','','','',
'','','','','','','','','','','','','','','');
2、Oracle ERP等待报表运行机制
主要是用到了Fnd_concurrent.wait_for_ruqest这个function.
Fnd_concurrent.wait_for_request返回Boolean值,主要参数如下:
function FND_CONCURRENT.WAIT_FOR_REQUEST
(request_id IN number default NULL, --请求ID
interval IN number default 60, --检查时间间隔
max_wait IN number default 0, --最大等待时间
phase OUT varchar2,
status OUT varchar2,
dev_phase OUT varchar2, --请求运行阶段
dev_status OUT varchar2, --各个阶段状态
message OUT varchar2 --运行完成后输出信息)
return boolean;
dev_phase有Pending,Running,Complete,Inactive等几种,每种对应不同的Dev-Status,比如Complete阶段后就有Normal,Error,Warning,Cancelled,Terminated等几种状态。
  1. l_request_status := Fnd_Concurrent.Wait_For_Request(l_request_id,
  2. 5,
  3. 0,
  4. l_phase,
  5. l_status,
  6. l_dev_phase,
  7. l_dev_status,
  8. l_message);

  9. IF l_request_status THEN
  10. IF l_dev_status = 'NORMAL' THEN
  11. NULL;
  12. ELSE
  13. Fnd_Message.Debug('请求运行不成功:'||l_dev_status);
  14. RETURN;
  15. END IF;
  16. ELSE
  17. Fnd_Message.Debug('请求未完成,无法查看报表内容!');
  18. RETURN;
  19. END IF;

  20. Editor_Pkg.Report(l_request_id,'Y');
复制代码
总结:FND_REQUEST.SUBMIT_REQUEST是一种通过后台方式提交请教的方法,可以在pkg和form中使用,在form中使用要将参数写全。 FND_CONCURRENT.WAIT_FOR_REQUEST是一个等待当前请求运行完毕的程序,可以利用这个等待当前的请求程序运行完毕再运行下面的程序。


有时候提交请求一直会返回0的情况:
检查是否有初始化环境:
SELECT user_id
           INTO l_num_user_id
           FROM applsys.fnd_user
          WHERE user_name ='user_name';
SELECT responsibility_id
           INTO l_num_resp_id
           FROM apps.fnd_responsibility_vl
          WHERE responsibility_name ='responsibility_name';
SELECT application_id
           INTO l_num_resp_appl_id
           FROM applsys.fnd_application
          WHERE application_short_name = 'app_short_name';



fnd_global.apps_initialize (user_id           => l_num_user_id,
                                            resp_id           => l_num_resp_id,
                                            resp_appl_id      => l_num_resp_appl_id
                                           );



该贴已经同步到 纵横四海的微博
 楼主| 发表于 2011/10/18 10:24:40 | 显示全部楼层
FND_CONCURRENT.WAIT_FOR_REQUEST的说明
以下部分英文说明来自Oracle EBS Developer's Guide
1: function FND_CONCURRENT.WAIT_FOR_REQUEST

   2:  (request_id IN number default NULL,
   3:            interval   IN number default 60,
   4:            max_wait   IN number default 0,
   5:            phase      OUT varchar2,
   6:            status     OUT varchar2,
   7:            dev_phase  OUT varchar2,
   8:            dev_status OUT varchar2,
   9:            message    OUT varchar2) return  
  10:  boolean;
Description  Waits for request completion, then returns the request phase/status and completion message to the caller. Goes to sleep between checks for request completion.


Arguments (input)
request_id            The request ID of the request to wait on.

interval                  Number of seconds to wait between checks (i.e., number of  seconds to sleep.)

max_wait             The maximum time in seconds to wait for the request's completion.


Arguments (output)
phase                   The user-friendly request phase from the FND_LOOKUPS table.

status                   The user-friendly request status from the FND_LOOKUPS table.

dev_phase          The request phase as a constant string that can be used for program logic comparisons.

dev_status          The request status as a constant string that can be used for program logic comparisons.

message              The completion message supplied if the request has already completed.

dev_phase有Pending,Running,Complete,Inactive等几种,每种对应不同的Dev-Status,比如Complete阶段后就有Normal,Error,Warning,Cancelled,Terminated等几种状态。

发表于 2011/10/18 10:29:55 | 显示全部楼层
真詳細,多謝
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|手机版|壹佰网 ERP100 ( 京ICP备19053597号-2 )

Copyright © 2005-2012 北京海之大网络技术有限责任公司 服务器托管由互联互通
手机:13911575376
网站技术点击发送消息给对方83569622   广告&合作 点击发送消息给对方27675401   点击发送消息给对方634043306   咨询及人才点击发送消息给对方138011526

GMT+8, 2025/11/30 06:29 , Processed in 0.019139 second(s), 18 queries , File On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表