EBS 请求:PLSQL或Form中提交请求

本文介绍Oracle PL/SQL中如何使用FND_REQUEST.SUBMIT_REQUEST提交请求及FND_CONCURRENT.WAIT_FOR_REQUEST监控请求状态。详细解释了函数参数含义,提供了PL/SQL提交请求并监控其运行状态的示例代码。
摘要由CSDN通过智能技术生成

1. FND_REQUEST.SUBMIT_REQUEST函数

FND_REQUEST.SUBMIT_REQUEST 函数提交一个请求,它返回一个NUMBER值(request_id),具体调用如下 :

v_request_id  := fnd_request.submit_request(application CHAR,     --模块
                                             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);

A. 在Package里面调用只需要传递需要的参数个数,因为它有默认值指示结束;
B. 在form里面则不行,要写满105个,而且参数结束之后要用一个chr(0)来表示结束 。

2. FND_CONCURRENT.WAIT_FOR_REQUEST函数

请求运行之后,判断是否运行成功,使用函数FND_CONCURRENT.WAIT_FOR_REQUEST
等待当前请求运行完毕的程序,可以利用这个等待当前的请求程序运行完毕再运行之后的程序。

由于Oracle的请求操作时并发处理,执行此函数将很可能等待很长时间,因此,一般不建议使用该函数,其实fnd_request.submit_request函数返回值不为零已经表示成功提交请求了。

v_request_flag :=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 --运行完成后输出信息)

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

3. PLSQL提交请求示例

CREATE OR REPLACE PROCEDURE SUBMIT_REQUEST_C IS
    v_request_id   NUMBER;
    v_phase        VARCHAR2(30);
    v_status       VARCHAR2(30);
    v_dev_phase    VARCHAR2(30);
    v_dev_status   VARCHAR2(30);
    v_message      VARCHAR2(1000);
    v_request_flag BOOLEAN;
    v_start_time   VARCHAR2(30);
    l_layout_result BOOLEAN;
    l_notification_result BOOLEAN;
    L_DEFAULT_LANGUAGE  VARCHAR2(20);
    L_DEFAULT_TERRITORY VARCHAR2(20);
    L_TEMPLATE_CODE     VARCHAR2(200);
BEGIN
    FND_GLOBAL.APPS_INITIALIZE(user_id      => 1326, 
                               resp_id      => 50657, 
                               resp_appl_id => 700); 
                               
v_start_time := to_char(SYSDATE,'DD-MON-YYYY HH24:MI:SS'); 

    BEGIN
      --查询请求的输出模板信息
      SELECT XTV.DEFAULT_LANGUAGE,
             XTV.DEFAULT_TERRITORY,
             XTV.TEMPLATE_CODE
        INTO L_DEFAULT_LANGUAGE,
             L_DEFAULT_TERRITORY,
             L_TEMPLATE_CODE
        FROM XDO_TEMPLATES_VL XTV
       WHERE XTV.APPLICATION_SHORT_NAME = 'CUX'
         AND XTV.TEMPLATE_CODE = 'HUHITMLST';
    EXCEPTION
      WHEN OTHERS THEN
        dbms_output.put_line('RTF文件有误!');
END;

    --ADD_LAYOUT函数添加输出模板
    l_layout_result := fnd_request.add_layout(
                               template_appl_name => 'AR',
                               template_code      => 'HUHITMLST',
                               template_language  => 'en',       
                               template_territory => 'US',       
                               output_format      => 'EXCEL');   

   L_notification_result := fnd_request.add_notification('ACENOL');

   --FND_REQUEST.SUBMIT_REQUEST 函数提交请求
   IF(l_layout_result and l_notification_result) THEN
        v_request_id := FND_request.SUBMIT_request(
                               application => 'AR',         
                               program     => 'HUHITMLST',  --采购合同
                               description => NULL,
                               start_time  => NULL,
                               sub_request => false,
                               argument1   => 85,           --parameter1
                               argument2   => 'Active',     --Parameter2
                               argument3   => 'FG',         --Parameter3
                               argument4   => CHR(0));      --end
Commit;

    --等待请求
    v_request_flag :=fnd_concurrent.wait_for_request(
                               request_id  => v_request_id,  --IN
                               interval    => 5,             --IN
                               max_wait    => 0,             --IN
                               phase       => v_phase,       --OUT
                               status      => v_status,      --OUT
                               dev_phase   => v_dev_phase,   --OUT
                               dev_status  => v_dev_status,  --OUT
                               message     => v_message);    --OUT
commit;   
   IF v_request_flag THEN 
      IF v_dev_status = 'NORMAL' THEN 
         dbms_output.put_line('request run success!'); 
         dbms_output.put_line('v_request_id:'||v_request_id);
         dbms_output.put_line('request start run at:'||v_start_time);
      ELSE 
         dbms_output.put_line('Failed:' || v_dev_status); 
      END IF; 
   ELSE 
      dbms_output.put_line('request unfinished!'); 
   END IF;                                        

ELSE dbms_output.put_line('sumbit_request happen error:No layout!');
END IF;

END SUBMIT_REQUEST_C;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值