SpringBoot集成activiti modeler实现在线绘制流程图

关于版本

Spring Boot 版本 2.6.1
Activiti 版本 7.1.0.M4
Activiti Modeler 版本 5.23.0

Activiti 5.23.0源码

Activiti 5.23.0源码
点击下载zip
在这里插入图片描述

activiti 相关依赖

<dependency>
    <groupId>org.activiti</groupId>
    <artifactId>activiti-spring-boot-starter</artifactId>
    <version>7.1.0.M4</version>
</dependency>
<dependency>
    <groupId>org.activiti.dependencies</groupId>
    <artifactId>activiti-dependencies</artifactId>
    <version>7.1.0.M4</version>
    <type>pom</type>
</dependency>
<dependency>
    <groupId>org.activiti</groupId>
    <artifactId>activiti-json-converter</artifactId>
    <version>7.1.0.M4</version>
</dependency>
<dependency>
    <groupId>batik</groupId>
    <artifactId>batik-transcoder</artifactId>
    <version>1.6-1</version>
    <type>pom</type>
</dependency>

配置文件&Security

在配置文件中添加spring.activiti.check-process-definitions=false
由于activiti默认集成了Security,导致无法校验权限,访问页面,需要放过所有请求;创建一个配置类并继承WebSecurityConfigurerAdapter

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@Configuration
public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {
}

在启动类上添加@EnableAutoConfiguration(exclude={org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class})

前端modeler集成

找到源码中的webapp;目录:\Activiti-5.23.0\modules\activiti-webapp-explorer2\src\main\webapp
diagram-viewereditor-appmodeler.html拷贝到代码resources目录下static目录中
在这里插入图片描述
源码resources下stencilset.json文件拷贝到代码目录resources中

接口集成

源码Activiti-5.23.0\modules\activiti-modeler\src\main\java\org\activiti\rest\editor目录下所有内容拷贝到代码中
在这里插入图片描述

添加创建模板代码

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import org.activiti.editor.constants.ModelDataJsonConstants;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.repository.Model;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@Controller
public class ActivitiModelController {

    @Autowired
    ProcessEngine processEngine;

    @Autowired
    ObjectMapper objectMapper;

    /**
     * 创建一个空模型
     * @param response
     * @throws IOException
     */
    @RequestMapping("/create")
    public void newModel(HttpServletResponse response) throws IOException {
        RepositoryService repositoryService = processEngine.getRepositoryService();
        //初始化一个空模型
        Model model = repositoryService.newModel();
        //设置一些默认信息
        String name = "new-process";
        String description = "";
        int revision = 1;
        String key = "process";

        ObjectNode modelNode = objectMapper.createObjectNode();
        modelNode.put(ModelDataJsonConstants.MODEL_NAME, name);
        modelNode.put(ModelDataJsonConstants.MODEL_DESCRIPTION, description);
        modelNode.put(ModelDataJsonConstants.MODEL_REVISION, revision);
        model.setName(name);
        model.setKey(key);
        model.setMetaInfo(modelNode.toString());
        repositoryService.saveModel(model);
        String id = model.getId();
        //完善ModelEditorSource
        ObjectNode editorNode = objectMapper.createObjectNode();
        editorNode.put("id", "canvas");
        editorNode.put("resourceId", "canvas");
        ObjectNode stencilSetNode = objectMapper.createObjectNode();
        stencilSetNode.put("namespace", "http://b3mn.org/stencilset/bpmn2.0#");
        editorNode.put("stencilset", stencilSetNode);
        repositoryService.addModelEditorSource(id,editorNode.toString().getBytes("utf-8"));
        response.sendRedirect("/modeler.html?modelId="+id);
    }
}

到此流程绘制组件就集成完毕

测试

启动程序,访问模板创建接口:http://localhost:8080/create创建一个空的模型,并进入编辑界面,如下图:
在这里插入图片描述
在开始事件中可以添加流程事件绘制
在这里插入图片描述

可能遇到的问题

batik-transcoder依赖的xerces包,可能与项目中的包冲突,报如下错误

javax.xml.parsers.DocumentBuilderFactory.setFeature(Ljava/lang/String;Z)V

在代码中添加,如下代码解决:

System.setProperty("javax.xml.parsers.DocumentBuilderFactory", "com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl");

附完整代码示例

demo

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值