1、启用workflow
wf_engine.startprocess(itemtype => l_item_type, itemkey => l_item_key);
internal name:就是itemtype itemkey是自己随意取的,一般都是有流水码,防止重复
itemkey一般要记录下来,因为以后我们要对此 workflow修改的时候需要用到此itemkey
2、取消wf
wf_engine.abortprocess(itemtype => 'JW_SHIP', itemkey => l_item_key);
用的也是itemtype and itemkey,如果此wf已经取消或其他,再次取消会报错,
所以我们取消前最好有一个判断select * from wf_items,此表中会记录此itemtype,itemkey的结束时间
如果结束时间有了我们就不需要再去取消了
3、推动wf
wf_engine.completeactivity(itemtype => 'JW_SHIP',
itemkey => v_attribute3,
activity => 'JW_OM_PROCESS:JW_OM_NOTIFICATIONS',
RESULT => 'APPROVE');
wf_engine.completeactivity(itemtype => 'JW_SHIP',------审批拒绝
itemkey => v_attribute3,
activity => 'JW_OM_PROCESS:JW_OM_NOTIFICATIONS',
RESULT => 'REJECT');
同样,用的还是itemtype,itemkey,activity:
冒号后面是此notifications的internal name,result 是此通知的result code
这样我们就相当于在审核的时候点了那个按钮一样,用代码实现。
4、functions返回值问题
在wf中调用一个function时如果直接向下走我们结尾用
resultout := 'COMPLETE';说明完成了
但是如果一个函数的result type :Yes/No
就是说一个function调用完成后可能因为不同的结果走向不同
我们就要用
resultout := wf_engine.eng_completed || ':' || 'Y' ;
resultout := wf_engine.eng_completed || ':' || 'N' ;去判断走向
5、wf or 和and的功能
这个我们字面看意思就知道or就是有一个条件满足就继续走,and就是所有条件满足才继续走
应该很明了:or就是要么审批了,要么确认了,只要有一个满足此单就结束
and就是要两个同时满足此单才会结束
eg:wf的一些标准function:or and我们需要从standard.wft中拖过来使用,完整的代码可参考我之前的记录