# 信号触发流程
# 一、功能概述
信号发起流程提供了一种松耦合的流程触发机制,允许通过发送信号来启动特定的业务流程。这种方式相比OpenAPI发起具有更好的灵活性和可维护性。
# 二、信号发起流程配置
# 2.1 改造现有流程支持信号发起
# 步骤1:修改开始节点类型
- 打开目标流程(如采购申请流程)
- 选择开始节点
- 点击右下方箭头切换节点类型
- 选择"信号开始事件"
# 步骤2:配置信号参数
- 右键开始节点选择"属性"
- 在信号名称中输入标识符(如"有人填了采购单")
- 保存配置
▲ 配置信号参数
# 步骤3:配置数据处理(可选)
- 在"事件数据"页签配置数据映射
- 选中Payload,右键导入架构
- 使用JSON示例生成数据结构
- 连接事件数据与流程数据字段
▲ 导入JSON数据结构
▲ 配置数据映射
# 2.2 信号数据格式示例
{
"orderId": "订单编号",
"amount": 67.8,
"orderItems": [
{
"code": "商品编号",
"name": "商品名称",
"price": 17.8,
"qty": 1
},
{
"code": "商品编号",
"name": "商品名称",
"price": 25,
"qty": 2
}
]
}
# 三、信号发送方式
# 3.1 命令行测试(调试用)
在BPM服务控制台,输入命令
# 基本信号发送
signal 有人填了采购单
# 带数据信号发送
signal 有人填了采购单 {"amount":5,"orderItems":[{"name":"aaa","price":1,"qty":1},{"name":"bbb","price":2,"qty":2}]}
# 3.2 NET代码示例
# OpenAPI方式
OpenAPI接口说明地址:https://localhost:6001/OpenAPI(网址替换为你的地址)
接口路径:/v1/workflow/execute/signal
参数说明:
signalName: 信号名称key:信号KEY(可选)data: 信号数据(符合映射结构的JSON数据,可选)
参考代码位置:
SourceCode/Demo/OpenAPI/Signal.cs
# 使用Yiez.Client库
参考安装包中的演示代码:46行开始是发信号
SourceCode/Demo/GrpcAPI/Signal.cs
这是用Yiez.Client库,从.net程序对接,用这个库比OpenAPI更方便
# 四、信号发起的优势
# 4.1 与传统OpenAPI对比
| 特性 | OpenAPI发起 | 信号发起 |
|---|---|---|
| 耦合度 | 紧耦合(需要知道流程ID和数据结构) | 松耦合(只需知道信号名称) |
| 代码复用 | 每个流程需要单独代码 | 统一代码模板 |
| 维护性 | 流程变更需要修改代码 | 流程变更不影响发送方 |
| 灵活性 | 较差 | 支持多个流程响应同一信号 |
# 4.2 应用场景优势
流程内部触发:
- 使用"信号中间抛出节点"在流程中触发其他流程
- 配置简单,无需编写代码
第三方系统集成:
- 统一集成接口,降低开发复杂度
- 支持多个流程响应同一业务事件
系统解耦:
- 发送方不需要了解流程具体实现
- 接收方可以灵活调整业务流程
# 五、最佳实践建议
推荐优先使用信号发起:
- 跨系统集成场景
- 流程链式触发场景
- 需要长期维护的对接场景
OpenAPI适用场景:
- 快速测试验证
- 简单临时性需求
- 对流程有完全控制权的场景
# 六、总结
信号发起流程为FlowPortal BPM提供了一种灵活、松耦合的流程触发机制:
- 降低集成复杂度:统一接口,简化第三方系统集成
- 提高维护性:流程变更不影响发送方代码
- 增强灵活性:支持多个流程响应同一业务事件
- 改善可测试性:通过命令行方便测试信号触发
通过信号机制,可以构建更加灵活和可维护的业务流程集成方案,特别适合复杂的企业系统集成场景。
← OpenAPI发起流程 带着业务系统表单跑 →