# 信号触发流程

# 一、功能概述

信号发起流程提供了一种松耦合的流程触发机制,允许通过发送信号来启动特定的业务流程。这种方式相比OpenAPI发起具有更好的灵活性和可维护性。

# 二、信号发起流程配置

# 2.1 改造现有流程支持信号发起

# 步骤1:修改开始节点类型

  1. 打开目标流程(如采购申请流程)
  2. 选择开始节点
  3. 点击右下方箭头切换节点类型
  4. 选择"信号开始事件"

# 步骤2:配置信号参数

  1. 右键开始节点选择"属性"
  2. 在信号名称中输入标识符(如"有人填了采购单")
  3. 保存配置

配置信号参数 ▲ 配置信号参数

# 步骤3:配置数据处理(可选)

  1. 在"事件数据"页签配置数据映射
  2. 选中Payload,右键导入架构
  3. 使用JSON示例生成数据结构
  4. 连接事件数据与流程数据字段

导入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 应用场景优势

  1. 流程内部触发

    • 使用"信号中间抛出节点"在流程中触发其他流程
    • 配置简单,无需编写代码
  2. 第三方系统集成

    • 统一集成接口,降低开发复杂度
    • 支持多个流程响应同一业务事件
  3. 系统解耦

    • 发送方不需要了解流程具体实现
    • 接收方可以灵活调整业务流程

# 五、最佳实践建议

  1. 推荐优先使用信号发起

    • 跨系统集成场景
    • 流程链式触发场景
    • 需要长期维护的对接场景
  2. OpenAPI适用场景

    • 快速测试验证
    • 简单临时性需求
    • 对流程有完全控制权的场景

# 六、总结

信号发起流程为FlowPortal BPM提供了一种灵活、松耦合的流程触发机制:

  1. 降低集成复杂度:统一接口,简化第三方系统集成
  2. 提高维护性:流程变更不影响发送方代码
  3. 增强灵活性:支持多个流程响应同一业务事件
  4. 改善可测试性:通过命令行方便测试信号触发

通过信号机制,可以构建更加灵活和可维护的业务流程集成方案,特别适合复杂的企业系统集成场景。