问题的产生:
1、缺少了一些字段内容, 例如:订单头录入时缺少了收货地点,销售员,销售业绩等,导致订单行中缺少相关内容。有时虽然回到订单头补充了相关内容,但行的内容是没有变化的,因此同样检查订单行中是否有同样的内容;
2、如果在订单头中忘记了销售员,会导致销售业绩没有,需要人工去维护。
3、有时维护了所有内容,但仍然无法登记,是因为工作流的已进入登记订单(BOOK_ORDER)这一环节过程中,但工作流步骤的目前状态为空不正确系统不能自动返回到登记合格(BOOK_Eligible)这环节去的,这时需要工作流管理员(sysadmin登录)进行维护,具体是:
1)工作流管理员->状态监控程序
输入项目关键字(header_id) 和 工作流责任人 找到工作流,在“活动历史”页签,点进去[登记订单:人工],点到[登记-合格],点加速(expedite)钮,retry 后,再看status 页,确认现在的状态 是已通知 (NOTIFIED),
2) 然后操作员可以回到在form 界面中点[登记订单],然后一般可以登记成功.
(注:如果打开了订单工具栏中的调试选项,则可以查看/tmp下的产生的dbg文件,查看执行的调试log信息。调试是检查错误的好办法)
请参考过程oe_order_book_util.Complete_Book_Eligible, 仔细研读;
/*--CURSOR book_eligible IS
SELECT 'Y'
FROM WF_ITEM_ACTIVITY_STATUSES WIAS
, WF_PROCESS_ACTIVITIES WPA
WHERE WIAS.item_type = 'OEOH'
AND WIAS.item_key = &l_itemkey -- 订单头ID
AND WIAS.activity_status = 'NOTIFIED'
AND WPA.activity_name = 'BOOK_ELIGIBLE'
AND WPA.instance_id = WIAS.process_activity
找到记录则可以点登记订单,如找不到则可能已完成或状态不正确
*/
检查工作流发现当数据不完全情况下点登记按钮BOOK_ORDER活动环节的状态结果代码是空值,本应该返回结果代码是‘INCOMPLETE’,造成不能自已返回上一环节, 经研究工作流资料后,编写了一段PLSQL代码,可通过执行该过程来调动工作流返回到登记合格这个环节。返回后在订单录入界面重新进行登记就没有问题。
代码如下:(以后可以把这段代码放在客户化的订单录入FORM中去)
create or replace procedure MIPENG_OEOHBOOK_FIX(P_HEADER_ID in number) is
sts varchar2(100);
res varchar2(100);
p_item_key varchar2(50);
l_activity_id number; -- 活动ID
begin
/*当订单登记缺少信息时往往出现不适合登记提示,原因是工作流活动已经走到登记这个活动,但状态结果是空值
设置该活动为未完成可以回到上一步等待登记活动的状态*/
--1 找到订单登记的活动ID
P_item_key := to_char(P_HEADER_ID);
begin
select wpa.instance_id into l_activity_id
from wf_item_activity_statuses s,wf_process_activities wpa
where s.process_activity=wpa.instance_id and s.item_type = 'OEOH'
and s.item_key = p_item_key and wpa.activity_name = 'BOOK_ORDER';
exception
when others then
return ;
end;
-- 2 完成该活动以结果代码'INCOMPLETE',使活动转到上一步
wf_item_activity_status.result('OEOH',P_item_key,l_activity_id,sts,res);
if sts='COMPLETE' and res is null then -- 如活动完成且结果代码为空
wf_engine_util.complete_activity('OEOH',P_item_key,l_activity_id,'INCOMPLETE');
end if;
commit;
end MIPENG_OEOHBOOK_FIX;