作者:gagaghost Email:gagaghost@gmail.com
創(chuàng)新互聯(lián)主營和平網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,APP應(yīng)用開發(fā),和平h5成都微信小程序搭建,和平網(wǎng)站營銷推廣歡迎和平等地區(qū)企業(yè)咨詢1.流程流轉(zhuǎn)方式:
在一個流程實例化后,流程的節(jié)點就會自動進入啟動節(jié)點,如果要離開啟動節(jié)點,必須調(diào)用signal()的方法.調(diào)用該方法后,流程會進入后續(xù)節(jié)點,也即進入stateOne節(jié)點,如果再signal()一次,執(zhí)行的指針將會指向task1,如過再signal()一次,執(zhí)行指針就會離開task1節(jié)點,移動到下一個節(jié)點,而下一個節(jié)點正好是end節(jié)點, 流程就會終止。當然在task的AssignmentHandle中用TaskInstance.end()方法也可以的。
特別需要說明的是:如果Task Node上沒有任務(wù),則執(zhí)行指針就會自動經(jīng)過該節(jié)點執(zhí)行到下一個節(jié)點.如果task1上沒有任務(wù),則在stateOne上調(diào)用了signal()后,流程就會結(jié)束.
2.如何取出一個用戶的任務(wù)列表?
要取出用戶的任務(wù)列表,必須保證流程已經(jīng)持久在數(shù)據(jù)庫中了,就可以用如下的語句進行提取了:
JbpmConfiguration config = JbpmConfiguration.getInstance(); JbpmContext jbpmContext = config.createJbpmContext(); TaskMgmtSession session=new TaskMgmtSession(jbpmContext.getSession()); List tasks=session.findTaskInstances("gaga"); |
3.如何把一個任務(wù)安排給用戶?
在Task node上添加Task,并添加AssignmentHandler,在
public class TaskAsignMent implements AssignmentHandler { public void assign(Assignable assignable, ExecutionContext executionContext) throws Exception { assignable.setActorId("gaga");// assignable就是工作項 } } |
4.泳道(Swimlane)如何使用?
泳道就是用來描述角色的.如果你的某些工作項目是角色來操作的,就可以使用泳道.泳道有點批處理的意思,如果有多個節(jié)點是某個角色的用戶來完成的,就需要使用這個東西了,否則在每一個任務(wù)上設(shè)置AssignmentHandler會累死人的^_^!
5.如何將一個任務(wù)安排給用戶?
在任務(wù)上設(shè)置一個AssignmentHandler,在其execute方法中進行設(shè)置,和在任務(wù)節(jié)點上設(shè)置用戶的方法一樣.只不過這里是泳道而已.
6.如何將流程和要流轉(zhuǎn)的業(yè)務(wù)系統(tǒng)中的數(shù)據(jù)結(jié)構(gòu)關(guān)聯(lián)起來?
在流程啟動的時候,在流程中放一個變量,該變量中存放外部數(shù)據(jù)結(jié)構(gòu)的id.當用戶得到工作列表的時候,就會取出流程實例中的id,有了id就可以在業(yè)務(wù)數(shù)據(jù)庫中取出業(yè)務(wù)數(shù)據(jù)了.
7.如何區(qū)分在一個任務(wù)列表中不同節(jié)點上的處理界面?
建立一個節(jié)點和界面對應(yīng)的表即可,用戶選定了任務(wù)后,系統(tǒng)根據(jù)用戶選定任務(wù)的節(jié)點的名稱或其他唯一標識符,找出與之對應(yīng)的界面導(dǎo)航連接后,redirect到該頁面即可.
8.如何圖形化顯示當前流程的狀態(tài)?
寫一個servlet,將圖形顯示出來就可以了,如:
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ù)庫表時出現(xiàn)的錯誤
JbpmConfiguration config = JbpmConfiguration .parseResource("jbpm.cfg.xml"); config.createSchema(); config.close(); |
提示語法錯誤,更新了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(); |