Activiti系列(二)集成Activiti Modeler

xiaoxiao2021-02-28  43

Activiti6.0.0及以上版本与activiti-modeler的maven引用有冲突,解决方法参考 Activiti6.0.0及以上版本集成Activiti Modeler

1.下载源文件

activiti-5.22.0官方Demo

activiti5.22.0源码

2.copy源文件

(一)复制前端文件

解压activiti-5.22.0官方Demo

解压activiti-explorer.war

复制editor-app,diagram-viewer文件夹,以及modele.html到本地项目

(2)复制服务端文件

解压activiti5.22.0源码

复制ModelEditorJsonRestResource.java,ModelSaveRestResource.java,StencilsetRestResource.java到控制层文件夹下

3.添加maven引用

<dependency> <groupId>org.activiti</groupId> <artifactId>activiti-modeler</artifactId> <version>5.22.0</version> </dependency>

4.启动项目,访问modeler页面

http://localhost:8080/modeler.html

修改启动类,屏蔽登录功能

@SpringBootApplication @EnableAutoConfiguration(exclude = { org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration.class, org.activiti.spring.boot.SecurityAutoConfiguration.class, }) public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }

再次访问modeler页面

处理 /activiti-explorer/service/model//json 请求的报错

该请求的控制类为ModelEditorJsonRestResource.java

@RequestMapping(value="/model/{modelId}/json", method = RequestMethod.GET, produces = "application/json")

在/public/editor-app/app-cfg.js文件中修改请求的地址

ACTIVITI.CONFIG = { //'contextRoot' : '/activiti-explorer/service', 'contextRoot' : '', };

再次访问modeler页面

报错GET http://localhost:8080/model//json 404 () 这是因为我们没有已经建好的model模型,无法查看

5.新建model

测试类

@Controller @RequestMapping("model") public class ModelTest { @RequestMapping("create") public void createModel(HttpServletRequest request, HttpServletResponse response){ try{ String modelName = "modelName"; String modelKey = "modelKey"; String description = "description"; ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); RepositoryService repositoryService = processEngine.getRepositoryService(); ObjectMapper objectMapper = new ObjectMapper(); 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); Model modelData = repositoryService.newModel(); ObjectNode modelObjectNode = objectMapper.createObjectNode(); modelObjectNode.put(ModelDataJsonConstants.MODEL_NAME, modelName); modelObjectNode.put(ModelDataJsonConstants.MODEL_REVISION, 1); modelObjectNode.put(ModelDataJsonConstants.MODEL_DESCRIPTION, description); modelData.setMetaInfo(modelObjectNode.toString()); modelData.setName(modelName); modelData.setKey(modelKey); //保存模型 repositoryService.saveModel(modelData); repositoryService.addModelEditorSource(modelData.getId(), editorNode.toString().getBytes("utf-8")); response.sendRedirect(request.getContextPath() + "/modeler.html?modelId=" + modelData.getId()); }catch (Exception e){ } } }

访问localhost:8080/model/create

处理http://localhost:8080/editor/stencilset?version=1523329753442请求的报错

在StencilsetRestResource.java中,我们项目中少了stencilset.json

@RestController public class StencilsetRestResource { @RequestMapping(value="/editor/stencilset", method = RequestMethod.GET, produces = "application/json;charset=utf-8") public @ResponseBody String getStencilset() { //stencilset.json为Model中的工具栏的名称字符,这里在resources下面查找 InputStream stencilsetStream = this.getClass().getClassLoader().getResourceAsStream("stencilset.json"); try { return IOUtils.toString(stencilsetStream, "utf-8"); } catch (Exception e) { throw new ActivitiException("Error while loading stencil set", e); } } }

下载stencilset.json,并放置在resources目录下 再次访问localhost:8080/model/create

6.保存Model

处理http://localhost:8080/model/102503/save的报错

修改ModelSaveRestResource.java为

@RestController public class ModelSaveRestResource implements ModelDataJsonConstants { protected static final Logger LOGGER = LoggerFactory.getLogger(ModelSaveRestResource.class); @Autowired private RepositoryService repositoryService; @Autowired private ObjectMapper objectMapper; @RequestMapping(value="/model/{modelId}/save", method = RequestMethod.PUT) @ResponseStatus(value = HttpStatus.OK) public void saveModel(@PathVariable String modelId, String name, String description, String json_xml, String svg_xml) { try { Model model = repositoryService.getModel(modelId); ObjectNode modelJson = (ObjectNode) objectMapper.readTree(model.getMetaInfo()); modelJson.put(MODEL_NAME, name); modelJson.put(MODEL_DESCRIPTION, description); model.setMetaInfo(modelJson.toString()); model.setName(name); repositoryService.saveModel(model); repositoryService.addModelEditorSource(model.getId(), json_xml.getBytes("utf-8")); InputStream svgStream = new ByteArrayInputStream(svg_xml.getBytes("utf-8")); TranscoderInput input = new TranscoderInput(svgStream); PNGTranscoder transcoder = new PNGTranscoder(); // Setup output ByteArrayOutputStream outStream = new ByteArrayOutputStream(); TranscoderOutput output = new TranscoderOutput(outStream); // Do the transformation transcoder.transcode(input, output); final byte[] result = outStream.toByteArray(); repositoryService.addModelEditorSourceExtra(model.getId(), result); outStream.close(); } catch (Exception e) { LOGGER.error("Error saving model", e); throw new ActivitiException("Error saving model", e); } } }

再次保存,保存成功。Activiti Modeler集成成功

源码下载
转载请注明原文地址: https://www.6miu.com/read-2630967.html

最新回复(0)