[b]工作流(系统)主要概念[/b]
工作流引擎:工作流的核心组件,对流程实例、任务实例以及其状态进行管理
流程定义:预先定义的业务流转逻辑
流程实例:业务的一次实际流转过程
参与者:任务的执行者
活动(任务):组成流程定义的节点
活动实例:组成流程实例的元素
流转:从一个节点到另一个节点这一行为
工作列表:当前需要办理的任务集合
[b]开发步骤[/b]
1)根据实际应用场景创建流程文件;
即编写*.jpdl.xml文件
2)部署流程文件或流程资源到系统中;
3)执行流程(使用指定的流程定义);
3.1)启动流程实例
3.2)获取任务
3.3)开始任务
3.4)结束任务
3.1到3.4是办理一个任务的过程,流程的执行就是启动流程实例+一次次办理任务的过程。
[b]流程在实际应用场景中的一些操作[/b]
一.流程的定义管理
流程定义的发布、查询、删除、暂停、恢复
二.流程实例管理
流程实例的启动、显示流程图、执行、暂停、恢复
三.任务管理
分配任务、收回任务、定时任务、任务与表单绑定
四.流程的历史查询
任务的历史、流程实例历史、活动历史
---下面开始进行代码描述------
在详细描述之前,我们先来了解一下流程引擎ProcessEngine
[quote]One ProcessEngine object can be used by all requests and threads in an application. Here's how you can obtain a ProcessEngine[/quote]
我把这个交给spring去管理
我们需要的一些服务都是通过流程引擎得到的
[b]一.流程的定义管理[/b]
1.1流程定义的发布(即部署流程文件或流程资源到系统中)
流程定义*.jpdl.xml的内容可以从文件, 网址,字符串,输入流或zip输入流中获得
在测试的时候
在我们实际应用中,addResourceFromInputStream和addResourcesFromZipInputStream运用较多。
[b]二、流程实例管理[/b]
2.1流程实例启动
启动方法参看org.jbpm.api.ExecutionService。
启动一个新的流程实例的最简单最常用的方法:
test即test.jpdl.xml中process name。
有的时候,我们在刚启动实例的时候就需要加一个变量进去。
我们假设在填写请假单之前需要传入一个applyName参数进去
我们可以这样来实现
工作流引擎:工作流的核心组件,对流程实例、任务实例以及其状态进行管理
流程定义:预先定义的业务流转逻辑
流程实例:业务的一次实际流转过程
参与者:任务的执行者
活动(任务):组成流程定义的节点
活动实例:组成流程实例的元素
流转:从一个节点到另一个节点这一行为
工作列表:当前需要办理的任务集合
[b]开发步骤[/b]
1)根据实际应用场景创建流程文件;
即编写*.jpdl.xml文件
2)部署流程文件或流程资源到系统中;
3)执行流程(使用指定的流程定义);
3.1)启动流程实例
3.2)获取任务
3.3)开始任务
3.4)结束任务
3.1到3.4是办理一个任务的过程,流程的执行就是启动流程实例+一次次办理任务的过程。
[b]流程在实际应用场景中的一些操作[/b]
一.流程的定义管理
流程定义的发布、查询、删除、暂停、恢复
二.流程实例管理
流程实例的启动、显示流程图、执行、暂停、恢复
三.任务管理
分配任务、收回任务、定时任务、任务与表单绑定
四.流程的历史查询
任务的历史、流程实例历史、活动历史
---下面开始进行代码描述------
在详细描述之前,我们先来了解一下流程引擎ProcessEngine
[quote]One ProcessEngine object can be used by all requests and threads in an application. Here's how you can obtain a ProcessEngine[/quote]
我把这个交给spring去管理
<bean id="springHelper" class="org.jbpm.pvm.internal.processengine.SpringHelper" />
<bean id="processEngine" factory-bean="springHelper" factory-method="createProcessEngine" />
我们需要的一些服务都是通过流程引擎得到的
RepositoryService repositoryService = processEngine.getRepositoryService();
ExecutionService executionService = processEngine.getExecutionService();
TaskService taskService = processEngine.getTaskService();
HistoryService historyService = processEngine.getHistoryService();
ManagementService managementService = processEngine.getManagementService();
[b]一.流程的定义管理[/b]
1.1流程定义的发布(即部署流程文件或流程资源到系统中)
流程定义*.jpdl.xml的内容可以从文件, 网址,字符串,输入流或zip输入流中获得
public interface NewDeployment extends Deployment {
...
/** adds a resource as a string */
NewDeployment addResourceFromString(String resourceName, String string);
/** adds a resource as a string */
NewDeployment addResourceFromInputStream(String resourceName, InputStream inputStream);
/** adds a resource as a resource from the classpath */
NewDeployment addResourceFromClasspath(String resourceName);
/** adds a resource as a url */
NewDeployment addResourceFromUrl(URL url);
/** adds a resource as a zip stream */
NewDeployment addResourcesFromZipInputStream(ZipInputStream zipInputStream);
/** adds a resource from a file */
NewDeployment addResourceFromFile(File file);
...
}
在测试的时候
ProcessEngine processEngine = new Configuration().buildProcessEngine();
RepositoryService repositoryService = processEngine.getRepositoryService();
//布署当前目录下test.jpdl.xml文件
String deploymentId = repositoryService.createDeployment()
.addResourceFromClasspath("test.jpdl.xml").deploy();
在我们实际应用中,addResourceFromInputStream和addResourcesFromZipInputStream运用较多。
[b]二、流程实例管理[/b]
2.1流程实例启动
启动方法参看org.jbpm.api.ExecutionService。
启动一个新的流程实例的最简单最常用的方法:
ProcessInstance processInstance = executionService.startProcessInstanceByKey("test");
test即test.jpdl.xml中process name。
有的时候,我们在刚启动实例的时候就需要加一个变量进去。
我们假设在填写请假单之前需要传入一个applyName参数进去
...
<process name="leave" xmlns="http://jbpm.org/4.3/jpdl">
<start g="67,6,48,48" name="开始">
<transition g="-30,-10" name="请假" to="填写请假单"/>
</start>
<task assignee="#{applyName}" g="45,102,92,52" name="填写请假单">
<transition g="591,124:-127,-18" name="提交申请" to="主管审核"/>
</task>
...
我们可以这样来实现
Map<String, Object> variables = new HashMap<String, Object>();
variables.put("applyName", "dyaln");
ExecutionService executionService = processEngine.getExecutionService();
ProcessInstance processInstance = executionService.startProcessInstanceByKey("leave",variables);