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;

        

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

        

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

        

  • 相关阅读:
    Matlab 绘制三维立体图(以地质异常体为例)
    Azure DevOps的variable group实现array和hashtable参数的传递
    Azure DevOps 利用rest api设置variable group
    Azure AADSTS7000215 其中一种问题的解决
    Power BI 实现实时更新Streaming Dataset
    AAD Service Principal获取azure user list (Microsoft Graph API)
    Matlab 沿三维任意方向切割CT图的仿真计算
    Azure Powershell script检测登陆并部署ARM Template
    Azure KeyVault设置策略和自动化添加secrets键值对
    Azure登陆的两种常见方式(user 和 service principal登陆)
  • 原文地址:https://www.cnblogs.com/wnwn/p/12612203.html
Copyright © 2011-2022 走看看