flowable节点属性扩展

30 篇文章 132 订阅

在工作中,有些工作需求flowable自带的节点属性并不能满足,就需要添加一些自定义的节点属性

对于上面就是实际项目中的效果,那么如何做呢?

1、修改bpmnjson的数据
{
“name”: “nodetypepackage”,
“properties”: [
{
“id”: “nodetype”,
“type”: “dragon-nodetype-combobox”,
“title”: “节点类型”,
“value”: “”,
“description”: “节点类型”,
“popular”: true,
“items”: [
{
“key”: “协同”,
“value”: “coordination”
},
{
“key”: “评审”,
“value”: “review”
},
{
“key”: “普通”,
“value”: “”
}
]
}
]
}

3、定义一个自定义userTask解析器BruceUserTaskJsonConverter
public class BruceUserTaskJsonConverter extends UserTaskJsonConverter {

public static final String IS_EDITDATA = "iseditdata";
public static final String NODE_TYPE = "nodetype";

public static void fillTypes(Map<String, Class<? extends BaseBpmnJsonConverter>> convertersToBpmnMap,
                             Map<Class<? extends BaseElement>, Class<? extends BaseBpmnJsonConverter>> convertersToJsonMap) {
    fillJsonTypes(convertersToBpmnMap);
    fillBpmnTypes(convertersToJsonMap);
}

public static void setCustomTypes(Map<String, Class<? extends BaseBpmnJsonConverter>> convertersToBpmnMap,
                             Map<Class<? extends BaseElement>, Class<? extends BaseBpmnJsonConverter>> convertersToJsonMap) {
    removeTypes(convertersToBpmnMap,convertersToJsonMap);
    fillTypes(convertersToBpmnMap,convertersToJsonMap);
}

public static void removeTypes(Map<String, Class<? extends BaseBpmnJsonConverter>> convertersToBpmnMap,
                               Map<Class<? extends BaseElement>, Class<? extends BaseBpmnJsonConverter>> convertersToJsonMap) {
    convertersToJsonMap.remove(UserTask.class);
    convertersToBpmnMap.remove(StencilConstants.STENCIL_TASK_USER);
}

public static void fillJsonTypes(Map<String, Class<? extends BaseBpmnJsonConverter>> convertersToBpmnMap) {
    convertersToBpmnMap.put(STENCIL_TASK_USER, BruceUserTaskJsonConverter.class);
}

public static void fillBpmnTypes(
        Map<Class<? extends BaseElement>, Class<? extends BaseBpmnJsonConverter>> convertersToJsonMap) {
    convertersToJsonMap.put(UserTask.class, BruceUserTaskJsonConverter.class);
}

@Override
public void convertToJson(BaseElement baseElement, ActivityProcessor processor, BpmnModel model, FlowElementsContainer container, ArrayNode shapesArrayNode, double subProcessX, double subProcessY){
    super.convertToJson(baseElement, processor, model, container, shapesArrayNode, subProcessX, subProcessY);
}

@Override
protected FlowElement convertJsonToElement(JsonNode elementNode, JsonNode modelNode,
                                           Map<String, JsonNode> shapeMap) {
    UserTask flowElement = (UserTask) super.convertJsonToElement(elementNode, modelNode, shapeMap);
    List<CustomProperty> customProperties = new ArrayList<>();
    // 自定义属性扩展 节点可编辑
    String isEditdata = getPropertyValueAsString(IS_EDITDATA, elementNode);
    if (StringUtils.isNotBlank(isEditdata)) {
        CustomProperty editData = this.createProperty(IS_EDITDATA, isEditdata);
        customProperties.add(editData);
    }
    // 扩展 节点类型
    String nodetype = getPropertyValueAsString(NODE_TYPE, elementNode);
    if (StringUtils.isNotBlank(nodetype)) {
        CustomProperty nodeType = this.createProperty(NODE_TYPE, nodetype);
        customProperties.add(nodeType);
    }
    if (CollectionUtils.isNotEmpty(customProperties)) {
        flowElement.setCustomProperties(customProperties);
    }
    return flowElement;
}

/**
 * 创建自定义属性
 *
 * @param propertyName  属性名称
 * @param propertyValue 属性值
 */
private CustomProperty createProperty(String propertyName, String propertyValue) {
    CustomProperty customProperty = new CustomProperty();
    customProperty.setId(propertyName);
    customProperty.setName(propertyName);
    customProperty.setSimpleValue(propertyValue);
    return customProperty;
}

}

4、定义一个自定义初始化类CustomPropertyInit (注意这个类必须建在org.flowable.editor.language.json.converter下面)
public class CustomPropertyInit {
public void init() {
Map<Class<? extends BaseElement>, Class<? extends BaseBpmnJsonConverter>> convertersToJsonMap = BpmnJsonConverter.convertersToJsonMap;
Map<String, Class<? extends BaseBpmnJsonConverter>> convertersToBpmnMap = BpmnJsonConverter.convertersToBpmnMap;
//添加自定义的任务json转化器
BruceUserTaskJsonConverter.setCustomTypes(convertersToBpmnMap, convertersToJsonMap);
}
}
1
2
3
4
5
6
7
8
5、初始化CustomPropertyInit类 在flowableConfig中初始化
public void configure(SpringProcessEngineConfiguration configure) {
//配置中文
configure.setActivityFontName(activityFontName);
configure.setLabelFontName(labelFontName);
configure.setAnnotationFontName(annotationFontName);
//设置自定义的uuid生成策略
configure.setIdGenerator(new UuidGenerator());
configure.setXmlEncoding(xmlEncoding);
//全局监听
Map<String, List> typedListeners = this.createGlobEventListeners();
configure.setTypedEventListeners(typedListeners);
//启用任务关系计数
configure.setEnableTaskRelationshipCounts(true);

/**
 * 兼容V5
 */
configure.setDatabaseSchemaUpdate("true");
configure.setFlowable5CompatibilityEnabled(true);
configure.setFlowable5CompatibilityHandlerFactory(createSpringFlowable5CompatibilityHandlerFactory());

/**
 * 自定义节点属性初始化
 */
createCustomPropertyInit().init();

}

@Bean
public CustomPropertyInit createCustomPropertyInit() {
CustomPropertyInit customPropertyInit = new CustomPropertyInit();
return customPropertyInit;
}

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Flowable 是一个流程引擎,它提供了一些基本的流程定义和管理功能。在 Flowable 中,每个流程实例都有一些默认属性,比如创建时间、开始时间、结束时间等。除此之外,我们还可以为流程实例添加一些自定义的扩展属性,以便更好地管理和跟踪流程实例的状态。 Flowable 提供了一个扩展属性的机制,可以用来为流程实例添加自定义属性。这个机制是通过流程变量来实现的。在 Flowable 中,流程变量是一种可以在流程实例中存储和访问的数据。它们可以是任何类型的数据,比如字符串、整数、对象等。为了为流程实例添加扩展属性,我们只需要将这个属性作为一个流程变量来存储即可。 具体的实现方式有两种: 1. 在流程定义中定义变量 在 Flowable 的流程定义中,可以定义一些全局的变量,在流程实例中可以使用这些变量。定义全局变量的方法是在流程定义的 XML 文件中添加如下内容: ``` <process id="myProcess" name="My process"> <!-- 定义全局变量 --> <extensionElements> <activiti:executionListener event="start"> <activiti:field name="myVariable" stringValue="This is my custom variable value" /> </activiti:executionListener> </extensionElements> <!-- 流程定义的其他元素 --> </process> ``` 在这个例子中,我们在流程定义中定义了一个名为 myVariable 的变量,并将其初始化为字符串 "This is my custom variable value"。在流程实例中,可以使用 `execution.getVariable("myVariable")` 方法来获取这个变量的值。 2. 在流程实例中设置变量 除了在流程定义中定义全局变量之外,我们还可以在流程实例中设置变量。这个方法也很简单,只需要调用流程实例的 `setVariable` 方法即可。例如: ``` String processInstanceId = ...; // 获取流程实例 ID runtimeService.setVariable(processInstanceId, "myVariable", "This is my custom variable value"); ``` 这个例子中,我们为流程实例设置了一个名为 myVariable 的变量,并将其值设置为字符串 "This is my custom variable value"。 无论是哪种方式,都可以实现为流程实例添加扩展属性的目的。可以根据具体的业务需求来选择不同的方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值