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