最近公司做的一個(gè)項(xiàng)目要實(shí)現(xiàn)工作流程的收回,駁回等操作,而采用的工作流引擎并不支持駁回功能,這個(gè)項(xiàng)目恰好就我和一個(gè)實(shí)習(xí)生一塊做,所以這個(gè)問題就落到我的頭上來解決了。。。
客戶提出的要求是駁回時(shí)要記錄日志,但是審批意見之類的需要清除掉,收回時(shí)不記錄日志,審批意見同樣清除。
百度了一下,總結(jié)了5個(gè)解決方案:
第一種是清除當(dāng)前任務(wù)的出口,實(shí)現(xiàn)回到上一步的功能。
根據(jù)任務(wù)ID獲取當(dāng)前的任務(wù)節(jié)點(diǎn),進(jìn)而獲取流程實(shí)例,然后取到流程的定義,找到當(dāng)前活動的節(jié)點(diǎn)與上一步活動的節(jié)點(diǎn),然后清除當(dāng)前活動的出口,將上一步活動的出口作為最新的活動節(jié)點(diǎn)。
第二種是直接將當(dāng)前的activiti引擎更換為第三方的支持退會駁回的引擎。
第三種是自己編譯activiti引擎,加入退回,駁回功能。
第四種是直接操作數(shù)據(jù)庫,使用歷史任務(wù)替換正在進(jìn)行的任務(wù)。
第五種是直接實(shí)現(xiàn)Command接口,實(shí)現(xiàn)工作流程可以任意跳轉(zhuǎn)。
因?yàn)闀r(shí)間緊急所以直接將3.編譯activiti引擎給pass掉了,本來項(xiàng)目是接手的離職員工的項(xiàng)目,更換流程引擎可能會引起其他的問題,此計(jì)劃暫放。