目录
参考
Extend Oracle ERP to Preview Report Output and enable Email - Simple Talk
提交请求
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;