(三)Activiti之第一个程序以及Activiti插件的使用和Activiti表的解释
一、案例
1.1 建立Activiti Diagram图
- new -》 activiti -》Activiti Diagram,创建一个HelloWorld文件,后缀自动为bpmn,如下图定义好流程之后,保存该bpmn文件就会生成下图中的png图片
- 用xml打开该bmpn文件,有
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test">
<process id="myFirstProcess" name="My First process" isExecutable="true">
<startEvent id="startevent1" name="Start"></startEvent>
<userTask id="usertask1" name="用户节点" activiti:assignee="shyroke"></userTask>
<endEvent id="endevent1" name="End"></endEvent>
<sequenceFlow id="flow1" sourceRef="startevent1" targetRef="usertask1"></sequenceFlow>
<sequenceFlow id="flow2" sourceRef="usertask1" targetRef="endevent1"></sequenceFlow>
</process>
<bpmndi:BPMNDiagram id="BPMNDiagram_myFirstProcess">
<bpmndi:BPMNPlane bpmnElement="myFirstProcess" id="BPMNPlane_myFirstProcess">
<bpmndi:BPMNShape bpmnElement="startevent1" id="BPMNShape_startevent1">
<omgdc:Bounds height="35.0" width="35.0" x="340.0" y="40.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="usertask1" id="BPMNShape_usertask1">
<omgdc:Bounds height="55.0" width="105.0" x="310.0" y="140.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="endevent1" id="BPMNShape_endevent1">
<omgdc:Bounds height="35.0" width="35.0" x="340.0" y="280.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1">
<omgdi:waypoint x="357.0" y="75.0"></omgdi:waypoint>
<omgdi:waypoint x="362.0" y="140.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow2" id="BPMNEdge_flow2">
<omgdi:waypoint x="362.0" y="195.0"></omgdi:waypoint>
<omgdi:waypoint x="357.0" y="280.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</definitions>
1.2 部署流程定义
package com.shyroke.activiti.firstActiviti; import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.repository.Deployment;
import org.junit.Test; /**
* HelloWorld 工作流
*
* @author 半颗柠檬、
*
*/
public class HelloWorldProcess { /**
* 获取默认流程引擎实例,会自动读取activiti.cfg.xml文件
*/
private ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); /**
* 部署流程定义
*/
@Test
public void test_Deploy() {
Deployment deployment=processEngine.getRepositoryService() // 获取部署相关Service
.createDeployment() //// 创建部署
.addClasspathResource("diagrams/HelloWorld.bpmn") // 加载资源文件
.addClasspathResource("diagrams/HelloWorld.png") // 加载资源文件
.name("HelloWorld流程") //流程名称
.deploy(); //部署 System.out.println("流程部署ID:"+deployment.getId());
System.out.println("流程部署Name:"+deployment.getName());
} }
- 结果:
- 执行完这步之后,act_re_deployment表会新增一条部署记录
- 也会新增act_re_procdef流程定义表(processDefine)
- 新增资源文件表act_ge_bytearray
- 更新系统配置表 act_ge_property
1.3 启动流程实例
package com.shyroke.activiti.firstActiviti; import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.junit.Test; /**
* HelloWorld 工作流
*
* @author 半颗柠檬、
*
*/
public class HelloWorldProcess { /**
* 获取默认流程引擎实例,会自动读取activiti.cfg.xml文件
*/
private ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
/**
* 启动流程实例
*/
@Test
public void test_proceinst() {
ProcessInstance instance=processEngine.getRuntimeService() // 运行时Service
.startProcessInstanceByKey("myFirstProcess"); // 流程定义表act_re_procdef的KEY字段值 System.out.println("流程实例ID:"+instance.getId());
System.out.println("流程定义ID:"+instance.getProcessDefinitionId());
}
}
- 执行用例结果:
这里的id是系统配置表 act_ge_property中id生成的。
- 执行完这步之后,流程实例运行时 执行对象表act_ru_execution
- 流程实例运行时 身份联系表act_ru_identitylink
- 流程实例运行时 用户任务表act_ru_task
- 活动节点历史表act_hi_actinst:
- 身份联系表 历史act_hi_identitylink
- 流程实例表 历史act_hi_procinst
- 历史任务表act_hi_taskinst
1.4 查看任务
package com.shyroke.activiti.firstActiviti; import java.util.List; import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.junit.Test; /**
* HelloWorld 工作流
*
* @author 半颗柠檬、
*
*/
public class HelloWorldProcess { /**
* 获取默认流程引擎实例,会自动读取activiti.cfg.xml文件
*/
private ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();/**
* 查看任务
*/
@Test
public void find_task() { List<Task> taskList=processEngine.getTaskService().createTaskQuery().taskAssignee("shyroke").list();
for(Task task:taskList){
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());
}
} }
- 执行测试用例及结果
1.5 完成任务
package com.shyroke.activiti.firstActiviti; import java.util.List; import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.junit.Test; /**
* HelloWorld 工作流
*
* @author 半颗柠檬、
*
*/
public class HelloWorldProcess { /**
* 获取默认流程引擎实例,会自动读取activiti.cfg.xml文件
*/
private ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); /**
* 完成任务
*/
@Test
public void test_completeTask() {
processEngine.getTaskService().complete("2504");
} }
- 执行测试用例,结果
- #运行时的表以act_ru开头的表(如下图)的数据全部清空
- # 历史表以act_hi开头的表表数据修改 或者增加了数据
(三)Activiti之第一个程序以及Activiti插件的使用和Activiti表的解释的更多相关文章
- 从零开始学习PYTHON3讲义(三)写第一个程序
<从零开始PYTHON3>第三讲 本页面使用了公式插件,因博客主机过滤无法显示的表示抱歉,并建议至个人主页查看原文. 我见过很多初学者,提到编程都有一种恐惧感,起源是感觉编程太难了.其 ...
- 03_java基础(三)之第一个程序与开发工具的安装
1.第一个Java程序 ① 找一个特定的放代码的地方 ② 新建一个文本文档 --> 改名 Hello.java 注意 : 必须先把文件的后缀名都显示出来 不同的操作系 ...
- activiti学习第一天
公司项目组在考虑工作流,首选了activiti,首先我们要明确为什么要使用activiti,有什么好处. 在工作中有些项目会用到工作流,如果简单的项目,我们就无需使用类似activiti.jbpm等工 ...
- 【C语言探索之旅】 第三课:你的第一个程序
内容简介 1.课程大纲 2.第一部分第三课:你的第一个程序 3.第一部分第四课预告:变量的世界 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写三个 ...
- activiti实战--第一章--认识Activiti
学习资料:<Activiti实战> 第一章 认识Activiti 内容概览:讲解activiti的特点.接口概览.架构等基本信息. 1.3 Activiti的特点 1.使用mybatis ...
- Arduino可穿戴教程之第一个程序——选择端口(三)
Arduino可穿戴教程之第一个程序——选择端口(三) 2.4.4 选择端口 在选择了板子之后,我们就需要选择板子连接到电脑的端口了.它也在“工具”菜单中设置,如图2.42所示. 注意:COM1端口 ...
- Hadoop学习历程(三、第一个程序)
根据之前的操作,我们已经可以正常的启动Hadoop了,关于真正的集群我会在之后进行说明.现在我们来看一下第一个程序吧 1. 在eclipse上建立一个java项目 2. 将 /usr/hadoop/s ...
- Objective-C学习笔记(三)——用Objective-C编写第一个程序:Hello,World!
不管是哪一个程序猿,或者是学习哪一门计算机语言.写的第一个程序基本上就是Hello World. 今天我们用OC来实现第一个程序:Hello World. 在Xcode中选择新建一个项目,在对话框中选 ...
- Activiti工作流框架学习(一)——环境的搭建和数据表的了解
一.什么是工作流 工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档.信息或任务的过程自动进行,从而实现 ...
随机推荐
- Pandas的Categorical Data
http://liao.cpython.org/pandas15/ Docs » Pandas的Categorical Data类型 15. Pandas的Categorical Data panda ...
- ip6tables命令
ip6tables命令和iptables一样,都是linux中防火墙软件,不同的是ip6tables采用的TCP/ip协议为IPv6. 语法 ip6tables(选项) 选项 -t<表>: ...
- 移动端安卓和 IOS 开发框架 Framework7 布局
对应的各种效果,Framework7 里面实现的方式比较多,这里我就只写我用的一种,样式有的自己修改了的,想看官方详细的参见 http://framework7.cn 一.手风琴布局Accordion ...
- LightGBM与评分卡
调参策略 最大化 off_ks + 0.8(off_ks-train_ks) import pandas as pd from sklearn.metrics import roc_auc_score ...
- MediaPlayer: MediaPlayer中的prepare方法和prepareAsync方法的区别
prepare方法是将资源同步缓存到内存中,一般加载本地较小的资源可以用这个,如果是较大的资源或者网络资源建议使用prepareAsync方法,异步加载.但如果想让资源启动,即start()起来,因为 ...
- 《高性能mysql》笔记(第一章,mysql的架构与历史)
mysql的服务器逻辑架构图如下: 目前工作用的5.5版本,5.5版本开始mysql开始将innoDB作为默认的存储引擎,innoDB的表是基于聚簇索引建立的. mysql的存储引擎锁管理非常重要,在 ...
- 解决 MYSQL CPU 占用 100% 的经验总结
朋友主机(Windows 2003 + IIS + PHP + MYSQL )近来 MySQL 服务进程 (mysqld-nt.exe) CPU 占用率总为 100% 高居不下.此主机有10个左右的 ...
- 腾讯ios内部视频,什么垃圾视频
前几天朋友在网上花钱买了个,腾讯ios内部视频,我也跟着下载了, 看着这列表,我感觉没什么东西,一看就是基础的东西,完全没有实战的内容,就像培训机构骗学生的东西啊,讲些毛理论,结果一到实战了,问个Sc ...
- HTML滚动时位置固定
现在显示器一般都是宽屏,网页两端常常会留白. 两边可能会放一些推荐.标签或是导航什么的辅助模块. 现在有的网站页面内容过长时,用户将滚动条向下拉时,拉到一定程度,左右两侧的辅助模块就会固定在指定位置, ...
- 🔥Scratch少儿编程——飞机大战
前两天用