java工作流activiti的步骤
链接:
activiti 表名称的解释
工作流从流程定义到创建一个流程实例完成执行步骤(省略bpmn的画法) 工作流的所有操作都是使用流程引擎来进行操作的,流程引擎只是存储流程的过程,而不存储具体的业务数据,需要自行建立相关的表,工作流的特点是流程和业务的关联具体步骤如下。
- 创建流程引擎,也就是生成工作流所需要的23+张表。
- 流程引擎的部署。通过RepositoryService 进行部署,它是对应的就是流程的静态资源,将图片和bpmn上传至数据库。
- 使用activi-designer创建一个流程定义(.bpmn结尾的文件)
- 将定义好的流程定义和生成的png图片通过RepositoryService(前面章节说过主要是用来处理流程定义的service)的api上传到数据库
- 通过RuntimeService(这个service主要是处理当前正在运行的流程实例的)启动一个流程实例
- 这个时候通过TaskService(主要处理当前运行的任务,一个流程实例下有多个任务)获取到上面的实例所对应的当前人任务
- 结束上面的任务task,流程实例会走向下一个task任务
- 重复4,5,完成一个流程实例的启动到结束
上面就是一个最简单从上往下执行的流程的执行步骤,本章节都是以代码做示例,代码不多,但是都执行一遍,你会对整个activiti的流程有个大概的了解
创建流程引擎
一般java中使用工作流,都是和spring框架结合进行使用的,具体情况后续添加。
//普通方法的创建 /**
* Description:创建流程引擎
*
* @author cy
* @date 2018年08月03日 16:34
* version 1.0
*/
public class CreateEngine { public static void main(String[] args) {
//流程引擎的创建,使用流程引擎配置文件,也就是创建23+张表
ProcessEngineConfiguration processEngineConfigurationFromResource = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();
//设置数据库信息
processEngineConfigurationFromResource.setJdbcUrl("jdbc:mysql://localhost:3306/cheng?useUnicode=true&characterEncoding=utf-8");
processEngineConfigurationFromResource.setJdbcDriver("com.mysql.jdbc.Driver");
processEngineConfigurationFromResource.setJdbcUsername("root");
processEngineConfigurationFromResource.setJdbcPassword("admin");
processEngineConfigurationFromResource.setDatabaseSchemaUpdate(processEngineConfigurationFromResource.DB_SCHEMA_UPDATE_TRUE);//对数据库进行更新
processEngineConfigurationFromResource.buildProcessEngine();//创建引擎
System.out.println("创建引擎成功");
} }
流程部署
/*
* 获取流程引擎对象,下面的方法会默认查找classpath目录下的名称为activi.cfg.xml
* 里面bean的id为processEngineConfiguration的ProcessEngineConfiguration引擎配置对象来获取ProcessEngine对象
*/
private ProcessEngine engine = ProcessEngines.getDefaultProcessEngine(); //部署一个流程
@Test
public void deployProcessDefinition(){
//根据引擎获取资源service
RepositoryService repositoryService = engine.getRepositoryService();
//部署bpmn文件
String bpmnName="purchasingflow.bpmn";
InputStream bpmnIn = this.getClass().getClassLoader().getResourceAsStream("diagram/purchasingflow.bpmn");
//部署bpmn生成的图片
String pngName="purchasingflow.png";
InputStream pngIn = this.getClass().getClassLoader().getResourceAsStream("diagram/purchasingflow.png");
//添加这两个文件进行部署
Deployment deployment = repositoryService.createDeployment()
.addInputStream(bpmnName, bpmnIn)
.addInputStream(pngName, pngIn)
.deploy(); System.out.println("部署id:"+deployment.getId());
System.out.println("部署的name:"+deployment.getDeploymentTime()); }
查询流程的定义
//查询流程定义
@Test
public void queryProcessDefinition(){ RepositoryService repositoryService = engine.getRepositoryService();
//创建流程定义查询对象
ProcessDefinitionQuery definitionQuery = repositoryService.createProcessDefinitionQuery(); String processDefinitionKey = "purchasingflow";
//设置流程定义的key的查询条件
definitionQuery.processDefinitionKey(processDefinitionKey);
//查询所有的流程定义
List<ProcessDefinition> processDefinitionList = definitionQuery.list();
for(ProcessDefinition definition:processDefinitionList){
System.out.println("-------------------------");
System.out.println("流程定义id:"+definition.getId());
System.out.println("流程资源名:"+definition.getResourceName());
System.out.println("流程部署id:"+definition.getDeploymentId());
} }
启动一个流程实例
//启动一个流程实例
@Test
public void startProcessInstance(){ RuntimeService runtimeService = engine.getRuntimeService(); String processDefinitionKey = "purchasingflow";
//根据流程定义的key启动一个流程实例
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processDefinitionKey);
System.out.println("流程实例id:"+processInstance.getId());
System.out.println("流程定义id:"+processInstance.getProcessDefinitionId()); }
查询当前处理人的任务
//查询当前用户的代办任务
@Test
public void queryProcessInstance(){ //查询任务使用的service
TaskService taskService = engine.getTaskService();
//获取任务查询对象
TaskQuery taskQuery = taskService.createTaskQuery();
taskQuery.taskAssignee("zhangsan");
//查询该条件下的所有的任务
List<Task> tasks =taskQuery.list();
for(Task task:tasks){
System.out.println("当前任务id:"+task.getId());
System.out.println("当前任务所属流程定义id:"+task.getProcessDefinitionId());
System.out.println("当前任务的key:"+task.getTaskDefinitionKey());
} }
完成一个流程
//完成一个流程
@Test
public void completeProcessInstance(){ //任务的id,后期整合后会通过当前登录人身份查询到该用户的任务,然后获取到该id
String taskId="402";
TaskService taskService = engine.getTaskService();
//根据任务id完成该任务
taskService.complete(taskId); }
java工作流activiti的步骤的更多相关文章
- java工作流bpm开发ERP实例
今天看了一个java工作流bpm开发ERP的例子,文章介绍:http://tech.it168.com/a2009/0507/275/000000275294_14.shtml 增加数据块 一路照做就 ...
- java工作流引擎Jflow流程事件和流程节点事件设置
流程实例的引入和设置 关键词: 开源工作流引擎 Java工作流开发 .net开源工作流引擎 流程事件 工作流节点事件 应用场景: 在一些复杂的业务逻辑流程中需要在某个节点或者是流程结束后做一些 ...
- 工作流Activiti新手入门学习路线整理
写在前面: 最近项目中使用到了工作流,虽然此部分不是自己需要完成的,但是也涉及到了要调用写的接口.正好有时间,就了解下,以便之后能在其他项目中用到时,不至于什么都不知道什么都不了解. 这里就主要整理下 ...
- Java工作流系统-CCBPM如何自动升级?
关键词:工作流快速开发平台 工作流流设计 业务流程管理 asp.net 开源工作流 bpm工作流系统 java工作流主流框架 自定义工作流引擎驰骋工作流引擎ccflow和jflow的升级 ...
- Java工作流引擎-中间件模式代码集成
关键词:工作流快速开发平台 工作流流设计 业务流程管理 asp.net 开源工作流 bpm工作流系统 java工作流主流框架 自定义工作流引擎 表单设计器 流程设计器 前端代码集成步骤 ...
- Java工作流引擎表单引擎之JS表单字段输入脚本验证
关键字: 表单设计器, 字段验证. workflow,ccform, ccBPM. 工作流快速开发平台 工作流流设计 业务流程管理 asp.net 开源工作流bpm工作流系统 java工作流 ...
- Java工作流引擎节点接收人设置20种规则讲解一
关键字: 驰骋工作流程快速开发平台 工作流程管理系统 工作流引擎 asp.net工作流引擎 java工作流引擎. 开发者表单 拖拽式表单 工作流系统CCBPM节点访问规则接收人规则 适配数据库: o ...
- Java工作流引擎节点接收人设置“按自定义SQL计算”系列讲解
关键字: 驰骋工作流程快速开发平台 工作流程管理系统 工作流引擎 asp.net工作流引擎 java工作流引擎. 开发者表单 拖拽式表单 工作流系统CCBPM节点访问规则接收人规则 适配数据库: o ...
- Java工作流引擎系统节点接收人设置“其他方式总结”系列讲解
关键字: 驰骋工作流程快速开发平台 工作流程管理系统 工作流引擎 asp.net工作流引擎 java工作流引擎. 开发者表单 拖拽式表单 工作流系统CCBPM节点访问规则接收人规则 适配数据库: o ...
随机推荐
- [Selenium] 如何使ChromeDriver 每次启动的端口不会随机变化
ChromeDriver 在不指定任何参数的情况下,启动监听端口会随机变化.如果需要保证其端口固定不变,可通过ChromeDriverService 打的目的 public class testCh ...
- [SDOI2016] 模式字符串 (BZOJ4598 & VIJOS1995)
首先直接点分+hash就可以做,每个点用hash判断是否为S重复若干次后的前缀或后缀,每个子树与之前的结果O(m)暴力合并.在子树大小<m时停止分治,则总复杂度为O(nlog(n/m)). 问题 ...
- rtmplib rtmp协议过程分析
转自:http://chenzhenianqing.cn/articles/1009.html 写的很好,收藏如下,向作者致敬! 没事碰到了librtmp库,这个库是ffmpeg的依赖库,用来接收,发 ...
- MySql数据库知识点
关系型数据库管理系统简介 为什么使用数据库 1.降低存储数据的冗余度 2.更高的数据一致性 3.存储的数据可以共享 4.可以建立数据库所遵循的标准 5.便于维护数据完整性 6.能够实现数据的安全性 数 ...
- oracle 在insert into的时候报ORA-00928: missing SELECT keyword错 [问题点数:100分,结帖人dm520]
转自:https://bbs.csdn.net/topics/310095274 INSERT INTO SA_Table(uniPositionCode,transferGroupName,appC ...
- 041--Jquery
一.Jquery对象 jQuery 对象就是通过jQuery包装DOM对象后产生的对象.jQuery 对象是 jQuery 独有的. 如果一个对象是 jQuery 对象, 那么它就可以使用 jQuer ...
- POJ1276【多重背包】
题意: 给出一个价值sum,然后给出n,代表n个方案,接着n对代表个数与价值,要求最接近sum,但不超过sum的价值. 思路: 多重背包,利用二进制拆分达到保证对于0..n间的每一个整数,均可以用若干 ...
- PJzhang:有关火绒新版本以及火绒的一些介绍
猫宁!!! 看到公司有人还在使用企业版麦咖啡杀毒,公司没续费之后,病毒库已经好久没有更新了. 现在测试的360天擎,员工反馈有点卡,重要原因是软件太重,根本原因是电脑该换代了. 自然想到了,用过一段时 ...
- CentOS7下如何正确安装并启动Docker(图文详解)
我使用了CentOS 7操作系统,可以非常容易地安装Docker环境.假设,下面我们都是用root用户进行操作,执行如下命令进行准备工作: yum install -y yum-utils yum-c ...
- hdu1151 Air Raid 基础匈牙利
#include <cstdio> #include <cstring> #include <cstdlib> #include <algorithm> ...