Activiti应用实践-查询BPMN XML文件和图片资源文件

Posted Neo Yang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Activiti应用实践-查询BPMN XML文件和图片资源文件相关的知识,希望对你有一定的参考价值。

一、概述

Activiti流程部署后,前端也需要在页面上看到流程的定义,还有可能会修改。下面给的是获取图片资源文件和XML文件的样例代码。

二、获取图片资源

Activiti提供了经由BPMN XML文件生成png图片文件的功能,也有其它更强的能力。但需要解决不同环境,字体、乱码等问题。如果需求比较简单,只是需要静态查看一下流程的定义,倒是可以在部署时直接提供一张图片,后面再查询该图片返回给前端展示。

1、rest层接口代码

/**
 * 获取流程定义图片。
 *
 * @param response http请求响应
 * @param processDefineId 流程定义ID
 */
@GetMapping("/v1/process-image")
@ApiOperation(value = "获取流程定义图片")
public void getProcessDefineImge(HttpServletResponse response,
                                 @ApiParam(value = "流程定义ID")
                                 @RequestParam("processDefineId") String processDefineId)
    InputStream inputStream = activitiProcessService.getProcessDefineResource(processDefineId, 2);

    byte[] bytes = new byte[1024];
    response.setContentType("image/png");

    try 
        OutputStream outputStream = response.getOutputStream();
        while (inputStream.read(bytes) != -1) 
            outputStream.write(bytes);
        

        inputStream.close();
     catch (IOException e) 
        e.printStackTrace();
    

2、业务层实现逻辑

/**
 * 获取流程定义资源。
 *
 * @param processDefineId 流程定义ID
 * @param type 1-获取xml, 2-获取图片
 * @return 文件流
 */
public InputStream getProcessDefineResource(String processDefineId, int type) 
    ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
            .processDefinitionId(processDefineId).singleResult();

    String resourceName = "";
    if (type == 1) 
        resourceName = processDefinition.getResourceName();
     else if (type == 2) 
        resourceName = processDefinition.getDiagramResourceName();
     else 
        return null;
    

    return repositoryService.getResourceAsStream(processDefinition.getDeploymentId(), resourceName);

三、获取BPMN XML文件

1、rest层接口

/**
 * 获取流程定义XML。
 *
 * @param response http请求响应
 * @param processDefineId 流程定义ID
 */
@GetMapping("/v1/process-xml")
@ApiOperation(value = "获取流程定义XML")
public void getProcessDefineXML(HttpServletResponse response,
                                 @ApiParam(value = "流程定义ID")
                                 @RequestParam("processDefineId") String processDefineId)
    InputStream inputStream = activitiProcessService.getProcessDefineResource(processDefineId, 1);

    byte[] bytes = new byte[1024];
    response.setContentType("text/xml");

    try 
        OutputStream outputStream = response.getOutputStream();
        while (inputStream.read(bytes) != -1) 
            outputStream.write(bytes);
        

        inputStream.close();
     catch (IOException e) 
        e.printStackTrace();
    

2、业务层实现逻辑

与获取图片资源接口共用。

源码GitHub路径: https://github.com/ylforever/elon-activiti

以上是关于Activiti应用实践-查询BPMN XML文件和图片资源文件的主要内容,如果未能解决你的问题,请参考以下文章

如何打包Activiti的流程资源文件

前台怎么显示activiti流程图

工作流引擎Activiti的使用进阶!详细分析工作流框架中高级功能的使用示例

Activiti工作流学习问题总结

Activiti工作流学习问题总结

Activiti工作流学习问题总结