前些天在群里聊工作流和Activiti,群里有人分享了自己的工作流引擎开源项目,大伙纷纷问这问那(比如为什么突然自己搞个process engine、有没有eclipse plugin、能不能绘制流程图等等)。
现实生活中的工作流程,我们也经常碰到需要会签的情况,支持会签是很必要的。
正好有两个人问道:支持会签吗? 也有人也问道:什么是会签?
如果从process engine的角度上讲呢?
可以说一个task节点下有多个task instance。
而不是一个从task节点执行到多个task节点(这样就是ParallelGateway了)。
如何让一个Task节点创建出多个instance?官网是这样说的:
To make an activity multi-instance, the activity xml element must have a multiInstanceLoopCharacteristics child element.
既然是创建多个实例,我们就需要用一个集合去存放。
我们可以在multiInstanceLoopCharacteristics
标签中加入一个attribute —— activiti:collection=""。
该attribute的值是当前流程实例的变量名,也就是启动该引擎实例时传入的Map的key。
而这个Map的value必须是java.util.List
类型的。但我们无需在意这个List的泛型是什么。
假如泛型是String的话,act_ru_variable
中变量的TYPE_
字段值是string。
也许我可以让泛型是Map,那么该变量的TYPE_字段值是serialize,仅此而已。
本文中activiti:collection="assigneeList"
我们在数据库里记录了这个集合,但我们也需要记录这个记录中的每一个元素。
记录每一个元素时他们的名字应该是什么?
我们可以用activiti:elementVariable=""
比如我设置:
activiti:elementVariable="assignee"
假设我们现在要的效果是:有三个人可以会签,但只要两个人签署便可通过。
我们需要设置特定的条件来结束当前这个task。
这时我们需要在multiInstanceLoopCharacteristics下增加一个子节点——completionCondition
。
比如我是这样设置的:
<completionCondition>
${signCount >= 2 }
</completionCondition>
好了,这样就是整个Task的定义了。(事实上我完全可以不用signCount实现这个效果。)
<userTask id="counterTask_1" name="COUNTERTASK">
<multiInstanceLoopCharacteristics
isSequential="false"
activiti:collection="assigneeList"
activiti:elementVariable="assignee">
<completionCondition>${signCount >= 2 }</completionCondition>
</multiInstanceLoopCharacteristics>
</userTask>
部署后的结果如下:
此处省略部署流程的操作,我们来看一下如何申请该流程。
如下我在页面中定义了三个审核人员:
<label>
<input type="checkbox" name="assigneeList" value="kim"/>kim
</label>
<label>
<input type="checkbox" name="assigneeList" value="jin"/>jin
</label>
<label>
<input type="checkbox" name="assigneeList" value="king"/>king
</label>
然后在java中接收并start:
private String[] assigneeList;
Map<String, Object> processInstVar = new HashMap<String, Object>();
//必须是List
processInstVar.put("assigneeList", Arrays.asList(assigneeList));
processInstVar.put("signCount", 0);
runtimeService.startProcessInstanceById(processId, processInstVar);
启动结果如下:
然后是执行,method只接收一个taskId:
List<Task> taskResultList = taskService.createTaskQuery().taskId(taskId)
.list();
//当前executionId
String currentExecutionId = taskResultList.get(0).getExecutionId();
//当前签署总数
String currentSignCount = StringUtils.defaultString(runtimeService
.getVariable(currentExecutionId, "signCount").toString(), "0");
//签署数+1
runtimeService.setVariable(currentExecutionId, "signCount",
Integer.parseInt(currentSignCount) + 1);
//完成
taskService.complete(taskId);
我们执行了刚才创建的三个实例之一,结果是:
再执行一次,会签节点的实例已经不存在于actrutask表了,因为我设置的是“有两个人签署便通过”。
如下图,当前task已经不是会签的task了,相关的变量也消失不见了。
最后说我之前为什么说道‘事实上我完全可以不用signCount实现这个效果’,因为我们有:
所以我完全没有必要自己去定义一个变量去记录执行了多少次
相关推荐
首先,我们需要了解在Activiti流程定义中如何设置会签。在BPMN 2.0规范中,可以使用多实例(Multi-instance)属性来实现这个功能。对于用户任务,我们可以设置`<multiInstanceLoopCharacteristics>`元素,其中`...
7. **配置文件**: `conf`或`resources`目录下的配置文件(如`activiti.cfg.xml`)用于设置引擎的行为,如数据库连接、缓存策略等。 8. **许可证和依赖**: 文件中应包含项目许可证信息(如LICENSE文件)和所依赖的第...
在Activiti的工作流定义XML文件中,可以通过设置`<userTask>`元素的`multi-instance`属性,并指定相应的`camunda:collection`(数据集)和`camunda:elementVariable`(存储每个实例结果的变量)来创建会签任务。...
综上所述,这个主题深入探讨了如何利用 Activiti 的会签功能和自定义组件来实现投票统计和结束条件控制,展示了 Activiti 在复杂业务场景中的灵活性和可扩展性。在实际应用中,开发者可以参考这些组件和流程设计,...
在用activiti的时候经常遇到取会签人员的问题,这个文档解决怎么获取会签人员。
- **绕过Shiro**:在Shiro配置文件中,为Activiti相关的URL设置匿名访问权限,以避免权限验证问题。 - **数据库配置**:创建Activiti所需的数据库表,这通常通过运行Activiti提供的SQL脚本完成。 - **添加菜单**...
Jeecg集成activiti.docx Jeecg集成activiti是一个关于如何将activiti集成到Jeecg平台上的指南。下面是从给定的文件中提取的相关知识点: 1. activiti项目结构:activiti项目是一个Maven项目,包含了数据库文件,...
### Activiti多实例任务实现会签功能详解 #### 一、多实例用户任务的基本概念与配置 Activiti是一个开源的工作流引擎,它提供了一种灵活的方式来定义业务流程,并且能够支持复杂的业务逻辑处理。其中,多实例任务...
2. `activiti.cfg.xml` - Activiti的配置文件,定义数据库连接和其他设置。 3. `*.java` - 示例代码,可能包括流程定义、服务任务、监听器等实现。 4. `*.bpmn` - BPMN 2.0流程定义文件,描述业务流程。 5. `*.png` ...
2. **配置会签规则**:通过`completionCondition`属性,我们可以设置完成条件,例如,如果所有参与者都完成任务,或者满足特定比例的参与者完成任务,则视为会签完成。 3. **监听器与任务监听**:可以添加`...
刚刚的项目数据库·
2. **任务管理**:`TaskService` 接口用于处理任务生命周期,包括分配任务、完成任务、设置任务变量等。`TaskQuery` 可用于查询特定的任务,如根据任务名、负责人或流程实例ID。 3. **流程实例操作**:通过 `...
**SpringBoot整合Activiti5.22 Demo** 在企业级应用开发中,流程自动化是必不可少的一...进一步学习和实践,可以深入理解Activiti的高级特性,如信号、事件、会签、子流程等,以实现更加复杂的企业级业务流程管理。
伪汇总审批,就是每一条流程都是独立的,这些独立的流程在走到某个节点的时候,这个节点的审批人可以一次性进行多个任务的审批
工作流 activiti 5.22 退回代码实现。 activiti在设计的时候没有回退相关的操作,回退是中国特有的特色。这里写一个比较简单的回退。不支持回退到并行网关前面节点,虽然回退到前面节点不会报错 但会导致任务无法...
3. **工作流引擎**:内核实现了流程的启动、执行、分支、会签等逻辑,确保流程按预定规则运行。 4. **插件扩展**:提供丰富的API和插件接口,方便进行定制化开发,如集成其他系统、自定义任务表单等。 5. **监控与...
Activiti 是一个开源的工作流和业务自动化引擎,广泛应用于企业级流程管理。它提供了一整套数据结构来支持流程定义、执行以及相关的管理活动。在"activiti数据结构详情"中,我们主要关注的是25张核心表的数据结构,...
- **会签任务**: 会签任务是指需要多个参与者共同完成的任务类型,通常用于审批流程中。 - **表单集成**: Activiti 6增强了表单处理功能,可以方便地与前端表单进行集成,实现数据的无缝流转。 #### 性能优化 - **...
重要的是要填写`会签" activiti:assignee="#{huiqian}">`中的`#{huiqian}`,这表示任务将分配给`huiqian`变量指定的用户。 5. **添加监听器和循环特性**:在用户任务中,可以添加`taskListener`来监听任务的创建和...