作者:gagaghost Email:gagaghost@gmail.com
我們提供的服務(wù)有:成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、蓮花ssl等。為成百上千企事業(yè)單位解決了網(wǎng)站和推廣的問(wèn)題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的蓮花網(wǎng)站制作公司
1.流程流轉(zhuǎn)方式:
在一個(gè)流程實(shí)例化后,流程的節(jié)點(diǎn)就會(huì)自動(dòng)進(jìn)入啟動(dòng)節(jié)點(diǎn),如果要離開啟動(dòng)節(jié)點(diǎn),必須調(diào)用signal()的方法.調(diào)用該方法后,流程會(huì)進(jìn)入后續(xù)節(jié)點(diǎn),也即進(jìn)入stateOne節(jié)點(diǎn),如果再signal()一次,執(zhí)行的指針將會(huì)指向task1,如過(guò)再signal()一次,執(zhí)行指針就會(huì)離開task1節(jié)點(diǎn),移動(dòng)到下一個(gè)節(jié)點(diǎn),而下一個(gè)節(jié)點(diǎn)正好是end節(jié)點(diǎn),流程就會(huì)終止。當(dāng)然在task的AssignmentHandle中用TaskInstance.end()方法也可以的。
特別需要說(shuō)明的是:如果Task Node上沒有任務(wù),則執(zhí)行指針就會(huì)自動(dòng)經(jīng)過(guò)該節(jié)點(diǎn)執(zhí)行到下一個(gè)節(jié)點(diǎn).如果task1上沒有任務(wù),則在stateOne上調(diào)用了signal()后,流程就會(huì)結(jié)束.
2.如何取出一個(gè)用戶的任務(wù)列表?
要取出用戶的任務(wù)列表,必須保證流程已經(jīng)持久在數(shù)據(jù)庫(kù)中了,就可以用如下的語(yǔ)句進(jìn)行提取了:
JbpmConfiguration config = JbpmConfiguration.getInstance(); JbpmContext jbpmContext = config.createJbpmContext(); TaskMgmtSession session=new TaskMgmtSession(jbpmContext.getSession()); List tasks=session.findTaskInstances("gaga"); |
3.如何把一個(gè)任務(wù)安排給用戶?
在Task node上添加Task,并添加AssignmentHandler,在
publicclass TaskAsignMentimplements AssignmentHandler { publicvoid assign(Assignable assignable, ExecutionContext executionContext) throws Exception { assignable.setActorId("gaga");// assignable就是工作項(xiàng) } } |
4.泳道(Swimlane)如何使用?
泳道就是用來(lái)描述角色的.如果你的某些工作項(xiàng)目是角色來(lái)操作的,就可以使用泳道.泳道有點(diǎn)批處理的意思,如果有多個(gè)節(jié)點(diǎn)是某個(gè)角色的用戶來(lái)完成的,就需要使用這個(gè)東西了,否則在每一個(gè)任務(wù)上設(shè)置AssignmentHandler會(huì)累死人的^_^!
5.如何將一個(gè)任務(wù)安排給用戶?
在任務(wù)上設(shè)置一個(gè)AssignmentHandler,在其execute方法中進(jìn)行設(shè)置,和在任務(wù)節(jié)點(diǎn)上設(shè)置用戶的方法一樣.只不過(guò)這里是泳道而已.
6.如何將流程和要流轉(zhuǎn)的業(yè)務(wù)系統(tǒng)中的數(shù)據(jù)結(jié)構(gòu)關(guān)聯(lián)起來(lái)?
在流程啟動(dòng)的時(shí)候,在流程中放一個(gè)變量,該變量中存放外部數(shù)據(jù)結(jié)構(gòu)的id.當(dāng)用戶得到工作列表的時(shí)候,就會(huì)取出流程實(shí)例中的id,有了id就可以在業(yè)務(wù)數(shù)據(jù)庫(kù)中取出業(yè)務(wù)數(shù)據(jù)了.
7.如何區(qū)分在一個(gè)任務(wù)列表中不同節(jié)點(diǎn)上的處理界面?
建立一個(gè)節(jié)點(diǎn)和界面對(duì)應(yīng)的表即可,用戶選定了任務(wù)后,系統(tǒng)根據(jù)用戶選定任務(wù)的節(jié)點(diǎn)的名稱或其他唯一標(biāo)識(shí)符,找出與之對(duì)應(yīng)的界面導(dǎo)航連接后,redirect到該頁(yè)面即可.
8.如何圖形化顯示當(dāng)前流程的狀態(tài)?
寫一個(gè)servlet,將圖形顯示出來(lái)就可以了,如:
public class ProcessImageServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { long processDefinitionId = Long.parseLong( request.getParameter( "definitionId" ) ); JbpmContext jbpmContext = JbpmContext.getCurrentJbpmContext(); ProcessDefinition processDefinition = jbpmContext.getGraphSession().loadProcessDefinition(processDefinitionId); byte[] bytes = processDefinition.getFileDefinition().getBytes("processimage.jpg"); OutputStream out = response.getOutputStream(); out.write(bytes); out.flush(); // leave this in.it is in case we want to set the mime type later. // get the mime type // String contentType = URLConnection.getFileNameMap().getContentTypeFor( fileName ); // set the content type (=mime type) // response.setContentType( contentType ); } } |
在創(chuàng)建數(shù)據(jù)庫(kù)表時(shí)出現(xiàn)的錯(cuò)誤
JbpmConfiguration config = JbpmConfiguration .parseResource("jbpm.cfg.xml"); config.createSchema(); config.close(); |
提示語(yǔ)法錯(cuò)誤,更新了hibernate最新版本的就可以。
hibernate-3.1.3,jbpm
9.如何向指定的分支流轉(zhuǎn)?
用TaskInstance的end方法,如下所示:
JbpmConfiguration config = JbpmConfiguration.getInstance(); JbpmContext jbpmContext = config.createJbpmContext(); TaskInstance taskInstance=jbpmContext.getTaskMgmtSession().loadTaskInstance(taskId); String offshoot="" + param.get(Constant.OFFSHOOT); //taskInstance.end(offshoot); taskInstance.end(); jbpmContext.save(taskInstance); jbpmContext.close(); |