Skip to content

业务模块接入工作流

业务模块接入工作流适合已有独立实体、Service、列表页和状态机的业务。业务数据保存在业务表,工作流只负责审批编排,并通过 bizType + bizId 建立关联。

接入模式

模式数据存储发起入口适用场景
designer流程实例 formData发起工作台标准审批表单
custom流程实例 formData发起工作台需要自定义 React 表单,但无独立业务表
external业务模块自有表业务模块页面已有业务实体,需要接审批

后端桥接 API

packages/server/src/lib/workflow-biz-bridge.ts 提供三类函数:

函数说明
startWorkflowForBiz保存业务数据后发起流程,并写入 bizTypebizId、路由变量和优先级
onWorkflowResult监听指定 bizType 的创建、通过、驳回、撤回事件,回写业务状态
getWorkflowStatusByBiz按业务键批量查询工作流状态

接入步骤

1. 业务表保存状态

业务表建议保留:

字段说明
workflowInstanceId关联流程实例 ID
workflowStatus冗余流程状态,便于列表筛选和展示
业务状态业务自己的状态,如 draftpendingapprovedrejected

2. 提交时发起流程

ts
import { startWorkflowForBiz } from '../lib/workflow-biz-bridge';

const instance = await startWorkflowForBiz({
  definitionId,
  title: `请假申请 - ${applicant}`,
  bizType: 'biz_leave',
  bizId: leave.id,
  variables: {
    days: leave.days,
    leaveType: leave.leaveType,
  },
  priority: 'normal',
});

variables 写入流程实例 formData,用于条件分支、审批人解析和触发器模板。完整业务数据仍从业务表读取。

3. 订阅流程结果

ts
import { onWorkflowResult } from '../lib/workflow-biz-bridge';

export function registerBizLeaveSubscribers() {
  onWorkflowResult('biz_leave', {
    onApproved: (instance) => updateStatus(instance.bizId, 'approved'),
    onRejected: (instance) => updateStatus(instance.bizId, 'rejected'),
    onWithdrawn: (instance) => updateStatus(instance.bizId, 'cancelled'),
  });
}

订阅器在服务启动时注册,与其它事件订阅者一起响应 instance.* 事件。

4. 配置流程定义

流程定义选择 formType = external,并配置:

配置说明
查看组件审批页和详情页渲染业务数据的 React 组件
变量声明条件分支和审批人解析可读取的业务变量

审批查看组件通过实例关联的 bizType + bizId 拉取业务详情。业务详情接口应允许发起人、任务处理人、抄送人和监控管理员读取。

5. 前端跳转

业务列表页可展示冗余 workflowStatus,并跳转到内置流程详情:

text
/workflow/instance/{workflowInstanceId}

参考实现

完整的端到端范例见内置的「请假申请」演示模块(biz-leave),覆盖业务保存、提交发起流程、审批结果回写业务状态与前端审批查看的全部环节。

Built with VitePress for local documentation preview.