编辑 | blame | 历史 | 原始文档

流程发起

  1. 进入发起事务页面,可以看到刚刚部署的流程已经可以操作
    ![](../../images/screenshot_1581252496603.png)
  2. 点击流程图可以看到流程的详情
    ![](../../images/screenshot_1557637802900.png)
  3. 点击发起,可以看到进入了流程申请页面
    ![](../../images/screenshot_1557638069003.png)
  4. 可能到这有小伙伴会有疑问,不同的流程跳转到不同的页面,这个应该如何操作?后续如何自动匹配?下面我们来揭秘下bladex如何设计并运行了整个封装的工作流程

流程详解

一、流程分类

  1. 每个流程都会配置一个对应的分类,如下
    ![](../../images/screenshot_1557639215148.png)
  2. 这个分类来源于字典数据,流程分类主要与以下三项相关
    ![](../../images/screenshot_1557649586465.png)
  3. 当选择分类为请假流程的时候,系统将会组成flow_1入库
    ![](../../images/screenshot_1557649906283.png)
  4. 当发起流程的时候,字典表的remark(备注)字段将充当流程表单的路由key

二、发起流程

  1. 流程跳转前先查看下跳转方法所在
    ![](../../images/screenshot_1557650045229.png)
  2. 流程路由获取方法如下
    ![](../../images/screenshot_1557650346323.png)
    ![](../../images/screenshot_1557650301172.png)
    ![](../../images/screenshot_1557650201636.png)
  3. 点击发起流程,查看url链接
    ![](../../images/screenshot_1557650531037.png)
  4. 这样一来,便可以根据流程类型来动态获取流程路由的key,从而达到不同流程跳转至对应的流程表单了

三、流程表单配置

  1. 推荐大家按照系统规则,根据流程路由的key在process文件夹下创建对应的文件夹,之后再创建对应的form(流程发起)、handle(流程审批)、detail(流程详情)三个文件
    ![](../../images/screenshot_1557650780380.png)
  2. 配置流程发起的路由,重点如下
    ![](../../images/screenshot_1557651084609.png)
  3. 路由获取传参配置:path: 'form/:processDefinitionId',
  4. 请假流程form代码如下,采用avuex表单配置,构建页面非常迅速
    ![](../../images/screenshot_1557650929516.png)
    ![](../../images/screenshot_1557650966489.png)
  5. 第三点路由配置的参数可由如下方法获取
    ![](../../images/screenshot_1557651399724.png)
  6. 对应的url参数如下
    ![](../../images/screenshot_1557651443157.png)
  7. 准备工作完毕后,大家便可以根据业务自由配置表单了

四、流程发起后端接口

  1. 我们可以看一下前端发起流程的接口是
    ![](../../images/screenshot_1557664147606.png)
  2. 根据api地址找到后端接口
    ![](../../images/screenshot_1557664183863.png)
  3. 查看接口详细
    ![](../../images/screenshot_1557664224361.png)
    ![](../../images/screenshot_1557664313270.png)
  4. 我们来慢慢拆分一下代码
  • 从流程工具类中获取对应的业务表名 String businessTable = FlowUtil.getBusinessTable(ProcessConstant.LEAVE_KEY);
  • 保存业务表
    ~~~
    leave.setApplyTime(LocalDateTime.now());
    save(leave);
    ~~~
  • 创建启动流程所需的变量
    ~~~
    Kv variables = Kv.create()
    .set(ProcessConstant.TASK_VARIABLE_CREATE_USER, SecureUtil.getUserName())
    .set("taskUser", TaskUtil.getTaskUser(leave.getTaskUser()))
    .set("days", Duration.between(leave.getStartTime(), leave.getEndTime()).toDays());
    ~~~
  • 将变量传入工作流远程调用接口,开启一个新流程(cloud版为feign,boot版为service)
    ~~~
    BladeFlow flow = flowClient.startProcessInstanceById(
    leave.getProcessDefinitionId(),
    FlowUtil.getBusinessKey(businessTable, String.valueOf(leave.getId())), variables
    );
    ~~~
  • 如果流程启动成功,则将流程主键反向插入流程业务表
    ~~~
    if (Func.isNotEmpty(flow)) {
    log.debug("流程已启动,流程ID:" + flow.getProcessInstanceId());
    // 返回流程id写入leave
    leave.setProcessInstanceId(flow.getProcessInstanceId());
    updateById(leave);
    }
    ~~~

五、查看已发流程

若发布成功,则可以到已发事务模块进行查看对应的记录
![](../../images/screenshot_1557665607034.png)