当前位置: 首页 > article >正文

可视化工作流编排参数配置完整方案设计文档

​​​一、背景及需求分析

1. 背景

在复杂的工作流程中,后续程序需要动态构造输入参数,这些参数源自多个前序程序的 JSON 数据输出。为了增强系统的灵活性和可扩展性,配置文件需要支持以下功能:

  • 灵活映射前序程序的 JSON 数据。
  • 支持简单映射、条件逻辑、循环体、字段合并等。
  • 参数可直接使用常量或动态值作为输入。

2. 核心需求

  • 简单参数映射: 从单一来源提取数据。
  • 复杂逻辑支持: 条件逻辑 (if-then-else)、循环体、字段合并等。
  • 多来源支持: 从多个前序程序中提取数据,并支持合并策略(如拼接、去重、优先级)。
  • 常量支持: 参数可以直接为固定值,跳过数据映射逻辑。

二、设计目标

  1. 通用性: 提供统一的 JSON 配置结构,覆盖多种场景。
  2. 灵活性: 支持动态逻辑(条件、循环、多来源合并)。
  3. 易读性: 配置文件结构清晰,用户容易理解和使用。
  4. 可扩展性: 配置结构支持新增逻辑类型,无需大规模修改现有代码。

三、架构概览

+----------------+          +----------------+           +----------------+  
| 前序程序输出    | ------> | 参数映射服务     | -------> | 后序程序输入参数    |  
| JSON 数据      |          | (JSON 配置驱动) |           | 动态生成          |  
+----------------+          +----------------+           +----------------+  主要组件:  
1. **前序程序输出:** 提供 JSON 数据(多个来源)。  
2. **参数映射服务:** 基于 JSON 配置解析前序数据,生成后续输入。  
3. **参数配置文件:** JSON 格式,定义参数映射规则及逻辑。  
4. **后序程序输入:** 动态生成符合后续程序要求的参数。


四、配置结构设计

1. 参数类

每个参数由参数类描述,包含以下字段:

表格

字段名称类型是否必填说明
name字符串必填参数名称,用于后续程序的输入标识。
value对象必填参数的值对象,由值对象基类及其子类定义。
description字符串可选参数描述信息,便于理解参数用途。

2. 值对象基类及子类

值对象基类

所有值对象从基类继承,区分逻辑通过 type 字段。

表格

字段名称类型是否必填说明
type字符串必填值对象类型(如 constantjmespathmultiSourceloopconditional)。

值对象子类设计
1. 常量值子类 (ConstantValue)

返回固定值。

表格

字段名称类型是否必填说明
type字符串必填固定为 constant
value任意类型必填常量值,直接返回固定值。

示例:

{ "type": "constant", "value": 42 }


2. 单一来源值子类 (SingleSourceValue)

使用 JMESPath 从单一来源提取值。

字段名称类型是否必填说明
type字符串必填固定为 jmespath
jmespath字符串必填包含来源的 JMESPath 表达式(如 programA.outputA.key)。

示例:{ "type": "jmespath", "jmespath": "programA.outputA.simpleKey" }


3. 多来源值子类 (MultiSourceValue)

支持从多个来源合并数据,并按指定策略处理。

字段名称类型是否必填说明
type字符串必填固定为 multiSource
sources对象必填多来源数据的键值对,键为前序程序名称,值为 JMESPath 表达式。
mergeStrategy字符串可选合并策略(如 concatuniquepriority 等)。

示例:{ "type": "multiSource", "sources": { "programA": "outputA.arrayA", "programB": "outputB.arrayB" }, "mergeStrategy": "concat" }


4. 循环体值子类 (LoopValue)

处理数组数据,支持动态字段映射。

表格

字段名称类型是否必填说明
type字符串必填固定为 loop
jmespath字符串必填包含来源的 JMESPath 表达式,提取数组元素及字段。
mappings对象可选动态映射规则,键为目标字段名,值为提取规则(支持默认值)。

示例:{ "type": "loop", "jmespath": "programB.outputB.items", "mappings": { "id": "id", "value": "value || 'defaultValue'", "optionalField": "optionalField || 'defaultOptional'" } }


5. 条件值子类 (ConditionalValue)

根据条件逻辑动态返回值,支持默认值。

表格

字段名称类型是否必填说明
type字符串必填固定为 conditional
jmespath字符串必填数据来源及条件逻辑使用的 JMESPath 表达式。
conditions数组必填条件逻辑数组,每个条件包含 if 和 then 值对象。
else对象可选默认值,当所有条件不满足时返回的值。

示例:

{ "type": "conditional", "jmespath": "programA.outputA", "conditions": [ { "if": "status == 'success'", "then": { "type": "jmespath", "jmespath": "successMessage" } }, { "if": "status == 'error'", "then": { "type": "jmespath", "jmespath": "errorMessage" } } ], "else": { "type": "constant", "value": "defaultMessage" } }


五、完整配置示例

{  "parameters": [  {  "name": "constantParam",  "value": {  "type": "constant",  "value": 42  },  "description": "A constant parameter with a fixed value"  },  {  "name": "simpleParam",  "value": {  "type": "jmespath",  "jmespath": "programA.outputA.simpleKey"  },  "description": "A simple parameter mapped from programA"  },  {  "name": "combinedParam",  "value": {  "type": "multiSource",  "sources": {  "programA": "outputA.arrayA",  "programB": "outputB.arrayB"  },  "mergeStrategy": "concat"  },  "description": "A combined parameter concatenating arrays from two sources"  },  {  "name": "complexArrayParam",  "value": {  "type": "loop",  "jmespath": "programB.outputB.items",  "mappings": {  "id": "id",  "value": "value || 'defaultValue'",  "optionalField": "optionalField || 'defaultOptional'"  }  },  "description": "An array parameter with dynamic attributes and default values"  },  {  "name": "conditionalParam",  "value": {  "type": "conditional",  "jmespath": "programA.outputA",  "conditions": [  {  "if": "status == 'success'",  "then": {  "type": "jmespath",  "jmespath": "successMessage"  }  },  {  "if": "status == 'error'",  "then": {  "type": "jmespath",  "jmespath": "errorMessage"  }  }  ],  "else": {  "type": "constant",  "value": "defaultMessage"  }  },  "description": "A conditional parameter with fallback value"  }  ]  
}

六、运行逻辑解析

  1. 常量参数:
    无需数据来源,直接返回固定值。

  2. 单一来源:
    根据 jmespath 表达式提取对应字段值。

  3. 多来源合并:
    遍历 sources,提取数据并按 mergeStrategy 合并。

  4. 循环体:
    遍历数组元素,按 mappings 提取字段值,支持默认值。

  5. 条件逻辑:
    按 conditions 顺序匹配条件,返回第一个满足条件的值;若无匹配,则返回 else


七、设计亮点

  1. 去冗余设计:
    将 source 合并到 jmespath,结构更简洁。参数类只负责元信息(如名称、描述),具体值交由值对象处理。

  2. 灵活性:
    支持常量、单一来源、多来源、循环体、条件逻辑等多种复杂场景。

  3. 高可读性:
    jmespath 表达式直观显示来源和提取规则,易于理解和维护。

  4. 扩展性:
    值对象子类支持进一步扩展,例如动态计算值、复杂逻辑等。

  5. 直观配置:
    JSON 配置清晰、简洁,便于前端用户或配置生成工具使用。


八、扩展方向

  1. 支持动态计算:
    增加对动态生成值的支持,例如通过公式计算。

  2. 前端配置工具:
    提供可视化工具,动态生成 JSON 配置,支持实时校验。

  3. 运行时校验:
    针对 jmespath 表达式的校验,确保数据提取逻辑的正确性。


相关文章:

可视化工作流编排参数配置完整方案设计文档

​​​一、背景及需求分析 1. 背景 在复杂的工作流程中,后续程序需要动态构造输入参数,这些参数源自多个前序程序的 JSON 数据输出。为了增强系统的灵活性和可扩展性,配置文件需要支持以下功能: 灵活映射前序程序的 JSON 数据。…...

镜头放大倍率和像素之间的关系

相互独立的特性 镜头放大倍率:主要取决于镜头的光学设计和结构,决定了镜头对物体成像时的缩放程度,与镜头的焦距等因素密切相关。比如,微距镜头具有较高的放大倍率,能将微小物体如昆虫、花朵细节等放大成像&#xff0…...

MariaDB *MaxScale*实现mysql8读写分离

1.MaxScale 是干什么的? MaxScale是maridb开发的一个mysql数据中间件,其配置简单,能够实现读写分离,并且可以根据主从状态实现写库的自动切换,对多个从服务器能实现负载均衡。 2.MaxScale 实验环境 中间件192.168.12…...

计算机毕业设计Spark+大模型知网文献论文推荐系统 知识图谱 知网爬虫 知网数据分析 知网大数据 知网可视化 预测系统 大数据毕业设计 机器学习

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...

MySQL的事务实现原理和隔离级别?

目录 MySQL 事务实现原理 1. 事务的基本概念 2. 实现原理 日志系统 锁机制 MySQL 隔离级别 1. 隔离级别概述 2. 各隔离级别详解 读未提交(Read Uncommitted) 读已提交(Read Committed) 可重复读(Repeatable Read) 串行化(Serializable) 3. 设置隔离级别 My…...

JVM做GC垃圾回收时需要多久,都由哪些因素决定的

JVM进行垃圾回收(GC)的时间长短受多种因素影响,主要包括以下几个方面: 1. 堆内存大小 堆内存越大,GC需要扫描和回收的对象越多,耗时越长。堆内存较小时,GC频率增加,但每次回收的时…...

padding: 20rpx 0rpx 20rpx 20rpx(上、右、下、左的填充(顺时针方向))

CSS样式 padding: 20rpx 0rpx 20rpx 20rpx; 用于设置元素的填充区域。以下是对每个值的详细解释: 20rpx(上边距):设置元素顶部的填充为20rpx。0rpx(右边距):设置元素右侧的填充为0rpx。20rpx&a…...

2025-2-10-4.4 双指针(基础题1)

文章目录 4.4 双指针(基础题)**344. 反转字符串****125. 验证回文串****1750. 删除字符串两端相同字符后的最短长度****167.两数之和 II - 输入有序数组****2105. 给植物浇水 II****977. 有序数组的平方****658. 找到K个最接近的元素****1471. 数组中的k…...

Qt - 地图相关 —— 2、Qt调用百度在线地图功能示例全集,包含线路规划、地铁线路查询等(附源码)

效果:由于录制软件导致exe显示不正常,实际运行没有任何问题。 说明:exe试用下载(提取码: 4d8y )...

微信小程序如何使用decimal计算金额

第三方库地址:GitHub - MikeMcl/decimal.js: An arbitrary-precision Decimal type for JavaScript 之前都是api接口走后端计算,偶尔发现这个库也不错,计算简单,目前发现比较准确 上代码 导入js import Decimal from ../../uti…...

【AI学习】关于 DeepSeek-R1的几个流程图

遇见关于DeepSeek-R1的几个流程图,清晰易懂形象直观,记录于此。 流程图一 来自文章《Understanding Reasoning LLMs》, 文章链接:https://magazine.sebastianraschka.com/p/understanding-reasoning-llms?continueFlagaf07b1a0…...

C++模板编程——typelist的实现

文章最后给出了汇总的代码,可直接运行 1. typelist是什么 typelist是一种用来操作类型的容器。和我们所熟知的vector、list、deque类似,只不过typelist存储的不是变量,而是类型。 typelist简单来说就是一个类型容器,能够提供一…...

Python3 ImportError: cannot import name ‘XXX‘ from ‘XXX‘

个人博客地址&#xff1a;Python3 ImportError: cannot import name XXX from XXX | 一张假钞的真实世界 例如如下错误&#xff1a; $ python3 git.py Traceback (most recent call last):File "git.py", line 1, in <module>from git import RepoFile &quo…...

数据可视化与交互融合:APP 界面设计的新维度

在数字化浪潮汹涌的当下&#xff0c;APP 已成为人们生活和工作中不可或缺的工具。如何在众多 APP 中脱颖而出&#xff0c;界面设计至关重要。而数据可视化与交互的融合&#xff0c;正为 APP 界面设计开辟了全新的维度。 数据可视化&#xff0c;简单来说&#xff0c;就是将复杂…...

502 Bad Gateway 错误详解:从表现推测原因,逐步排查直至解决

502 Bad Gateway 错误通常意味着服务器之间的通信失败&#xff0c;但导致的具体原因往往因场景而异。 场景一&#xff1a;高峰期频繁出现 502 错误 1.1 现象 在流量高峰期间&#xff08;如促销活动、直播发布等&#xff09;&#xff0c;页面访问变慢甚至出现 502 错误&#…...

控制论与信息论:维纳和香农的核心分歧在于对「信息本质」的理解

控制论与信息论&#xff1a;维纳和香农的核心分歧在于对「信息本质」的理解 核心结论 控制论是「系统的方向盘」&#xff0c;通过反馈调节实现目标信息论是「信息的尺子」&#xff0c;量化信息传输的精度与效率根本分歧&#xff1a;维纳认为信息是「系统维持秩序的工具」&…...

Baklib优化数字化内容管理用科技提升商业效率与增值潜力

内容概要 在当今数字化迅速发展的时代&#xff0c;数字化内容管理已成为企业提升竞争力的重要手段。Baklib作为一款强大的智能优化内容管理系统&#xff0c;通过先进的科技手段&#xff0c;帮助企业在内容管理和数据整合方面实现高效运作。Baklib 是什么类型的工具&#xff0c…...

一个基于ESP32S3和INMP441麦克风实现音频强度控制RGB灯带律动的代码及效果展示

一个基于ESP32S3和INMP441麦克风实现音频强度控制RGB灯带律动的代码示例&#xff0c;使用Arduino语言&#xff1a; 硬件连接 INMP441 VCC → ESP32的3.3VINMP441 GND → ESP32的GNDINMP441 SCK → ESP32的GPIO 17INMP441 WS → ESP32的GPIO 18INMP441 SD → ESP32的GPIO 16RG…...

利用二分法进行 SQL 时间盲注

什么是时间盲注&#xff1f; SQL 盲注&#xff08;Blind SQL Injection&#xff09;是一种常见的 Web 安全漏洞&#xff0c;其中时间盲注是基于查询延迟的 SQL 注入方式。当服务器不返回可见的错误信息时&#xff0c;我们可以利用 SLEEP() 函数来判断查询结果是否符合预期。 …...

Linux运维——用户管理

Linux用户管理 一、Linux用户管理要点二、常用命令2.1、groupadd2.2、groupdel2.3、groupmod2.4、groups2.5、useradd2.6、userdel2.7、passwd2.9、su2.10、sudo2.10.1、给普通用户授权 sudo2.10.2、 免密码授权 sudo 一、Linux用户管理要点 创建用户组 - 使用 groupadd删除用…...

基于STM32的声纹识别智能门锁

一、项目背景与意义 行业痛点&#xff1a;传统指纹锁存在表皮磨损识别失败风险&#xff0c;声纹具备活体检测特性 技术优势&#xff1a; - 采用MFCC&#xff08;梅尔频率倒谱系数&#xff09;替代传统FFT&#xff0c;提升说话人特征区分度 - 动态时间规整(DTW)算法解决语…...

【密评】 | 商用密码应用安全性评估从业人员考核题库(19)

在SM9数字签名的生成和验证过程之前,杂凑函数( )。 A.仅对待签名消息进行压缩 B.仅对待验证消息进行压缩 C.对待签名消息和待验证消息都要压缩 D.不起任何作用 SM9密钥封装机制封装的秘密密钥是( )生成的。 A.根据主公钥 B.根据接受者的用户标识 C.由随机数发生器 D.以上都…...

redis底层数据结构——链表

文章目录 定义内部实现总结 定义 链表提供了高效的节点重排能力&#xff0c;以及顺序性的节点访间方式&#xff0c;并且可以通过增删节点来灵活地调整链表的长度。 作为一种常用数据结构&#xff0c;链表内置在很多高级的编程语言里面&#xff0c;因为Redis使用的C语言并没有…...

在CT107D单片机综合训练平台上实现外部中断控制LED闪烁

引言 在单片机开发中&#xff0c;外部中断是一个非常重要的功能&#xff0c;它可以让单片机在检测到外部信号变化时立即做出响应。本文将详细介绍如何在CT107D单片机综合训练平台上使用外部中断来控制LED灯的闪烁。我们将使用两种不同的方式来实现这一功能&#xff1a;一种是在…...

C++ Primer 类型转换

欢迎阅读我的 【CPrimer】专栏 专栏简介&#xff1a;本专栏主要面向C初学者&#xff0c;解释C的一些基本概念和基础语言特性&#xff0c;涉及C标准库的用法&#xff0c;面向对象特性&#xff0c;泛型特性高级用法。通过使用标准库中定义的抽象设施&#xff0c;使你更加适应高级…...

芋道源码(无遮羞布版)Spring Boot 全景指南

芋道源码&#xff08;无遮羞布版&#xff09;Spring Boot 全景指南 项目地址:https://gitcode.com/gh_mirrors/ru/ruoyi-spring-boot-all 一、项目目录结构及介绍 芋道源码&#xff08;ruoyi-spring-boot-all&#xff09;项目基于Spring Boot构建&#xff0c;旨在提供一个全…...

Visual Studio Code中文出现黄色框子的解决办法

Visual Studio Code中文出现黄色框子的解决办法 一、vsCode中文出现黄色框子-如图二、解决办法 一、vsCode中文出现黄色框子-如图 二、解决办法 点击 “文件”点击 “首选项”点击 “设置” 搜索框直接搜索unicode选择“文本编辑器”&#xff0c;往下滑动&#xff0c;找到“Un…...

“可通过HTTP获取远端WWW服务信息”漏洞修复

环境说明&#xff1a;①操作系统&#xff1a;windows server&#xff1b;②nginx&#xff1a;1.27.1。 1.漏洞说明 “可通过HTTP获取远端WWW服务信息”。 修复前&#xff0c;在“响应标头”能看到Server信息&#xff0c;如下图所示&#xff1a; 修复后&#xff0c;“响应标头…...

CAD 屏幕进度条

参考鸿视频实现&#xff0c;代码如下&#xff1a; 主类 using System.IO.Ports; using System.Threading; using System.Windows.Controls; using static IFoxDemo.进度条class; using static System.Windows.Forms.VisualStyles.VisualStyleElement.TrackBar;//[assembly: C…...

小红书爬虫: 获取所需数据

小红书&#xff0c;又名 “小红书 ”或简称 “红”&#xff0c;已迅速成为中国社交和电子商务领域的重要参与者&#xff0c;成为一个不可或缺的平台。对于企业、营销人员和数据分析师来说&#xff0c;从小红书收集数据可以获得宝贵的洞察力&#xff0c;从而推动业务增长。虽然这…...