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

2023-11-01

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

}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • @PathVariable接收两个参数

    首先 PathVariable无法接收对象 但是可以接收多个值 var data obj data if obj event edit var tmpData encodeURI JSON stringify data layer open
  • vue_前后端分离-增删改操作

    增加操作和修改操作 两个操作放一个页面进行操作 使用插槽 scope row 的方式获取列表中的每一行数据
  • 在Android上实现SPI通信之(1)------在Ubuntu12.04环境下编译android源码

    作为一个Android应用开发者 突然接到一下需求 需要在应用层传递一个信号到外设 传递方式用SPI通信 没有做过 甚是头大 遇到了好多坑 所以记录成册 希望对后来的开发者 有那么一点点的帮助 如果有不正确的地方 还请指正 目前我实现的大体
  • 数据结构-图篇

    数据结构 图篇 内容 思维导图 基于教材 错题复盘 计算题 基于习题解析 课后习题 1 思维导图 2 错题复盘 计算题 1 具有n个顶点的有向图最多有 B 条边 A n B n n 1 C n n 1 D n 2 解析 对于有n个顶点的有向
  • 机器学习:python实践 回归项目实例 学习记录

    导入类库 import numpy as np import pandas from numpy import arange from matplotlib import pyplot from pandas import read csv
  • 微信小程序原生开发学习01

    文章目录 一 起步 1 注册一个小程序账号 2 下载安装开发者工具 3 新建小程序项目 二 小程序配置 1 全局配置 1 小程序默认启动页 2 页面路径列表 3 分包
  • 字符串的数字部分加1操作

    字符串如通天塔001 10002 Test990 public static String addOne4Str String str if str null int fIndex 1 for int i 0 i lt str length
  • 2022搭建企业级数据治理体系

    数据治理是企业数据建设必不可少的一个环节 好的数据治理体系可以盘活整条数据链路 最大化保障企业数据的采集 存储 计算和使用过程的可控和可追溯 如何构建企业数据治理体系 企业数据治理过程需要注意哪些问题 总体而言 不能一口一个胖子 路要一步一
  • Pycharm乱码解决大全

    一 运行项目时控制台乱码 最直观的方法就是改控制台的默认编码方式 如果不行 就在Settings的Editor里点击FileEncoding 在下图中三个位置修改编码一致 一般为UTF 8或者GBK 最后Apply并确认后重新运行项目即可
  • 测试用例具体设计方法

    目录 一 根据需求写测试用例 二 测试用例具体的设计方法 1 等价类 2 边界值 3 因果图法 4 正交法 5 场景法 6 错误猜测法 一 根据需求写测试用例 1 首先要保证需求的合理性和正确性 要先验证需求 2 分析需求 把大需求细化成小
  • 机器如何识别花的种类

    惊蛰已过 一声春雷 大地开始解冻 条件允许的话 出去晒晒太阳 看看风景 赏赏花 也可以在央视直播云赏花 十多个机位展示了全国各地不同地区的美丽风景 形色 看到好看的花 但是叫不上名字怎么办 这里推荐一下 形色 一款小众的识花应用 带你遇见全
  • 使用arcpy导出要素类和删除要素类中的要素数据

    需求 目的是在指定的GDB数据库中 将要素数据集SourcePolygon下的北京图层中的Layer字段值等于 KZ 控制指标 的记录先导出到新创建的TempPolygon下 导出的图层名为 ControlIndex 然后再将北京图层中的L

随机推荐

  • java知识点——case

    A continue statement can be used only in a loop continue语句只能在循环中使用 A break statement can t be used only in a loop break语
  • 【计算机视觉

    文章目录 一 检测相关 9篇 1 1 Federated Ensemble YOLOv5 A Better Generalized Object Detection Algorithm 1 2 Zero shot Nuclei Detect
  • 使用WinDbg Preview 查看Windows 10蓝屏Dump文件

    从应用商店安装WinDbg Preview 1 登陆应用商店 搜索WinDbg Preview 2 选择获取 我的Windows 10 系统已经安装过了 3 在启动菜单可以找到WinDbg Preview 4 找到蓝屏文件 并选择使用Win
  • 【Github】错误解决:OpenSSL SSL_read: Connection was reset, errno 10054

    git 报错信息 OpenSSL SSL read Connection was reset errno 10054 Git 中 push 或者 pull 报错 OpenSSL SSL read Connection was reset e
  • arthas的trace、watch、tt、profiler命令的使用

    arthas的trace watch tt profiler命令的使用
  • 通过C语言实现小数整数求原码,反码,补码

    通过C语言实现小数 整数求原码 反码 补码 判断输入的值是整数还是小数 是正是负 求纯整数不含符号的原码 求纯小数不含符号的原码 完善整个原码 符号 小数 整数合在一起 将求原码的函数封装在一个函数里 求反码的函数 求补码的函数 main函
  • Linux-线程学习(上)

    本文导航 内容 所占百分比 线程概念 40 线程与进程区别与联系 20 线程优缺点 10 线程控制 创建 终止 等待 30 线程的概念 谈到线程 我们先从进程说起 我们写的程序从硬盘加载到内存开始运行时 进程就产生了 也就是操作系统开始为这
  • 水仙花数(Java实现)

    春天是鲜花的季节 水仙花就是其中最迷人的代表 数学上有个水仙花数 他是这样定义的 水仙花数 是指一个三位数 它的各位数字的立方和等于其本身 比如 153 1 3 5 3 3 3 现在要求输出所有在m和n范围内的水仙花数 import jav
  • 栈溢出原理

    栈溢出原理 文章目录 栈溢出原理 前言 栈 一 栈溢出原理 二 栈保护技术 三 常发生栈溢出的危险函数 四 可利用的栈溢出覆盖位置 总结 前言 栈 栈是一种LIFO的数据结构 应用程序有一到多个用户态栈 栈自底向上增长 由指令PUSH和PO
  • tcpdump抓包注意事项

    使用tcpdump进行抓包 然后用wireshark进行分析的时候 出现了 Packet size limited during capture 也不算是错误 只是数据包里的内容无法完全查看清楚 经过查询 原因是因为我在Linux下进行抓包
  • es6合并对象

    es5 let name name sea age age 15 person Object assign person name age console log person name sea age 15 es6 let name na
  • golang 读取项目配置文件

    golang读取文件配置 介绍golang项目中配置文件的读取相关内容 包括项目结构 具体实现代码等内容 ref 煎鱼 实际上这只是煎鱼博客项目中的一小部分 项目结构 配置读取相关文件结构如下 config文件夹下存放config yaml
  • 大数据从入门到精通(超详细版)之 Hive的配置与基本语法

    前言 嗨 各位小伙伴 恭喜大家学习到这里 不知道关于大数据前面的知识遗忘程度怎么样了 又或者是对大数据后面的知识是否感兴趣 本文是 大数据从入门到精通 超详细版 的一部分 小伙伴们如果对此感谢兴趣的话 推荐大家按照大数据学习路径开始学习哦
  • xman的思维导图快捷键_思维导图软件——MindMaster常用快捷键汇总

    原标题 思维导图软件 MindMaster常用快捷键汇总 思维导图 英文是The Mind Map 又叫心智导图 是表达发散性思维的有效图形思维工具 MindMaster Mac版是最新推出的一款免费跨平台 多功能的思维导图软件 可以帮助您
  • 发明计算机的人的名人名言,60句关于发明的名言

    1 没有艰苦的学习 就没有最简单的科学发明 南斯拉夫谚语 2 需要是发明之母 拉丁谚语 3 天才是不足恃的 聪明是不可靠的 要想顺手拣来的伟大科学发明是不可想象的 华罗庚 4 一项发明创造会带来更多的发明创造 爱默生 5 科学的真正的与合理
  • Selenium下Chrome配置 (含启动无痕界面--无界面浏览器)

    转载 https www cnblogs com kaibindirver p 11432850 html Selenium下Chrome配置 含启动无痕界面 无界面浏览器 例子 设置无界面模式浏览器启动 chrome options we
  • MapReduce shuffle过程详解

    一 MapReduce计算模型 我们知道MapReduce计算模型主要由三个阶段构成 Map shuffle Reduce Map是映射 负责数据的过滤分法 将原始数据转化为键值对 Reduce是合并 将具有相同key值的value进行处理
  • OpenMV4开发笔记4-舵机控制

    OpenMV4的舵机控制脚有3个 P7 P8 P9 即可以控制3个舵机 Servo 1 gt P7 PD12 Servo 2 gt P8 PD13 OpenMV3 M7 OpenMV4 H7上增加 Servo 3 gt P9 PD14 注意
  • 论EI、SCI和ISTP检索论文的收录号和期刊号查询方法

    http www scitsg com Article 134240802101541 aspx 需要申请博士后进站和国家自然科学基金的朋友都知道申请博士后进站和国家自然科学基金需要填写很多申请表格 其中就需要填写所发表的EI SCI和IS
  • Activiti 流程引擎之流程任务创建、部署流程、流程任务启动、查看当前任务、完成当前任务

    1 流程任务创建 1 在项目中创建diagram文件夹 并创建Activiti Diagram文件MyProcess bpmn 2 创建MyProcess bpmn 流程 详情如下 整体结构示意图 右击diagram文件夹 新建一个Acti