Activiti工作流框架学习二:API示例

Activiti工作流框架学习笔记(一) 工作流的概念先看下面两张图: 对以上两张图进行说明: 假设这两张图就是华谊兄弟的请假流程图 图的组成部分: 人物:范冰冰、冯小刚、王中军 事件(动作):请假、批准、不批准 通过以上分析我们就可以抽象成: 接下来给出工作流的书面化概念: 工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档、 阅读详情

开发工具:eclipse

框架:Activiti 5.13

项目:普通Java项目

eclipse使用Avtiviti框架需要安装插件,我在另一篇文章已经写过了,就不在这里介绍

接下来是介绍Activiti的入门案例,即API的使用
这里写图片描述

工作流框架底层需要有数据库支持,activiti5.13版本对应23张表,activiti框架底层使用mybatis操作数据库。
JBPM4.4底层18张表,底层使用hibernate操作数据库。

第一步:创建Activiti的23张表

方法一:手动创建(建议)
根据不同数据库选择相应的sql文件,并执行后创建
这里写图片描述
方法二:使用框架自动创建(不建议)
1:创建Java项目并导入jar包
(导入activiti提供的示例rest里的44个jar包,注意:还需要再导入mysql-connector-java-5.1.5-bin.jar)
这里写图片描述
2:提供配置文件

<!-- activiti-context.xml -->
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
    <!-- 流程引擎配置对象 -->
    <bean id="processEngineConfiguration"
         class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
        <property name="jdbcDriver"  value="com.mysql.jdbc.Driver"/>
        <property name="jdbcUrl"  value="jdbc:mysql:///activiti_day1"/>
        <property name="jdbcUsername"  value="root"/>
        <property name="jdbcPassword"  value="root"/>
        <!-- 配置自动创建表 -->
        <property name="databaseSchemaUpdate" value="true"/>
    </bean>
    <!-- 使用工厂创建流程引擎对象 -->
    <bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
        <property name="processEngineConfiguration" ref="processEngineConfiguration"/>
    </bean>
</beans>

3:创建流程引擎对象,自动建表

/**
 * 使用框架提供的自动建表方式创建23张表
 */
@Test
public void test1() {
    String resource = "activiti-context.xml";// 配置文件
    String beanName = "processEngineConfiguration";
    // 读取配置文件,获得配置对象
    ProcessEngineConfiguration config = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource(resource, beanName);
    ProcessEngine processEngine = config.buildProcessEngine();
}

/**
 * 使用默认配置 
 * 1、配置文件必须在classpath根目录下
 * 2、配置文件名称必须为activiti-context.xml或者activiti.cfg.xml
 * 3、配置文件中配置对象的id必须为processEngineConfiguration 
 * 4、工厂对象的id必须为processEngine
 */
@Test
public void test2() {
    ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
}

第二步:使用API操作流程

使用插件设计一个流程图:(完成后在src下生成qjlc.bpmn以及qjlc.png文件)
这里写图片描述

第三步:编码

/**
 * 部署流程定义 方式一:加载单个的流程定义文件 方式二:加载zip文件
 * 操作的数据表:act_re_deployment(部署表)、act_re_procdef(流程定义表)、act_ge_bytearray(二进制表)
 * @throws FileNotFoundException 
 */
@Test
public void test1() throws FileNotFoundException {
    DeploymentBuilder deploymentBuilder = processEngine.getRepositoryService().createDeployment();

    // 方式一:加载单个的流程定义文件
    // deploymentBuilder.addClasspathResource("qjlc.bpmn");
    // deploymentBuilder.addClasspathResource("qjlc.png");
    // Deployment deployment = deploymentBuilder.deploy();

    // 方式二:加载zip文件
    // 加载src下的process.zip
    //ZipInputStream zipInputStream = new ZipInputStream(this.getClass().getClassLoader().getResourceAsStream("process.zip"));
    // 加载指定文件(建议)
    ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(new File("d:\\process.zip")));

    deploymentBuilder.addZipInputStream(zipInputStream );
    deploymentBuilder.deploy();
}
/**
 * 查询流程定义
 * 操作的数据表:act_re_procdef
 */
@Test
public void test2(){
    ProcessDefinitionQuery query = processEngine.getRepositoryService().createProcessDefinitionQuery();
    query.processDefinitionKey("qjlc");//根据key过滤
    query.orderByProcessDefinitionVersion().asc();//根据流程定义版本升序
    List<ProcessDefinition> list = query.listPage(0, 10);//分页查询
    for (ProcessDefinition processDefinition : list) {
        System.out.println(processDefinition.getId());
    }
}
/**
 * 根据流程定义启动流程实例
 * 方式一:根据流程定义id启动流程实例
 * 方式二:根据流程定义key启动流程实例(建议)-----可以根据当前最新版本的流程定义启动流程实例
 * 操作的数据表:act_ru_execution(流程实例表)、act_ru_task(任务表)
 */
@Test
public void test3() throws Exception{
    //方式一:根据流程定义id启动流程实例
    //String processDefinitionId = "";//流程定义id
    //processEngine.getRuntimeService().startProcessInstanceById(processDefinitionId);

    String processDefinitionKey = "qjlc";
    //方式二:根据流程定义key启动流程实例
    ProcessInstance processInstance = processEngine.getRuntimeService().startProcessInstanceByKey(processDefinitionKey);
    System.out.println(processInstance.getId() + " " + processInstance.getProcessDefinitionId());
}
/**
 * 查询流程实例
 * 操作的数据表:act_ru_execution(流程实例表)
 */
@Test
public void test4() throws Exception{
    List<ProcessInstance> list = processEngine.getRuntimeService().createProcessInstanceQuery().list();
    for (ProcessInstance processInstance : list) {
        System.out.println(processInstance.getId());
    }
}
/**
 * 删除流程实例
 * 操作的数据表:act_ru_execution(流程实例表)、act_ru_task(任务表)
 */
@Test
public void test5() throws Exception{
    String processInstanceId = "1201";
    String deleteReason = "不请假了";
    processEngine.getRuntimeService().deleteProcessInstance(processInstanceId, deleteReason);
}
/**
 * 查询个人任务
 * 操作的数据表:act_ru_task(任务表)
 */
@Test
public void test6() throws Exception{
    TaskQuery query = processEngine.getTaskService().createTaskQuery();
    query.taskAssignee("张三");//查询责任人张三的所有任务
    query.orderByTaskCreateTime().desc();//根据任务时间降序
    List<Task> list = query.list();
    for (Task task : list) {
        System.out.println(task.getId());
    }
}
/**
 * 办理个人任务
 * 操作的数据表:act_ru_execution(流程实例表)、act_ru_task(任务表)
 */
@Test
public void test7() throws Exception{
    String taskId = "1304";
    processEngine.getTaskService().complete(taskId);
}

以下两个方法用于查询对应的png图片以及输出,应用场景:动态查询并显示对应的流程图

/**
 * 根据**部署ID**查询部署对应的流程定义文件名称和输入流
 * @throws FileNotFoundException 
 */
@Test
public void test8() throws Exception{
    String deploymentId = "201";//部署id
    List<String> names = processEngine.getRepositoryService().getDeploymentResourceNames(deploymentId);
    for (String name : names) {//可以查询到对应的.bpmn以及.png
        InputStream in = processEngine.getRepositoryService().getResourceAsStream(deploymentId, name);
        FileUtils.copyInputStreamToFile(in, new File("d:\\"+name));
        in.close();
    }
}

/**
 * 根据**流程定义ID**查询部署对应的流程定义输入流
 * @throws FileNotFoundException 
 */
@Test
public void test9() throws Exception{
    String processDefinitionId = "qjlc:6:904";//流程定义id
    InputStream pngStream = processEngine.getRepositoryService().getProcessDiagram(processDefinitionId);
    FileUtils.copyInputStreamToFile(pngStream, new File("d:\\abc.png"));//只能取到对应的.png输入流
}

API总结

1.几个接口(和表有对应关系):

ProcessDefinition—–act_re_procdef
ProcessInstance——act_ru_execution
Task—–act_ru_task

2.几个Query对象

DeploymentQuery——act_re_deployment
ProcessDefinitionQuery—–act_re_procdef
TaskQuery—–act_ru_task

3.几个Service

RepositoryService—-操作部署表、流程定义表等静态资源信息表
RuntimeService—-操作流程实例表、任务表等动态信息表
TaskService—–操作任务表
HistoryService—-操作历史表 IdentityService—-操作用户表、组表、关系表

Activiti7 工作流引擎学习 Activiti 是一个开源的工作流引擎,用于业务流程管理(BPM它允许开发者以 BPMN 2.0 标准定义业务流程,通过 Activiti 的 API 将流程定义内容存储起来,并在 Activiti 执行过程中可以查询定义的内容。Activiti 执行把流程定义内容存储在数据库中,使得业务系统中的复杂业务流程可以被 Activiti 管理,从而提高系统的健壮性和减少系统开发维护成本。 阅读详情

相关推荐

Activiti工作流

Activiti工作流 一、Activiti介绍 1、Activiti 的概述 ​ 工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档、信息或任务的过程自动进行,从而实现某个预期的业务目标,或者促使此目标的实现”。 ​ 工作流管理系统(Workflow Management S...

JAVA_HORSE的博客 9500

Activiti 5.12用户指南之Activiti的API

 一、流程引擎的API和服务(services)      引擎的API是影响Activiti最常见的一种方法。我们一开始最关注的中心是ProcessEngine,像之前描述的那样,流程引擎可以被多种方式创建。从这个流程引擎里面,你能获得各个包含workflow/BPM方法的服务。流程引擎和这些获得的服务是线程安全的。所以你能为整个服务器保留这些中的一个引用。       P...

an_feng的专栏 677

Activiti RESTful API 示例项目

在当今的IT行业中,业务流程管理(BPM)以及工作流自动化的重要性日益凸显。工作流是指在组织中一系列相互关联的任务,这些任务形成了完成特定业务目标的流程。而业务流程管理则是一种系统的方法,用于设计、执行、监督和优化这些工作流程。RESTful API是一种使用HTTP请求的软件架构风格,它将Web服务设计为资源的集合,并且每个资源都由URI(统一资源标识符)唯一标识。RESTful API的特点包括无状态交互、统一接口、可缓存性和客户端-服务器分离。

weixin_42230607的博客 1031

Activiti——流程任务TaskService API详解

目录Activiti流程任务1、任务的创建与删除1.1、Task接口1.2、创建与保存Task实例1.3、删除任务2、任务权限2.1、设置候选用户组2.2、设置候选用户2.3、权限数据查询2.4、设置任务持有人2.5、设置任务代理人2.6、添加任务权限数据2.7、删除用户组权限2.8、删除用户权限3、任务参数3.1、基本类型参数设置3.2、序列化参数3.3、获取参数3.4、参数作用域3.5、设置多个参数3.6、数据对象4、任务附件管理4.1、Attachment对象4.2、创建任务附件4.3、附件查询4.4

吴声子夜歌的博客 8694

AutoLISP 学习 (一)

AutoLISP基本语法结构、语法 以括号组成表达式,左右括号一定要成对,单、双引号也要成对,例如: (defun c:hello() (princ "\nHello world!") (prin1) ) 表达式格式:(函数名 操作数 操作数 …),例如: (setq p1 (list 0 0)) (setq p2 (list 10 10)) (setq p3 (list 20 20)) ;;; CAD中画直线,经过p1 p2 p3 (command "LINE" p1 p2 p3 ""

m0_54575622的博客 2122

风控IV、AUC、KS python计算代码

df_temp:数据集,Y:是否逾期标签,feas_list:需要计算IV的 变量。2、 按月和不同Y 下的 IV计算。

暮雨听轩的专栏 1618

Activiti入门文档

Activiti-相关API 本文介绍与Activiti工作流具体操作相关的API。 第一部分 几个Service相关的API 1.流程定义API--RepostoryService API activiti.cfg.xml是一个spring依赖注入的xml文件,其具体内容可以参考 Spring集成activiti 测试类 public class ProcessDefinitionTest { ...

weixin_34358092的博客 391

AniME框架深度体验:用AI自动生成《修真小说》动画全流程记录

本文详细记录了使用开源多智能体框架AniME,结合其核心动画生成模型AniSora V3,将一段修真小说文本自动转化为风格统一动画视频的全流程实战。文章深入解析了从环境搭建、导演智能体任务分解,到多智能体协作生成分镜、角色、动画及最终合成的每一步操作与挑战,为AI驱动的长视频创作提供了宝贵的实践经验与流程优化思路。

ol789012345的博客 625

activiti常用的接口api

常用对象解析: 1、ProcessEngineConfiguration 流程引擎配置对象(配置数据库连接4个大配置和建表策略) 2、ProcessEngine 流程引擎核心对象(服务大管家) 3、RepositoryService 仓库服务。管理规则相关的信息。 4、RuntimeService 运行时服务。 负责流程的启动,查看,执行等操作。 5、TaskService 任务服务。管理任务的查看,接手,办理等操作。 6、historyService

qq_40065816的博客 3683

多目标跟踪中使用trackeval评估dancetrack运行结果

trackeval使用

qq_46144849的博客 1782

数字后端流程--place

Floorplan完成后芯片的大致框架已经出现,万里长征已经迈出特别重要的第一步了,前面的步骤我们已经完成了io port,macro的摆放,现在core外只剩下std cell(标准单元)了,Place这一步就是要把std cell放进core里。看到密密麻麻的std cell也不用紧张,因为放std cell不用像macro手动一个一个摆,工具就可以帮我们完成大部分工作。虽然这一步的工作只有一个,但也不是只要Place完就能进行下一步的,衡量Place质量是否满足标准会通过以下几点判断。

qq_68400574的博客 771

Activiti——流程控制RuntimeService API详解

目录Activiti流程控制1、流程实例与执行流1.1、流程实例与执行流概念1.2、流程实例和执行流对象(ProcessInstance与Execution)2、启动流程2.1、startProcessInstanceById方法2.2、startProcessInstanceByKey方法2.3、startProcessInstanceByMessage方法3、流程参数3.1、设置与查询流程参数3.2、流程参数的作用域3.3、其他设置参数的方法4、流程操作4.1、流程触发4.2、触发信号事件4.3、触发消

吴声子夜歌的博客 3726

深入浅出ASAP2标准:手把手教你编写和解析A2L文件(含Python示例代码)

本文深入解析ASAP2标准下的A2L文件,涵盖基础概念、文件结构及Python实现代码,帮助开发者掌握汽车ECU标定和测量中的关键数据管理技术。通过详细示例,展示如何编写和解析A2L文件,提升电控数据管理效率。

happy2的博客 1099

Activiti工作流框架学习(二)——使用Activiti提供的API完成流程操作

可以在项目中加入log4j,将logj4.properties文件拷入到src目录下,这样框架执行的sql就可以输出到到控制台,log4j提供的日志级别有以下几种: Fatal error warn info debug trace 一、部署流程定义 1,在工程项目下创建源码文件夹process 2,在该文件下下面新创建一个工作流流程定义文件test1.bpmn(New...

alexhill2009的博客 180

Dify智能体开发:大语言模型(LLM)问题分类

通过定义分类描述,问题分类器能够根据用户输入,使用 LLM 推理与之相匹配的分类并输出分类结果,向下游节点提供更加精确的信息。

王国平的博客 2247

GhidraMCP:AI驱动的逆向工程革命——让LLM自主操作Ghidra进行自动化分析

(Ghidra Machine Control Protocol)应运而生,它通过将LLM与Ghidra(美国NSA开源逆向工具)结合,实现了AI驱动的自动化逆向工程流程。逆向工程是软件安全、漏洞分析和代码审计的核心环节,但传统方法依赖人工分析,耗时且易出错。未来,随着LLM技术的演进和逆向工程工具的优化,GhidraMCP有望成为安全研究人员和开发者的核心工具,推动逆向工程进入“AI辅助时代”。GhidraMCP通过LLM与Ghidra的深度整合,重新定义了逆向工程的自动化边界。

这里汇聚了前沿的技术分享与实用的开发技巧,带你探索从创意到企业的技术创业之路。 2114

Activiti工作流的详细介绍

一、了解工作流 1、工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档、信息或任务的过程自动进行,从而实现某个预期的业务目标,或者促使此目标的实现。 2、工作流管理系统(Workflow Management System, WfMS)是一个软件系统,它完成工作量的定义和管理,并按照在系统中预先定义好的工作流逻辑进行工作流实例的执行。工作流管理系统不是企业的业务系统,而是为企业的业务系统的运行提供了一个软件的

欧菲丽的博客 2万+

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

学习Activiti工作流框架的API

1 部署流程定义 Ø 部署流程定义(方式一):将设计的流程图发布到数据库中 public void run3() { // 创建流程部署建造对象 DeploymentBuilder deployment = processEngine.getRepositoryService() .createDeployment(); // 读取两个流程定义文件(png、pbmn) deplo

淘大大 2526

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

史上最全的工作流引擎 Activiti 学习教程(值得收藏)

点击关注公众号,实用技术文章及时了解一、工作流介绍1.1 概念工作流(Workflow),就是通过计算机对业务流程自动化执行管理。它主要解决的是“使在多个参与者之间按照某种预定义的规则自动进行传递文档、信息或任务的过程,从而实现某个预期的业务目标,或者促使此目标的实现”。1.2 工作流系统一个软件系统中具有工作流的功能,我们把它称为工作流系统,一个系统中工作流的功能是什么...

Java知音 3万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

工作流实战之Activiti7

本文主要介绍了 Activiti 的相关使用与集成,适合想要学习 Activiti 的读者食用。Activiti 是目前使用最为广泛的开源工作流引擎之一,在小七 2017 年走向程序员这一条不归路的时候,它就已经是开源工作流引擎的老大哥了。学习一门新技术/新框架,我们第一件事就是从它的官网入手,下面贴出 Activiti 的官网从官网的描述,我们可以知道 Activiti 是领先的轻量级的、以 java 为中心的开源 BPMN 引擎,可以支持现实世界的流程自动化需求。 Activiti Cloud 是新一代

洋YANG的博客 7293
上一篇: Activiti工作流框架学习一:概述
下一篇: Activiti工作流框架学习三:流程变量
章 鱼
博客等级 码龄10年 203粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值