Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >java工作流activity_activity 工作流学习(一)

java工作流activity_activity 工作流学习(一)

作者头像
全栈程序员站长
发布于 2022-06-27 13:18:21
发布于 2022-06-27 13:18:21
8780
举报

大家好,又见面了,我是你们的朋友全栈君。

启动流程实例

什么是流程实例?根据一个流程定义具体的一次执行过程就是一个流程实例,一个流程定义对应多个流程实例(一对多关系)

为了演示:在流程图中指定办理人是谁,现在是写死的,表示只能张三能提交请假申请。后面会讲解如何动态指定。

//根据流程定义的Id启动一个流程实例(操作ACT_RU_EXECUTION、ACT_RU_TASK、ACT_HI_PROCINST、ACT_HI_ACTINST、ACT_HI_TASKINST、ACT_RU_IDENTITYLINK、ACT_HI_IDENTITYLINK表)

@Test

public void test6() {

ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

String processDefinitionId=”qjlc:1:104″;

ProcessInstance processInstance = processEngine.getRuntimeService().startProcessInstanceById(processDefinitionId);

System.out.print(processInstance.getId());//201

}

查询个人任务列表

@Test

public void test7() {

ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

TaskQuery query = processEngine.getTaskService().createTaskQuery();

query.taskAssignee(“张三”);

List list = query.list();

for (Task item : list) {

System.out.print(item.getId()+”===”+item.getName());//204===提交请假申请

}

}

办理任务

//办理任务(主要操作ACT_RU_EXECUTION、ACT_RU_TASK表)

@Test

public void test8() {

ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

processEngine.getTaskService().complete(“204”);

}

办理任务后,流程就走到了下一个节点,再次查询张三个人任务列表就查不到了,此时用李四去查就可以了。

使用Activiti框架的API操作流程

/**

* 使用Activiti框架的API操作流程

*/

public class ActivitiAPITest {

ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

/**

* 部署流程定义 方式一:读取单个的流程定义文件 方式二:读取zip压缩文件

*/

@Test

public void test1() {

DeploymentBuilder deploymentBuilder = processEngine.getRepositoryService().createDeployment();

// 方式一:读取单个的流程定义文件

deploymentBuilder.addClasspathResource(“test1.bpmn”);

deploymentBuilder.addClasspathResource(“test1.png”);

Deployment deployment = deploymentBuilder.deploy();

// 方式二:读取zip压缩文件

/*ZipInputStream zipInputStream = new ZipInputStream(this.getClass().getClassLoader().getResourceAsStream(“process.zip”));

deploymentBuilder.addZipInputStream(zipInputStream);

deploymentBuilder.name(“请假流程部署”);

Deployment deployment = deploymentBuilder.deploy();*/

}

/**

* 查询部署列表

*/

@Test

public void test2() {

// 部署查询对象,查询表act_re_deployment

DeploymentQuery query = processEngine.getRepositoryService().createDeploymentQuery();

List list = query.list();

for (Deployment deployment : list) {

String id = deployment.getId();

System.out.println(id);

}

}

/**

* 查询流程定义列表

*/

@Test

public void test3() {

// 流程定义查询对象,查询表act_re_procdef

ProcessDefinitionQuery query = processEngine.getRepositoryService().createProcessDefinitionQuery();

List list = query.list();

for (ProcessDefinition pd : list) {

System.out.println(pd.getName() + “” + pd.getId());

}

}

/**

* 删除部署信息

*/

@Test

public void test4() {

String deploymentId = “1001”;

// processEngine.getRepositoryService().deleteDeployment(deploymentId);

processEngine.getRepositoryService().deleteDeployment(deploymentId,true);

}

/**

* 删除流程定义(通过删除部署信息达到删除流程定义的目的)

*/

@Test

public void test5() {

String deploymentId = “1401”;

// processEngine.getRepositoryService().deleteDeployment(deploymentId);

processEngine.getRepositoryService().deleteDeployment(deploymentId,

true);

}

/**

* 查询一次部署对应的流程定义文件名称和对应的输入流(bpmn png)

*

* @throws Exception

*/

@Test

public void test6() throws Exception {

String deploymentId = “101”;

List names = processEngine.getRepositoryService()

.getDeploymentResourceNames(deploymentId);

for (String name : names) {

System.out.println(name);

InputStream in = processEngine.getRepositoryService()

.getResourceAsStream(deploymentId, name);

// 将文件保存到本地磁盘

/*

* OutputStream out = new FileOutputStream(new File(“d:\\” + name));

* byte[] b = new byte[1024]; int len = 0; while((len =

* in.read(b))!=-1) { out.write(b, 0, len); } out.close();

*/

FileUtils.copyInputStreamToFile(in, new File(“d:\\” + name));

in.close();

}

}

/**

* 获得png文件的输入流

*

* @throws Exception

*/

@Test

public void test7() throws Exception {

String processDefinitionId = “qjlc:9:1204”;

InputStream pngInputStream = processEngine.getRepositoryService()

.getProcessDiagram(processDefinitionId);

FileUtils.copyInputStreamToFile(pngInputStream, new File(“d:\\my.png”));

}

/**

* 启动流程实例 方式一:根据流程定义的id启动 方式二:根据流程定义的key启动(自动选择最新版本的流程定义启动流程实例)

*/

@Test

public void test8() {

/*

* String processDefinitionId = “qjlc:9:1204”; ProcessInstance

* processInstance =

* processEngine.getRuntimeService().startProcessInstanceById

* (processDefinitionId ); System.out.println(processInstance.getId());

*/

String processDefinitionKey = “qjlc”;

ProcessInstance processInstance = processEngine.getRuntimeService()

.startProcessInstanceByKey(processDefinitionKey);

System.out.println(processInstance.getId());

}

/**

* 查询流程实例列表,查询act_ru_execution表

*/

@Test

public void test9(){

//流程实例查询对象,查询act_ru_execution表

ProcessInstanceQuery query = processEngine.getRuntimeService().createProcessInstanceQuery();

query.processDefinitionKey(“qjlc”);

query.orderByProcessInstanceId().desc();

query.listPage(0, 2);

List list = query.list();

for (ProcessInstance pi : list) {

System.out.println(pi.getId() + ” ” + pi.getActivityId());

}

}

/**

* 结束流程实例,操作的表act_ru_execution act_ru_task

*/

@Test

public void test10(){

String processInstanceId = “1601”;

processEngine.getRuntimeService().deleteProcessInstance(processInstanceId , “我愿意”);

}

/**

* 查询任务列表

*/

@Test

public void test11(){

//任务查询对象,查询act_ru_task表

TaskQuery query = processEngine.getTaskService().createTaskQuery();

String assignee = “李四”;

query.taskAssignee(assignee);

query.orderByTaskCreateTime().desc();

List list = query.list();

for (Task task : list) {

System.out.println(task.getId());

}

}

/**

* 办理任务

*/

@Test

public void test12(){

String taskId = “2902”;

processEngine.getTaskService().complete(taskId);

}

/**

* 直接将流程向下执行一步

*/

@Test

public void test13(){

String executionId = “2701”;//流程实例id

processEngine.getRuntimeService().signal(executionId);

}

/**

* 查询最新版本的流程定义列表

*/

@Test

public void test14(){

ProcessDefinitionQuery query = processEngine.getRepositoryService().createProcessDefinitionQuery();

query.orderByProcessDefinitionVersion().asc();

List list = query.list();

Map map = new HashMap();

for (ProcessDefinition pd : list) {

map.put(pd.getKey(), pd);

}

ArrayList lastList = new ArrayList<>(map.values());

for (ProcessDefinition processDefinition : lastList) {

System.out.println(processDefinition.getName() + ” “+ processDefinition.getVersion() );

}

}

}

Activiti框架提供的Service对象

RepositoryService—-操作静态的资源(流程定义,bpmn、png)

RuntimeService—–操作流程实例(启动流程实例、查询流程实例、结束流程实例)

TaskService—–操作任务(查询任务、办理任务)

HistoryService—-操作历史数据

Activiti框架提供的对象(和表有对应关系)

Deployment—–act_re_deployment

ProcessDefinition—-act_re_procdef

ProcessInstance—–act_ru_execution

Task—–act_ru_task

使用网页版流程设计器

1、将activiti-explorer.war复制到tomcat中

2、启动tomcat,访问http://lcoalhost:8080/activiti-explorer

3、使用kermit/kermit登录

4、

5、

参考文档:http://www.cnblogs.com/llzgzljl/archive/2013/10/07/3356108.html

学习资源:http://www.mossle.com/index.do

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/133045.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年6月9,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Activiti工作流的详细介绍[通俗易懂]
1、工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档、信息或任务的过程自动进行,从而实现某个预期的业务目标,或者促使此目标的实现。
全栈程序员站长
2022/11/08
4.1K0
Activiti工作流的详细介绍[通俗易懂]
工作流引擎之activiti入门
在解释activiti之前我们看一下什么是工作流。 工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档、信息或任务的过程自动进行,从而实现某个预期的业务目标,或者促使此目标的实现”。 我的理解是,工作流将一套大的业务逻辑分解成业务逻辑段, 并统一控制这些业务逻辑段的执行条件,执行顺序以及相互通信。 实现业务逻辑的分解和解耦。 Activiti是一个开源的工作流引擎,它实现了BPMN 2.0规范,可以发布设计好的流程定义,并通过api进行流程调度。 BPMN即业务流程建模与标注(Business Process Model and Notation,BPMN) ,描述流程的基本符号,包括这些图元如何组合成一个业务流程图(Business Process Diagram)。
lyb-geek
2018/07/26
9.4K0
工作流引擎之activiti入门
Activiti工作流框架学习笔记(一)「建议收藏」
对于第一次接触工作流的小伙伴来说,觉得难以理解,也无可厚非,说得好像我自己就能深刻理解一样,我也只是将学习Activiti工作流框架中的一些知识点记录下来而已,也希望能和大家讨论。
全栈程序员站长
2022/11/08
2.7K0
Activiti工作流框架学习笔记(一)「建议收藏」
day57_BOS项目_09
方式一:   第一步:获得activiti-eclipse-plugin.zip文件   第二步:将zip文件解压到eclipse的dropins目录中
黑泽君
2018/10/18
4270
day57_BOS项目_09
Activiti5工作流笔记一
  网上工作流的定义一大堆,这里就不去复制了,通俗的理解,工作流就是类似OA系统中请假审批、报销审批等一系列流程,下级提交的申请只有直系领导才能审批,其他人是没有权限的,而只有直系领导审批通过后,直系领导的直系领导才可以看到申请,并进行审批,以此类推。。。
HUC思梦
2020/09/03
8080
Activiti5工作流笔记一
java中jbpm工作流_安卓框架
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/10/01
7740
java中jbpm工作流_安卓框架
day58_BOS项目_10
之前的请假流程,是没有实际意义的,我们要使得我们流程变得有意义(有实际意义),需要在流程向下推进的过程中带着数据推进才有意义。如下图所示:
黑泽君
2018/10/25
7330
day58_BOS项目_10
Activiti7笔记(二)Activiti7一共涉及到25张表,哪些操作会涉及哪些表,每张表的作用是什么
第二部分是表示表的用途的两个字母标识。 用途也和服务的 API 对应。 ACT_RE :'RE’表示 repository。 这个前缀的表包含了流程定义和流程静态资源 (图片,规则,等等)。 ACT_RU:'RU’表示 runtime。 这些运行时的表,包含流程实例,任务,变量,异步任务,等运行中的数据。 Activiti 只在流程实例执行过程中保存这些数据, 在流程结束时就会删除这些记录。 这样运行时表可以一直很小速度很快。 ACT_HI:'HI’表示 history。 这些表包含历史数据,比如历史流程实例, 变量,任务等等。 ACT_GE : GE 表示 general。 通用数据, 用于不同场景下
一写代码就开心
2022/05/09
3K0
Activiti7笔记(二)Activiti7一共涉及到25张表,哪些操作会涉及哪些表,每张表的作用是什么
activiti6.0工作流引擎深度解析_自定义工作流引擎
工作流(Workflow),就是通过计算机对业务流程自动化执行管理。它主要解决的是“使在多个参与者之间按照某种预定义的规则自动进行传递文档、信息或任务的过程,从而实现某个预期的业务目标,或者促使此目标的实现”。
全栈程序员站长
2022/09/27
3K0
activiti6.0工作流引擎深度解析_自定义工作流引擎
【白银人机】Activiti 工作流:完整 hello world 大比拼(API 结合实例讲解)
本来想着闲来无事,前面在项目中刚刚用到了工作流 Activiti 框架,写写博客的,但是,事情总是纷纷杂杂,一直拖延到现在,这一节原本想要写一下关于 Activiti 的 API ,但是,想着太多这样的博客了,而且显得太生硬,难以理解,所以,这些 API 就在实际的 demo 中来讲解。
好好学java
2019/06/14
8110
第十节:Activiti6.0——四种Job工作的产生与管理
一、概述 介绍: 流程在执行过程中会产生不同的任务。 ServiceTask异步任务会产生异步任务,存放在一般工作表act_ru_job中。 定时任务会产生定时的任务,在定时时间未到达之前会存放在定时工作表act_ru_timer_job中。 挂起任务,比如将未到时间的定时任务手动暂停,则会存放在挂起任务表act_ru_suspended_job中。 不可执行任务,如果任务执行失败,并且在重试次数用完的情况下也没有成功执行,则任务会存放到不可执行任务表act_ru_deadletter_job中。 二、异步
凡人飞
2020/09/21
3.4K0
第十节:Activiti6.0——四种Job工作的产生与管理
万字详解:Activiti 工作流引擎
点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路,很肝~ 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析 作业调度中间件 Elastic-Job 源码解析 分布式事务中间件 TCC-Transaction
芋道源码
2022/07/26
1K0
万字详解:Activiti 工作流引擎
Activiti最全入门教程「建议收藏」
1) 假设:这两张图就是华谊兄弟的请假流程图 2) 图的组成部分: A. 人物:范冰冰 冯小刚 王中军 B. 事件(动作):请假、批准、不批准
全栈程序员站长
2022/09/13
2.5K0
Activiti最全入门教程「建议收藏」
2021全网最全Activiti7教程03(Activiti7基本操作-欢迎收藏)
  将上面在设计器中定义的流程部署到activiti数据库中,就是我们讲的流程部署。 通过调用Activiti的api将流程定义的bpmn和png两个文件一个一个添加部署到activiti中,还可以将两个文件打车zip包部署。
用户4919348
2021/06/17
8740
2021全网最全Activiti7教程03(Activiti7基本操作-欢迎收藏)
activity工作流引擎
1、工作流是什么? 简单来说工作流就是将一条信息根据角色、分工、条件不同进行固定的向上传递,数据是按照固定的流向进行传输,一级一级传递下去,这种场景在OA , CRM / ERP中应用的比较多。通常这种操作自己本身也可以通过逻辑来实现,但是复杂度很高。而且不方便维护。所以通常都采用第三方引擎框架来实现,出了引擎本身简化了操作以外。更重要的是维护起来很方便。
全栈程序员站长
2022/07/01
1.5K0
activity工作流引擎
Activiti学习详解【面试+工作】
一:Activiti第一天 1:工作流的概念 说明: 1) 假设:这两张图就是XX兄弟的请假流程图 2) 图的组成部分: A. 人物:范XX 冯X刚 王X军 B. 事件(动作):请假、批准、不批准
Java帮帮
2018/03/15
3.4K0
Activiti学习详解【面试+工作】
第八节:Activiti6.0——启动流程相关
介绍:在启动流程后,每个流程实例都会有执行流(存储在act_ru_execution表中)。实例都有主执行流,没有父id的执行流是流程实例,其后如果流程中有一个分支则有一个子执行流,分支和子执行流一一对应。对执行流可以设置变量,设置子执行流的变量为本地(临时)变量(自在当前执行流有效),设置主执行流的变量为全局变量。
凡人飞
2020/09/21
7040
第八节:Activiti6.0——启动流程相关
Activiti7工作流引擎-流程定义
流程定义是线下按照 bpmn2.0 标准去描述 业务流程,通常使用 activiti-explorer(web 控制台)或 activiti-eclipse-designer 插件对业务流程进行建模,这两种方式都遵循 bpmn2.0 标准。本教程使用activiti-eclipse-designer 插件完成流程建模。使用 designer 设计器绘制流程,会生成两个文件:.bpmn和.png
cwl_java
2020/01/02
1.8K0
Activiti就是这么简单
Activiti介绍 什么是Activiti? Activiti5是由Alfresco软件在2010年5月17日发布的业务流程管理(BPM)框架,它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。Activiti基于Apache许可的开源BPM平台,创始人Tom Baeyens是JBoss jBPM的项目架构师,它特色是提供了eclipse插件,开发人员可以通过插件直接绘画出业务 流程图。. 我们即将学习的是一个业务流程管理框架, 常见开源工作流引擎框架 : O
Java3y
2018/04/02
2.3K1
Activiti就是这么简单
第五节:Activiti6.0——流程定义相关API
介绍:在发布一次资源后,会生成对应的流程定义(存储在表act_re_procdef)中,该定义记录一个流程的信息,如下图所有:
凡人飞
2020/09/20
1.1K0
相关推荐
Activiti工作流的详细介绍[通俗易懂]
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档