activiti modeler 任务节点自定义属性扩展

在工作中使用Activiti modeler时难免会遇到局限,如usertask中的属性,完全不够用,这时需要我们去扩展。

  activiti modeler通过读取stencilset.json生成编辑器UI,在界面上的扩展需要了解stencilset.json配置文件,它定义元素的属性,规则的配置文件,页面的展示就是根据这个配置文件生成的。

配置文件说明:

--属性的定义

"propertyPackages" : [ {

    "name" : "process_idpackage",

    "properties" : [ {

        "id" : "name",      ---id

        "type" : "String",  --类型,在赋值的时候会根据类型展示各种输入框,根据properties.js

        "title" : "名称",  --显示的标题

        "value" : "",      --值

        "description" : "BPMN元素的描述性名称.", --描述

        "category":"property", --分类,空的话位popular

        "popular" : true,         --是否显示

        "refToView" : "text_name" --触发svg里面的效果

    }]

--节点的定义

"type" : "node",

    "id" : "MailTask",

    "title" : "邮件任务",--标题

    "description" : "邮件任务", --描述

    "view" : "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n</svg>", --svg的xml

    "icon" : "activity/list/type.send.png",        --图标

    "groups" : [ "任务" ], --归属的组

    "propertyPackages" : [ "overrideidpackage" ],--属性

    "hiddenPropertyPackages" : [ ],

    "roles" : [ "Activity" ] --规则

配置步骤说明:

  在stencilset.json文件中添加属性(各种类型可参照其它属性编写),如图:

 

  并引用到UserTask节点中,如图:

 

  这样,ORYX Designer会自动解析该JSON文件并在UI中展示新添加的属性,如图:

 

  接着,我们需要将UI上扩展的属性与activiti进行绑定。不难发现,BpmnJsonConverter起着至关重要的作用,activiti modeler将页面编辑器的数据保存为Json格式文件存储到数据库中,回显也是通过读取该文件,BpmnJsonConverter用于转换BPMN与JSON供activiti解析界面属性并应用。

  在UserTask中扩展属性,默认的任务节点Json数据解析类UserTaskJsonConverter,因为它不认识skiprepetition,所以需要定义一个类替换它,以此达到解析自定义属性的目的。

  

复制代码
public class CustomUserTaskJsonConverter extends UserTaskJsonConverter implements CustomStencilConstants{
    
    @Override
    protected void convertElementToJson(ObjectNode propertiesNode, BaseElement baseElement) {
        super.convertElementToJson(propertiesNode, baseElement);
        UserTask userTask = (UserTask) baseElement;
        
        //解析新增属性的业务逻辑
                ......
    }
    
    @Override
    protected FlowElement convertJsonToElement(JsonNode elementNode, JsonNode modelNode, Map<String, JsonNode> shapeMap) {
        FlowElement flowElement = super.convertJsonToElement(elementNode,
                modelNode, shapeMap);
        //解析新增属性的业务逻辑
        ......
        return task;
    }
    
    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 fillJsonTypes(Map<String, Class<? extends BaseBpmnJsonConverter>> convertersToBpmnMap) {
        convertersToBpmnMap.put(STENCIL_TASK_USER, CustomUserTaskJsonConverter.class);
    }
  
    public static void fillBpmnTypes(Map<Class<? extends BaseElement>, Class<? extends BaseBpmnJsonConverter>> convertersToJsonMap) {
        convertersToJsonMap.put(UserTask.class, CustomUserTaskJsonConverter.class);
    }
    
}
复制代码

  最后,在部署流程时,待BpmnJsonConverter初始化完成后替换掉UserTaskJsonConverter就OK了。

复制代码
BpmnJsonConverter jsonConverter = new BpmnJsonConverter();
            
// TODO:UserTask自定义扩展属性
BpmnJsonConverterProperties bjcp = new BpmnJsonConverterProperties();
CustomUserTaskJsonConverter.fillTypes(bjcp.getConvertersToBpmnMap, bjcp.getConvertersToJsonMap);
            
JsonNode editorNode = new ObjectMapper().readTree(repositoryService.getModelEditorSource(modelData.getId()));
BpmnModel bpmnModel = jsonConverter.convertToBpmnModel(editorNode);
复制代码

  效果图:

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
扩展 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> ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值