Activiti7工作流

前言

由于工作原因,最近一段时间都在研究activiti7。鉴于Activiti7的资料甚少,官网上的介绍又比较复杂,通过看Activiti的论坛以及参考了Activiti之前版本的api,项目大概有了模型。目前虽小有成果,但仍有许多不足之处,在此先拿出来跟大家分享。

工作流理论

工作流是针对工作中具有固定程序的常规活动而提出的一个概念。通过将工作活动分解成定义良好的任务、角色、规则和过程来进行执行和监控,达到提高生产组织水平和工作效率的目的。工作流其主要的工作原理是按照定义好的一个工作流程,按照这个流程进行工作流程的扭转;在流转的过程中实现数据的填充和处理。使用步骤主要是定义流程图、发布流程图、与定义的业务进行工作绑定、触发流程进行操作。

Activiti7与Activiti5和6的区别

Activiti7与Activiti5和Acticiti6有了很大的改变,宏观来说,Activiti7集成了docker、microservices、kubernetes、activiti cloud、activiti cloud、cloud native、spring boot 2.0。使用方面,它与之前两个版本少了IdentityService和FormService接口。(少的FormService接口的解决方案在下面文章会给出,而少了IdentityService接口仍未找到解决方案,有知道的话可在评论给出)

配置Activiti7

完整的pom文件



	4.0.0
	com.xxx
	xxxxx
	1.0.0-SNAPSHOT
	jar
	xxxx
	http://maven.apache.org
	
		
			junit
			junit
			3.8.1
			test
		
		
			org.activiti
			activiti-engine
			
			7.1.8
		
		
		
			org.activiti
			activiti-modeler
			5.22.0
			
				
					spring-beans
					org.springframework
				
				
					spring-context
					org.springframework
				
				
					spring-core
					org.springframework
				
				
					spring-tx
					org.springframework
				
				
					spring-web
					org.springframework
				
				
					spring-security-config
					org.springframework.security
				
				
					spring-security-core
					org.springframework.security
				
				
					spring-security-crypto
					org.springframework.security
				
				
					spring-security-web
					org.springframework.security
				
				
					spring-webmvc
					org.springframework
				
				
					activation
					javax.activation
				
				
					commons-io
					commons-io
				
			
		
		
			org.apache.xmlgraphics
			xmlgraphics-commons
			2.2
		
	
	
		

		
		
			
				maven-resources-plugin
				2.5
				
					
						copy-xmls
						process-sources
						
							copy-resources
						
						
							${basedir}/target/classes
							
								
									${basedir}/src/main/resource
									
										**
									
								
							
						
					
				
			
		
	
	
		
			alfresco
			Activiti Releases
			https://artifacts.alfresco.com/nexus/content/repositories/activiti-releases/
			
				true
			
		
	



在这里解释一下上面的pom文件。
activiti-engine是Acticiti的核心包。
activiti-modeler是网页流程设计器的包,这里用的是5.22.0版本的(至于为什么不用Activiti7的,本人觉得Acticiti7目前没有自带的网页流程设计器,它是集成第三方的设计器,在页面设计上没有5.22.0美观)。
repositories这里引入了Acticiti的仓库,因为Maven是没有7.1.8的,它只有7-201802-EA版本。在使用期间,7-201802-EA版本出现了taskCandidateOrAssigned只要有流程,所有人都获取到该流程信息的bug,于是在这里建议使用7.1.8版本。

Activiti配置文件

package com.manong.smzypt.activiti.config;

import javax.sql.DataSource;
import org.activiti.engine.HistoryService;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngineConfiguration;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 使用Java类完成配置文件
 */
@Configuration
public class ActivitiConfig {

	@Autowired
    private DataSource dataSource;
    
    /**
     * 初始化配置,将创建28张表
     * @return
     */
    @Bean
    public StandaloneProcessEngineConfiguration processEngineConfiguration() {
        StandaloneProcessEngineConfiguration configuration = new StandaloneProcessEngineConfiguration();
        configuration.setDataSource(dataSource);
        configuration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
        configuration.setAsyncExecutorActivate(false);
        return configuration;
    }
    
    @Bean
    public ProcessEngine processEngine() {
        return processEngineConfiguration().buildProcessEngine();
    }

    @Bean
    public RepositoryService repositoryService() {
        return processEngine().getRepositoryService();
    }

    @Bean
    public RuntimeService runtimeService() {
        return processEngine().getRuntimeService();
    }

    @Bean
    public TaskService taskService() {
        return processEngine().getTaskService();
    }
    @Bean
	public HistoryService historyService() throws Exception{
		return processEngine().getHistoryService();
	}   
}

整合5.22.0网页流程设计器

网上有很多整合的资料,在这里简单提一下。
从网上下载5.22.0的包,将包中以下内容拖到项目相对应的位置
Activiti7工作流_第1张图片

Activiti7结合动态表单

在Avtiviti5和6中,有核心接口之一的FormService,结合表单可以使用:

StartFormData startFormData = formService.getStartFormData(processDefinitionId); 
List formProperties = startFormData.getFormProperties();

但在Acticiti7中,由于没有了FormService接口,可用以下方法代替:

UserTask userTask =(UserTask)repositoryService.getBpmnModel(task.getProcessDefinitionId()).getFlowElement(task.getTaskDefinitionKey());
List formProperties = userTask.getFormProperties();

结束语

Activiti7还有很多功能没有提及到,有兴趣的朋友可以共同交流。以后会继续更新有关工作流的博客,

你可能感兴趣的:(Activiti7工作流)