jBPM4.3简单深入理解(一)

工作流(系统)主要概念
工作流引擎:工作流的核心组件,对流程实例、任务实例以及其状态进行管理
流程定义:预先定义的业务流转逻辑
流程实例:业务的一次实际流转过程
参与者:任务的执行者
活动(任务):组成流程定义的节点
活动实例:组成流程实例的元素
流转:从一个节点到另一个节点这一行为
工作列表:当前需要办理的任务集合

开发步骤
1)根据实际应用场景创建流程文件;
   即编写*.jpdl.xml文件
2)部署流程文件或流程资源到系统中;
3)执行流程(使用指定的流程定义);
   3.1)启动流程实例
   3.2)获取任务
   3.3)开始任务
   3.4)结束任务
3.1到3.4是办理一个任务的过程,流程的执行就是启动流程实例+一次次办理任务的过程。

流程在实际应用场景中的一些操作
一.流程的定义管理
流程定义的发布、查询、删除、暂停、恢复
二.流程实例管理
流程实例的启动、显示流程图、执行、暂停、恢复
三.任务管理
分配任务、收回任务、定时任务、任务与表单绑定
四.流程的历史查询
任务的历史、流程实例历史、活动历史

---下面开始进行代码描述------
在详细描述之前,我们先来了解一下流程引擎ProcessEngine
引用
     One ProcessEngine object can be used by all requests and threads in an application. Here's how you can obtain a ProcessEngine把这个交给spring去管理
Java代码
    <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();

一.流程的定义管理
1.1流程定义的发布(即部署流程文件或流程资源到系统中)
流程定义*.jpdl.xml的内容可以从文件, 网址,字符串,输入流或zip输入流中获得

Org.jbpm.api.newdeployment代码

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);
...
}

在测试的时候

Java代码
ProcessEngine processEngine = new Configuration().buildProcessEngine();
RepositoryService repositoryService = processEngine.getRepositoryService();
 
//布署当前目录下test.jpdl.xml文件
String deploymentId = repositoryService.createDeployment().addResourceFromClasspath("test.jpdl.xml").deploy();
在我们实际应用中,addResourceFromInputStream和addResourcesFromZipInputStream运用较多。

二、流程实例管理
2.1流程实例启动
启动方法参看org.jbpm.api.ExecutionService。
启动一个新的流程实例的最简单最常用的方法:
Java代码
ProcessInstance processInstance = executionService.startProcessInstanceByKey("test");
test即test.jpdl.xml中process name。
有的时候,我们在刚启动实例的时候就需要加一个变量进去。
我们假设在填写请假单之前需要传入一个applyName参数进去
Leave.jpdl.xml部分文件代码
...
<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>
我们可以这样来实现
Java代码
Map<String, Object> variables = new HashMap<String, Object>();
variables.put("applyName", "dyaln");
ExecutionService executionService = processEngine.getExecutionService();
ProcessInstance processInstance = executionService.startProcessInstanceByKey("leave",variables);
原文地址
http://alimama.iteye.com/blog/579353#bc2267260
 

你可能感兴趣的:(jBPM4.3简单深入理解(一))