精华内容
下载资源
问答
  • SpringBoot整整合合Activiti7的的实实现现代代码码 这篇文章主要介绍了SpringBoot整合Activiti7的实现代码文中通过示例代码介绍的非常详细对大家的学习或者 工作具有一定的参考学习 值需要的朋友们下面随着小编来...
  • SpringBoot整合Activiti简单示例,示例中包含正常流程执行、指定流程节点执行人等测试代码。
  • springboot整合activiti6.0的代码demo,首先按照自己的数据库地址修改springboot地址,然后运行AppBoot启动类,启动工程,然后通过postman工具访问MyController类中的方法即可观察结果。
  • springboot整合activiti工作流Workflow 安装本机java环境 用idea打开本项目文件 启动项目 即可生成activiti工作流的相应配置,基本环境 act_evt_log.sql里是新建activiti工作流所需要的表列表
  • SpringBoot整合Activiti简单示例,示例中包含正常流程执行、中文乱码解决、指定流程节点执行人等测试代码。
  • 主要介绍了SpringBoot整合Activiti7的实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • springboot 整合Activiti工作流 集成 Diagram Viewer跟踪流程
  • springboot整合activiti

    2021-06-09 16:23:11
    activiti是目前比较流行的工作流框架,但是activiti学起来还是费劲,还是有点难度的,如何整合在线编辑器,如何和业务表单绑定,如何和系统权限绑定,这些问题都是要考虑到的,不是说纯粹的把activiti整合到系统中就...


    前言

    activiti是目前比较流行的工作流框架,但是activiti学起来还是费劲,还是有点难度的,如何整合在线编辑器,如何和业务表单绑定,如何和系统权限绑定,这些问题都是要考虑到的,不是说纯粹的把activiti整合到系统中就完事了。如今国内比较流行的是前后端分离模式,之前都是前后端放一个工程里面,接口风格很乱,并且不好维护,前后端开发不是很方便。目前前端都做成了工程化的形式,比如国产的Vue,国外的React等等。为了顺应潮流,我就做了一套springboot-vue-activiti的快速开发小脚手架,对于大型项目来说还是不太适合,毕竟来说,一个人的开发能力有限,但是对于中小微型项目,并且带有审批业务的项目来说,那简直就是一个福音了。

    一、效果展示

    1.模型设计器

    模型设计

    2.流程节点设置

    审批人员可以根据角色、部门、部门负责人、直接选择人员等。
    在这里插入图片描述

    3.审批进度查询

    在这里插入图片描述

    二、操作过程

    1.引入activiti依赖

    <!-- Activiti 启动器 -->
        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-spring-boot-starter-basic</artifactId>
            <version>${activiti.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>org.mybatis</groupId>
                    <artifactId>mybatis</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!-- Activiti 流程图 -->
        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-diagram-rest</artifactId>
            <version>${activiti.version}</version>
        </dependency>
        <!-- Activiti 在线设计 -->
        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-modeler</artifactId>
            <version>${activiti.version}</version>
        </dependency>
    

    2.编辑器代码及汉化

    编辑器

    3.application.yml配置

    activiti:
        check-process-definitions: false
        #启用作业执行器
        async-executor-activate: false
        #启用异步执行器
        job-executor-activate: false    
    

    4.数据库表

    在这里插入图片描述

    三、业务表单和系统权限绑定

    1.思路

    1.新建一张流程定义扩展表(用来存储流程部署的基本信息、关联业务表名、前端路由信息、业务表单类型等),流程部署完后往流程定义扩展表插入部署基本信息,然后编辑已发布的流程,往扩展表中插入本流程的分类,关联表单信息。
    2.关于自定义节点设置,主要是用来定义每个节点由哪个角色,或者具体哪个人来审批。建立一张节点扩展表(存储节点流转信息,指定人ID、角色ID,等)。

    2.部分代码

    // 获取模型
            Model modelData = repositoryService.getModel(id);
            byte[] bytes = repositoryService.getModelEditorSource(modelData.getId());
            if (bytes == null) {
                return Result.error("模型数据为空,请先成功设计流程并保存");
            }
            try {
                JsonNode modelNode = new ObjectMapper().readTree(bytes);
                BpmnModel model = new BpmnJsonConverter().convertToBpmnModel(modelNode);
                if(model.getProcesses().size()==0){
                    return Result.error("模型不符要求,请至少设计一条主线流程");
                }
                byte[] bpmnBytes = new BpmnXMLConverter().convertToXML(model);
                // 部署发布模型流程
                String processName = modelData.getName() + ".bpmn20.xml";
                Deployment deployment = repositoryService.createDeployment()
                        .name(modelData.getName())
                        .addString(processName, new String(bpmnBytes, "UTF-8"))
                        .deploy();
                String metaInfo = modelData.getMetaInfo();
                JSONObject metaInfoMap = JSON.parseObject(metaInfo);
                // 设置流程分类,保存扩展流程至数据库
                List<ProcessDefinition> list = repositoryService.createProcessDefinitionQuery().deploymentId(deployment.getId()).list();
                for (ProcessDefinition pd : list) {
                    ActZprocess actZprocess = new ActZprocess();
                    actZprocess.setId(pd.getId());
                    actZprocess.setName(modelData.getName());
                    actZprocess.setProcessKey(modelData.getKey());
                    actZprocess.setDeploymentId(deployment.getId());
                    actZprocess.setDescription(metaInfoMap.getString(ModelDataJsonConstants.MODEL_DESCRIPTION));
                    actZprocess.setVersion(pd.getVersion());
                    actZprocess.setDiagramName(pd.getDiagramResourceName());
                    actZprocessService.setAllOldByProcessKey(modelData.getKey());
                    actZprocess.setLatest(true);
                    actZprocessService.save(actZprocess);
                }
            }catch (Exception e){
                String err = e.toString();
                log.error(e.getMessage(),e);
                if (err.indexOf("NCName")>-1){
                    return Result.error("部署失败:流程设计中的流程名称不能为空,不能为数字以及特殊字符开头!");
                }
                if (err.indexOf("PRIMARY")>-1){
                    return Result.error("部署失败:该模型已发布,key唯一!");
                }
                return Result.error("部署失败!");
            }
            return Result.ok("部署成功");
    
    /*获取高亮实时流程图*/
        @RequestMapping(value = "/getHighlightImg/{id}", method = RequestMethod.GET)
        public void getHighlightImg(@PathVariable String id, HttpServletResponse response){
            InputStream inputStream = null;
            ProcessInstance pi = null;
            String picName = "";
            // 查询历史
            HistoricProcessInstance hpi = historyService.createHistoricProcessInstanceQuery().processInstanceId(id).singleResult();
            if (hpi.getEndTime() != null) {
                // 已经结束流程获取原图
                ProcessDefinition pd = repositoryService.createProcessDefinitionQuery().processDefinitionId(hpi.getProcessDefinitionId()).singleResult();
                picName = pd.getDiagramResourceName();
                inputStream = repositoryService.getResourceAsStream(pd.getDeploymentId(), pd.getDiagramResourceName());
            } else {
                pi = runtimeService.createProcessInstanceQuery().processInstanceId(id).singleResult();
                BpmnModel bpmnModel = repositoryService.getBpmnModel(pi.getProcessDefinitionId());
    
                List<String> highLightedActivities = new ArrayList<String>();
                // 高亮任务节点
                List<Task> tasks = taskService.createTaskQuery().processInstanceId(id).list();
                for (Task task : tasks) {
                    highLightedActivities.add(task.getTaskDefinitionKey());
                }
                List<String> highLightedFlows = new ArrayList<String>();
                ProcessDiagramGenerator diagramGenerator = processEngineConfiguration.getProcessDiagramGenerator();
                //"宋体"
                inputStream = diagramGenerator.generateDiagram(bpmnModel, "png", highLightedActivities, highLightedFlows,
                        "宋体", "宋体", "宋体",null, 1.0);
                picName = pi.getName()+".png";
            }
            try {
                response.setContentType("application/octet-stream;charset=UTF-8");
                response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(picName, "UTF-8"));
                byte[] b = new byte[1024];
                int len = -1;
                while ((len = inputStream.read(b, 0, 1024)) != -1) {
                    response.getOutputStream().write(b, 0, len);
                }
                response.flushBuffer();
            } catch (IOException e) {
                log.error(e.toString());
                throw new JeecgBootException("读取流程图片失败");
            }
        }
    

    总结

    上面只是展示了部分代码和部分效果图,对于一个正常的审批流转业务来说,提交审批,申请人撤销,重新申请,审批人驳回,委托他人审批,会签,流程挂起,流程实时跟踪,并行网关,排他网关,监听,待办,已办消息通知等都是必须要的,我这就不一一展现了,如有需要,可以+q:2500564056。

    展开全文
  • 简单介绍了,Springboot 整合activiti6.0,以及整合的demo。demo是一个简单的请假审批流程,如果下载后,bpm文件是乱码,请修改编码方式为utf-8
  • SpringBoot整合activiti

    2020-01-21 10:45:42
    终于弄好了,中间走了很多弯路,虽说其实这个整合很简单,但是但是查找网上资料被误导了很多地方(可能也是因为自己学艺不精没有理解作者的意图),下面奉上两种springBoot整合activiti的方案。截止2019-8-29可用 1. ...

    大力出奇迹
    Author:ymy

    困扰了朕半个月的springBoot和activiti的整合,终于弄好了,中间走了很多弯路,虽说其实这个整合很简单,但是但是查找网上资料被误导了很多地方(可能也是因为自己学艺不精没有理解作者的意图),下面奉上两种springBoot整合activiti的方案。截止2019-8-29可用

    1. 不使用starter整合

    1. 依赖

          <dependency>
              <groupId>org.activiti</groupId>
              <artifactId>activiti-spring</artifactId>
              <version>6.0.0</version>
          </dependency>
          <!--其他依赖有需要再加-->
      
    2. 数据源

      spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
      spring.datasource.url=jdbc:mysql://localhost:3306/activiti
          ?useUnicode=true&
          characterEncoding=utf-8&
          useSSL=false&
          serverTimezone=UTC&
          nullCatalogMeansCurrent=true
      spring.datasource.username=root
      spring.datasource.password=root
      

      需要注意的是,在url中,添加了针对数据库的条件,其中最后一条nullCatalogMeansCurrent=true非常重要,至于有什么用就不概述了,但是没有这条语句的话就无法自动创建对应的二十八张表

    3. 配置

       @Configuration
       public class ActivitiConfig {
       /*
       * 配置分为以下几步骤
       * 1. 创建ActivitiConfig
       * 2. 使用ActivitiConfig创建ProcessEngineFactoryBean
       * 3. 使用ProcessEngineFactoryBean创建ProcessEngine对象
       * 4. 使用ProcessEngine对象创建需要的服务对象
       * */
       private Logger logger = LoggerFactory.getLogger(ActivitiConfig.class);
      
       private final DataSource dataSource;
      
       private final PlatformTransactionManager platformTransactionManager;
       @Autowired
       public ActivitiConfig(DataSource dataSource, PlatformTransactionManager platformTransactionManager) {
           this.dataSource = dataSource;
           this.platformTransactionManager = platformTransactionManager;
       }
       /*
       * 1. 创建配置文件,也就是提供一些配置信息,这样就可以自定义自己的创建信息了
       * 需要一些参数,1. 数据源。2. 事务管理器。
       * 这里还加入了自动扫描process包下的bpmn(流程定义文件)的设置,这样就可以省去了部署
        * */
           @Bean
           public SpringProcessEngineConfiguration springProcessEngineConfiguration() {
               SpringProcessEngineConfiguration spec = new SpringProcessEngineConfiguration();
               spec.setDataSource(dataSource);
               spec.setTransactionManager(platformTransactionManager);
               spec.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
               Resource[] resources = null;
               // 启动自动部署流程
               try {
                   resources = new PathMatchingResourcePatternResolver().getResources("classpath*:process/*.bpmn");
               } catch (IOException e) {
                   e.printStackTrace();
               }
               spec.setDeploymentResources(resources);
               return spec;
           }
       
           @Bean
           public ProcessEngineFactoryBean processEngine() {
               ProcessEngineFactoryBean processEngineFactoryBean = new ProcessEngineFactoryBean();
               processEngineFactoryBean.setProcessEngineConfiguration(springProcessEngineConfiguration());
               return processEngineFactoryBean;
           }
       
           @Bean
           public RepositoryService repositoryService() throws Exception {
               return processEngine().getObject().getRepositoryService();
           }
       
           @Bean
           public RuntimeService runtimeService() throws Exception {
               return processEngine().getObject().getRuntimeService();
           }
       
           @Bean
           public TaskService taskService() throws Exception {
               return processEngine().getObject().getTaskService();
           }
       
           @Bean
           public HistoryService historyService() throws Exception {
               return processEngine().getObject().getHistoryService();
           }
        }
      
    4. 在resources中创建process文件夹,文件夹的路径和名字需要和ActivitiConfig中的配置保持一致

    5. 启动springBoot项目即可创建完成

    2. 使用starter

    1. 导入依赖

          <dependency>
              <groupId>org.activiti</groupId>
              <artifactId>activiti-spring-boot-starter</artifactId>
              <version>7.1.0.M3.1</version>
          </dependency>
      

      需要注意的是,这里的依赖版本,需要对应数据库中act_ge_property表中schema.version版本信息,所以一般不建议在创建完表之后修改依赖信息

    2. application.propertie

      spring.activiti.database-schema-update=true
      spring.activiti.process-definition-location-prefix=classpath:/process
      # 注意,如果process后面加上了/,就要求启动的时候process文件夹中需要有流程定义文件
      # 这里还是记得注意最后面添加url时添加的语句
      
      spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
      spring.datasource.url=jdbc:mysql://localhost:3306/activiti?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC&nullCatalogMeansCurrent=true
      spring.datasource.username=root
      spring.datasource.password=root
      
    3. resources文件夹下创建对应需要的文件夹即可

    4. 启动,即可看到数据库中创建了对应的表信息
      这个方案有点缺陷,默认不创建history对应的表,需要自己在application.properties中进行手动配置

    展开全文
  • SpringBoot集成Activiti完整工作流管理系统源码及SQL 包含如下主要内容: 1、工作流完整案例(请假流程、请假会签流程Demo) 2、系统用户权限、工作流用户和用户组管理 3、支持在线流程模型定义、部署、导出。也可用...
  • 主要介绍了SpringBoot2整合activiti6环境搭建过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • 数据库准备工作 ...在activiti-5.22.0\database\create目录下找到对应数据库的脚本,比如mysql的 这三个脚本中的第一个是创建engine相关的数据表,第二个是创建history相关的数据表,第三个是创建identity

    系列文章目录(springboot整合activiti5)

    数据库准备工作

    登录activiti官方网站:https://www.activiti.org/
    在底部找到版本Version 5
    在这里插入图片描述
    打开之后再点击下载地址
    在这里插入图片描述
    进入地址https://www.activiti.org/get-started
    在这里插入图片描述
    针对下载后的文件解压,如下图所示
    在这里插入图片描述
    activiti-5.22.0\database\create目录下找到对应数据库的脚本,比如mysql的
    在这里插入图片描述
    这三个脚本中的第一个是创建engine相关的数据表,第二个是创建history相关的数据表,第三个是创建identity(用户。组)相关的数据表。

    创建maven项目

    activiti提供了SpringBoot的启动依赖,对应的地址为
    https://github.com/Activiti/Activiti/tree/5.x/modules/activiti-spring-boot
    在这里插入图片描述
    所以采用maven构建SpringBoot项目,SpringBoot和Spring版本如下所示

    <spring-boot.version>1.5.22.RELEASE</spring-boot.version>
    <springframework.version>4.3.24.RELEASE</springframework.version>
    

    如果采用2.x的SpringBoot,本人搭建会出现编译通不过的情况。另外数据源采用druid,所以引入以下依赖

    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid-spring-boot-starter</artifactId>
        <version>1.1.17</version>
    </dependency>
    

    数据层采用MyBatis,引入依赖

    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>1.3.5</version>
    </dependency>
    

    支持JSP,引入以下的依赖

    <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-jasper</artifactId>
        <scope>provided</scope>
        <version>8.5.0</version>
    </dependency>
    <!-- servlet依赖. -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <scope>provided</scope>
        <version>3.1.0</version>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>
    

    完整的依赖如下所示

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <artifactId>xquant-platform-component-test-ext</artifactId>
        <packaging>jar</packaging>
        <groupId>com.xquant.platform.component.test</groupId>
        <name>xquant-platform-component-test-ext</name>
        <version>1.0.0.0</version>
        <url>http://maven.apache.org</url>
    
    
        <properties>
            <spring-boot.version>1.5.22.RELEASE</spring-boot.version>
            <springframework.version>4.3.24.RELEASE</springframework.version>
            <dubbo.version>2.7.7</dubbo.version>
            <maven.compiler.encoding>UTF-8</maven.compiler.encoding>
            <jdk.source.veriosn>1.8</jdk.source.veriosn>
            <jdk.target.veriosn>1.8</jdk.target.veriosn>
            <activiti.version>5.22.0</activiti.version>
        </properties>
    
        <dependencies>
    
            <dependency>
                <groupId>org.activiti</groupId>
                <artifactId>activiti-spring-boot-starter-basic</artifactId>
                <version>${activiti.version}</version>
                <exclusions>
                    <exclusion>
                        <artifactId>spring-beans</artifactId>
                        <groupId>org.springframework</groupId>
                    </exclusion>
                    <exclusion>
                        <artifactId>spring-context</artifactId>
                        <groupId>org.springframework</groupId>
                    </exclusion>
                    <exclusion>
                        <artifactId>spring-core</artifactId>
                        <groupId>org.springframework</groupId>
                    </exclusion>
                    <exclusion>
                        <artifactId>spring-tx</artifactId>
                        <groupId>org.springframework</groupId>
                    </exclusion>
                    <exclusion>
                        <artifactId>spring-boot-starter</artifactId>
                        <groupId>org.springframework.boot</groupId>
                    </exclusion>
                    <exclusion>
                        <artifactId>spring-boot-starter-jdbc</artifactId>
                        <groupId>org.springframework.boot</groupId>
                    </exclusion>
                    <exclusion>
                        <artifactId>spring-jdbc</artifactId>
                        <groupId>org.springframework</groupId>
                    </exclusion>
                    <exclusion>
                        <artifactId>slf4j-api</artifactId>
                        <groupId>org.slf4j</groupId>
                    </exclusion>
                    <exclusion>
                        <artifactId>jackson-core</artifactId>
                        <groupId>com.fasterxml.jackson.core</groupId>
                    </exclusion>
                    <exclusion>
                        <artifactId>jackson-databind</artifactId>
                        <groupId>com.fasterxml.jackson.core</groupId>
                    </exclusion>
                    <exclusion>
                        <artifactId>commons-lang3</artifactId>
                        <groupId>org.apache.commons</groupId>
                    </exclusion>
                    <exclusion>
                        <artifactId>jcl-over-slf4j</artifactId>
                        <groupId>org.slf4j</groupId>
                    </exclusion>
                    <exclusion>
                        <artifactId>activation</artifactId>
                        <groupId>javax.activation</groupId>
                    </exclusion>
                    <exclusion>
                        <artifactId>mybatis</artifactId>
                        <groupId>org.mybatis</groupId>
                    </exclusion>
                </exclusions>
            </dependency>
    
            <dependency>
                <groupId>org.codehaus.groovy</groupId>
                <artifactId>groovy-all</artifactId>
                <version>2.4.15</version>
            </dependency>
    
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-lang3</artifactId>
                <version>3.7</version>
            </dependency>
    
            <dependency>
                <groupId>org.apache.tomcat.embed</groupId>
                <artifactId>tomcat-embed-jasper</artifactId>
                <scope>provided</scope>
                <version>8.5.0</version>
            </dependency>
            <!-- servlet依赖. -->
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <scope>provided</scope>
                <version>3.1.0</version>
            </dependency>
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>jstl</artifactId>
                <version>1.2</version>
            </dependency>
    
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid-spring-boot-starter</artifactId>
                <version>1.1.17</version>
                <exclusions>
                    <exclusion>
                        <artifactId>spring-boot-autoconfigure</artifactId>
                        <groupId>org.springframework.boot</groupId>
                    </exclusion>
                </exclusions>
            </dependency>
    
            <dependency>
                <artifactId>spring-boot-starter-logging</artifactId>
                <groupId>org.springframework.boot</groupId>
                <version>${spring-boot.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>1.3.5</version>
                <exclusions>
                    <exclusion>
                        <artifactId>spring-boot-starter-logging</artifactId>
                        <groupId>org.springframework.boot</groupId>
                    </exclusion>
                    <exclusion>
                        <artifactId>javassist</artifactId>
                        <groupId>org.javassist</groupId>
                    </exclusion>
                </exclusions>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
                <version>${spring-boot.version}</version>
            </dependency>
    
            <!--        <dependency>-->
            <!--            <groupId>org.springframework.boot</groupId>-->
            <!--            <artifactId>spring-boot-starter-aop</artifactId>-->
            <!--            <version>${spring-boot.version}</version>-->
            <!--        </dependency>-->
    
            <!--        <dependency>-->
            <!--            <groupId>org.springframework.boot</groupId>-->
            <!--            <artifactId>spring-boot-starter-tomcat</artifactId>-->
            <!--            <version>${spring-boot.version}</version>-->
            <!--        </dependency>-->
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-jdbc</artifactId>
                <version>${spring-boot.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-actuator</artifactId>
                <version>${spring-boot.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-configuration-processor</artifactId>
                <version>${spring-boot.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
                <version>${spring-boot.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <version>${spring-boot.version}</version>
                <scope>test</scope>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
                <version>${springframework.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aspects</artifactId>
                <version>${springframework.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-expression</artifactId>
                <version>${springframework.version}</version>
            </dependency>
    
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-orm</artifactId>
                <version>${springframework.version}</version>
            </dependency>
    
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>${springframework.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context-support</artifactId>
                <version>${springframework.version}</version>
            </dependency>
    
            <dependency>
                <groupId>commons-io</groupId>
                <artifactId>commons-io</artifactId>
                <version>2.6</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>${springframework.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-tx</artifactId>
                <version>${springframework.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jdbc</artifactId>
                <version>${springframework.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-oxm</artifactId>
                <version>${springframework.version}</version>
            </dependency>
    
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>8.0.20</version>
            </dependency>
    
    
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>1.2.69</version>
            </dependency>
    
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-classic</artifactId>
                <version>1.2.3</version>
            </dependency>
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-core</artifactId>
                <version>1.2.3</version>
            </dependency>
    
            <!--        <dependency>-->
            <!--            <groupId>org.junit.jupiter</groupId>-->
            <!--            <artifactId>junit-jupiter</artifactId>-->
            <!--            <version>5.6.2</version>-->
            <!--            <scope>test</scope>-->
            <!--        </dependency>-->
            <!--        &lt;!&ndash; https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api &ndash;&gt;-->
            <!--        <dependency>-->
            <!--            <groupId>org.junit.jupiter</groupId>-->
            <!--            <artifactId>junit-jupiter-api</artifactId>-->
            <!--            <version>5.6.2</version>-->
            <!--            <scope>test</scope>-->
            <!--        </dependency>-->
            <!--        &lt;!&ndash; https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-engine &ndash;&gt;-->
            <!--        <dependency>-->
            <!--            <groupId>org.junit.jupiter</groupId>-->
            <!--            <artifactId>junit-jupiter-engine</artifactId>-->
            <!--            <version>5.6.2</version>-->
            <!--            <scope>test</scope>-->
            <!--        </dependency>-->
            <!--        &lt;!&ndash; https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-params &ndash;&gt;-->
            <!--        <dependency>-->
            <!--            <groupId>org.junit.jupiter</groupId>-->
            <!--            <artifactId>junit-jupiter-params</artifactId>-->
            <!--            <version>5.6.2</version>-->
            <!--            <scope>test</scope>-->
            <!--        </dependency>-->
            <!--        &lt;!&ndash; https://mvnrepository.com/artifact/org.junit.platform/junit-platform-commons &ndash;&gt;-->
            <!--        <dependency>-->
            <!--            <groupId>org.junit.platform</groupId>-->
            <!--            <artifactId>junit-platform-commons</artifactId>-->
            <!--            <version>1.6.2</version>-->
            <!--        </dependency>-->
            <!--        &lt;!&ndash; https://mvnrepository.com/artifact/org.junit.platform/junit-platform-engine &ndash;&gt;-->
            <!--        <dependency>-->
            <!--            <groupId>org.junit.platform</groupId>-->
            <!--            <artifactId>junit-platform-engine</artifactId>-->
            <!--            <version>1.6.2</version>-->
            <!--            <scope>test</scope>-->
            <!--        </dependency>-->
    
            <!--        <dependency>-->
            <!--            <groupId>com.relevantcodes</groupId>-->
            <!--            <artifactId>extentreports</artifactId>-->
            <!--            <version>2.41.2</version>-->
            <!--            <exclusions>-->
            <!--                <exclusion>-->
            <!--                    <artifactId>mongodb-driver</artifactId>-->
            <!--                    <groupId>org.mongodb</groupId>-->
            <!--                </exclusion>-->
            <!--            </exclusions>-->
            <!--        </dependency>-->
    
        </dependencies>
    
    
        <build>
            <finalName>xquant-platform-component-test-ext</finalName>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>2.5.1</version>
                    <configuration>
                        <source>${jdk.source.veriosn}</source>
                        <target>${jdk.target.veriosn}</target>
                        <encoding>${maven.compiler.encoding}</encoding>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-resources-plugin</artifactId>
                    <version>2.6</version>
                    <configuration>
                        <encoding>UTF-8</encoding>
                    </configuration>
                </plugin>
                <plugin>
                    <artifactId>maven-source-plugin</artifactId>
                    <version>2.4</version>
                    <executions>
                        <execution>
                            <phase>package</phase>
                            <goals>
                                <goal>jar-no-fork</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <!-- JUnit 5 requires Surefire version 2.22.0 or higher -->
                    <version>2.22.2</version>
                </plugin>
            </plugins>
        </build>
    
        <reporting>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-report-plugin</artifactId>
                    <version>3.0.0-M4</version>
                    <configuration>
                        <showSuccess>false</showSuccess>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-site-plugin</artifactId>
                    <version>3.8.2</version>
                    <configuration>
                        <locales>zh_CN</locales>
                        <moduleExcludes>
                            <fml>*.fml</fml>
                        </moduleExcludes>
                    </configuration>
                </plugin>
            </plugins>
        </reporting>
    
    
        <repositories>
            <repository>
                <id>aliyunmaven</id>
                <name>阿里云公共仓库</name>
                <url>https://maven.aliyun.com/repository/public</url>
                <snapshots>
                    <enabled>true</enabled>
                </snapshots>
            </repository>
            <repository>
                <id>spring-milestones</id>
                <name>Spring Milestones</name>
                <url>https://repo.spring.io/libs-milestone</url>
                <snapshots>
                    <enabled>false</enabled>
                </snapshots>
            </repository>
            <repository>
                <id>maven-public</id>
                <url>http://191.168.5.144:8081/repository/maven-public/</url>
                <snapshots>
                    <enabled>false</enabled>
                </snapshots>
            </repository>
        </repositories>
    
    </project>
    
    

    然后在配置文件application.properties中指定数据源信息、MyBatis相关配置.JSP配置,完整配置如下所示

    server.port=8080
    management.endpoints.web.exposure.include=*
    management.endpoint.health.show-details=always
    logging.level.root=info
    
    spring.datasource.max-active=8
    spring.datasource.max-wait=10000
    spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
    spring.datasource.username=xir_trdj
    spring.datasource.password=xpar
    spring.datasource.url=jdbc:mysql://191.168.1.14:3307/activiti?allowMultiQueries=true&useUnicode=true&characterEncoding=utf8&useSSL=false&rewriteBatchedStatements=false&serverTimezone=GMT%2B8
    
    mybatis.mapperLocations=classpath*:sqlmapper/**/*.xml
    mybatis.configuration.log-prefix=mybatis.logger.
    #配置jsp
    spring.mvc.view.prefix=/WEB-INF/views/
    spring.mvc.view.suffix=.jsp
    
    logging.level.org.activiti.engine=trace
    

    配置数据源

    package com.xquant.platform.test.activiti.config;
    
    import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.boot.context.properties.EnableConfigurationProperties;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    import javax.sql.DataSource;
    
    @Configuration
    @EnableConfigurationProperties
    public class RootConfig {
    
        @Bean
        @ConfigurationProperties("spring.datasource.druid.one")
        public DataSource dataSource() {
            return DruidDataSourceBuilder.create().build();
        }
    
    }
    
    

    为了存放jsp以及其他静态文件,需要创建一个webapp的目录,最后项目的结构如下所示
    在这里插入图片描述

    展开全文
  • springboot整合activiti5.22实现页面流程设计项目,可直接启动,自动建表,调用接口http://localhost:8080/models/newModel,创建流程模型后,可直接访问http://localhost:8080/static/modeler.html?modelId=75001...
  • 系列文章目录(springboot整合activiti5) 在web开发中的表单,可以理解为yoghurt交互的重要入口,用户通过表单输入,然后进行流程交互。Activiti提供了多种类型的表单,比如内置表单、外置表单和业务表单。其实在...

    系列文章目录(springboot整合activiti5)

    在web开发中的表单,可以理解为与用户交互的重要入口,用户通过表单输入,然后进行流程交互。Activiti提供了多种类型的表单,比如内置表单、外置表单和业务表单。其实在前面的章节中,我们接触到的都是内置表单,这是Activiti提供的一种快速方式生成的表单,通过Activiti内置的多种表单元素,就可以开发出带流程管理的表单管理系统。

    <?xml version="1.0" encoding="UTF-8"?>
    <definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.zioer.com/reimbursement">
      <process id="reimbursement" name="费用报销" isExecutable="true">
        <documentation>公司费用报销简易流程</documentation>
        <startEvent id="startevent1" name="Start" activiti:initiator="startUserId">
          <extensionElements>
            <activiti:formProperty id="fee" name="费用" type="long" required="true"></activiti:formProperty>
            <activiti:formProperty id="note" name="说明" type="string"></activiti:formProperty>
          </extensionElements>
        </startEvent>
    <!--    <userTask id="departmentApprove" name="部门领导审批" activiti:assignee="lee">-->
        <userTask id="departmentApprove" name="部门领导审批" activiti:assignee="admin">
          <extensionElements>
            <activiti:formProperty id="fee" name="费用" type="long" writable="false"></activiti:formProperty>
            <activiti:formProperty id="note" name="说明" type="string" writable="false"></activiti:formProperty>
            <activiti:formProperty id="bmyj" name="部门意见" type="string"></activiti:formProperty>
          </extensionElements>
        </userTask>
        <sequenceFlow id="flow1" sourceRef="startevent1" targetRef="departmentApprove"></sequenceFlow>
    <!--    <userTask id="reimburseApprove" name="财务部门审批" activiti:assignee="lobby">-->
        <userTask id="reimburseApprove" name="财务部门审批" activiti:assignee="admin">
          <extensionElements>
            <activiti:formProperty id="fee" name="费用" type="long" writable="false"></activiti:formProperty>
            <activiti:formProperty id="refee" name="核实费用" type="long" required="true"></activiti:formProperty>
            <activiti:formProperty id="note" name="说明" type="string" writable="false"></activiti:formProperty>
            <activiti:formProperty id="bmyj" name="部门意见" type="string" writable="false"></activiti:formProperty>
            <activiti:formProperty id="bzhu" name="备注" type="string"></activiti:formProperty>
          </extensionElements>
        </userTask>
        <sequenceFlow id="flow2" sourceRef="departmentApprove" targetRef="reimburseApprove"></sequenceFlow>
        <userTask id="usertask1" name="申请人确认" activiti:assignee="${startUserId}">
          <extensionElements>
            <activiti:formProperty id="fee" name="费用" type="long" writable="false"></activiti:formProperty>
            <activiti:formProperty id="refee" name="核实费用" type="long" writable="false"></activiti:formProperty>
            <activiti:formProperty id="note" name="说明" type="string" writable="false"></activiti:formProperty>
            <activiti:formProperty id="bmyj" name="部门意见" type="string" writable="false"></activiti:formProperty>
            <activiti:formProperty id="bzhu" name="备注" type="string" writable="false"></activiti:formProperty>
          </extensionElements>
        </userTask>
        <sequenceFlow id="flow3" sourceRef="reimburseApprove" targetRef="usertask1"></sequenceFlow>
        <endEvent id="endevent2" name="End"></endEvent>
        <sequenceFlow id="flow5" sourceRef="usertask1" targetRef="endevent2"></sequenceFlow>
      </process>
      <bpmndi:BPMNDiagram id="BPMNDiagram_reimbursement">
        <bpmndi:BPMNPlane bpmnElement="reimbursement" id="BPMNPlane_reimbursement">
          <bpmndi:BPMNShape bpmnElement="startevent1" id="BPMNShape_startevent1">
            <omgdc:Bounds height="35.0" width="35.0" x="80.0" y="160.0"></omgdc:Bounds>
          </bpmndi:BPMNShape>
          <bpmndi:BPMNShape bpmnElement="departmentApprove" id="BPMNShape_departmentApprove">
            <omgdc:Bounds height="55.0" width="105.0" x="160.0" y="150.0"></omgdc:Bounds>
          </bpmndi:BPMNShape>
          <bpmndi:BPMNShape bpmnElement="reimburseApprove" id="BPMNShape_reimburseApprove">
            <omgdc:Bounds height="55.0" width="105.0" x="310.0" y="150.0"></omgdc:Bounds>
          </bpmndi:BPMNShape>
          <bpmndi:BPMNShape bpmnElement="usertask1" id="BPMNShape_usertask1">
            <omgdc:Bounds height="55.0" width="105.0" x="460.0" y="150.0"></omgdc:Bounds>
          </bpmndi:BPMNShape>
          <bpmndi:BPMNShape bpmnElement="endevent2" id="BPMNShape_endevent2">
            <omgdc:Bounds height="35.0" width="35.0" x="610.0" y="160.0"></omgdc:Bounds>
          </bpmndi:BPMNShape>
          <bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1">
            <omgdi:waypoint x="115.0" y="177.0"></omgdi:waypoint>
            <omgdi:waypoint x="160.0" y="177.0"></omgdi:waypoint>
          </bpmndi:BPMNEdge>
          <bpmndi:BPMNEdge bpmnElement="flow2" id="BPMNEdge_flow2">
            <omgdi:waypoint x="265.0" y="177.0"></omgdi:waypoint>
            <omgdi:waypoint x="310.0" y="177.0"></omgdi:waypoint>
          </bpmndi:BPMNEdge>
          <bpmndi:BPMNEdge bpmnElement="flow3" id="BPMNEdge_flow3">
            <omgdi:waypoint x="415.0" y="177.0"></omgdi:waypoint>
            <omgdi:waypoint x="460.0" y="177.0"></omgdi:waypoint>
          </bpmndi:BPMNEdge>
          <bpmndi:BPMNEdge bpmnElement="flow5" id="BPMNEdge_flow5">
            <omgdi:waypoint x="565.0" y="177.0"></omgdi:waypoint>
            <omgdi:waypoint x="610.0" y="177.0"></omgdi:waypoint>
          </bpmndi:BPMNEdge>
        </bpmndi:BPMNPlane>
      </bpmndi:BPMNDiagram>
    </definitions>
    

    在上面的这个流程定义文件里面,我们通过activiti:formProperty元素定义好了内置表单。在前面的章节当中。我们通过实例实现了审批的流程,本章我们同样使用这个内置表单来实现历史流程的查看。
    编写一个新的控制层DyHistoryformController,对应源码如下

    package com.xquant.platform.test.activiti.controller;
    
    import org.activiti.engine.*;
    import org.activiti.engine.form.FormProperty;
    import org.activiti.engine.form.StartFormData;
    import org.activiti.engine.form.TaskFormData;
    import org.activiti.engine.history.HistoricDetail;
    import org.activiti.engine.impl.persistence.entity.HistoricProcessInstanceEntity;
    import org.activiti.engine.repository.ProcessDefinition;
    import org.activiti.engine.runtime.ProcessInstance;
    import org.activiti.engine.task.Task;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpSession;
    import java.util.*;
    
    @Controller
    @RequestMapping(value = "/form")
    public class DyHistoryformController {
    
        @Autowired
        private TaskService taskService;
    
        @Autowired
        private HistoryService historyService;
    
    
        @RequestMapping(value = "/hlist")
        public String historylist(Model model, HttpSession session) {
            // 从事session中获取当前登录的用户
            String userId = session.getAttribute("userId") == null ? null : session.getAttribute("userId").toString();
            if (userId == null) {
                return "redirect:/login/";
            }
    
            List<Map> hlist = new ArrayList<Map>();
            // 创建获取历史数据的实例
            List historylist = historyService.createHistoricProcessInstanceQuery()
                    .processDefinitionKey("reimbursement")
                    // 由哪个用户创建的实例
                    .startedBy(userId).list();
    
            for (int i = 0; i < historylist.size(); i++) {
                Map<String, Object> map = new HashMap<String, Object>();
                // 历史类型实体列表
                HistoricProcessInstanceEntity hpe = (HistoricProcessInstanceEntity) historylist.get(i);
    
                map.put("id", hpe.getId());
                map.put("startUserId", hpe.getStartUserId());
                map.put("processInstanceId", hpe.getProcessInstanceId());
                map.put("endTime", hpe.getEndTime());
                map.put("startTime", hpe.getStartTime());
                if (hpe.getEndTime() == null) {
                    // 如果结束事件为空 则当前流程还未结束
                    Task task = taskService.createTaskQuery()
                            .processInstanceId(hpe.getProcessInstanceId())
                            .active()
                            .singleResult();
                    if (task != null) {
                        // 获取当前任务的名称 比如部门领导审批
                        map.put("name", task.getName());
                    }
                } else {
                    map.put("name", "已完成");
                }
                hlist.add(map);
            }
    
            //获得当前用户的任务
            model.addAttribute("list", hlist);
    
            return "reimbursement_hlist";
        }
    
        @RequestMapping(value = "/hview/{pId}")
        public String historyView(@PathVariable("pId") String pId, Model model, HttpSession session) {
            String userId = session.getAttribute("userId") == null ? null : session.getAttribute("userId").toString();
            if (userId == null) {
                return "redirect:/login/";
            }
            // 根据任务ID获取历史任务的详细信息
            List<HistoricDetail> details = historyService
                    .createHistoricDetailQuery()
                    .processInstanceId(pId)
                    .orderByTime().asc()
                    .list();
    
            model.addAttribute("list", details);
            return "reimbursement_hview";
        }
    
    }
    

    在这里主要通过HistoryService来获取用户的历史流程。
    涉及到的两个前端页面
    reimbursement_hlist.jsp用于历史列表

    <%@ page language="java" import="java.util.*" contentType="text/html; charset=utf8" %> 
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
    <%
    	String path = request.getContextPath();
    	String basePath = request.getScheme() + "://"
    			+ request.getServerName() + ":" + request.getServerPort()
    			+ path + "/";
    %>
    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf8" />
    <title>Zioer-Activiti示例</title>
    <link rel="stylesheet" rev="stylesheet" href="<%=basePath%>css/style.css" type="text/css" media="all" />
    <script language=JavaScript>
    
    </script>
    </head>
    
    <body class="ContentBody">
    <form action="add" method="post" name="fom" id="fom">
    <div class="MainDiv">
    <table width="90%" border="0" cellpadding="0" cellspacing="0" class="CContent">
      <tr>
          <th class="tablestyle_title" >费用报销管理-我的历史</th>
      </tr>
      <tr>
        <td class="CPanel">
    		<table id="subtree1" style="DISPLAY: " width="100%" border="0" cellspacing="0" cellpadding="0">
            <tr>
              <td><table width="95%" border="0" align="center" cellpadding="0" cellspacing="0">
                  <tr>
                    <td height="40" class="font42">
    				<table width="100%" border="0" cellpadding="4" cellspacing="1" bgcolor="#FFFFEE" class="newfont03">
    				 <tr class="CTitle" >
                        	<td height="22" colspan="11" align="center" style="font-size:16px">我的工作历史列表</td>
                      </tr>
                      <tr bgcolor="#EEEEEE">
    				    <td width="10%" height="30">任务ID</td>
    					<td width="10%">实例ID</td>
                        <td width="25%">开始时间</td>
    					<td width="25%">结束时间</td>
    					<td width="">当前节点</td>
    					<td width="10%">操作</td>
                      </tr>
                      <c:forEach items="${list}" var="var" varStatus="vs">
                      <tr  <c:if test="${vs.count%2==0}">bgcolor="#AAAABB"</c:if> align="left" >
    				    <td >${var.id}</td>
    				    <td  height="30">${var.processInstanceId}</td>
    					<td ><fmt:formatDate value="${var.startTime}" type="both"/></td>                    
    					<td ><fmt:formatDate value="${var.endTime}" type="both"/></td>                    
    					<td >${var.name}</td>  
    					<td ><a href="./hview/${var.processInstanceId}">查看</a></td>                    
                      </tr>
                      </c:forEach>
                </table></td>
            </tr>
          </table>
          </td>
      </tr>
    </table>
    	 </td>
      </tr>
      
    </table>
    </div>
    </form>
    </body>
    </html>
    
    


    reimbursement_hview.jsp用于详情查看

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
    <%
    	String path = request.getContextPath();
    	String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    <html lang="en">
    <head>
        <title>费用报销-审批</title>
        <link rel="stylesheet" rev="stylesheet" href="<%=basePath%>css/style.css" type="text/css" media="all" />
    	<script type="text/javascript" src="<%=basePath%>js/My97DatePicker/WdatePicker.js"></script>
    	<script language=JavaScript>
    		
    	</script>
    </head>
    <body>
    <form action="save/${ formData.getTask().getId()}" method="post" name="form" id="form">
    <div class="MainDiv">
    <table width="60%" border="0" cellpadding="0" cellspacing="0" class="CContent">
      <tr>
          <th class="tablestyle_title" >费用报销-表单内容查看</th>
      </tr>
      <tr>
        <td class="CPanel">
    		<table border="0" cellpadding="0" cellspacing="0" style="width:100%">
                <TR>
                    <TD width="100%">
                        <fieldset style="height:100%;">
                        <legend>内容查看</legend>
                              <table border="0" cellpadding="2" cellspacing="1" style="width:100%">
                              <c:forEach items="${list}" var="var" varStatus="vs">
    		                  <tr>
    		                  	<td nowrap align="right" width="13%">${var.getPropertyId()}</td>
    			                <td>${var.getPropertyValue()}</td>
    		                  </tr>
    		                  </c:forEach>
                              </table>
                        </fieldset>			
                    </TD>
                </TR>
    		</TABLE>
    	 </td>
      </tr>
      <tr>
        <TD colspan="2" align="center" height="50px">    
            <input type="button" name="Submit2" value="返回" class="button" onclick="window.history.go(-1);"/>
        </TD>
      </tr>
    </table>
    </div>
    </form>
    </body>
    </html>
    

    启动程序,访问地址http://localhost:8080/form/hlist
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    点击右方的查看
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 在工作流中使用规则极大提高应用的可维护性。任何一个单位办事的规则是经常变化的,如果把规则写死在代码中,会带来很多的麻烦,规则变则代码必须修改。但是使用了规则任务后,规则改变之后,换一下规则文件即可,...
  • 自己写的springboot2整合activiti7的代码,使用的都是最新的api,如有问题欢迎留言,欢迎一起交流学习
  • 问我选择哪个工作流产品,并且要给他集成到他系统中,由于之前做过一系列的工作流产品,结合他的需求,我最终选择了activiti,闲来无事,就把activiti就整成了一个可插拔的代码块,springboot整合activiti,前端vue...
  • springboot整合activiti测试项目 最近学习了一下springboot整合activiti工作流框架,遇到了一些坑,写一篇文章记录下,写了个入门小程序。 首先用我自己的理解,白话的解释一下activiti框架,在使用之前,我们要搞...
  • 系列文章目录(springboot整合activiti5) 在Activiti中,定义了多种资源,其中*.bpmn和*.bpmn20.xml都是流程定义文件,这两种格式都可以被系统识别并进行解释,但是目前最新版本的Activiti Designer保存的文件都是*...
  • 这里写自定义目录标题springboot整合activiti设计器开始功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左...
  • (一)首先 pom.xml 文件中引入相关的依赖 ...(二)springboot 的配置文件 application.yml中添加相关的配置 (三)流程资源 (四)编写Applocation主程序 (五)编写基于SpringBootTest的测试程序
  • url: jdbc:mysql://127.0.0.1:3306/springboot_activiti?useUnicode=true&characterEncoding=UTF-8&nullCatalogMeansCurrent=true&useOldAliasMetadataBehavior=true&autoReconn
  • SpringBoot版本<version>2.4.4</version> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </...
  • SpringBoot整合Activiti7

    千次阅读 2020-08-24 14:16:14
    因工作需要,公司需要建设一个类似工单系统,想借助activiti工作流引擎来进行实现,但目前网上Spring Boot与Activiti7整合的例子都不是特别全,大多都是Activiti6居多,借工作之余学习记录一下。 二、环境搭建 ...
  • springboot整合activiti不自动创建表 在ActivitiProperties类中可以看到private String databaseSchemaUpdate ="true"; springboot默认是自动创建表的。但是我启动程序没有创建表。 问题分析: 查询相关资料,和...
  • SpringBoot整合Activiti7使用

    万次阅读 多人点赞 2020-11-21 17:44:15
    最近做的一个项目中需要实现员工请假的功能,计划使用activiti来实现请假流程,所以去学习了一下相关的知识。并且完成了一个简单的请假实例。 Activiti相关 Activiti介绍 Activiti是基于Apache许可的开源BPM平台,...
  • 整合activiti 1.pom文件中引入依赖后启动报错 GlobalAuthenticationConfigurerAdapter.class 报错 这个问题是因为: Activiti5.22需要手动排除 解决方法: 在启动项上的注解中添加这个它就行 @SpringBoot...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,050
精华内容 820
关键字:

springboot整合activiti

spring 订阅