# 信号触发流程
# 一、功能概述
信号发起流程提供了一种松耦合的流程触发机制,允许通过发送信号来启动特定的业务流程。这种方式相比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发起流程 带着业务系统表单跑 →