创建一个流程
通过借用eclipse
来创建一个请假流程。最主要的节点为StartEvent
-->UserTask
-->EndEVent
。
点击空白位置可以定义此次流程的一些属性,Id
就是后面开启一个流程需要的key
。
建立用户任务
其中Assignee
则是我们可以指定这个任务执行人的key
值。等到完成任务时需要传递参数进去,像这样:
Map<String, Object> map = new HashMap<>();
map.put("operCode","12345465");
// taskId 就是查询任务中的 ID
String taskId = "226";
// 完成审批任务
taskService.complete(taskId,map);
发布流程
通过使用eclipse
插件来创建的bpmn
文件来发布,其实就是把文件变成可以执行的东西,发布完成后所有的流程定义都会被添加到数据库中。即使你的Spring
应用重启了,依然可以获取得到已发布
的流程。
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
// 创建部署对象
Deployment deployment = processEngine.getRepositoryService().createDeployment()
// 声明此次发布流程的名称
.name("请假申请审核流程")
// 加载资源文件,一次只能加载一个文件
.addClasspathResource("activiti/flow3.bpmn")
// 部署
.deploy();
启动一个流程实例
上面把流程定义发布到activiti
引擎后,就可以基于它来发起新的流程实例。对于每个流程定义可以有多个流程实例。
RuntimeService runtimeService = processEngine.getRuntimeService();
Map<String, Object> variables = new HashMap<>();
variables.put("operCode", "123491");
// 启动一个流程正式走流程 并获取流程实例
// 因动多个所以每启动一个请假单流程都会在数据库中插入一条新版本的流程数据
// 通过key启动为该请假单流程可以会启最新版本的流程
// 业务id
String buissnessKey = "123456";
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("myProcess",buissnessKey,variables);
myProcess
是我们在bpmn
或xml
中配置的key
,通过一个Map
来添加一下流程变量,通过也可以通过传递buissnessKey
来将工作流和我们具体的业务关联在一起。当发布成功后act_ru_execution
的BUSSINESS_KEY
会存储刚刚传入的buissnessKey
.
完成任务
流程启动后,第一步就是用户任务。为了让流程实例继续运行,我们需要完成整个任务。对Activiti来说,就是需要complete
任务。 所以首先要获取得到当前流程的任务ID
,接着调用complate
方法就完成了一个任务,就会进入到下一个流程。下面的代码展示了如何做这件事:
TaskService taskService = processEngine.getTaskService();
Map<String, Object> map = new HashMap<>();
map.put("xxx","12345465");
// taskId 就是查询任务中的 ID
String taskId = "226";
// 完成审批任务
taskService.complete(taskId,map);
流程实例会进入到下一个环节。