作者:gagaghost Email:gagaghost@gmail.com
流程流转方式:
在一个流程实例化后,流程的节点就会自动进入启动节点,如果要离开启动节点,必须调用signal()的方法.调用该方法后,流程会进入后续节点,也即进入stateOne节点,如果再signal()一次,执行的指针将会指向task1,如过再signal()一次,执行指针就会离开task1节点,移动到下一个节点,而下一个节点正好是end节点, 流程就会终止。当然在task的AssignmentHandle中用TaskInstance.end()方法也可以的。
特别需要说明的是:如果Task Node上没有任务,则执行指针就会自动经过该节点执行到下一个节点.如果task1上没有任务,则在stateOne上调用了signal()后,流程就会结束.
如何取出一个用户的任务列表?
要取出用户的任务列表,必须保证流程已经持久在数据库中了,就可以用如下的语句进行提取了:
JbpmConfiguration config = JbpmConfiguration.getInstance(); JbpmContext jbpmContext = config.createJbpmContext(); TaskMgmtSession session=new TaskMgmtSession(jbpmContext.getSession()); List tasks=session.findTaskInstances("gaga"); |
如何把一个任务安排给用户?
在Task node上添加Task,并添加AssignmentHandler,在
public class TaskAsignMent implements AssignmentHandler { public void assign(Assignable assignable, ExecutionContext executionContext) throws Exception { assignable.setActorId("gaga");// assignable就是工作项 } } |
泳道(Swimlane)如何使用?
泳道就是用来描述角色的.如果你的某些工作项目是角色来操作的,就可以使用泳道.泳道有点批处理的意思,如果有多个节点是某个角色的用户来完成的,就需要使用这个东西了,否则在每一个任务上设置AssignmentHandler会累死人的^_^!
如何将一个任务安排给用户?
在任务上设置一个AssignmentHandler,在其execute方法中进行设置,和在任务节点上设置用户的方法一样.只不过这里是泳道而已.
如何将流程和要流转的业务系统中的数据结构关联起来?
在流程启动的时候,在流程中放一个变量,该变量中存放外部数据结构的id.当用户得到工作列表的时候,就会取出流程实例中的id,有了id就可以在业务数据库中取出业务数据了.
如何区分在一个任务列表中不同节点上的处理界面?
建立一个节点和界面对应的表即可,用户选定了任务后,系统根据用户选定任务的节点的名称或其他唯一标识符,找出与之对应的界面导航连接后,redirect到该页面即可.
如何图形化显示当前流程的状态?
写一个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 ); } } |
在创建数据库表时出现的错误
JbpmConfiguration config = JbpmConfiguration .parseResource("jbpm.cfg.xml"); config.createSchema(); config.close(); |
提示语法错误,更新了hibernate最新版本的就可以。
hibernate-3.1.3,jbpm
如何向指定的分支流转?
用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(); |