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

news2024/11/16 7:47:49

1. 用户需求

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

2. 需求分析

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

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

3. 前置条件

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

4. 服务接入

1. 流程设计

  1. 设计流程图:进入流程组件,设计如下的流程图,流程编码为employee_leave。
    在这里插入图片描述

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

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

  4. 设置排他网关条件,其中approve为排他网关入口用户任务的处理结果变量(true为同意、false为拒绝),leaveDays为业务定义的请假天数变量,&&表示且的意思:
    • 拒绝: ! a p p r o v e • 同 意 − 且 小 于 等 于 3 天 : {!approve} • 同意-且小于等于3天: !approve3{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系统发起流程

  5. 引入流程组件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配置项,即流程组件后端服务地址。

  2. 参考如下方式发起“员工请假审批流”:

// 员工请假审批流 流程编码
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();
    
    // 执行发起失败逻辑
    // ....
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/71045.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Tomcat的IO模型

Tomcat支持一下几种IO模型&#xff1a; 支持的IO模型 特点 BIO 同步阻塞式IO&#xff0c;每一个请求都会创建一个线程&#xff0c;对性能开销大&#xff0c;不适合高并发场景。 NIO 同步非阻塞式IO&#xff0c;基于多路复用Selector监测连接状态通知线程处理&#xff0c;…

<C++>多态

文章目录1. 概念2. 多态的定义和实现2.1 多态的构成条件2.2 虚函数2.3 虚函数的重写2.4 虚函数重写的两个例外&#xff1a;2.5 C11 override和final2.6 重载、覆盖(重写)、隐藏(重定义)的对比3. 抽象类3.1 概念3.2 接口继承和实现继承3. 多态的原理3.1 虚函数表3.2 多态的原理3…

S2SH小区物业管理系统计算机专业毕业论文java毕业设计网站

&#x1f496;&#x1f496;更多项目资源&#xff0c;最下方联系我们✨✨✨✨✨✨ 目录 Java项目介绍 资料获取 Java项目介绍 《S2SH小区物业管理系统》该项目采用技术&#xff1a;jsp struts2springhibernatecssjs等相关技术&#xff0c;项目含有源码、文档、配套开发软件…

java EE初阶 — wait 和 notify

文章目录1.wait 和 notify1.1 wait()方法1.2 notify()方法1.3 notifyAll()方法1.wait 和 notify 线程最大的问题是抢占式指向&#xff0c;随机调度。而写代码的时候&#xff0c;确定的东西会比较好。 于是就有程序猿发明了一些办法&#xff0c;来控制线程之间的执行顺序。 虽…

火山引擎 RTC 助力抖音百万并发“云侃球”

动手点关注干货不迷路1. 背景及技术挑战从电视看直播到手机电脑看直播&#xff0c;直播技术的发展让观众可以随时、随地观看自己喜欢的比赛&#xff0c;并且在看比赛时通过发送表情、发文字进行互动。但表情、文字承载的信息量较小、沟通效率低&#xff0c;我们无法像线下一起看…

一大波节日来袭,App Store节日营销请注意!

11 月已经过去&#xff0c;在过去的 11 月里&#xff0c;我们经历了万圣节、双 11、世界杯、感恩节、黑色星期五等非常重要的营销节点。 在新的 12 月&#xff0c;我们将迎来世界杯闭幕、双12、平安夜、圣诞节等重要营销机遇。在未来&#xff0c;我们还会迎来新春营销的重要机…

图形API学习工程(29):解决在shader文件中使用include的问题

工程GIT地址&#xff1a;https://gitee.com/yaksue/yaksue-graphics 无用的前言 看了下提交记录&#xff0c;这个工程上次更新已经是一年以前了。最近想想&#xff0c;还是应该回来再继续学学&#xff0c;暂且不论是否对工作有帮助&#xff0c;我在这个工程上获得的愉悦感相比…

Excel 是您最容易被忽视的设计工具 设计师对世界排名第一的电子表格工具的看法——如何构建信息图表、仪表板、演示文稿等

人们对 Excel 有很多误解。许多人认为它不过是处理临时预算的电子表格工具。或者它非常适合处理数据,但您需要像 PowerPoint 这样的单独工具才能很好地显示它。 这些误解限制了我们使用 Excel 的方式。 但 Excel 的功能远不止于此,它所需要的只是了解一些鲜为人知的功能。我…

JAVA SCRIPT设计模式--创建型设计模式之工厂方法(3)

JAVA SCRIPT设计模式是本人根据GOF的设计模式写的博客记录。使用JAVA SCRIPT语言来实现主体功能&#xff0c;所以不可能像C&#xff0c;JAVA等面向对象语言一样严谨&#xff0c;大部分程序都附上了JAVA SCRIPT代码&#xff0c;代码只是实现了设计模式的主体功能&#xff0c;不代…

机器学习笔记之配分函数(三)对比散度

机器学习笔记之配分函数——对比散度引言回顾&#xff1a;随机最大似然求解模型参数的过程随机最大似然的缺陷吉布斯采样的缺陷与对比散度思想对比散度名称的由来从KL\mathcal K\mathcal LKL散度的角度描述极大似然估计对比散度的本质引言 上一节介绍了随机最大似然(Stochasti…

第十四届蓝桥杯集训——JavaC组第四篇——ASCII码表与Scanner扫描器

第十四届蓝桥杯集训——JavaC组第四篇——ASCII码表与Scanner扫描器 目录 第十四届蓝桥杯集训——JavaC组第四篇——ASCII码表与Scanner扫描器 ASCII码表 Scanner扫描器 1、Scanner含义 2、使用方法&#xff1a; next和nextLine的区别 next&#xff1a; nextLine&#…

微服务框架 SpringCloud微服务架构 23 搜索结果处理 23.2 分页

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 SpringCloud微服务架构 文章目录微服务框架SpringCloud微服务架构23 搜索结果处理23.2 分页23.2.1 分页23.2.2 深度分页问题23.2.3 深度分页…

Zookeeper常用命令大全之四字监控命令

文章目录四字监控命令0. 官方文档1. conf命令2. cons命令3. crst命令4. dump命令5. envi命令6. ruok命令7. stat命令8. srst命令9. wchs命令10. wchc命令(一般不用)11. wchp命令(一般不用)12. mntr命令四字监控命令 zookeeper支持某些特定的四字命令与其的交互。它们大多是查询…

自媒体短视频,如何起一个让人一看就记住的昵称?看一眼就知道你的定位

上一篇我们说了头像如何设置更吸引人&#xff0c;今天上午在我赢且力手小禾呈序里聊了一个好听好记的昵称应该是怎样的&#xff1f; 这是文字版&#xff0c;大家可以看一看。 昵称起名的方式无非几种&#xff1a; 职业加昵称&#xff0c;昵称加地点&#xff0c;昵称加领域&a…

全球数据集大全之mavenanalytics学习分析世界杯数据集

mavenanalytics数据集平台介绍 探索和下载由 Maven 讲师精心挑选的示例数据集。练习将您的数据分析和可视化技能应用于现实世界的数据,从航班延误和电影收视率到鲨鱼袭击和不明飞行物目击事件。 平台效果 是否支持下载 可以免费下载 https://www.mavenanalytics.io/data-p…

Java基于jsp大学生收支管理系统

随着计算机技术的飞速发展&#xff0c;计算机在系统管理中的应用越来越普及&#xff0c;利用计算机实现各个系统的管理显得越来越重要。随着人们消费水平的提高&#xff0c;消费量一直在加大 &#xff0c;可是如何能够合理的管理和记录自己的消费方向是一个很大的问题&#xff…

深度学习炼丹-不平衡样本的处理

前言一&#xff0c;数据层面处理方法 1.1&#xff0c;数据扩充1.2&#xff0c;数据&#xff08;重&#xff09;采样 数据采样方法总结 1.3&#xff0c;类别平衡采样 二&#xff0c;算法&#xff08;损失函数&#xff09;层面处理方法 2.1&#xff0c;Focal Loss2.2&#xff0c;…

Akka 学习(三)Actor的基本使用

目录一 基本案例1.1 Java 版1.2 Scala版二 Actor的创建2.1 ActorRef2.2 Props2.3 ActorSelection三 Promise、Future和事件驱动的编程模型3.1 阻塞与事件驱动3.2 Future进行Actor响应3.2.1 Java版3.2.2 Scala 版3.2.3 总结3.3 成功处理3.4 失败处理3.5 恢复3.6 链式调用3.7 结果…

小程序开发工具怎么使用?

小程序开发工具怎么用&#xff1f; 小程序开发工具分两种: 一种是微信官方提供的微信开发者工具 这个需要从事代码行业&#xff0c;职业是程序员又或者对代码知识有一定程度的人&#xff0c;才能上手使用。 另一种是第三方小程序开发平台&#xff0c;提供的小程序开发工具 …

python环境、基础语法、几种常见的数据类型

文章目录前言一、基本知识介绍二、举例实操以及重要知识再现(列表、元组、集合、字典)前言 一、基本知识介绍 python基础 标准库与扩展库中的对象的导入与使用&#xff1a; import 模块名&#xff08;as别名&#xff09; import numpy as np from 模块名 import 对象名&#x…