使用activiti工作流引擎显示流程图时高亮显示流程图中已执行节点和已执行路径方法(AutoEE_V2实现方式)

 

1 AutoEE-自动智能开发平台

 

 

  AutoEE-自动智能快速开发平台官网:http://www.autoee.org

  最新版本:AutoEE_V3.0.4

 

AutoEE_V2版本是在V1版本的基础上进行的升级改造,集成Activiti_5.18.0工作流引擎,引入activiti-explorer在线流程设计器,同时实现流程图中高亮显示流程图中已执行节点和已执行路径,并加亮显示当前执行中的节点,效果如下:

 

2 实现方法

(1)jsp页面中显示“流程状态”超链接,对应js方法如下:

        // 工作流申请模块操作列对应事件
        function getWorkFlowApplyOperateHandler(pProcessInstanceId) {
        return "<a href='#' class='viewProcessImage_Apply_Class' οnclick='openActivitiProccessImagePage("+pProcessInstanceId+")';>流程状态</a>";
        }
        //打开流程图显示界面
        function openActivitiProccessImagePage(pProcessInstanceId) {
        jDialog("ProccessImagePage", "流程图", "900px", "400px", "url:activitiController.do?openActivitiProccessImagePage&pProcessInstanceId="+pProcessInstanceId);
        }

(2)后台ActivitiController.java打开流程图显示页面方法

        /** 
         * 打开流程图显示页面
         **/
        @RequestMapping(params = "openActivitiProccessImagePage")
        public ModelAndView openActivitiProccessImagePage(String pProcessInstanceId) throws Exception {
        logger.info("[开始]-打开流程图显示页面");
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("processInstanceId", pProcessInstanceId);
        modelAndView.setViewName("common/jsp/ActivitiProccessImagePage.jsp");
        logger.info("[完成]-打开流程图显示页面");
        return modelAndView;
        }

(3)前台显示流程图ActivitiProccessImagePage.jsp代码

        <%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
        <%@ page language="java" import="java.util.*"%>
        <%@ page isELIgnored="false"%>
        <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
        <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
        <html>
        <head>
        <title>流程状态</title>
        </head>
        <body>
        <div>
        <img src="<c:url value='activitiController.do?getActivitiProccessImage&pProcessInstanceId=${processInstanceId}' />">
        </div>
        </body>
        </html>

(4)后台ActivitiController.java获取流程图像,已执行节点和流程线高亮显示方法

        /** 
         * 获取流程图像,已执行节点和流程线高亮显示
         */
        @RequestMapping(params = "getActivitiProccessImage")
        public void getActivitiProccessImage(String pProcessInstanceId, HttpServletResponse response) throws Exception {
        logger.info("[开始]-获取流程图图像");
        // 设置页面不缓存
        response.setHeader("Pragma", "No-cache");
        response.setHeader("Cache-Control", "no-cache");
        response.setDateHeader("Expires", 0);
        try {
        //  获取历史流程实例
        HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery()
        .processInstanceId(pProcessInstanceId).singleResult();
        
        if (historicProcessInstance == null) {
        throw new BusinessException("获取流程实例ID[" + pProcessInstanceId + "]对应的历史流程实例失败!");
        } else {
        // 获取流程定义
        ProcessDefinitionEntity processDefinition = (ProcessDefinitionEntity) ((RepositoryServiceImpl) repositoryService)
        .getDeployedProcessDefinition(historicProcessInstance.getProcessDefinitionId());
        
        // 获取流程历史中已执行节点,并按照节点在流程中执行先后顺序排序
        List<HistoricActivityInstance> historicActivityInstanceList = historyService.createHistoricActivityInstanceQuery()
        .processInstanceId(pProcessInstanceId).orderByHistoricActivityInstanceId().asc().list();
        
        // 已执行的节点ID集合
        List<String> executedActivityIdList = new ArrayList<String>();
        int index = 1;
        logger.info("获取已经执行的节点ID");
        for (HistoricActivityInstance activityInstance : historicActivityInstanceList) {
        executedActivityIdList.add(activityInstance.getActivityId());
        logger.info("第[" + index + "]个已执行节点=" + activityInstance.getActivityId() + " : " +activityInstance.getActivityName());
        index++;
        }
        
        // 获取流程图图像字符流
        InputStream imageStream = ProcessDiagramGenerator.generateDiagram(processDefinition, "png", executedActivityIdList);
        
        response.setContentType("image/png");
        OutputStream os = response.getOutputStream();
        int bytesRead = 0;
        byte[] buffer = new byte[8192];
        while ((bytesRead = imageStream.read(buffer, 0, 8192)) != -1) {
        os.write(buffer, 0, bytesRead);
        }
        os.close();
        imageStream.close();
        }
        logger.info("[完成]-获取流程图图像");
        } catch (Exception e) {
        logger.error("【异常】-获取流程图失败!" + e.getMessage());
        throw new BusinessException("获取流程图失败!" + e.getMessage());
        }
        }

(5)工程中添加ProcessDiagramCanvas.java和ProcessDiagramGenerator.java,并修改原流程图绘制方法,实现流程图中高亮显示流程图中已执行节点和已执行路径,并加亮显示当前执行中的节点

 

          源代码ActivitiProccessImagePage.jsp,ActivitiController.java,ProcessDiagramCanvas.java和ProcessDiagramGenerator.java请在以下CSDN地址中下载:

        http://download.csdn.net/detail/heishuang/9232955

 

        AutoEE_V2.0.0-自动智能开发平台技术文档地址:

        http://blog.csdn.net/heishuang/article/details/49583107

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Activiti 是一个流程引擎框架,可以帮助开发者快速实现工作流相关的应用。下面是使用 Activiti 创建流程引擎的步骤: 1. 创建 maven 项目,添加 Activiti 依赖。 在项目的 pom.xml 文件添加以下依赖: ``` <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-engine</artifactId> <version>5.22.0</version> </dependency> ``` 2. 创建流程引擎配置类。 在项目创建一个 Java 类,用于配置流程引擎。可以在该类指定数据库连接信息、流程图文件路径等信息。以下是一个示例配置类: ``` import java.io.IOException; import java.io.InputStream; import java.util.Properties; import org.activiti.engine.ProcessEngine; import org.activiti.engine.ProcessEngineConfiguration; import org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration; public class ActivitiConfig { public ProcessEngine getProcessEngine() throws IOException { // 读取配置文件 InputStream inputStream = getClass().getResourceAsStream("/activiti.properties"); Properties properties = new Properties(); properties.load(inputStream); // 配置流程引擎 ProcessEngineConfiguration cfg = new StandaloneProcessEngineConfiguration() .setJdbcUrl(properties.getProperty("jdbc.url")) .setJdbcUsername(properties.getProperty("jdbc.username")) .setJdbcPassword(properties.getProperty("jdbc.password")) .setJdbcDriver(properties.getProperty("jdbc.driver")) .setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_FALSE); // 创建流程引擎 ProcessEngine processEngine = cfg.buildProcessEngine(); return processEngine; } } ``` 在该配置类,我们读取一个名为 activiti.properties 的配置文件,该文件包含了数据库连接信息。在实际开发,我们可以将这些信息存储在外部配置文件,以便于修改和管理。 3. 创建流程图文件。 使用 Activiti Modeler 工具创建流程图文件,或者手动编写 BPMN 2.0 标准的 XML 文件。将该文件放置在项目的 classpath 下,以便于程序能够读取。 4. 启动流程引擎。 在程序使用上述配置类创建流程引擎实例,并启动该实例。以下是一个示例代码: ``` public static void main(String[] args) throws IOException { // 创建流程引擎配置类 ActivitiConfig config = new ActivitiConfig(); // 获取流程引擎实例 ProcessEngine processEngine = config.getProcessEngine(); // 输出流程引擎信息 String name = processEngine.getName(); String version = ProcessEngine.VERSION; System.out.println("流程引擎名称:" + name); System.out.println("流程引擎版本:" + version); // 关闭流程引擎 processEngine.close(); } ``` 在上述示例代码,我们创建了一个 ActivitiConfig 实例,并使用该实例获取了流程引擎。获取流程引擎后,我们可以输出其名称和版本信息,并在程序结束关闭该引擎。 以上就是使用 Activiti 创建流程引擎的步骤。开发者可以根据自己的需求对流程引擎进行配置和使用

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值