activiti 自定义节点完成条件

在activiti 中我们自定义实现节点满足某个条件时完成节点进行下一个节点

在模型设计器中可以自己定义

 

  • nrOfInstances:实例总数

  • nrOfActiveInstances:当前活动的,比如,还没完成的,实例数量。 对于顺序执行的多实例,值一直为1。

  • nrOfCompletedInstances:已经完成实例的数目。

可以写成${nrOfCompletedInstances>0}  //表示只要有人完成任务就通过该节点

项目中刚开始是这种需求,在不管是并行节点还是顺序节点中只要有一个人审批完成就通过该节点,流转至下一节点,所有我就用了

这个表达式 ${nrOfCompletedInstances>0}

后面客户需求改了。节点中有默认的用户和用户自己添加的用户,对于默认的用户只要一个人审核后并且添加的用户全部要参与审核后才能通过该节点,比如第一个任务A  A中有2个系统用户  客户自己加3个用户,客户自己加的3个必须参与审批,默认的用户只需要其中一个,  完成条件3+1=4时才能通过该节点 ,所以上面的表达式就不支持了,于是需要完成条件自定义处理逻辑,添加表达式

${instanceCompleteTaskListener.exec(execution)}

其中instanceCompleteTaskListener 就是bean的id  exec 就是这个bean的方法

@Component("instanceCompleteTaskListener")
public class InstanceCompleteTaskListener{

    public boolean exec(ExecutionEntity execution){
        return true;
    }
}

返回true 会结束这个节点并且会将这个节点未完成的任务置于删除状态

返回false 表示节点暂未结束

满足了上面的情景

因为流程图刚开始完成条件是${nrOfCompletedInstances>0}  现在要改成${instanceCompleteTaskListener.exec(execution)}   问题又来了 我们系统流程图有一百多张图 不可能每个节点都去改下这样太浪费时间了而且效率特别低,后面就想办法看能不能写代码替换这个完成条件,然后就找到了方法,因为我用的模型设计器设计的流程图,存储流程时点保存其实数据库存的json字符串的二进制

//根据模型id获取流程信息的字节
byte[] source = repositoryService.getModelEditorSource(modelId);
//转换为utf-8 获取json字符串
String s1 = new String(source, StandardCharsets.UTF_8);
//替换完成条件
String s = s1.replaceAll("nrOfCompletedInstances>0", "instanceCompleteTaskListener.exec(execution)");
//保存
repositoryService.addModelEditorSource(modelId, s.getBytes(StandardCharsets.UTF_8));
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
final byte[] result = outStream.toByteArray();
repositoryService.addModelEditorSourceExtra(modelId, result);
outStream.close();

替换后在重新部署流程就可以了

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要扩展 Activiti UserTask 节点并实现自定义节点属性,可以按照以下步骤进行: 1. 创建一个 Java 类来扩展 UserTask 节点。该类需要继承 org.activiti.engine.impl.bpmn.behavior.UserTaskActivityBehavior 类。 例如: ``` public class CustomUserTaskBehavior extends UserTaskActivityBehavior { // 自定义节点属性 } ``` 2. 在该类中添加自定义节点属性。 例如: ``` public class CustomUserTaskBehavior extends UserTaskActivityBehavior { private String customAttribute; public void setCustomAttribute(String customAttribute) { this.customAttribute = customAttribute; } public String getCustomAttribute() { return customAttribute; } } ``` 3. 创建一个 BpmnParseHandler 类来解析扩展属性。该类需要继承 org.activiti.engine.impl.bpmn.parser.AbstractBpmnParseHandler 类。 例如: ``` public class CustomUserTaskBpmnParseHandler extends AbstractBpmnParseHandler<UserTask> { @Override protected Class<? extends BaseElement> getHandledType() { return UserTask.class; } @Override protected void executeParse(BpmnParse bpmnParse, UserTask userTask) { CustomUserTaskBehavior customUserTaskBehavior = new CustomUserTaskBehavior(); // 解析自定义节点属性 String customAttribute = userTask.getAttributes().getValue("customAttribute"); customUserTaskBehavior.setCustomAttribute(customAttribute); userTask.setBehavior(customUserTaskBehavior); } } ``` 4. 在流程引擎配置中注册 BpmnParseHandler 类。 例如: ``` ProcessEngineConfiguration configuration = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration(); configuration.setCustomDefaultBpmnParseHandlers(Collections.singletonList(new CustomUserTaskBpmnParseHandler())); ``` 现在,你已经成功扩展了 Activiti UserTask 节点并实现了自定义节点属性。在 BPMN 文件中,你可以使用自定义属性来配置 UserTask 节点,例如: ``` <userTask id="task1" name="Task 1" activiti:assignee="john" customAttribute="customValue"></userTask> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值