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

1、流程任务创建:

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

Activiti 流程引擎之流程任务创建、部署流程、流程任务启动、查看当前任务、完成当前任务_第1张图片

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

整体结构示意图:

Activiti 流程引擎之流程任务创建、部署流程、流程任务启动、查看当前任务、完成当前任务_第2张图片

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

Activiti 流程引擎之流程任务创建、部署流程、流程任务启动、查看当前任务、完成当前任务_第3张图片

Activiti 流程引擎之流程任务创建、部署流程、流程任务启动、查看当前任务、完成当前任务_第4张图片

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

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

Activiti 流程引擎之流程任务创建、部署流程、流程任务启动、查看当前任务、完成当前任务_第5张图片

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

Activiti 流程引擎之流程任务创建、部署流程、流程任务启动、查看当前任务、完成当前任务_第6张图片

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

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

Activiti 流程引擎之流程任务创建、部署流程、流程任务启动、查看当前任务、完成当前任务_第7张图片

Activiti 流程引擎之流程任务创建、部署流程、流程任务启动、查看当前任务、完成当前任务_第8张图片

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

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),可以看到数据生成:

Activiti 流程引擎之流程任务创建、部署流程、流程任务启动、查看当前任务、完成当前任务_第9张图片

 

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 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());
	}

}

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

Activiti 流程引擎之流程任务创建、部署流程、流程任务启动、查看当前任务、完成当前任务_第10张图片

 数据库中表(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");
	}

}

 

你可能感兴趣的:(activiti,流程引擎)