zoukankan      html  css  js  c++  java
  • Activiti工作流(一)之基本操作介绍

    工作流的概念:

           工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档、信息或任务的过程自动进行,从而实现某个预期的业务目标,或者促使此目标的实现”。通俗的说,流程就是多个人在一起合作完成某件事情的步骤,把步骤变成计算机能理解的形式就是工作流。

    常见的工作流引擎有:OSWorkFlow、jbpm、activiti(对jbpm的升级)

     

    如果在一个项目中我们需要引入工作流的话,首先需要引入相关jar包,然后获得一个工作流引擎,而获得这个工作流引擎的方式有三种:

           1、通过代码方式获得:

     @Test
        public void getProcessEngine1(){
            ProcessEngineConfiguration engineConfiguratoin = ProcessEngineConfiguration
                    .createStandaloneProcessEngineConfiguration();
            
            engineConfiguration.setJdbcDriver("com.mysql.jdbc.Driver");
            engineConfiguration
            .setJdbcUrl("jdbc:mysql://10.10.10.30:3306/activitiDB?createDatabaseIfNotExist=true"
                    + "&useUnicode=true&characterEncoding=utf8");
            engineConfiguration.setJdbcUsername("root");
            engineConfiguration.setJdbcPassword("aaaaaaaaa");
            
            engineConfiguration.setDatabaseSchemaUpdate("true");
            ProcessEngine buildProcessEngine = engineConfiguration.buildProcessEngine();
        }

           2、通过加载指定的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>
        <property name="jdbcUrl" value="jdbc:mysql://10.10.10.30:3306/activitiDB?createDatabaseIfNotExist=true&amp;useUnicode=true&amp;characterEncoding=utf8"></property>
        <property name="jdbcUsername" value="root"></property>
        <property name="jdbcPassword" value="aaaaaaaa"></property>
        
        <property name="databaseSchemaUpdate" value="true"></property>
    </bean>
    
    </beans>
      @Test
        public void getProcessEngine2(){
            ProcessEngineConfiguration engineConfiguration = 
                    ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml");
            
            ProcessEngine processEngine = engineConfiguration.buildProcessEngine();
        }

            3、通过加载默认的xml文件获取,默认xml文件名称为activiti.cfg.xml

    @Test
        public void getProcessengine3(){
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        }

     当获得了工作流引擎之后,会创建一个数据库,数据库中有默认的23张表

    资源库流程规则表
    1)	act_re_deployment 	部署信息表
    2)	act_re_model  		流程设计模型部署表
    3)	act_re_procdef  	流程定义数据表
    运行时数据库表
    1)	act_ru_execution	运行时流程执行实例表
    2)	act_ru_identitylink	运行时流程人员表,主要存储任务节点与参与者的相关信息
    3)	act_ru_task		运行时任务节点表
    4)	act_ru_variable		运行时流程变量数据表
    历史数据库表
    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		历史变量表
    组织机构表
    1)	act_id_group		用户组信息表
    2)	act_id_info		用户扩展信息表
    3)	act_id_membership	用户与用户组对应信息表
    4)	act_id_user		用户信息表
    这四张表很常见,基本的组织机构管理,关于用户认证方面建议还是自己开发一套,组件自带的功能太简单,使用中有很多需求难以满足 
    通用数据表
    1)	act_ge_bytearray	二进制数据表
    2)	act_ge_property		属性数据表存储整个流程引擎级别的数据,初始化表结构时,会默认插入三条记录
    还有两张表不怎么常用
    1)      act_ru_event_subscr
    2)      act_ru_job

     接下来就是activiti的核心API部分

     

     这些service可以由ProcessEngine获得,且这些service都有着各自的任务

    RepositoryService 管理流程定义
    RuntimeService 执行管理,包括启动、推进、删除流程实例等操作
    TaskService 任务管理
    HistoryService 历史管理(执行完的数据的管理)
    IdentityService 组织机构管理
    FormService 一个可选服务,任务表单管理
    ManagerService  

    接下来是完成一个工作流程的基本操作步骤,首先我们需要安装Activiti插件,然后我们构建一个流程实例并部署上去

     

     

     @Test
        public void deploy(){
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            
            RepositoryService service = processEngine.getRepositoryService();
            Deployment deploy = service.createDeployment()
            .addClasspathResource("diagrams/LeaveProcess.bpmn")
            .addClasspathResource("diagrams/LeaveProcess.png")
            .name("请假流程")
            .deploy();
        }

     部署流程还有一种方法也可以:加载压缩文件(zip格式)

    @Test
        public void deployProcess2(){
            
            InputStream in = getClass().getClassLoader().getResourceAsStream("Leave.zip");
            
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            Deployment deploy = processEngine.getRepositoryService()
                    .createDeployment()
                    .name("请假流程")
                    .addZipInputStream(new ZipInputStream(in))
                    .deploy();
        }

     

     

     接下来就是启动流程

     @Test
        public void test(){
            String instanceKey = "myProcess";
            
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            RuntimeService service = processEngine.getRuntimeService();
            ProcessInstance instance = service.startProcessInstanceByKey(instanceKey);
        }

     

     在流程启动的过程中,我们可以查询流程的进度

    @Test
        public void query(){
            String assignee = "Meixi";
            
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            TaskService service = processEngine.getTaskService();
            TaskQuery taskQuery = service.createTaskQuery();
            List<Task> list = taskQuery.taskAssignee(assignee).list();
            
            for (Task task : list){
                System.out.println(task);
            }
        }

     接下来就是完成每一个流程

    @Test
        public void complete(){
            String taskID = "104";
            
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            TaskService service = processEngine.getTaskService();
            service.complete(taskID);
        }

     

     

  • 相关阅读:
    zepto.js常用操作
    使用require.js
    iscroll.js文档
    EasyUI Resizable 可调整尺寸
    EasyUI Droppable 可放置
    EasyUI Draggable 可拖动
    EasyUI Parser 解析器
    EasyUI Easyloader 加载器
    Jquery EasyUI插件
    从MySQL随机选取数据
  • 原文地址:https://www.cnblogs.com/asen0713/p/6456052.html
Copyright © 2011-2022 走看看