Activiti 流程引擎之流程任务创建、部署流程、流程任务启动、查看当前任务、完成当前任务分析

哈哈 阅读:225 2021-03-31 17:02:04 评论:0

1、流程任务创建:

 (1).在项目中创建diagram文件夹,并创建Activiti Diagram文件MyProcess.bpmn:

  2、创建MyProcess.bpmn 流程,详情如下:

整体结构示意图:

右击diagram文件夹,新建一个Activiti Diagram 项目

(2).打开MyProcess.bpmn ,画流程图:

首先选择Palette 面板中,事件选项(Event)选择开始事件。,同时编写开始事件相关相关属性值:id = startevent ,  name= 开始事件

右击开始事件属性,添加一个新任务"请假申请",如下图所示:

同时编辑"请假申请"相关属性信息,同时指定申请人。请求申请相关属性值设置:Id=submitform ,   Name=请求申请

请求申请指定申请人:Assignee=小王

其他的任务节点依次类推。

2、部署流程

package com.zzg.activiti.datatbase.init; 
 
import java.io.IOException; 
import org.activiti.engine.ProcessEngine; 
import org.activiti.engine.ProcessEngineConfiguration; 
import org.activiti.engine.repository.Deployment; 
import org.junit.Test; 
 
/** 
 * activiti 部署流程图 
 * @author Administrator 
 * 
 */ 
public class ActivitiProcessDeploy { 
 
	 
	public ProcessEngine connectProcessEngine() { 
		// 创建流程引擎配置 
		  ProcessEngineConfiguration configuration = ProcessEngineConfiguration 
		      .createStandaloneInMemProcessEngineConfiguration(); 
		  // 设置数据源 
		  //   configuration.setDataSource(dataSource); 
		  // 如果不使用数据源, 可以通过配置连接信息来连接数据库 
		  configuration.setJdbcDriver("com.mysql.cj.jdbc.Driver"); 
		  configuration.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/boot_activiti?serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true"); 
		  configuration.setJdbcUsername("root"); 
		  configuration.setJdbcPassword("123456"); 
 
		  // 设置创建表的一个规则,有三种 
		  // DB_SCHEMA_UPDATE_FALSE = "false" 如果数据库里没有acti相关的表, 也不会创建 
		  // DB_SCHEMA_UPDATE_CREATE_DROP = "create-drop" 不管数据库里有没acti的相关表, 都会先删除旧表再创建新表, 不推荐在生产中使用 
		  // DB_SCHEMA_UPDATE_TRUE = "true" 如果数据库里没有acti相关的表, 会自动创建 
		  // 仔细看看, 是不是有些类似于hibernate里的ddl-auto :) 
		  configuration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE); 
 
		  // 构建流程引擎, 这一步就会创建好表, 但基本上表内都是空的, 因为还没有部署, 再没有流程实例 
		 return configuration.buildProcessEngine(); 
	} 
	 
	/* 
     *部署流程定义 
     */ 
	@Test 
    public void deploymentProcessDefinition(ProcessEngine processEngine){ 
        Deployment deployment = processEngine.getRepositoryService()//与流程定义和部署对象相关的Service 
                        .createDeployment()//创建一个部署对象 
                        .name("Activiti入门")//添加部署名称 
                        .addClasspathResource("diagram/MyProcess.bpmn")//从classpath的资源中加载,一次只能加载一个文件 
                        .addClasspathResource("diagram/MyProcess.png") 
                        .deploy();//完成部署 
        System.out.println(deployment.getId()); 
        System.out.println(deployment.getName()); 
    } 
     
    public static void main(String[] args) throws IOException { 
    	ActivitiProcessDeploy deploy = new  ActivitiProcessDeploy(); 
    	deploy.deploymentProcessDefinition(deploy.connectProcessEngine()); 
    } 
} 

对应的数据库中的表(act_re_procdef),生成数据:

3、流程任务启动

package com.zzg.activiti.datatbase.init; 
 
import org.activiti.engine.ProcessEngine; 
import org.activiti.engine.ProcessEngineConfiguration; 
import org.activiti.engine.runtime.ProcessInstance; 
 
public class ActivitiProcessStart { 
	public ProcessEngine connectProcessEngine() { 
		// 创建流程引擎配置 
		ProcessEngineConfiguration configuration = ProcessEngineConfiguration 
				.createStandaloneInMemProcessEngineConfiguration(); 
		// 设置数据源 
		// configuration.setDataSource(dataSource); 
		// 如果不使用数据源, 可以通过配置连接信息来连接数据库 
		configuration.setJdbcDriver("com.mysql.cj.jdbc.Driver"); 
		configuration.setJdbcUrl( 
				"jdbc:mysql://127.0.0.1:3306/boot_activiti?serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true"); 
		configuration.setJdbcUsername("root"); 
		configuration.setJdbcPassword("123456"); 
 
		// 设置创建表的一个规则,有三种 
		// DB_SCHEMA_UPDATE_FALSE = "false" 如果数据库里没有acti相关的表, 也不会创建 
		// DB_SCHEMA_UPDATE_CREATE_DROP = "create-drop" 不管数据库里有没acti的相关表, 都会先删除旧表再创建新表, 
		// 不推荐在生产中使用 
		// DB_SCHEMA_UPDATE_TRUE = "true" 如果数据库里没有acti相关的表, 会自动创建 
		// 仔细看看, 是不是有些类似于hibernate里的ddl-auto :) 
		configuration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE); 
 
		// 构建流程引擎, 这一步就会创建好表, 但基本上表内都是空的, 因为还没有部署, 再没有流程实例 
		return configuration.buildProcessEngine(); 
	} 
 
	public void startProcessInstance(ProcessEngine processEngine) { 
		// 流程定义的key 
		String processDefinitionKey = "myProcess"; 
		ProcessInstance processInstance = processEngine.getRuntimeService()// 与正在执行的流程实例和执行对象相关的Service 
				.startProcessInstanceByKey(processDefinitionKey);// 使用流程定义的key启动流程实例,key对应HelloWorld.bpmn文件中的ID的属性值,使用key值启动,默认是按照最新版本的流程定义启动 
		System.out.println("流程实例ID:" + processInstance.getId());// 流程实例ID 
		System.out.println("流程定义ID:" + processInstance.getProcessDefinitionId());// 流程定义ID 
	} 
 
	public static void main(String[] args) { 
		// TODO Auto-generated method stub 
		ActivitiProcessStart start = new ActivitiProcessStart(); 
		start.startProcessInstance(start.connectProcessEngine()); 
	} 
 
} 

数据库中表(act_ru_execution),可以看到数据生成:

 

4、查看当前任务

package com.zzg.activiti.datatbase.init; 
 
import java.util.List; 
 
import org.activiti.engine.ProcessEngine; 
import org.activiti.engine.ProcessEngineConfiguration; 
import org.activiti.engine.task.Task; 
 
public class ActivitiProcessPersonTask { 
	public ProcessEngine connectProcessEngine() { 
		// 创建流程引擎配置 
		ProcessEngineConfiguration configuration = ProcessEngineConfiguration 
				.createStandaloneInMemProcessEngineConfiguration(); 
		// 设置数据源 
		// configuration.setDataSource(dataSource); 
		// 如果不使用数据源, 可以通过配置连接信息来连接数据库 
		configuration.setJdbcDriver("com.mysql.cj.jdbc.Driver"); 
		configuration.setJdbcUrl( 
				"jdbc:mysql://127.0.0.1:3306/boot_activiti?serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true"); 
		configuration.setJdbcUsername("root"); 
		configuration.setJdbcPassword("123456"); 
 
		// 设置创建表的一个规则,有三种 
		// DB_SCHEMA_UPDATE_FALSE = "false" 如果数据库里没有acti相关的表, 也不会创建 
		// DB_SCHEMA_UPDATE_CREATE_DROP = "create-drop" 不管数据库里有没acti的相关表, 都会先删除旧表再创建新表, 
		// 不推荐在生产中使用 
		// DB_SCHEMA_UPDATE_TRUE = "true" 如果数据库里没有acti相关的表, 会自动创建 
		// 仔细看看, 是不是有些类似于hibernate里的ddl-auto :) 
		configuration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE); 
 
		// 构建流程引擎, 这一步就会创建好表, 但基本上表内都是空的, 因为还没有部署, 再没有流程实例 
		return configuration.buildProcessEngine(); 
	} 
	 
	public void findPersonalTask(ProcessEngine processEngine){ 
        String assignee = "田总"; 
        List<Task> list = processEngine.getTaskService()//与正在执行任务相关的Service 
                        .createTaskQuery()//创建任务查询对象 
                        .taskAssignee(assignee)//指定个人任务查询,指定办理人 
                        .list(); 
        if(list!=null && list.size()>0){ 
            for(Task task:list){ 
                System.out.println("任务ID:"+task.getId()); 
                System.out.println("任务名称:"+task.getName()); 
                System.out.println("任务创建时间:"+task.getCreateTime()); 
                System.out.println("任务办理人:"+task.getAssignee()); 
                System.out.println("流程实例ID:"+task.getProcessInstanceId()); 
                System.out.println("执行对象ID:"+task.getExecutionId()); 
                System.out.println("流程定义ID:"+task.getProcessDefinitionId()); 
            } 
        } 
    } 
	public static void main(String[] args) { 
		// TODO Auto-generated method stub 
		ActivitiProcessPersonTask task = new ActivitiProcessPersonTask(); 
		task.findPersonalTask(task.connectProcessEngine()); 
	} 
 
} 

控制台结果输出,三个任务结果整合:

 数据库中表(act_ru_task),可以查到任务数据:

4、完成当前任务

package com.zzg.activiti.datatbase.init; 
 
import org.activiti.engine.ProcessEngine; 
import org.activiti.engine.ProcessEngineConfiguration; 
 
public class ActivitiProcessCompletePersonalTask { 
	public ProcessEngine connectProcessEngine() { 
		// 创建流程引擎配置 
		ProcessEngineConfiguration configuration = ProcessEngineConfiguration 
				.createStandaloneInMemProcessEngineConfiguration(); 
		// 设置数据源 
		// configuration.setDataSource(dataSource); 
		// 如果不使用数据源, 可以通过配置连接信息来连接数据库 
		configuration.setJdbcDriver("com.mysql.cj.jdbc.Driver"); 
		configuration.setJdbcUrl( 
				"jdbc:mysql://127.0.0.1:3306/boot_activiti?serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true"); 
		configuration.setJdbcUsername("root"); 
		configuration.setJdbcPassword("123456"); 
 
		// 设置创建表的一个规则,有三种 
		// DB_SCHEMA_UPDATE_FALSE = "false" 如果数据库里没有acti相关的表, 也不会创建 
		// DB_SCHEMA_UPDATE_CREATE_DROP = "create-drop" 不管数据库里有没acti的相关表, 都会先删除旧表再创建新表, 
		// 不推荐在生产中使用 
		// DB_SCHEMA_UPDATE_TRUE = "true" 如果数据库里没有acti相关的表, 会自动创建 
		// 仔细看看, 是不是有些类似于hibernate里的ddl-auto :) 
		configuration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE); 
 
		// 构建流程引擎, 这一步就会创建好表, 但基本上表内都是空的, 因为还没有部署, 再没有流程实例 
		return configuration.buildProcessEngine(); 
	} 
 
	public void completePersonalTask(ProcessEngine processEngine, String taskId) { 
 
		processEngine.getTaskService()// 与正在执行任务相关的Service 
				.complete(taskId); 
		System.out.println("完成任务:任务Id:" + taskId); 
 
	} 
 
	public static void main(String[] args) { 
		// TODO Auto-generated method stub 
		ActivitiProcessCompletePersonalTask task = new ActivitiProcessCompletePersonalTask(); 
		task.completePersonalTask(task.connectProcessEngine(), "17503"); 
	} 
 
} 

 

声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

发表评论
搜索
KIKK导航

KIKK导航

排行榜
关注我们

一个IT知识分享的公众号