您的位置:首页 > 其它

任务单案例一

2015-08-13 11:21 281 查看
转自:http://blog.csdn.net/samt007/article/details/8569824

这个程序,根据输入的参数可以自动处理WIP_MOVE_TXN_INTERFACE表。

虽然一般都是排一个“WIP 移动事务处理管理器”定期处理,但是个人认为这样子处理还是有一定的滞后性。用户想操作完毕立刻看到效果,但是老要等上几分钟。

所以专门开发了这个自动处理的程序。也是蛮实用。

逻辑也很简单,就是自动提交一个“WIP 移动事务处理工作流程”处理对应GROUP_ID的数据。

代码也共享出来:

-----------------------------

--处理接口表,可选处理方式

-----------------------------

PROCEDURE PROCESS_MOVE_TXN_INTERFACE(

P_PROCESS_TYPE VARCHAR2 ---处理方式,目前只有 提交请求 SUBMIT_REQUEST 希望以后有 立刻过账 PROCESS_ONLINE

,P_GROUP_ID NUMBER ---处理的组ID

,x_REQUEST_ID OUT NUMBER --输出的请求ID

,x_retcode OUT NUMBER ---0:成功 非0:失败( 或者:0:成功 1:警告 2:错误 ----注意:确定警告的时候要做什么动作)

,x_errbuf OUT VARCHAR2 ---具体的错误信息

)

IS

L_PROCESS_PHASE NUMBER; --标识程序的进度

---

L_REQUEST_ID NUMBER;

---

BEGIN

x_retcode := 0;

x_errbuf := Null;

L_PROCESS_PHASE := 0;

---首先的第一步是:检查不可以为空的参数

IF P_PROCESS_TYPE IS NULL OR P_GROUP_ID IS NULL

THEN

x_errbuf := '调用PROCESS_MOVE_TXN_INTERFACE的时候,必要的参数不存在,请检查参数!';

x_retcode := 2;

RETURN;

END IF;

L_PROCESS_PHASE := 1;

------------Start------------

IF P_PROCESS_TYPE = 'SUBMIT_REQUEST' THEN

---自动提交过账的请求

---WIP 移动事务处理工作流程

-----WIP Move Transaction Worker

L_REQUEST_ID :=

FND_REQUEST.SUBMIT_REQUEST( 'WIP', -- application

'WICTWS', -- program

NULL,

NULL, -- start_time (optional)

FALSE, -- sub_request

to_char(P_GROUP_ID), -- Group id to process

'1', -- 貌似都给1,不知道什么情况下给2,需要验证!

'2400', -- 貌似都给2400

'1', -- 貌似都给1

chr(0)

);

L_PROCESS_PHASE := 2;

dbms_output.PUT_LINE('自动产生的请求ID:'||L_REQUEST_ID);

IF L_REQUEST_ID = 0 THEN

x_errbuf := '自动提交请求失败!';

x_retcode := 2;

RETURN;

ELSE

x_errbuf := x_errbuf||'自动提交请求成功!请求ID:'||L_REQUEST_ID;

END IF;

x_REQUEST_ID := L_REQUEST_ID;

L_PROCESS_PHASE := 3;

ELSIF P_PROCESS_TYPE = 'PROCESS_ONLINE' THEN

x_errbuf := '目前程序不支持处理方式:('||P_PROCESS_TYPE||')!请检查参数!';

x_retcode := 2;

RETURN;

L_PROCESS_PHASE := 5;

ELSE

x_errbuf := '参数P_PROCESS_TYPE('||P_PROCESS_TYPE||')无效,请检查参数!';

x_retcode := 2;

RETURN;

END IF;

------------End--------------

L_PROCESS_PHASE := 6;

EXCEPTION

WHEN OTHERS

THEN

x_retcode := 2;

x_errbuf :=

'P_PROCESS_TYPE:'

|| P_PROCESS_TYPE

|| ' P_GROUP_ID:'

|| P_GROUP_ID

|| ' 产生移动事务处理的时候有异常错误!'

|| CHR(10)

|| '错误信息:'

|| TO_CHAR(SQLCODE)

|| '-'

|| SQLERRM

|| CHR(10)

|| '程序进度:'

|| L_PROCESS_PHASE;

----可以适当编写:如果错误,另外还需要处理的SQL

---因为如果前面有做UPDATE/INSERT/DELETE动作,虽然是跳到异常,但是,这动作不会自动回滚的!

END;

--------------------------测试部分:

DECLARE

L_RETCODE NUMBER;

L_ERRBUF VARCHAR2(4000);

---

L_GROUP_ID NUMBER;

L_REQUEST_ID NUMBER;

---

BEGIN

fnd_client_info.set_org_context(104);

fnd_global.APPS_Initialize( user_id=>5954, resp_id=>52054, resp_appl_id =>20003);

L_GROUP_ID := 9999;

---立刻过账

XYG_PUB_WIP_PKG.PROCESS_MOVE_TXN_INTERFACE('SUBMIT_REQUEST',L_GROUP_ID,L_REQUEST_ID,L_RETCODE,L_ERRBUF);

dbms_output.PUT_LINE(L_RETCODE || '-' || L_ERRBUF);

IF L_RETCODE = 0 THEN

dbms_output.PUT_LINE('成功产生请求ID:' || L_REQUEST_ID);

COMMIT;

ELSE

dbms_output.PUT_LINE('过账有异常问题发生!'||L_ERRBUF);

ROLLBACK;

END IF;

END;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: