简单的Activiti Modoler 流程在线编辑器
1.需求
我们公司使用的流程是activiti5.22.0,版本有些老了,然后使用的编辑器都是eclipse的流程编辑器插件,每次编辑流程需要打开eclipse进行编辑,然后再导入到项目里面,不是特别方便,所以我们决定使用官方提供的 Activiti Modoler,实现项目集成在线编辑器,方便流程的发布编辑以及部署。
2.具体实现步骤
整体的实现步骤就是从官网下载对应的activiti5.22.0 或者版本相近的包,然后找到对应的前端需要集成的文件以及controller等文件,添加到自己的项目中,我使用的springboot项目,然后需要配置静态资源的对应的地址信息,便可以进行简单的使用了。
2.1 添加pom需要jar包
我们此处就只列举了流程所需包,其他包简略
<!-- activiti 5.22.0启动器,排除mybatis依赖 -->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter-basic</artifactId>
<version>5.22.0</version>
<exclusions>
<exclusion>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-diagram-rest</artifactId>
<version>5.22.0</version>
</dependency>
<!-- Activiti在线设计 -->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-modeler</artifactId>
<version>5.22.0</version>
</dependency>
2.2 下载包
我们下载的地址为 activiti5.x.x 官方包
2.3 解压复制文件到项目中
替换文件主要是两部分,一部分为java文件,一部分为静态资源文件,首先替换java文件
activiti-webexplore\Activiti-5.x\modules\activiti-modeler\src\main\java\org\activiti\rest\editor
向下的所有java文件到自己项目中
注意,
ModelSaveRestResource
对应的请求方式修改为 POST。
在之后我们需要添加一个发起流程图编辑或新增的入口 ModelerController
,发起以及修改全部从此方法进入,最后导入后台文件效果如下
最后添加的几个controller代码如下:
-
ModelEditorJsonRestResource
package cn.git.workflow.modeler; import cn.git.common.exception.ServiceException; import cn.git.common.util.LogUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONObject; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.activiti.editor.constants.ModelDataJsonConstants; import org.activiti.engine.RepositoryService; import org.activiti.engine.repository.Model; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import java.nio.charset.StandardCharsets; /** * @description: 通过modelId获取流程model json数据 * @program: bank-credit-sy * @author: lixuchun * @create: 2024-11-21 */ @Api(value = "model流程设计器获取json数据", tags = "model流程设计器获取json数据") @Slf4j @RestController public class ModelEditorJsonRestResource implements ModelDataJsonConstants { @Autowired private RepositoryService repositoryService; @Autowired private ObjectMapper objectMapper; /** * 获取流程图json数据 * * @param modelId * @return */ @ApiOperation(value = "获取流程图json数据", notes = "获取流程图json数据") @RequestMapping(value = "/model/{modelId}/json", method = RequestMethod.GET, produces = "application/json") public Object getEditorJson(@PathVariable String modelId) { // 最终响应数据 ObjectNode modelNode = null; Model model = repositoryService.getModel(modelId); // 获取流程定义 if (ObjectUtil.isNotNull(model)) { try { // 获取流程定义的JSON数据 if (StrUtil.isNotBlank(model.getMetaInfo())) { modelNode = (ObjectNode) objectMapper.readTree(model.