Activiti 简单demo (2)

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点击打开链接


3.创建流程数据库表

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 简单demo (2)

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

Activiti 简单demo (2)

@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查看数据库部署信息表如图:

Activiti 简单demo (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

Activiti 简单demo (2)

5.4查询当前人的个人任务


Activiti 简单demo (2)


运行结果:

Activiti 简单demo (2)

5.5完成我的代办任务

Activiti 简单demo (2)

运行结果:完成任务:任务ID:10004