工作流我也是第一次接触,刚开始接手这个项目的时候,工作流的部署方式是通过postman发送一些json格式的流程代码去部署,我去学习如何用json写流程的时候简直太痛苦了,后面我就开始查询activiti设计器,终于完美的把设计器整合到我们项目中,每次去绘制发布新的流程的时候,比之前直观多了,但是绘制流程图的过程也是很重要的一门学问,今天我们主要是说如何把activiti设计器整合到springboot中
开始
我们先去官网将设计器前端代码下载下来,进行解压,将文件放在我们的项目资源路径下:
-
我这边下载的版本是activiti-5.22.0
-
下载后解压,进入目录解压wars包,将diagram-viewer,editor-app,modeler.html拷贝到项目的静态文件夹下;
-
我这边存放在resource下static目录下
-
解压libs/activiti-modeler-5.22.0-sources.jar文件,将这两个包文件拷贝到我们的项目中,为这三个文件加入注解:@RequestMapping("/service")
-
这时候我们的项目结构为:
-
我们可以修改editor-app/app-cfg.js里面的路径,保持和我们刚刚写的service请求路径一致
-
新建ModelController,提供进入编辑器的跳转请求,要注意的是这个controller的注解为@Controller,因为我们需要通过他跳转页面
@RequestMapping("/create")
public void newModel(HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException {
try {
//初始化一个空模型
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(request.getContextPath() + "/modeler.html?modelId=" + id);
}catch (IOException e){
e.printStackTrace();
}
}
- 启动项目,访问 http://localhost:8080/model/create可以正常访问,但是进入页面后,页面栏目都空白,查询项目控制台,发现stencilset.json文件找不到,这时候我们把stencilset.json文件拷贝到resource目录下,再次访问,如果你发现拷贝进去了还是访问不到这个文件,clean一下,就好了,说明stencilset.json没有编译,这时候你再访问http://localhost:8080/model/create 就正常了
- stencilset.json我这边是个汉化版文件 下载地址
- 这时候你可以正常绘制流程图,然后点击保存,流程就进入到act_re_model这张表中,发布后数据会存储在act_re_procdef表中,整个整合流程就结束了
遇到问题
- 静态资源文件被拦截问题,添加拦截器
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
registry.addResourceHandler("/favicon.ico")
.addResourceLocations("classpath:/static/favicon.ico");
}
}
-
访问时需要登录账户密码问题,首先账户密码是存在act_id_user表中,如果表中没有记录,那么你可以自己添加一条用户密码进入,就可以登录了
-
项目启动报错Could not update Activiti database schema: unknown version from database: ‘5.22.0.0’,那是因为你导入activit包的版本和数据库中act_ge_property版本不一致导致的,改为一致就可以了
源码下载
我这边做了一些简单的模型查询,发布,流程定义,流程实例,当前任务,历史实例查询的功能,附上源码,前端页面采用的layui,简单实现以下,供大家使用,关于怎么通过设计器去画流程图,以及会签和或签的设置,点击这里查询
源码地址:https://download.csdn.net/download/u010796208/12792239