1. 发布流程模板
当我们通过流程编辑器编辑好了流程之后就可以将这个流程模板发布到数据库中。我觉得定义一个流程模板更像是定义一个Java Class类,发布一个流程模板就好像是编译这个类成为class,而流程实例就好像是一个Java类的一个实例对象。
最常用的是用Java代码的方式发布流程~~~还有一个是利用Ant脚本发布流程,不过一般在开发阶段十分少用。
// 加载默认的jbpm.cfg.xml文件 ProcessEngine processEngine = new Configuration().buildProcessEngine();
/** * 发布流程 */ public void test01Deploy() {
String deployId = repositoryService.createDeployment() .addResourceFromClasspath("decision.jpdl.xml").deploy();
System.out.println(deployId); } |
这样就把流程模板为decision的流程发布到了数据库中,发布成功后,jbpm相关表会变化如下:
jbpm4_deployment
jbpm4_deployprop
jbpm4_lob
jbpm4_property
比较重要的几个服务接口,其他服务接口都是从主接口——引擎服务接口ProcessEngine获得的。
// 引擎服务接口 ProcessEngine processEngine = new Configuration().buildProcessEngine();
// 资源服务,流程模板的部署、查询、删除 RepositoryService repositoryService = processEngine.getRepositoryService();
// 执行服务,设置流程实例的发起、执行 ExecutionService executionService = processEngine.getExecutionService();
// 流程管理接口、异步工作相关执行 ManagementService managementService = processEngine.getManagementService();
// 人工任务服务接口,对任务task的查询、提交、删除、保存 TaskService taskService = processEngine.getTaskService();
// 历史记录操作接口 HistoryService historyService = processEngine.getHistoryService();
// 身份验证服务 IdentityService identityService = processEngine.getIdentityService(); |
1. 根据流程模板发起一个流程实例
定义好了模板后,就可以建立此流程模板的实例对象了,实例对象就是现实中一个个真正的流程事件了。
1. 直接发起StateChoice流程实例
// 开始process流程 ProcessInstance processInstance = executionService.startProcessInstanceByKey("StateChoice"); |
2. 发起流程时加入流程实例变量
HashMap<String, Object> parm = new HashMap<String, Object>(); parm.put("MyId", "13000000000"); parm.put("MyName", "liuyan"); parm.put("MyDate", new Date());
ProcessInstance processInstance = executionService.startProcessInstanceById("StateChoice -1", parm); |
这样在发起流程的时候通过一个HashMap将流程变量传到整个流程中,可能以后的某一个节点会用到“当初”传入的变量。
startProcessInstanceByKey:根据StateChoice找到最新的部署版本去发起流程。
startProcessInstanceById:根据StateChoice的版本(1就是第1版本)去发起流程。
如果传入流程实例的是一个自定义的复杂对象,则该对象必须实现Serializable接口,以便流程实例上下文的变量持久化。