• Activiti(三)流程变量和流程实例


    请假的大致流程图

     如果请假的人的天数小于等于三天的话可以直接绕过领导,请假人和各种角色都不是固定的,这样的流程实现方式如下

     

     一:人员不固定

    Assignee属性的设置使用UEL表达式进行设置,assignee01(自己定义)代表请假人,assignee02代表部门经理等等

    二:流程分支判断

     点击流程线 添加UEL表达式

    三:进行流程的部署

    前置方法

       ProcessEngine processEngine;
    
        @Before
        public void connection() {
            ProcessEngineConfiguration processEngineConfigurationFromResource = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml");
            processEngine = processEngineConfigurationFromResource.buildProcessEngine();
        }

    流程部署

     //1.流程部署
        @Test
        public void createDeployment() {
            System.out.println(processEngine);
            RepositoryService repositoryService = processEngine.getRepositoryService();
            Deployment deployment = repositoryService.createDeployment()
                    .addClasspathResource("bpmn2/holiday.bpmn")
                    .addClasspathResource("bpmn2/holiday.png")
                    .name("请假流程-人员未绑定-流程有分支")
                    .key("myHoliday")
                    .deploy();
            System.out.println(deployment.getName());
            System.out.println(deployment.getKey());
            System.out.println(deployment.getId());
        }

    创建流程实例并预先绑定map集合

      //2.创建流程实例
        @Test
        public void startProcessInstance() {
            RuntimeService runtimeService = processEngine.getRuntimeService();
            //动态指定任务执行人
            Map assigneesMap=new HashMap();
            //分别设置四个执行人
            assigneesMap.put("assignee01","tianyan");
            assigneesMap.put("assignee02","douying");
            assigneesMap.put("assignee03","guo");
            assigneesMap.put("assignee04","xiediao");
            //设置请假天数
            Detail detail=new Detail();
            //请假天数小于等于3跳过总经理流程
            detail.setDay(3);
            detail.setName("tianyan");
            assigneesMap.put("details",detail);
            //赋值并启动
            ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("myProcess_1",assigneesMap);
            System.out.println(processInstance.getName());
            System.out.println(processInstance.getDeploymentId());
            System.out.println(processInstance.getActivityId());
        }

    任务的查询和处理

      //3.任务查询
        @Test
        public  void findPersonalTaskList(){
            TaskService taskService = processEngine.getTaskService();
            List<Task> list = taskService.createTaskQuery()
                    .processDefinitionKey("myProcess_1")
                    .taskAssignee("tianyan").list();
    
            Iterator<Task> iterator = list.iterator();
            while (iterator.hasNext()){
                Task next = iterator.next();
                System.out.println(next);
                //4.处理任务
                processEngine.getTaskService().complete(next.getId());
                System.out.println("完成任务");
            }
        }

     使用UEL表达式的注意事项

    1、如果UEL 表达式中流程变量名不存在则报错。
    2、如果UEL 表达式中流程变量值为空NULL,流程不按UEL 表达式去执行,而流程结束 。
    3、如果UEL 表达式都不符合条件,流程结束
    4、如果连线不设置条件,会走flow 序号小的那条线

  • 相关阅读:
    c# winform DataGridView导出数据到Excel中,可以导出当前页和全部数据
    水晶报表动态加载图片(签名)
    第1章 开启Threejs之旅(一)
    Python中@contextmanager的用法
    Systemd
    Python中with的用法
    systemctl的配置和使用
    /*CS5460_Note_1*/
    Just try the code
    MCP2515无BUG版本驱动(C文件)
  • 原文地址:https://www.cnblogs.com/yjc1605961523/p/12643350.html
Copyright © 2020-2023  润新知