`
junlong750
  • 浏览: 22510 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Activiti - 设置会签

阅读更多

前些天在群里聊工作流和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-5.4中实现会签

    首先,我们需要了解在Activiti流程定义中如何设置会签。在BPMN 2.0规范中,可以使用多实例(Multi-instance)属性来实现这个功能。对于用户任务,我们可以设置`&lt;multiInstanceLoopCharacteristics&gt;`元素,其中`...

    工作流官网的activiti-5.22.0.zip

    7. **配置文件**: `conf`或`resources`目录下的配置文件(如`activiti.cfg.xml`)用于设置引擎的行为,如数据库连接、缓存策略等。 8. **许可证和依赖**: 文件中应包含项目许可证信息(如LICENSE文件)和所依赖的第...

    Activiti多实例任务实现会签

    在Activiti的工作流定义XML文件中,可以通过设置`&lt;userTask&gt;`元素的`multi-instance`属性,并指定相应的`camunda:collection`(数据集)和`camunda:elementVariable`(存储每个实例结果的变量)来创建会签任务。...

    activiti 会签投票统计

    综上所述,这个主题深入探讨了如何利用 Activiti 的会签功能和自定义组件来实现投票统计和结束条件控制,展示了 Activiti 在复杂业务场景中的灵活性和可扩展性。在实际应用中,开发者可以参考这些组件和流程设计,...

    activiti取会签人员

    在用activiti的时候经常遇到取会签人员的问题,这个文档解决怎么获取会签人员。

    jeecgboot集成jeecg-boot-activiti1

    - **绕过Shiro**:在Shiro配置文件中,为Activiti相关的URL设置匿名访问权限,以避免权限验证问题。 - **数据库配置**:创建Activiti所需的数据库表,这通常通过运行Activiti提供的SQL脚本完成。 - **添加菜单**...

    Jeecg集成activiti.docx

    Jeecg集成activiti.docx Jeecg集成activiti是一个关于如何将activiti集成到Jeecg平台上的指南。下面是从给定的文件中提取的相关知识点: 1. activiti项目结构:activiti项目是一个Maven项目,包含了数据库文件,...

    activiti学习-使用activiti多实例任务实现会签

    ### Activiti多实例任务实现会签功能详解 #### 一、多实例用户任务的基本概念与配置 Activiti是一个开源的工作流引擎,它提供了一种灵活的方式来定义业务流程,并且能够支持复杂的业务逻辑处理。其中,多实例任务...

    activiti1-2

    2. `activiti.cfg.xml` - Activiti的配置文件,定义数据库连接和其他设置。 3. `*.java` - 示例代码,可能包括流程定义、服务任务、监听器等实现。 4. `*.bpmn` - BPMN 2.0流程定义文件,描述业务流程。 5. `*.png` ...

    Activiti实现会签功能程序Demo.docx

    2. **配置会签规则**:通过`completionCondition`属性,我们可以设置完成条件,例如,如果所有参与者都完成任务,或者满足特定比例的参与者完成任务,则视为会签完成。 3. **监听器与任务监听**:可以添加`...

    ruoyi-vue-activiti7.sql

    刚刚的项目数据库·

    activiti5.14-javadoc

    2. **任务管理**:`TaskService` 接口用于处理任务生命周期,包括分配任务、完成任务、设置任务变量等。`TaskQuery` 可用于查询特定的任务,如根据任务名、负责人或流程实例ID。 3. **流程实例操作**:通过 `...

    SpringBoot整合Activiti5.22 Demo

    **SpringBoot整合Activiti5.22 Demo** 在企业级应用开发中,流程自动化是必不可少的一...进一步学习和实践,可以深入理解Activiti的高级特性,如信号、事件、会签、子流程等,以实现更加复杂的企业级业务流程管理。

    Activiti审批汇总流程

    伪汇总审批,就是每一条流程都是独立的,这些独立的流程在走到某个节点的时候,这个节点的审批人可以一次性进行多个任务的审批

    activiti 5.22 退回代码

    工作流 activiti 5.22 退回代码实现。 activiti在设计的时候没有回退相关的操作,回退是中国特有的特色。这里写一个比较简单的回退。不支持回退到并行网关前面节点,虽然回退到前面节点不会报错 但会导致任务无法...

    ElasticSearch和activiti案例

    3. **工作流引擎**:内核实现了流程的启动、执行、分支、会签等逻辑,确保流程按预定规则运行。 4. **插件扩展**:提供丰富的API和插件接口,方便进行定制化开发,如集成其他系统、自定义任务表单等。 5. **监控与...

    activiti数据结构详情

    Activiti 是一个开源的工作流和业务自动化引擎,广泛应用于企业级流程管理。它提供了一整套数据结构来支持流程定义、执行以及相关的管理活动。在"activiti数据结构详情"中,我们主要关注的是25张核心表的数据结构,...

    【26】2018年最新疯狂Activiti6视频教程疯狂工作流讲义Activiti6.x视频教程 .txt

    - **会签任务**: 会签任务是指需要多个参与者共同完成的任务类型,通常用于审批流程中。 - **表单集成**: Activiti 6增强了表单处理功能,可以方便地与前端表单进行集成,实现数据的无缝流转。 #### 性能优化 - **...

    Activiti_安装和demo

    重要的是要填写`会签" activiti:assignee="#{huiqian}"&gt;`中的`#{huiqian}`,这表示任务将分配给`huiqian`变量指定的用户。 5. **添加监听器和循环特性**:在用户任务中,可以添加`taskListener`来监听任务的创建和...

Global site tag (gtag.js) - Google Analytics