我用的activiti的版本是7.1.0.M6。
1 先说场景
有这么一个主线流程
上级单位可以查看下级单位的流程,而下级单位不可见上级单位的流程,这里的二级单位和一级单位都是调用活动,需要去调用各自的流程,这里的二级单位有很多,而且每个二级单位设置的流程不完全一样,所以需要动态的去调用。
2.遇到问题
二级单位调用活动配置如下:
参考其他博客,都是说需要配置输入参数,但是无论怎么尝试,都失败了,最后报错
warnUnit2Process变量不存在。
3.解决办法
在config目录下,新建两个类CustomCallActivityXMLConverter、MyWorkflowConfig
CustomCallActivityXMLConverter类内容如下:
package com.ruoyi.act.config;
import org.activiti.bpmn.converter.CallActivityXMLConverter;
import org.activiti.bpmn.converter.util.BpmnXMLUtil;
import org.activiti.bpmn.model.BaseElement;
import org.activiti.bpmn.model.BpmnModel;
import org.activiti.bpmn.model.CallActivity;
import javax.xml.stream.XMLStreamReader;
/**
* @author : 小邪123
* @Date :2022/5/18 11:22
* @Disc 重寫調用活動
*/
public class CustomCallActivityXMLConverter extends CallActivityXMLConverter {
@Override
protected BaseElement convertXMLToElement(XMLStreamReader xtr, BpmnModel model) throws Exception {
CallActivity callActivity = new CallActivity();
BpmnXMLUtil.addXMLLocation(callActivity, xtr);
callActivity.setCalledElement(xtr.getAttributeValue(null, ATTRIBUTE_CALL_ACTIVITY_CALLEDELEMENT));
callActivity.setBusinessKey(xtr.getAttributeValue(ACTIVITI_EXTENSIONS_NAMESPACE, ATTRIBUTE_CALL_ACTIVITY_BUSINESS_KEY));
callActivity.setInheritBusinessKey(Boolean.TRUE);
callActivity.setInheritVariables(Boolean.TRUE);
parseChildElements(getXMLElementName(), callActivity, childParserMap, model, xtr);
return callActivity;
}
}
MyWorkflowConfig类内容如下:
package com.ruoyi.act.config;
import org.activiti.bpmn.converter.BpmnXMLConverter;
import org.activiti.engine.delegate.event.ActivitiEventListener;
import org.activiti.spring.SpringProcessEngineConfiguration;
import org.activiti.spring.boot.ProcessEngineConfigurationConfigurer;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
/**
* @Description:處理子流程問題
* @Author: 小邪123
* @Date: 2022/5/18 11:15
*/
@Component
public class MyWorkflowConfig implements ProcessEngineConfigurationConfigurer {
@Override
public void configure(SpringProcessEngineConfiguration processEngineConfiguration) {
//配置全局监听器
List<ActivitiEventListener> eventListeners =new ArrayList<>();
processEngineConfiguration.setEventListeners(eventListeners);
BpmnXMLConverter.addConverter(new CustomCallActivityXMLConverter());
}
}
配置好这两个类之后,重新编译/启动项目一下,传参即可成功。
版权声明:本文为weixin_44247418原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。