jpbm4入门实践之web请假流程。
jbpm4在平时使用中需要用的概念大体总结如下:
1、工作流的发布和删除
processEngine:流程引擎,直接通过Configuration.getProcessEngine()获得,是一个静态的方法。
repositoryService:管理流程定义,部署流程的一个类,通过processEngine.getRepositoryService()获得,
可以通过repositoryService.createDeployment().addResourceFromClasspath("leave.jpdl.xml").deploy()来直接部署一个jpdl的流程定义文件。
可以通过repositoryService.createDeployment().addResourcesFromZipInputStream(zis),将一个压缩包的流进行部署。
可以通过createProcessDefinitionQuery().list()来查询当前已经加载的流程定义列表。
可以通过createDeploymentQuery().list()来查询已经部署的流程列表。
可以通过deleteDeployment()或者deleteDeploymentCascade()来删除已经部署的流程,带Cascade的函数会级联删除流程下的子流程。
在请假流程项目中的应用代码如下:
[java]
ProcessEngine processEngine = Configuration.getProcessEngine();
<span style="white-space:pre"> </span>RepositoryService repositoryService = processEngine
<span style="white-space:pre"> </span>.getRepositoryService();
<span style="white-space:pre"> </span>//repositoryService.createDeployment().addResourceFromClasspath("leave.jpdl.xml").deploy();
<span style="white-space:pre"> </span>ZipInputStream zis = new ZipInputStream(this.getClass()
<span style="white-space:pre"> </span>.getResourceAsStream("/leave.zip"));
<span style="white-space:pre"> </span>repositoryService.createDeployment()
<span style="white-space:pre"> </span>.addResourcesFromZipInputStream(zis).deploy();
ProcessEngine processEngine = Configuration.getProcessEngine();
<span style="white-space:pre"> </span>RepositoryService repositoryService = processEngine
<span style="white-space:pre"> </span>.getRepositoryService();
<span style="white-space:pre"> </span>//repositoryService.createDeployment().addResourceFromClasspath("leave.jpdl.xml").deploy();
<span style="white-space:pre"> </span>ZipInputStream zis = new ZipInputStream(this.getClass()
<span style="white-space:pre"> </span>.getResourceAsStream("/leave.zip"));
<span style="white-space:pre"> </span>repositoryService.createDeployment()
<span style="white-space:pre"> </span>.addResourcesFromZipInputStream(zis).deploy();解释一下:这里加载的leave.zip是指 编译完成leave.jpdl.xml之后生成了相应的leave.png时候将这两个文件打包之后的zip,至于这样部署的目的是能够通过里面打包的lave.png文件获得对应的流程图,一边在项目后面查看当前流程所处进度时候使用。
2、流程实例的启动、删除、查看进度。
ExecutionService:通过processEngine.getExecutionService(),这个类是负责管理流程运行相关事宜的,
可以通过startProcessInstanceById()来启动一个流程,这个id是通过部署时createProcessDefinitionQuery().list()来获得。
可以通过endProcessInstance来结束一个流程实例,结束之后查看该流程实例的流程图会显示结束状态。
可以通过deleteProcessInstance和deleteProcessInstanceCascade,删除一个流程实例,删除操作的历史记录会jbpm数据库里面可以查看到。
可以通过executionService.createProcessInstanceQuery().list()来获得一个流程实例的list
ProcessInstance:可以通过上面的查询获得,
可以通过getId()获得流程实例的id
可以通过findActiveActivityNames()来获得当前处于激活状态的节点,返回的是一个set集合,因为一个流程可能需要同时需要三个或任意个节点的全部通过才会继续想下走。
可以通过getState()获得当前流程节点的一个状态
STATE_ACTIVE_ROOT:表示在流程图中处于一个“单线(非并发)”的流程节点。
STATE_ACTIVE_CONCURRENT:表示在流程图中处于一个并发的流程节点。
STATE_INACTIVE_CONCURRENT_ROOT:表示在流程图中,当前节点是并发节点的父节点。
STATE_INACTIVE_SCOPE:表示在流程图中,当前节点是一个域流向的父节点(这句话翻译的有点生硬,我也不是很理解,原文是:parent of a scoped execution)。
STATE_INACTIVE_JOIN:表示当前节点会在其他并发节点到达前一直等待。
STATE_SUSPENDED:表示当前节点临时挂起。
STATE_ASYNC:表示当前流程正在执行一个异步的延续,意思就是当前节点已经脱离主流程正在完成一个独立的任务。STATE_ENDED:流程结束。
在请假流程项目中的应用代码如下:
[java]
//启动
//启动
[java]
ProcessEngine processEngine = Configuration.getProcessEngine();
ExecutionService executionService = processEngine
.getExecutionService();
Map map = new HashMap();
map.put("owner", session.getAttribute("username"));
executionService.startProcessInstanceById(request
.getParameter("id"), map);
ProcessEngine processEngine = Configuration.getProcessEngine();
ExecutionService executionService = processEngine
.getExecutionService();
Map map = new HashMap();
map.put("owner", session.getAttribute("username"));
executionService.startProcessInstanceById(request
.getParameter("id"), map);[java] view plaincopyprint?
//删除
//删除
[java]
ProcessEngine processEngine = Configuration.getProcessEngine();
<span style="white-space:pre"> </span>RepositoryService repositoryService = processEngine.getRepositoryService();
<span style="white-space:pre"> </span>repositoryService.deleteDeploymentCascade(request.getParameter("id"));
ProcessEngine processEngine = Configuration.getProcessEngine();
<span style="white-space:pre"> </span>RepositoryService repositoryService = processEngine.getRepositoryService();
<span style="white-space:pre"> </span>repositoryService.deleteDeploymentCascade(request.getParameter("id"));
[java]
//查看流程进度
//查看流程进度
[java]
1.显示整张流程图
1.显示整张流程图[java] view plaincopyprint?
<img src="pic.jsp?id=<%=id %>" style="position:absolute;left:0px;top:0px;">
<img src="pic.jsp?id=<%=id %>" style="position:absolute;left:0px;top:0px;">
[java] view plaincopyprint?
//pic.jsp中的内容。就是将lave。png输出到页面
//pic.jsp中的内容。就是将lave。png输出到页面[java] view plaincopyprint?
ProcessEngine processEngine = Configuration.getProcessEngine();
<span style="white-space:pre"> </span>RepositoryService repositoryService = processEngine
<span style="white-space:pre"> </span>.getRepositoryService();
<span style="white-space:pre"> </span>ExecutionService exec
补充:Web开发 , 其他 ,