EBS提交&取消请求、请求集程序fnd_request

目录

参考

提交请求

取消请求

提交请求集


参考

     Extend Oracle ERP to Preview Report Output and enable Email - Simple Talk

https://support.oracle.com/epmos/faces/DocumentDisplay?id=221542.1&displayIndex=1&_adf.ctrl-state=tfx6dt3x8_176&_afrLoop=422629940422177

提交请求

EBS提交请求主要用到以下api

fnd_global.apps_initialize:初始化用户、职责环境变量

fnd_request.set_print_options:设定报表打印格式,如果只有一种格式可以不使用

 fnd_request.submit_request:提交请求,会返回请求id,如果返回0则请求提交失败

        第一个参数:请求应用的简称

        第二个变量:请求的简称

        第三个变量:置空

        第四个变量:请求开始时间

        第五个变量:是否作为子请求提交,该请求如果是被其它请求调用设为TRUE,否则为FALSE  

        第六个以后的变量:请求提交的变量,如果后面没有了使用chr(0)作为结尾。

fnd_concurrent.wait_for_request:循环查询请求执行情况,参数会设定循环此时和间隔时间。

        在确认请求完成后,会返回请求执行结果状态,如果使用form开发,可以在form中继续调用程序展示报表或继续程序。

PROCEDURE Prc_Do_Price_Request(Prm_User_Number IN VARCHAR2
                              ,Prm_Appcode     OUT NUMBER
                              ,Prm_Appmsg      OUT VARCHAR2) IS
  e_Exception EXCEPTION;
  Success        BOOLEAN;
  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);
  v_User_Id      NUMBER;
BEGIN
  Prm_Appcode := 0;
  v_User_Id   := Fnd_Get_User_Id(Prm_User_Number);
  --初始化设置  
  Fnd_Global.Apps_Initialize(v_User_Id
                            , --用户ID  
                             g_Resp_Id
                            , --责任ID  
                             g_Resp_Appl_Id); --应用ID  

  --设置打印参数  
  Success := Fnd_Request.Set_Print_Options(g_Printer, g_Style, g_Copies);

  --显示设置
  l_Add_Layout := Fnd_Request.Add_Layout(Template_Appl_Name => 'XX'
                                        ,Template_Code      => 'XX_DEPOT_RMA'
                                        ,Template_Language  => 'en'
                                        , --Use language from                   template definition
                                         Template_Territory => 'US'
                                        , --Use territory from template definition
                                         Output_Format      => 'PDF' --Use output format from template definition
                                         );

  --发送邮件
  l_Add_Delivery := Fnd_Request.Add_Delivery_Option(TYPE        => 'E'
                                                   ,p_Argument1 => 'Return Material Authorization (RMA) for order#' ||
                                                                   p_Order_Id
                                                   , -- Email Subject
                                                    p_Argument2 => 'admin@red-gate.com'
                                                   , -- From Address
                                                    p_Argument3 => p_Email
                                                   , -- To Address
                                                    p_Argument4 => NULL -- CC email address
                                                    );
  IF NOT Success THEN
    RAISE e_Exception;
  END IF;
  v_Start_Time := To_Char(SYSDATE, 'DD-MON-YYYY HH24:MI:SS');
  --调用请求  

  v_Request_Id := Fnd_Request.Submit_Request('QP'
                                            , --应用  
                                             'QPXVBLK'
                                            , --程序  
                                             NULL
                                            , --程序说明  
                                             v_Start_Time
                                            , --开始时间  
                                             FALSE
                                            , --是否作为子请求提交,该请求如果是被其它请求调用设为TRUE,否则为FALSE  
                                             'PRL'
                                            , --实体--*--1  
                                             NULL
                                            , --实体名称--2  
                                             NULL
                                            , --流程标识--3  
                                             NULL
                                            , --流程类型--4  
                                             'N'
                                            , --流程父项--5  
                                             1
                                            , --线程数--6  
                                             'N'
                                            , --派生请求--7  
                                             NULL
                                            , --请求编号--8  
                                             'Y'
                                            , --打开调试--9  
                                             Chr(0)); --结束标识  

  IF v_Request_Id = 0 THEN
    RAISE e_Exception;
  ELSE
    COMMIT;
  END IF;
  --等待  
  v_Request_Flag := Fnd_Concurrent.Wait_For_Request(Request_Id => v_Request_Id
                                                   , --返回的请求ID  
                                                    INTERVAL   => 2
                                                   , --重复检测时间差  
                                                    Max_Wait   => 0
                                                   , --最长等待时间,0为一直等待  
                                                    Phase      => v_Phase
                                                   ,Status     => v_Status
                                                   ,Dev_Phase  => v_Dev_Phase
                                                   ,Dev_Status => v_Dev_Status
                                                   ,Message    => v_Message);
  IF v_Request_Flag THEN
    IF v_Dev_Status = 'NORMAL' THEN
      -- OR v_dev_status = 'WARNING'  
      NULL;
    ELSE
      RAISE e_Exception;
    END IF;
  ELSE
    RAISE e_Exception;
  END IF;
EXCEPTION
  WHEN e_Exception THEN
    ROLLBACK;
    Prm_Appcode := -1;
    Prm_Appmsg  := '错误提示:导入销售订单时出错!(request)' || SQLERRM;
    RETURN;
  WHEN OTHERS THEN
    ROLLBACK;
    Prm_Appcode := -1;
    Prm_Appmsg  := '错误提示:导入销售订单时出错!(request)' || SQLERRM;
    RETURN;
END Prc_Do_Price_Request;

取消请求

强制取消请求

UPDATE FND_CONCURRENT_REQUESTS R
   SET PHASE_CODE      = 'C',
       STATUS_CODE     = 'D',
       completion_text = user_id || ' 取消请求。'
 WHERE R.REQUESTED_BY = :user_id
   AND PHASE_CODE = 'P'
   AND STATUS_CODE IN ('I', 'Q')
   AND (nvl(request_type, 'X') != 'S')

--commit

取消代码

DECLARE

  v_request_id NUMBER;
  v_message    VARCHAR2(300);
  V_TRUE       BOOLEAN;--true 成功;false 失败
BEGIN
  fnd_global.apps_initialize(29996, 51714, 555);
  v_request_id := 3945574;
  DBMS_OUTPUT.PUT_LINE('TEST BEFORE CANCEL');
  V_TRUE := fnd_concurrent.cancel_request(Request_Id => v_request_id,
                                          Message    => v_message);
  DBMS_OUTPUT.PUT_LINE('TEST AFTER CANCEL ' || v_message);
  
  COMMIT;
EXCEPTION
  WHEN OTHERS THEN
    DBMS_OUTPUT.PUT_LINE('TEST AFTER exception');
END;

提交请求集

DECLARE
  req_id NUMBER := 0;
  vresult BOOLEAN;
 
 BEGIN
  BEGIN
    --初始化环境
    fnd_global.apps_initialize(user_id     => 8856,
                                resp_id     => 20419,
                                resp_appl_id => 0);
  END;
  --设置请求集
  vresult := fnd_submit.set_request_set('CUX', 'FNDRSSUB997');
  dbms_output.put_line('请求集设置:' || sys.diutil.bool_to_int(vresult));
  --设置请求集阶段&请求
  vresult := fnd_submit.submit_program('CUX',
                                        'CUXBPCDATACLCT',
                                        'STAGE10',
                                        '1001',
                                        '2022-01',
                                        'BAD',
                                        chr(0));
  dbms_output.put_line('第一阶段第一个请求:' || sys.diutil.bool_to_int(vresult));
  vresult := fnd_submit.submit_program('CUX',
                                        'CUXBPCDATACLCT',
                                        'STAGE10',
                                        '1001',
                                        '2022-01',
                                        'BAD',
                                        chr(0));
  dbms_output.put_line('第一阶段第二个请求:' || sys.diutil.bool_to_int(vresult));
  vresult := fnd_submit.submit_program('CUX',
                                        'CUXBPCDATACLCT',
                                        'STAGE20',
                                        '1001',
                                        '2022-01',
                                        'PPP',
                                        chr(0));
  dbms_output.put_line('第二阶段第一个请求:' || sys.diutil.bool_to_int(vresult));
 
  req_id := fnd_submit.submit_set(NULL, FALSE);
  dbms_output.put_line('req_id:' || req_id);
  if nvl(req_id ,0) >0 then
    DBMS_OUTPUT.PUT_LINE('请求集提交成功:'||req_id);
  else
    DBMS_OUTPUT.PUT_LINE('请求集提交失败!!!');
  end if ;
 
 END;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值