轉(zhuǎn)帖|其它|編輯:郝浩|2011-09-26 14:03:24.000|閱讀 589 次
概述:本文主要介紹工作流如何第三方j(luò)sp表單集成,希望對大家有幫助。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
工作流系統(tǒng)集成表單的過程,其實就是一個調(diào)用流程引擎api函數(shù)的集成過程。
工作流引擎只負責(zé)抽象的流程的流轉(zhuǎn),業(yè)務(wù)模塊的實現(xiàn),是在業(yè)務(wù)表單中完成。在和工作流系統(tǒng)集成的時候,完成表單提交的同時,再調(diào)用流程引擎的api執(zhí)行流程的流轉(zhuǎn)。
通常一套業(yè)務(wù)系統(tǒng)中,業(yè)務(wù)模塊的實現(xiàn),體現(xiàn)在一套MVC的框架中,無論是struts,spring,jsf等等都是為實現(xiàn)分層管理的mvc的框架。
一個業(yè)務(wù)功能的實現(xiàn),在m,v,c這三個層面都有體現(xiàn),好的mvc框架,能通過簡單的配置來達到新增模塊,只需要實現(xiàn)v展現(xiàn)層,m層的和數(shù)據(jù)庫的交互。且需要維護的地方很少,集成度越高的框架越接近于自定義表單引擎,類似半自動化的表單系統(tǒng)。
無論用那種mvc的框架,在集成工作流系統(tǒng)的時候,流程只負責(zé)業(yè)務(wù)的流轉(zhuǎn),業(yè)務(wù)千變?nèi)f化,業(yè)務(wù)模塊的實現(xiàn)還是不可避免的要自己實現(xiàn)。
當(dāng)工作流系統(tǒng)集成自定義的表單系統(tǒng)時,自定義表單引擎也會包含一種mvc框架,達到自己的定制實現(xiàn)。只是有了表單引擎+表單設(shè)計器,能更快捷方便的實現(xiàn)業(yè)務(wù)模塊。
應(yīng)用自定義表單時,會有很多的優(yōu)勢,只需要通過可視化的編輯設(shè)置,就能完成業(yè)務(wù)模塊的實現(xiàn),達到人機交互。當(dāng)然也無需重新編譯打包,無需發(fā)布,就能直接運行了。和工作流引擎的集成也已經(jīng)做好,只需要通過可視化的功能調(diào)用,就能完成了和工作流系統(tǒng)的集成。這些集成的代碼已經(jīng)封裝好了,用戶只需可視化的設(shè)置。無需了解引擎的api功能。
工作流系統(tǒng)結(jié)合自定義表單系統(tǒng),可以開放給終端的用戶去做可視化的設(shè)計流程,定義表單,完成新增業(yè)務(wù)流程的功能。
當(dāng)流程引擎集成第三方的jsp表單時,程序員就需要調(diào)用流程引擎的api來完成流程的流轉(zhuǎn)功能。
流程引擎對外提供一系列的api,可以讀出流程定義文檔的整個定義串,得到任意節(jié)點信息。通過節(jié)點id也能獲得節(jié)點定義類對象。
下面是eworkflow工作流系統(tǒng)在集成jsp表單時的調(diào)用過程。
為了方便表述,沒有使用框架來實現(xiàn)業(yè)務(wù)模塊的提交,只在jsp頁面中嵌入java的代碼來說明如何調(diào)用流程引擎的api。
頁面表單中增加隱藏域,保存流程相關(guān)的參數(shù)。
<form id="frm" method="POST" action="leave_new_submit.jsp" onsubmit="return checkInput()">
<input type="hidden" name="wfName" value="<%=wfName%>">
<input type="hidden" name="wfVersion" value="<%=wfVersion%>">
<input type="hidden" name="wfId" value="<%=wfId%>">
<input type="hidden" name="actionId" value="<%=actionId%>">
<input type="hidden" name="leaveId" value="<%=leaveId%>">
.........
流程名稱,版本,流程實例id,動作id,業(yè)務(wù)表主鍵id
在表單提交的時候
//獲得流程參數(shù)
String wfName = request.getParameter("wfName");
String wfVersion = request.getParameter("wfVersion");
String wfId = request.getParameter("wfId");
String actionId = request.getParameter("actionId");
String dynamicId = request.getParameter("dynamicInstanceId");
//獲得業(yè)務(wù)參數(shù)
String leaveType = request.getParameter("leaveType");
String leaveDays = request.getParameter("leaveDays");
String startDate = request.getParameter("startDate");
String endDate = request.getParameter("endDate");
String applyDate = request.getParameter("applyDate");
String remark = request.getParameter("remark");
然后,再先做業(yè)務(wù)記錄的提交。
//先做業(yè)務(wù)記錄的保存
StringBuffer sql = new StringBuffer();
sql.append("insert into ex_leave_apply");
sql.append(" (LEAVE_ID");
sql.append(" ,START_DATE");
sql.append(" ,REMARK");
sql.append(" ,END_DATE");
sql.append(" ,LEAVE_DAYS");
sql.append(" ,APPLY_DATE");
sql.append(" ,LEAVE_TYPE");
sql.append(" ,APPLY_USER");
sql.append(" ,WF_ID )");
sql.append(" values ( '" + IDUtils.getEformRecNumNo(env.getCon(),"BBB") + "'");
sql.append(",'" + startDate + "'");
sql.append(",'" + remark + "'");
sql.append(",'" + endDate + "'");
sql.append("," + leaveDays);
sql.append(",'" + applyDate + "'");
sql.append(",'" + leaveType + "'");
sql.append(",'" + userid + "'");
sql.append("," + wfId );
sql.append(")");
DBUtils.go(env.getCon(),sql.toString());
再啟動流程引擎
執(zhí)行流程的api,達到流程的流轉(zhuǎn)
Workflow wf = new BasicWorkflow(userid,env);
wf.doAction(Long.parseLong(wfId), Integer.parseInt(actionId), inputs);
這樣,就完成了一個流程節(jié)點的辦理,既提交了業(yè)務(wù)數(shù)據(jù),又執(zhí)行了流程的流轉(zhuǎn)。
在流程設(shè)計器中,節(jié)點上掛接jsp表單:
在流程實例運行時,執(zhí)行到此節(jié)點,既打開掛接的jsp表單。
點擊提交后,執(zhí)行上面的代碼過程,達到業(yè)務(wù)記錄的提交,又調(diào)用流程引擎的api達到流程的流轉(zhuǎn)。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:網(wǎng)絡(luò)轉(zhuǎn)載