• Activiti7入门(五)


    1 创建流程

    首先选中存放图形的目录(本次我们选择 resources 下的 bpmn 目录),点击菜单: New-BpmnFile,如
    下图所示:

     起完名字 holiday 后(默认扩展名为 bpmn),就可以看到进入了流程设计页面,如图所示

     绘制流程 :

     图形绘制好后会生成两个文件:

     指定流程定义 key

    流程定义 key 即流程定义的标识,在 eclipse 中通过 properties 视图查看流程的 key
    建议:相同的业务流程,流程定义的 key 名字定义一样,比如,如果需要创建新的业务流程,请假
    流程则使用新的 key

     指定任务负责人

    properties 视图指定每个任务结点的负责人,
    比如下边是填写请假单的负责人为 zhangsan

     

     

     

    2  部署流程定义 

    部署流程定义

        //流程定义部署
        public static void main(String[] args) {
            //1.创建ProcessEngine对象
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    
            //2.得到RepositoryService实例
            RepositoryService repositoryService = processEngine.getRepositoryService();
    
            //3.进行部署
            Deployment deployment = repositoryService.createDeployment()
                    .addClasspathResource("diagram/holiday.bpmn")  //添加bpmn资源
                    .addClasspathResource("diagram/holiday.png")
                    .name("请假申请单流程")
                    .deploy();
    
            //4.输出部署的一些信息
            System.out.println(deployment.getName());
            System.out.println(deployment.getId());
        }

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

     

     3 流程实例

    启动一个流程实例
    流程定义部署在 activiti 后就可以通过工作流管理业务流程了,也就是说上边部署的请假申请流
    程可以使用了。
    针对该流程,启动一个流程表示发起一个新的请假申请单,这就相当于 java 类与 java 对象的关
    系,类定义好后需要 new 创建一个对象使用,当然可以 new 多个对象。对于请假申请流程,张三发
    起一个请假申请单需要启动一个流程实例, 请假申请单发起一个请假单也需要启动一个流程实例。
    代码如下 

    /**
     * @author WGR
     * @create 2019/11/13 -- 19:35
     */
    public class ActivitiInstance {
    
        public static void main(String[] args) {
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    
            RuntimeService runtimeService = processEngine.getRuntimeService();
    
            ProcessInstance holiday = runtimeService.startProcessInstanceByKey("holiday");
    
            System.out.println(holiday.getDeploymentId());
            System.out.println(holiday.getId());
            System.out.println(holiday.getActivityId());
    
        }
    }

    4 任务查询

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

    /**
     * 查询当前用户的任务列表
     */
    public class ActivitiTaskQuery {
    
        //wangwu完成自己任务列表的查询
        public static void main(String[] args) {
            //1.得到ProcessEngine对象
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    
            //2.得到TaskService对象
            TaskService taskService = processEngine.getTaskService();
    
            //3.根据流程定义的key,负责人assignee来实现当前用户的任务列表查询
            Task task = taskService.createTaskQuery()
                    .processDefinitionKey("holiday")
                    .taskAssignee("wangwu")
                    .singleResult();
    
            //4.任务列表的展示
            System.out.println("流程实例ID:"+task.getProcessInstanceId());
            System.out.println("任务ID:"+task.getId());  //5002
            System.out.println("任务负责人:"+task.getAssignee());
            System.out.println("任务名称:"+task.getName());
    
    
        }
    
        //lishi完成自己任务列表的查询
    //    public static void main(String[] args) {
    //        //1.得到ProcessEngine对象
    //        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    //
    //        //2.得到TaskService对象
    //        TaskService taskService = processEngine.getTaskService();
    //
    //        //3.根据流程定义的key,负责人assignee来实现当前用户的任务列表查询
    //        Task task = taskService.createTaskQuery()
    //                .processDefinitionKey("holiday")
    //                .taskAssignee("lisi")
    //                .singleResult();
    //
    //        //4.任务列表的展示
    //            System.out.println("流程实例ID:"+task.getProcessInstanceId());
    //            System.out.println("任务ID:"+task.getId());  //5002
    //            System.out.println("任务负责人:"+task.getAssignee());
    //            System.out.println("任务名称:"+task.getName());
    //
    ////        流程实例ID:2501
    ////        任务ID:5002
    ////        任务负责人:lisi
    ////        任务名称:部门经理审批
    //
    //
    //    }
    
    
        //zhangsan任务列表的查询
      /*  public static void main(String[] args) {
            //1.得到ProcessEngine对象
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    
            //2.得到TaskService对象
            TaskService taskService = processEngine.getTaskService();
    
            //3.根据流程定义的key,负责人assignee来实现当前用户的任务列表查询
            List<Task> taskList = taskService.createTaskQuery()
                    .processDefinitionKey("holiday")
                    .taskAssignee("zhangsan")
                    .list();
    
            //4.任务列表的展示
            for(Task task :taskList){
                System.out.println("流程实例ID:"+task.getProcessInstanceId());
                System.out.println("任务ID:"+task.getId());
                System.out.println("任务负责人:"+task.getAssignee());
                System.out.println("任务名称:"+task.getName());
            }
    //        流程实例ID:2501
    //        任务ID:2505
    //        任务负责人:zhangsan
    //        任务名称:填写请假申请单
    
        } */
    }

    5 任务处理

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

    /**
     * 处理当前用户的任务
     * 背后操作的表:
     *   act_hi_actinst
         act_hi_identitylink
         act_hi_taskinst
         act_ru_identitylink
         act_ru_task
     */
    public class ActivitiCompleteTask {
    
        //查询当前用户wangwu的任务并处理掉
        public static void main(String[] args) {
            //1.得到ProcessEngine对象
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    
            //2.得到TaskService对象
            TaskService taskService = processEngine.getTaskService();
    
            //3.查询当前用户的任务
            Task task = taskService.createTaskQuery()
                    .processDefinitionKey("holiday")
                    .taskAssignee("wangwu")
                    .singleResult();
    
            //4.处理任务,结合当前用户任务列表的查询操作的话,任务ID:task.getId()
            taskService.complete(task.getId());
    
            //5.输出任务的id  //7502
            System.out.println(task.getId());
        }
    
    
        //lishi完成自己的任务
     /*   public static void main(String[] args) {
            //1.得到ProcessEngine对象
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    
            //2.得到TaskService对象
            TaskService taskService = processEngine.getTaskService();
    
            //3.处理任务,结合当前用户任务列表的查询操作的话,任务ID:5002
            taskService.complete("5002");
    
    
        } */
    
    
        //zhangsan完成自己的任务
        /*public static void main(String[] args) {
            //1.得到ProcessEngine对象
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    
            //2.得到TaskService对象
            TaskService taskService = processEngine.getTaskService();
    
            //3.处理任务,结合当前用户任务列表的查询操作的话,任务ID:2505
            taskService.complete("2505");
    
    
        }*/
    }

    整个流程走完以后:

     

  • 相关阅读:
    【学习笔记】第二章 python安全编程基础---python爬虫基础(urllib)
    java Spring boot entity编写
    UI自动化基础
    初级:第五课 Tony and his family? 托尼和他的家人?
    初级:第四课 What do you do? 你是做什么的?
    初级:第三课 My Family 我的家人
    初级:第二课 Nice to Meet You 幸会
    初级:第一课 Self Introduction 自我介绍
    jmeter自定义函数
    Go笔记-结构、类型、常量
  • 原文地址:https://www.cnblogs.com/dalianpai/p/11853693.html
Copyright © 2020-2023  润新知