Activiti工作流使用之一基础集成

1、前言

如果有小伙伴来看本博客,那么说明你至少知道工作流是什么东西,多余的空闲之语就略过了,我们直接进入正题。
本博客大致会分为五篇,将围绕我做的一个项目来开展(公司项目无法共享代码),参考技术:闲鹿工作流
基础集成和一些注意事项(本篇);
部分概念和在线使用技巧;
代办、已办集成
高级技巧之监听器、会签
个人思考(重要)

2、技术选型

就我浅显的认知,目前比较简单、出名的工作流技术有两种:Activitiflowable,因为我现在的项目主要是去年一个项目的重构,当时采用的Activiti,所以本次依旧选择了Activiti。当然,这并不是说flowable不好,相反,最近flowable还挺出名的,最起码flowable的页面比Activiti好看,下面放两张图片对比下:
Activiti
来源于gitee闲鹿工作流
flowable
图片来源于gitee开源项目RuoYi-flowable

我没有特别区了解使用过flowable,所以不多做评论,但是这个ui确实比Activiti好看的多,如果新项目可以试试flowable。参考项目:
RuoYi-flowable

3、SpringBoot集成Activiti6.0

因为我们之前的项目是SpringBoot单体项目(参考:闲鹿工作流单体版),现在重构为SpringBoot + Vue前后端分离版本(参考:闲鹿工作流分离版)。因此,本文会介绍单体 + 分离两种集成方式以供大家参考(如有区别之处,会以红色字标出,不标的默认为一样的)。

3.1 maven依赖

<activiti.version>6.0.0</activiti.version> 
<xmlgraphics.version>1.7</xmlgraphics.version>

<!--      activiti工作流      -->
 <dependency>
     <groupId>org.activiti</groupId>
     <artifactId>activiti-spring-boot-starter-rest-api</artifactId>
     <version>${activiti.version}</version>
 </dependency>
 <dependency>    
 	<groupId>org.activiti</groupId>    
 	<artifactId>activiti-json-converter</artifactId>    
 	<version>${activiti.version}</version>    
 	<exclusions>        
	 	<exclusion>            
		 	<groupId>org.activiti</groupId>            
		 	<artifactId>activiti-bpmn-model</artifactId>        
 		</exclusion>    
	</exclusions> 
 </dependency> 
 <!-- xml 图像类库 --> 
 <dependency>    
	 <groupId>org.apache.xmlgraphics</groupId>    
	 <artifactId>batik-codec</artifactId>    
	 <version>${xmlgraphics.version}</version> 
 </dependency> 
 <dependency>    
	 <groupId>org.apache.xmlgraphics</groupId>    
	 <artifactId>batik-css</artifactId>    
	 <version>${xmlgraphics.version}</version> 
 </dependency> 
 <dependency>    
	 <groupId>org.apache.xmlgraphics</groupId>    
	 <artifactId>batik-svg-dom</artifactId>    
	 <version>${xmlgraphics.version}</version> 
 </dependency> 
 <dependency>    
	 <groupId>org.apache.xmlgraphics</groupId>    
	 <artifactId>batik-svggen</artifactId>    
	 <version>${xmlgraphics.version}</version> 
 </dependency>

无论是单体版还是前后端分离,依赖均按照上面的,但是分离版项目打包实现的时候有依赖冲突的错误,解决办法:

<dependency>
     <groupId>org.activiti</groupId>
     <artifactId>activiti-spring-boot-starter-rest-api</artifactId>
     <exclusions>
         <exclusion>
             <artifactId>jsr250-api</artifactId>
             <groupId>javax.annotation</groupId>
         </exclusion>
     </exclusions>
 </dependency>

3.2 参数配置

spring:
  # activiti配置
  activiti:
    # 数据表生成(需要就改为true,或者不设置,默认为true)
    database-schema-update: true
    check-process-definitions: false
    #关闭验证自动部署 # 检测身份信息表是否存在
    db-identity-used: false
    rest-api-enabled: true
    rest-api-servlet-name: activiti-swagger-document
    SpringProcessEngineConfiguration:
      activityFontName: 宋体
      labelFontName: 宋体
      dataSource: datasource
# 日志配置
logging:
  level:
    org.springframework: warn
    # 日志配置(如果需要了解activiti数据库执行情况,建议打印SQL执行情况)
    # org.activiti.engine.impl.persistence.entity: trace

3.3 集成Activiti前端绘图组件

3.3.1 静态资源下载

百度网盘下载静态文件:

链接:https://pan.baidu.com/s/1DeGKAF2unWgLAjjwasAOvA?pwd=bndd 
提取码:bndd 

里面包含了单体未修改、单体修改后静态资源(修改点参考一下描述)、分离版(直接使用就行)
在这里插入图片描述

3.3.2 资源文件作用

静态资源放置的位置不需要过度纠结,只要能读取到就行。js主要使用 AngularJs ,不熟悉 的小伙伴谨慎操作。

1、diagram-viewer
该文件夹下主要包括绘图以及activiti流程图显示的组件,基本不需要修改。
2、editor-app
该文件夹下主要控制右下部分的配置区域,我们我项目仅在原生的功能下修改了两个地方:
(1) 汉化: editor-app -> i18n -> zh-CN.json
(2) 指派用户和用户组的界面:原生是通过表达式的方式来指定任务执行人/组,这样不是很友好,所以 简单修改了选择界面,用户可以 通过选择系统内用户/组来指定执行人,比较直观。
修改的文件:

以下内容主要针对于单体版,分离版已经修改好了

`editor-app ->configuration -> properties-> assignment-popup.html`,这个文件原本就 有,只是将输入框修改点击弹窗显示 
`editor-app ->configuration -> properties-> assignment-popup-popup.html`,这个文件 是选择代理人和候选人使用的 
`editor-app ->configuration -> properties-> assignment-candidateGroup.html`,这个 文件是选择候选组使用的 
`editor-app ->configuration -> properties-assignment-controller.js`,这个文件是上面 三个HTML的js,这里也是最需要修改的地方,因为每个项目的接口地址是不一样的,分别修改 179 行、211行、280行 三个地方修改接口( 190行、221行、287行 三个地方有字段对应,如果不同需 要修改)

这个修改点将在第二篇中仔细说明,暂时不做过多解释。

3、modeler.html
这个是该组件的主页,不需要修改
4、stencilset.json
组件配置json,非常重要,不建议修改,本项目仅修改 11 行 title (流程标识)空字符串为一个 默认标识。
至于该json文件放置的位置,网上主要有两种情况:一是放在resources根目录下,另一种是放在editorapp平级。该文件放置的位置关键在于读取文件接口配置的位置:

@RestController
public class StencilsetRestResource {

    @RequestMapping(value = "/modeler/editor/stencilset", method = RequestMethod.GET, produces = "application/json;charset=utf-8")
    public @ResponseBody String getStencilset() {
        InputStream stencilsetStream = this.getClass().getClassLoader().getResourceAsStream("stencilset.json");
        try {
            return IoUtil.readUtf8(stencilsetStream);
        } catch (Exception e) {
            throw new ActivitiException("Error while loading stencil set", e);
        }
    }
}

注意:
1、接口处配置 produces = “application/json;charset=utf-8”,可避免返回乱码;
2、如json文件不在根目录下,读取文件地址需要修改,比如改为:static/stencilset.json;
3、接口地址不要随意修改,需参照 editor -> configuration -> url-config.js 28行 getStencilSet()方法里的路径

3.4 集成常见问题解决

3.4.1 控制台循环报循环依赖错误或者启动后出现了校验页面(非自身登录页)

解决办法:Application启动类上加注解

  • 单体版
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class, 
							SecurityAutoConfiguration.class,        
							org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class})
> 第二个排除全路径为:org.activiti.spring.boot.SecurityAutoConfiguration.class,如找不到,就改为 全路径
  • 分离版
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, SecurityAutoConfiguration.class})

全路径:org.activiti.spring.boot.SecurityAutoConfiguration.class;org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration.class

3.4.2 控制台报错缺少某张表

这问题是很多小伙伴最初都会犯得,原由在于很多小伙伴都会在网上去在Activiti的SQL导入,这样可能产生的问题:
少了某张表;②表名大小写的问题
解决办法application.yml文件开启表自动生成:spring.activiti.database-schema-update: true

3.4.3 控制台process问题

解决办法application.yml加上配置 spring.activiti.check-process-definitions: false #关闭验证自动部 署

3.4.4 流程图中文乱码问题
@Configuration
public class ActivitiConfig implements ProcessEngineConfigurationConfigurer {

    @Autowired
    private ICustomProcessDiagramGenerator customProcessDiagramGenerator;

    /**
     * 解決工作流生成图片乱码问题
     *
     * @param processEngineConfiguration 参数
     */
    @Override
    public void configure(SpringProcessEngineConfiguration processEngineConfiguration) {
        processEngineConfiguration.setActivityFontName("宋体");
        processEngineConfiguration.setAnnotationFontName("宋体");
        processEngineConfiguration.setLabelFontName("宋体");
        processEngineConfiguration.setProcessDiagramGenerator(customProcessDiagramGenerator);
    }
}
3.4.5 at org.activiti.engine.impl.db.DbSqlSession.dbSchemaUpdate

解决办法act_ge_property表默认值不能删除

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值