java flowable工作流_flowable工作流免费视频

java flowable工作流_flowable工作流免费视频1.2基本操作1.2.1编码准备这里一官网请假流程案例为例resources目录下新建一个holiday-request.bpmn20.xml文件1.2.2初始化DB运行脚本后会初始化相关表,后面一点点介绍查看act_re_deployment表查看act_ge_bytearray,记录xml文本字节数组,通过deployment_id关联,查看相关的api有列表查询、分页查询等1.2.4发起流程修改holiday-request.bpmn2

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

1 快速入门案例

1.1 maven 依赖

    <dependencies>
        <dependency>
            <groupId>org.flowable</groupId>
            <artifactId>flowable-engine</artifactId>
            <version>6.6.0</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.20</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.30</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.30</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.7.22</version>
        </dependency>
    </dependencies>

Jetbrains全家桶1年46,售后保障稳定

1.2 基本操作

1.2.1 编码准备

这里一官网请假流程案例为例
在这里插入图片描述

  • 我们假设该过程是通过提供一些信息开始的,例如员工姓名、请求的假期数量和描述。当然,这可以建模为流程中单独的第一步。但是,通过将其作为流程的“输入数据”,流程实例仅在发出实际请求时才实际创建。在另一种情况下,用户可以在提交之前改变主意并取消,但流程实例现在就在那里。在某些情况下,这可能是有价值的信息(例如,请求启动但未完成的次数),具体取决于业务目标。
  • 左边的圆圈称为开始事件。它是流程实例的起点。
  • 第一个矩形是用户任务。这是人类用户必须执行的过程中的一个步骤。在这种情况下,经理需要批准或拒绝该请求。
  • 根据经理的决定,专用网关(带有十字的菱形)会将流程实例路由到批准或拒绝路径。
  • 如果获得批准,我们必须在某个外部系统中注册请求,然后再次为原始员工执行用户任务,通知他们该决定。当然,这可以用电子邮件代替。
  • 如果被拒绝,则会向员工发送一封电子邮件,通知他们这一点。

resources 目录下 新建一个 holiday-request.bpmn20.xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" xmlns:flowable="http://flowable.org/bpmn" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.flowable.org/processdef">

  <process id="holidayRequest" name="Holiday Request" isExecutable="true">
    <startEvent id="startEvent"/>
    <sequenceFlow sourceRef="startEvent" targetRef="approveTask"/>
    <userTask id="approveTask" name="Approve or reject request"/>
    <sequenceFlow sourceRef="approveTask" targetRef="decision"/>
    <exclusiveGateway id="decision"/>
    <sequenceFlow sourceRef="decision" targetRef="externalSystemCall">
      <conditionExpression xsi:type="tFormalExpression">
        <![CDATA[ ${approved} ]]>
      </conditionExpression>
    </sequenceFlow>
    <sequenceFlow sourceRef="decision" targetRef="sendRejectionMail">
      <conditionExpression xsi:type="tFormalExpression">
        <![CDATA[ ${!approved} ]]>
      </conditionExpression>
    </sequenceFlow>
    <serviceTask id="externalSystemCall" name="Enter holidays in external system" flowable:class="org.flowable.CallExternalSystemDelegate"/>
    <sequenceFlow sourceRef="externalSystemCall" targetRef="holidayApprovedTask"/>
    <userTask id="holidayApprovedTask" name="Holiday approved"/>
    <sequenceFlow sourceRef="holidayApprovedTask" targetRef="approveEnd"/>
    <serviceTask id="sendRejectionMail" name="Send out rejection email" flowable:class="org.flowable.SendRejectionMail"/>
    <sequenceFlow sourceRef="sendRejectionMail" targetRef="rejectEnd"/>
    <endEvent id="approveEnd"/>
    <endEvent id="rejectEnd"/>
  </process>
</definitions>

1.2.2 初始化 DB

    @Before
    public void init() { 
   
        ProcessEngineConfiguration configuration = new StandaloneInMemProcessEngineConfiguration();
        configuration.setJdbcDriver("com.mysql.cj.jdbc.Driver");
        configuration.setJdbcUsername("root");
        configuration.setJdbcPassword("hwl123456");
        configuration.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/flowable?allowMultiQueries=true&useUnicode=true&useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&nullCatalogMeansCurrent=true");
        configuration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
        engine = configuration.buildProcessEngine();
    }

运行脚本后会初始化相关表,后面一点点介绍
在这里插入图片描述

1.2.3 部署流程

    @Test
    public void testDeploy() { 
   
        RepositoryService repositoryService = engine.getRepositoryService();
        // 部署流程,部署后会在 act_re_deployment 和 act_ge_bytearray 表中添加记录
        Deployment deployment = repositoryService.createDeployment()
                .addClasspathResource("holiday-request.bpmn20.xml")
                // 指定流程名称
                .name("请假流程")
                .deploy();
        System.out.println(JSONUtil.toJsonPrettyStr(deployment));
    }

查看 act_re_deployment 表
在这里插入图片描述
查看 act_ge_bytearray,记录 xml 文本字节数组,通过 deployment_id 关联,
在这里插入图片描述

1.2.4 查询流程

    @Test
    public void testQuery() { 
   
        RepositoryService repositoryService = engine.getRepositoryService();
        Deployment deployment = repositoryService.createDeploymentQuery()
                .deploymentId("1")
                .singleResult();
        System.out.println(deployment.getName());
    }

查看相关的 api 有列表查询、分页查询等

1.2.3 删除流程

    @Test
    public void testDelete() { 
   
        // 如果部署的流程已启动则不能删除
        engine.getRepositoryService().deleteDeployment("1");
        // 如果流程已启动则相关的任务一并删除
        engine.getRepositoryService().deleteDeployment("1", true);
    }

1.2.4 发起流程

修改 holiday-request.bpmn20 文件,添加一个审批人
在这里插入图片描述

    @Test
    public void testStart() { 
   
        RuntimeService runtimeService = engine.getRuntimeService();
        Map<String, Object> param = new HashMap<>(8);
        param.put("employee", "张三");
        param.put("days", 3);
        param.put("description", "请假回家");
        // 启动流程实例
        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("holidayRequest", param);
        // 启动后 act_ru_variable 表中记录参数信息
        System.out.println(processInstance.getName());
    }

发起流程后流程实例表 act_hi_procinst
在这里插入图片描述
流程任务表 act_ru_task,通过 proc_inst_id 和流程实例关联
在这里插入图片描述
流程执行过程 act_ru_execution,通过 proc_inst_id 和流程实例关联
在这里插入图片描述
提交参数表 act_ru_variable,通过 proc_inst_id 和流程实例关联,通过 execution_id 和执行过程关联
在这里插入图片描述

1.2.5 查询流程任务

    @Test
    public void testQueryTask() { 
   
        TaskService taskService = engine.getTaskService();
        List<Task> list = taskService.createTaskQuery()
                // 指定流程类型
                .processDefinitionKey("holidayRequest")
                // 指定办理人,通常用于查询我的待办
                .taskAssignee("zhangsan")
                .list();
        System.out.println(JSONUtil.toJsonPrettyStr(list));
    }

1.2.6 执行任务

根据 xml 文件配置拒绝流程发送邮件类
在这里插入图片描述

    @Test
    public void testHandleTask() { 
   
        TaskService taskService = engine.getTaskService();
        Map<String, Object> param = new HashMap<>();
        param.put("approved", false);
        // 完成任务
        taskService.complete("2509", param);
    }

执行后看到控制台输出拒绝邮件
查看流程实例表 act_hi_procinst
在这里插入图片描述
有流程持续时间、开始节点、结束节点
查看流程任务表 act_ru_task 、流程执行过程 act_ru_execution 和提交参数表 act_ru_variable 已经被清空

1.2.7 查看历史信息

流程审批后,相关的中间数据都已经被清理了。如果查看流程提交记录需要查看历史信息

    @Test
    public void testGetHistory() { 
   
        HistoryService historyService = engine.getHistoryService();
        List<HistoricActivityInstance> list = historyService.createHistoricActivityInstanceQuery().processDefinitionId("holidayRequest:1:3")
                // 已结束的流程
                .finished()
                // 根据结束时间倒序排序
                .orderByHistoricActivityInstanceEndTime().desc()
                .list();
        for (HistoricActivityInstance instance: list) { 
   
            System.out.println(JSONUtil.toJsonStr(instance));
        }
    }

历史执行记录表 act_hi_actinst
在这里插入图片描述
历史表单参数表 act_hi_varinst
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/216371.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号