1.创建流程模型,工程右键-->new-->other-->activiti diagram
2.图解元素介绍:
Start event:开始事件
End entit:结束事件
User task:用户任务活动
Service task:服务任务活动
Exclusive gateway:独家网关,排它网关通道,只能有一条分支执行,如if else
Parallel gateway:并行网关,并行网关通道,所有分支一块执行
Activiti 用户手册: http://www.mossle.com/docs/activiti/index.html#bpmnConstructs点击打开链接
package com.wawj.rpt.web.test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngineConfiguration;
public class ActivitiTest {
//驱动程序名
static String driver = "net.sourceforge.jtds.jdbc.Driver";
//URL指向要访问的数据库名mydata
static String url = "jdbc:jtds:sqlserver://10.10.110.13:1433/tester";
//MySQL配置时的用户名
static String user = "sa";
//MySQL配置时的密码
static String password = "Sa123456";
public static void main(String[] args) {
// ActivitiTest activitiTest = new ActivitiTest();
//获取sql server 的数据库 原生JDBC
//activitiTest.getMsSql();
//流程引擎ProcessEngine对象,所有操作都离不开引擎对象
ProcessEngineConfiguration processEngineConfiguration = ProcessEngineConfiguration.createStandaloneInMemProcessEngineConfiguration();
//连接数据库的配置
processEngineConfiguration.setJdbcDriver(driver);
processEngineConfiguration.setJdbcUrl(url);
processEngineConfiguration.setJdbcUsername(user);
processEngineConfiguration.setJdbcPassword(password);
//三个配置
//1.先删除表,再创建表:processEngineConfiguration.DB_SCHEMA_UPDATE_CREATE_DROP="create-drop"
//2.不能自动创建表,需要表存在:processEngineConfiguration.DB_SCHEMA_UPDATE_FALSE="false"
//3.如果表存在,就自动创建表:processEngineConfiguration.DB_SCHEMA_UPDATE_TRUE="true"
processEngineConfiguration.setDatabaseSchema(processEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
//获取工作流的核心对象,ProcessEngine对象
ProcessEngine processEngine=processEngineConfiguration.buildProcessEngine();
System.out.println("processEngine:"+processEngine+"Create Success!!");
}
public void getMsSql(){
//声明Connection对象
Connection con;
//遍历查询结果集
try {
//加载驱动程序
Class.forName(driver);
//1.getConnection()方法,连接MySQL数据库!!
con = DriverManager.getConnection(url,user,password);
if(!con.isClosed())
System.out.println("Succeeded connecting to the Database!");
//2.创建statement类对象,用来执行SQL语句!!
Statement statement = con.createStatement();
//要执行的SQL语句
String sql = "select top 10 * from sys_user";
//3.ResultSet类,用来存放获取的结果集!!
ResultSet rs = statement.executeQuery(sql);
String name = "";
while(rs.next()){
//获取stuname这列数据
name = rs.getString("name");
//首先使用ISO-8859-1字符集将name解码为字节序列并将结果存储新的字节数组中。
//输出结果
System.out.println("name=" + name);
}
rs.close();
con.close();
} catch(Exception e) {
//数据库驱动类异常处理
e.printStackTrace();
}finally{
System.out.println("数据库数据成功获取!!");
}
}
}
4.生成的流程表介绍
Activiti的后台是有数据库的支持,所有的表都以ACT_开头。 第二部分是表示表的用途的两个字母标识。 用途也和服务的API对应。
ACT_RE_*: 'RE'表示repository。 这个前缀的表包含了流程定义和流程静态资源 (图片,规则,等等)。
ACT_RU_*: 'RU'表示runtime。 这些运行时的表,包含流程实例,任务,变量,异步任务,等运行中的数据。 Activiti只在流程实例执行过程中保存这些数据, 在流程结束时就会删除这些记录。 这样运行时表可以一直很小速度很快。
ACT_ID_*: 'ID'表示identity。 这些表包含身份信息,比如用户,组等等。
ACT_HI_*: 'HI'表示history。 这些表包含历史数据,比如历史流程实例, 变量,任务等等。
ACT_GE_*: 通用数据, 用于不同场景下,如存放资源文件。
4.1资源库流程规则表
1)act_re_deployment 部署信息表
2)act_re_model 流程设计模型部署表
3)act_re_procdef 流程定义数据表
4.2运行时数据库表
1)act_ru_execution运行时流程执行实例表
2)act_ru_identitylink运行时流程人员表,主要存储任务节点与参与者的相关信息
3)act_ru_task运行时任务节点表
4)act_ru_variable运行时流程变量数据表
4.3历史数据库表
1)act_hi_actinst 历史节点表
2)act_hi_attachment历史附件表
3)act_hi_comment历史意见表
4)act_hi_identitylink历史流程人员表
5)act_hi_detail历史详情表,提供历史变量的查询
6)act_hi_procinst历史流程实例表
7)act_hi_taskinst历史任务实例表
8)act_hi_varinst历史变量表
4.4组织机构表
1)act_id_group用户组信息表
2)act_id_info用户扩展信息表
3)act_id_membership用户与用户组对应信息表
4)act_id_user用户信息表
这四张表很常见,基本的组织机构管理,关于用户认证方面建议还是自己开发一套,组件自带的功能太简单,使用中有很多需求难以满足
4.5通用数据表
1)act_ge_bytearray二进制数据表
2) act_ge_property属性数据表存储整个流程引擎级别的数据,初始化表结构时,会默认插入三条记录。5.部署流程demo
5.1
@Test
public void fy_test() {
try {
//表不存在的话创建表
ProcessEngine processEngine = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml").buildProcessEngine();
System.out.println("------processEngine:" + processEngine);
//创建流程
Deployment deployment = processEngine.getRepositoryService().createDeployment().name("请假程序")
.addClasspathResource("activiti/MyProcess.bpmn").addClasspathResource("activiti/MyProcess.png").deploy();
System.out.println(deployment.getId());
System.out.println(deployment.getName());
} catch (Exception e) {
e.printStackTrace();
}
运行结果:7501 请假程序
5.2查看数据库部署信息表如图:
5.3启动自己的流程
/** 启动流程实例 **/
@Test
public void startProcessInstance() {
try {
ProcessEngine processEngine = ProcessEngineConfiguration
.createProcessEngineConfigurationFromResource("activiti.cfg.xml").buildProcessEngine();
// 流程定义的key
String processDefinitionKey = "myProcess";
ProcessInstance pi = processEngine.getRuntimeService()// 与正在执行
// 的流程实例和执行对象相关的Service
.startProcessInstanceByKey(processDefinitionKey); // 使用流程定义的key启动流程实例,key对应helloworld.bpmn文件中id的属性值,使用key值启动,默认是按照最新版本的流程定义启动
System.out.println("流程实例ID:" + pi.getId());
System.out.println("流程定义ID:" + pi.getProcessDefinitionId());
} catch (Exception e) {
e.printStackTrace();
}
}
运行结果:
流程实例ID:10001
流程定义ID:myProcess:1:7504
查看运行时流程执行实例表:act_ru_execution
5.4查询当前人的个人任务
运行结果:
5.5完成我的代办任务
运行结果:完成任务:任务ID:10004