系列文章目录
第一章 springboot+Activiti7整合实践 (一)
第二章 springboot+Activiti7整合实践 (二) 模型定义
第三章 springboot+Activiti7整合实践 (三) 流程定义
第四章 springboot+Activiti7整合实践 (四) 分配规则
第五章 springboot+Activiti7整合实践 (五) 发布流程
前言
此章节内容为发布流程的启动,即生成流程实例,基于我们的设计思路,规则分配是由我们外部定义的,如何设置到工作流程中,则需要修改工作流原有的设置逻辑,所以启动流程这部分内容,我们分为两个章节来讲解,此章节内容为流程启动,下一章节内容就是工作流的分配规则改造(自定义用户任务行为)。
一、启动流程
1.创建业务流程表单
流程的启动以一个业务表单的添加操作触发,表单内容随意,表单的主要字段要包含ProcessInstanceId即流程实例id,使业务与工作流实例关联,流程的启动也同样也选择关联业务主键的方式启动。
public void save(WorkflowP1 entity, String userId) {
entity.insertInit(userId);
entity.setStatus("0");
Map<String, Object> variables = new HashMap<>();
variables.put("routeType", entity.getType());
ProcessInstance processInstance = processInstanceService.startProcess(entity.getPdKey(),entity.getId(),entity.getTitle(),variables);
entity.setInstanceId(processInstance.getProcessInstanceId());
entity.setStartUserId(userId);
save(entity);
}
这里的variables为业务流程中所需的参数,我们暂时未用到,可以传一个空的map。
2.启动流程
/**
* 启动流程
* */
public ProcessInstance startProcess(String key,String bussKey, String title,Map<String, Object> variables){
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(key, bussKey, variables);
runtimeService.setProcessInstanceName(processInstance.getId(),title);
return processInstance;
}
以上为业务启动流程,参数key为模型的唯一key值,在第一章第二章都有介绍,bussKey为业务主键id,就是我们业务表单所产生的id,titie为流程实例标题,为表单用户输入,这里的variables为业务流程中所需的参数,我们暂时未用到,可以传一个空的map。
用到的重要对象是runtimeService,是工作流提供的运行时的服务对象,通过调用startProcessInstanceByKey方法来启动一个流程实例。
二、工作流过程参数
1.uel表达式
在工作流流程图绘制过程中,我们可以对流程图右侧的属性面板进行一些设置,如设置代办人、设置分支流转条件,多数情况我们会在实际业务流程中,根据某个参数或审批通过与否来进行条件流转或动态的代办人分配,所以一般不会写死,而是会使用uel表达式,如果使用uel表达式,那么就需要在任务执行的过程中,为下一步需要使用到的参数,设置值,从而使工作流得以流转。
![](https://img-blog.csdnimg.cn/direct/4d6f00881e474cbcb762cd26800fb665.png)
如上图,我们的跳转流转设置为${routeType==2},还有一个分支设置为${routeType==1},那么在发布任务的开始时,需要对routeType设置实际值,1或者2,才能使工作流程流入规定的分支中。
2.其他示例
![](https://img-blog.csdnimg.cn/direct/5728165474a34d18848780e9423cdcba.png)
如上面ruoyi方式的代办人设置,则需要在代办人里面设置uel表达式,在进入到审核流程的上一步完成任务方法中,设置过程参数user,给定实际的用户id,才能使任务顺利进入到审核流程中。
总结
在写分享的时候,总怕分享地不够详细,让人看不懂,但转念想一想这个系统想写的主要内容也就是实践,至于需要掌握的工作流的基础知识,如常用api、bpmnjs的面板属性的设置等知识,我就默认大家都掌握了,如有看不明白的,可以先找找相关基础知识的文章学习。