首页 > 其他分享 >子流程

子流程

时间:2022-11-08 14:13:53浏览次数:34  
标签:task 流程 getId LeaveProcess1 taskService processEngine

目录

bpmn设置

定义流程,id为LeaveProcess2

定义流程,id为LeaveProcess1,在其中使用子流程节点CallActivityTask调用其它流程,它的属性Called Element值为其它流程Id

代码

  1. 部署两个流程,并启动LeaveProcess1

    @Test
    public void delopyAllBpmn() {
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        processEngine.getRepositoryService()
                .createDeployment()
                .addClasspathResource("bpmn/LeaveProcess2.bpmn")
                .name("请假流程")
                .deploy();
    
        processEngine.getRepositoryService()
                .createDeployment()
                .addClasspathResource("bpmn/LeaveProcess1.bpmn")
                .name("请假流程2")
                .deploy();
    }
    
    
    @Test
    public void startProcessInstance() {
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        processEngine.getRuntimeService()
                .startProcessInstanceByKey("LeaveProcess1");
    }
    
    
  2. 此时LeaveProcess1处于第一个节点,让这个节点的责任人调用complete完成任务,推进节点

    @Test
    public void testApplyTask() {
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        TaskService taskService = processEngine.getTaskService();
        Task task = taskService
                .createTaskQuery()
                .singleResult();
        taskService.setAssignee(task.getId(), "zhangsan");
        taskService.complete(task.getId());
    }
    
    
  3. 此时就会进入子节点,由此自动基于LeaveProcess2生成一个流程实例,该流程实例中,经理进行审批,审批完成后调用complete完成任务,推进节点

    @Test
    public void testPMTask() {
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        TaskService taskService = processEngine.getTaskService();
        Task task = taskService
                .createTaskQuery()
                .singleResult();
        taskService.setAssignee(task.getId(), "pm");
        taskService.complete(task.getId());
    }
    
    
  4. 此时就会回到LeaveProcess1.bpmn中的人事审批,人事审批完成后,流程结束

    public void testHRTask() {
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        TaskService taskService = processEngine.getTaskService();
        Task task = taskService
                .createTaskQuery()
                .singleResult();
        taskService.setAssignee(task.getId(), "hr");
        taskService.complete(task.getId());
    }
    
    

流程之间的传参

  1. LeaveProcess1流程中,负责人zhangsan发起申请,并完成任务,同时设置pmAuditor变量最终赋值给pm变量,最后调用子流程,进入到经理审批

    @Test
    public void testApplyTask() {
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        TaskService taskService = processEngine.getTaskService();
        Task task = taskService
                .createTaskQuery()
                .singleResult();
        taskService.setAssignee(task.getId(), "zhangsan");
    
        Map<String, Object> variables = new HashMap<>();
        variables.put("pmAuditor", "wangjingli");
        taskService.complete(task.getId(), variables);
    }
    
    
  2. 经理直接审批结束,设置变量hrAuditor赋值给hr,结束LeaveProcess2,回到LeaveProcess1,进入人事审批

    @Test
    public void testPMTask() {
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        TaskService taskService = processEngine.getTaskService();
        Task task = taskService
                .createTaskQuery()
                .singleResult();
        Map<String, Object> variables = new HashMap<>();
        variables.put("hrAuditor", "zhaoHR");
        taskService.complete(task.getId(), variables);
    }
    
    
  3. 可以看到流程之间调用时,使用taskService.complete(流程id, Map类型变量)完成传参,其中Map类型变量中的key为bpmn中子流程节点CallActivityTask设置好的属性名

标签:task,流程,getId,LeaveProcess1,taskService,processEngine
From: https://www.cnblogs.com/BRSblackshoot/p/16869496.html

相关文章

  • 前端快应用发版流程
    1,首先确定拉取的分支环境是否正确(正式环境:xiang52.com测试环境:tiandizw2.com) 2,快应用开发工具进行打包(打包完会在dist文件夹生成rpk包) 3,在代码manifest.json配......
  • Linux学习环境搭建流程
    Linux学习环境搭建Vmware安装VMware下载:https://www.vmware.com/go/getworkstation-win运行安装程序,该重启安装驱动就重启,不需要就下一步,傻瓜式安装。勾选项:增强......
  • Archlinux + Dwm 配置流程
    本着学习C的态度来了解dwm,本身作为一个i3wm的追崇者,与dwm会擦出怎么样的火花呢?下载安装dwmarchlinuxcn源配置编辑/etc/pacman.conf文件,添加bfsu的archlinuxcn源sudovi......
  • memtest86+4.20流程分析
       公版ubuntu自带memtest86+内存测试工具,出于工作需要,分析了其工作流程记录于此。   分析一个陌生的程序,当然得先找入口入口函数,很可惜main()/_start之类的都找到,......
  • SetupDiCallClassInstaller处理流程
      MS将于今年10月推出win10RS3RTM版,并要求OEM厂商的驱动程序必须支持新的D/C/H/U驱动框架(微软爸爸一声令下,苦了我们)。其中的"C"项要求过滤驱动的inf文件必须以扩展I......
  • MySQL_流程控制_分支结构
    1If结构功能:实现简单的双分支语法:IF(表达式1,表达式2,表达式3)执行顺序:如果表达式1成立,则IF函数返回表达式2的值,否则返回表达式3的值应用:任何地方 2case结构情况1......
  • MySQL_流程控制_循环结构
    分类WHILELOOPREPEAT 循环控制:Iterate类似于continue,继续,结束本次循环,继续下一次Leave类似于break,跳出,结束当前所在的循环 1WHILE语法【标签:】WHILE循环条......
  • 基于案例分析 MySQL Group Replication 的故障检测流程
    故障检测(FailureDetection)是GroupReplication的一个核心功能模块,通过它可以及时识别集群中的故障节点,并将故障节点从集群中剔除掉。如果不将故障节点及时剔除的话,一方面......
  • 3d仿真技术在生产工艺流程中的优势
    随着计算机仿真技术、计算机图形学和传感技术的不断发展,虚拟仿真技术越来越多地被应用到各个领域。虚拟仿真是由计算机来模拟现实世界,用户可通过各种传感设备和虚拟世界进......
  • 流程图bpmn
    bpmn流程图官网//引入流程图及汉化方案importModelerfrom'bpmn-js/lib/Modeler'//引入节点属性面板importpropertiesPanelModulefrom'bpmn-js-properties-pane......