zoukankan      html  css  js  c++  java
  • Activiti入门体验

    1.流程定义

      1.1 新建流程

        

      1.2 创建hoilday.bpmn,绘制流程

        

       1.3 将hoilday.bpmn文件改为hoilday.xml文件,然后右键该xml文件Diagrams-->show BPMN 2.0 Designer就能生成一张流程图,将流程图导出保存到项目对应的目录,然后将xml改回bpmn即可;

    2.部署流程定义

      部署流程定义就是要将上边绘制的图形即流程定义(.bpmn)部署在工作流引擎activiti中,方法如下:

      使用ProcessEngine创建RepositoryService,代码如下:

    package com.wn;
    
    import org.activiti.engine.ProcessEngine;
    import org.activiti.engine.ProcessEngines;
    import org.activiti.engine.RepositoryService;
    import org.activiti.engine.repository.Deployment;
    import org.activiti.engine.repository.DeploymentBuilder;
    
    /*流程部署
    * `act_ge_bytearray`    流程定义的资源信息,包含bpmn和png流程文件信息
    * `act_re_deployment`   流程部署信息 包含流程名称,ID,key等
    * `act_re_procdef`      流程定义信息
    * */
    public class ActivitiTest {
        public static void main(String[] args) {
            //获取ProcessEngine
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取RepositoryService对象进行流程部署
            RepositoryService repositoryService = processEngine.getRepositoryService();
            //进行部署,将对应的流程定义文件生成到数据库当中,作为记录进行保存
            Deployment  deployment= repositoryService.createDeployment()
                    .addClasspathResource("bpmnfile/hoilday.bpmn")       //加载流程文件
                    .addClasspathResource("bpmnfile/hoilday.png")
                    .name("请假流程")   //设置流程名称
                    .deploy();//部署
            //输出部署信息
            System.out.println("流程名称:"+deployment.getName());
            System.out.println("流程ID:"+deployment.getId());
            System.out.println("流程key:"+deployment.getKey());
        }
    }

      执行此操作后activiti会将上边代码中执行的bpmn文件和图片文件保存在activiti数据库中;

        

    3.启动一个流程实例

      流程定义部署在activiti后就可以通过工作流管理业务流程了,也就是说上边部署的请假申请流程可以使用了;

      针对该流程,启动一个流程表示发起一个新的请假申请单,这就相当于java类与java对象的关系,类定义好后需要new创建一个对象使用,当然可以new多个对象;对于请假申请流程,张三发起一个请假申请需要启动一个流程实例,请假申请单发起一个请假单也需要启动一个流程实例;

    package com.wn;
    
    import org.activiti.engine.ProcessEngine;
    import org.activiti.engine.ProcessEngines;
    import org.activiti.engine.RuntimeService;
    import org.activiti.engine.runtime.ProcessInstance;
    
    /*启动流程实例
    *`act_hi_actinst`           已经开始和执行完毕的活动信息
    *`act_hi_identitylink`      历史参与者信息
    *`act_hi_procinst`          流程实例信息
    *`act_hi_taskinst`          历史任务实例
    *`act_ru_execution`         任务执行信息
    *`act_ru_identitylink`      当前任务执行参与者
     *`act_ru_task`             任务信息
    *
    * */
    public class StartInstance {
        public static void main(String[] args) {
            //获取ProcessEngine
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取RuntimeService对象
            RuntimeService runtimeService = processEngine.getRuntimeService();
            //创建流程实例
            ProcessInstance hoilday = runtimeService.startProcessInstanceByKey("hoilday");
            //输出实例信息
            System.out.println("获取流程部署ID:"+hoilday.getDeploymentId());
            System.out.println("获取流程实例ID:"+hoilday.getId());
            System.out.println("获取流程活动ID:"+hoilday.getActivityId());
        }
    }

        

         

    4.任务查询

      流程启动后,各个任务的负责人就可以查看自己当前需要处理的任务,查询出来的任务都是该用户的代办任务;

    package com.wn;
    
    import org.activiti.engine.ProcessEngine;
    import org.activiti.engine.ProcessEngines;
    import org.activiti.engine.TaskService;
    import org.activiti.engine.task.Task;
    
    import java.util.List;
    
    /*查看代办任务*/
    public class GetTask {
        public static void main(String[] args) {
            //获取ProcessEngine
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取一个TaskService对象
            TaskService taskService = processEngine.getTaskService();
            //查询代办业务 createTaskQuery查询任务  taskCandidateOrAssigned查询任务执行者    processDefinitionKey执行查看流程
            //查看hoilday流程中zhangsan代办的任务
            //taskCandidateOrAssigned匹配规则: 1.Assigned   2.配置bpmn文件中定义的值
            /*List<Task> list = taskService.createTaskQuery().taskCandidateOrAssigned("zhangsan").processDefinitionKey("hoilday").list();*/
            //taskAssignee查看当前指定人的指定任务
            List<Task> list = taskService.createTaskQuery().taskAssignee("zhangsan").processDefinitionKey("hoilday").list();
            for (Task task:list){
                System.out.println("任务名称:"+task.getName());
                System.out.println("任务执行人:"+task.getAssignee());
                System.out.println("任务ID:"+task.getId());
                System.out.println("流程实例ID:"+task.getProcessInstanceId());
            }
        }
    }

        

    5.任务处理

      任务负责人查询代办任务,选择任务进行处理,完成任务;

    package com.wn;
    
    import org.activiti.engine.ProcessEngine;
    import org.activiti.engine.ProcessEngines;
    import org.activiti.engine.TaskService;
    
    /*任务处理
    * `act_hi_identitylink`     历史参与者信息
    * `act_hi_taskinst`         历史任务信息
    * `act_ru_execution`        任务执行信息
    * `act_ru_task`             任务信息
    * 当所有任务处理完毕,对应当前流程实例信息删除,但是可以在历史中查看该信息
    * */
    public class CompleteTask {
        public static void main(String[] args) {
            //获取ProcessEngine
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取TaskService对象进行流程部署
            TaskService taskService = processEngine.getTaskService();
            //任务处理
            taskService.complete("15005");
            
        }
    }

      任务处理完毕后,再次代办任务查询zhangsan;

        

       查询出来的数据时空的,此时可以查看数据库表;

        

       此时任务执行已经到经理审批了,可以查看任务lisi;

        

      然后再次任务处理,更改任务ID即可;

        

       完成后,查看代办任务wangwu;

        

       现在任务执行已经到了总经理审批阶段,下面就是人事审批

        

      完成后查看代办任务zhaoliu;

        

      最后执行人事批审,结束;

        

       任务结束后,对应当前流程实例信息删除,但是可以在历史中查看该信息;

        

  • 相关阅读:
    BZOJ2199[Usaco2011 Jan]奶牛议会——2-SAT+tarjan缩点
    BZOJ3862Little Devil I——树链剖分+线段树
    BZOJ2325[ZJOI2011]道馆之战——树链剖分+线段树
    BZOJ1018[SHOI2008]堵塞的交通——线段树
    BZOJ2733[HNOI2012]永无乡——线段树合并+并查集+启发式合并
    BZOJ4127Abs——树链剖分+线段树
    bzoj 4753 最佳团体
    bzoj 4472 salesman
    bzoj 5369 最大前缀和
    bzoj 1226 学校食堂Dining
  • 原文地址:https://www.cnblogs.com/wnwn/p/12612203.html
Copyright © 2011-2022 走看看