flowable自由流程

本文介绍了在Flowable中实现自由流程的步骤,包括修改BpmnJsonConverter添加自定义属性,设置FlowableEventListener监听流程完成事件,使用Redis存储流程实例的bpmnModel,并详细阐述了从步骤1到步骤6的具体操作,如Redis的Hash存储方式、自定义流程命令类以及如何在流程中添加节点和跳转。
摘要由CSDN通过智能技术生成


flowable中会对流程定义做缓存处理,在实现自由流程的时候需要动态给流程定义添加节点,默认的是对流程定义做的缓存,要想在每个流程实例中动态添加节点,可以通过修改流程缓存,添加每个流程实例的缓存

涉及到的类

在这里插入图片描述

主要步骤

  • 步骤1:修改BpmnJsonConverter,添加自定义属性,区分流程是否为自由流程
  • 步骤2:设置全局的FlowableEventListener( FlowableEngineEventType. ACTIVITY_COMPLETED ),在流程启动的时候判断流程是否为自由流程,如果是的话,把流程的bpmnModel转成xml设置到自己定义的缓存对象中,然后保存到redis里。
    Redis采用了Hash方式存储,key为流程实例ID,value为自定义缓存类。
  • 步骤3:自由流程添加节点的时候提前把流程实例id放在request作用域中
  • 步骤4:定义 DefaultDeploymentCache 子类重写get方法,如果是自定义流程并且request作用域中有流程实例id就中redis中获取流程定义json转换成 ProcessDefinitionCacheEntry
  • 步骤5:定义自由流程命令类,获取流程定义缓存,给里面添加连线和节点
  • 步骤6:往新加的节点上跳转

放入缓存主要代码

if (FlowUtils.isFreeProcess(entity.getProcessDefinitionId())) {

 //放入缓存
    ProcessDefinitionCacheEntry processDefinitionCacheEntry = managementService.executeCommand(new GetProcessDefinitionCacheEntryCmd(entity.getProcessDefinitionId()));
    CustomProcessDefinitionCacheEntry customProcessDefinitionCacheEntry = FlowUtils.parseCustomProcessDefinitionCacheEntry(processDefinitionCacheEntry);
    FreeProcessCaChe cache = SpringUtil.getBean(FreeProcessCaChe.class);
    cache.add(entity.getProcessInstanceId(), customProcessDefinitionCacheEntry);
}

下方为以上用到的类以及方法

  • 获取缓存命令类
public class GetProcessDefinitionCacheEntryCmd implements Command<ProcessDefinitionCacheEntry> {
   
	protected String processDefinitionId;

	public GetProcessDefinitionCacheEntryCmd(String processDefinitionId) {
   
		this.processDefinitionId = processDefinitionId;
	}

	@Override
	public ProcessDefinitionCacheEntry execute(CommandContext commandContext) {
   
		DeploymentManager deploymentManager = CommandContextUtil.getProcessEngineConfiguration().getDeploymentManager();
		ProcessDefinitionCacheEntry processDefinitionCacheEntry = deploymentManager.getProcessDefinitionCache()
				.get(processDefinitionId);
		return processDefinitionCacheEntry;
	}

}
  • 序列化缓存对象方法
 public static CustomProcessDefinitionCacheEntry parseCustomProcessDefinitionCacheEntry(ProcessDefinitionCacheEntry processDefinitionCacheEntry) {
   
    CustomProcessDefinitionCacheEntry customProcessDefinitionCacheEntry = new CustomProcessDefinitionCacheEntry();
    ProcessDefinition processDefinition = processDefinitionCacheEntry.getProcessDefinition();
    String resourceName = processDefinition.getResourceName();
    String deploymentId = processDefinition.getDeploymentId();
    BpmnModel bpmnModel = processDefinitionCacheEntry.getBpmnModel()
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值