开发者社区> 1644807573459020> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

【组件开发实践】云巧流程组件对接实践

简介: 通过简单的业务场景进行举例,介绍如果通过云巧流程组件的API进行集成对接
+关注继续查看

1. 用户需求

假设A系统有如下员工请假审批流场景:

员工请假小于等于3天,只需主管直接审批;大于3天需要主管先审批,审批通过后再由二级主管进行审批。当员工请假审批流节后后,需要通知A系统进行业务处理(例如:如果同意,则扣除相应假期,如果拒绝,则不扣除)。

2. 需求分析

通过对用户故事的分析,需要经过如下步骤完成此需求。

  1. 进入流程组件,在流程组件里设计上述“员工请假审批流”
  2. A系统内实现“员工请假审批流”结束后的业务自定义处理逻辑。
  3. A系统内实现通过流程组件API 发起“员工请假审批流”
  4. 用户在A系统发起“员工请假审批流”。

3. 前置条件

已部署云巧流程组件,且服务已正常运行。

4. 服务接入

1. 流程设计

1. 设计流程图:进入流程组件,设计如下的流程图,流程编码employee_leave
image

2. 新增办理人变量:点击画布空白页,进入“流程配置”,新增如下“流程变量”,作为“主管审批”“二级主管审批”的办理人变量。

image

3. 设置用户任务节点办理人:在“主管审批”节点设置办理人变量为“主管”。在“二级主管审批”节点设置办理人变量为“二级主管”

4. 设置排他网关条件,其中approve为排他网关入口用户任务的处理结果变量(true为同意、false为拒绝),leaveDays为业务定义的请假天数变量,&&表示且的意思:

  • 拒绝:${!approve}
  • 同意-且小于等于3天:${approve && leaveDays<=3}
  • 同意-且大于3天:${approve && leaveDays>3}

2. A系统实现流程结束后的处理逻辑

在A系统中实现流程结束后的处理逻辑B,然后订阅并消费流程组件的RocketMQ消息,消费流程组件RocketMQ消息时根据消息体内的流程实例ID、流程实例结果、...等字段调用处理逻辑B完成业务处理。

【备注】流程组件RocketMQ消息:

○ 流程事件TOPIC:为流程后端服务FLOW_NOTICE_ROCKETMQ_TOPIC_EVENT环境变量值,或flow.notice.rocketmq.topic.event配置值,默认为FLOW_EVENT。

○ 流程事件Tag:流程编码(例如:此用户故事即为employee_leave)。

○ 流程事件消息体类型:包括流程开始、流程结束、任务开始、任务结束、任务转办等事件消息。

3. A系统发起流程

  1. 引入流程组件API二方包。
<dependency>
    <groupId>com.aliyun.gts</groupId>
    <artifactId>flow-facade-api</artifactId>
    <version>${flow.version}</version>
</dependency>


  1. 注入流程组件API类。

在A系统的Application启动类上使用如下Feign注解自动注入流程组件API类FlowProcessApi.class

@EnableFeignClients(clients = {FlowProcessApi.class})
public class FlowApplication {
    
    // ....
}
  • 当A系统和流程组件在同一个集群,且使用Nacos作为服务注册发现时,此处需要在A系统配置Nacos服务发现相关配置,如已经配置,则忽略。
  • 当不在一个集群,或在一个集群但未使用Nacos作为服务注册发现时,需要在A系统新增flow.be.url配置项,即流程组件后端服务地址。


  1. 参考如下方式发起“员工请假审批流”
// 员工请假审批流 流程编码
final String employeeLeaveProcessKey = "employee_leave";
// 主管用户ID
String leaderId = "xxx";
// 二级主管用户ID
String secondaryLeaderId = "yyy";
// 请假天数,应从业务系统传入,此处为了演示写为5
Integer leaveDays = 5;
// 请假人ID(即流程发起人ID)
String userId = "1";
// 租户ID(如果没有租户概念,默认写为1)
String tenantId = "1";
// 构造流程发起请求
FlowProcessStartRequest flowProcessStartRequest = new FlowProcessStartRequest();
// 设置流程编码
flowProcessStartRequest.setProcessDefinitionKey("employee_leave");
// 设置流程变量,包括审批人变量和请假天数变量
Map<String, Object> variables = new HashMap<>();
variables.put("leader", leaderId);
variables.put("secondaryLeader", secondaryLeaderId);
variables.put("leaveDays", leaveDays);
flowProcessStartRequest.setVariables(variables);
ResultResponse<String> response = flowProcessApi.startProcess(flowProcessStartRequest, userId, tenantId);
if (response.getSuccess()) {
    // 发起成功
    
    // 获取此流程的流程实例ID
    String processInstanceId = response.getData();
    
    // 保存流程实例ID与业务系统内对象的关系,用于后续收到流程结束的通知后查询对应的业务对象
    // ....
} else {
    // 发起失败
    
    // 获取失败的错误信息和错误码
    String message = response.getMessage();
    String code = response.getCode();
    
    // 执行发起失败逻辑
    // ....
}


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Wujian SoC 平台_开发流程|学习笔记
快速学习 Wujian SoC 平台_开发流程
24 0
索引和搜索流程简介|学习笔记
快速学习索引和搜索流程简介
23 0
用 NodeJS 开发一版在线流程图网站
体验:http://cp.maqib.cn/ 对于程序员来说,每天除了写代码,接触较多的可能是各种图表了,诸如流程图、原型图、拓扑图、UML 图以及思维导图等等,我们较为熟悉的是 ProcessOn了
56 0
如何用一套引擎搞定机器学习全流程?
本文由阿里技术专家陈戊超(仲卓)分享。深度学习技术在当代社会发挥的作用越来越大。目前深度学习被广泛应用于个性化推荐、商品搜索、人脸识别、机器翻译、自动驾驶等多个领域,此外还在向社会各个领域迅速渗透。
8182 0
基于PelicanDT实现nacos断网验证
具体介绍 Nacos-example,是基于PelicanDT实现nacos环境准备,禁止端口网络访问,执行接口调用验证端口是否禁用示例 前期准备 本示例程序是基于阿里云ECS或远程Linux服务器完成,只需购买阿里云机器,或者选定已准备好的远程服务器即可 下载Nacos-example代码 ...
854 0
手把手教你写Kconfig---基于tiny4412开发板
今天,我就来教大家写写最简单的Kconfig,什么是Kconfig? 我们配置过的信息最终会在这以下的两个文件中找到。 这个文件会被.c包含 include/generated/autoconf.
1180 0
文章
问答
文章排行榜
最热
最新
相关电子书
更多
阿里高级开发工程师紫思:闲鱼多业务隔离框架SWAK
立即下载
如何创建一个成功的(在业务和开发中)开源项目
立即下载
混合应用平台构建实战
立即下载