Skip to content

用户指南 11 · 流程设计器

流程设计器 = 画流程图 + 配置节点属性的前端组件(npm 包 mldong-flow-designer-plus, 钉钉风格,canvas / dingtalk 双模式)。

设计器不依赖任何后端——它只产出 LogicFlow JSON;与引擎对接(保存/发布/启停)走 统一门面的 processDesign/* action(见 规范 06 · 统一门面)。 本文档说明:设计稿与流程定义的关系、生命周期、以及属性面板每个字段对应引擎的哪个配置项

1. 设计器与流程定义(两个概念)

设计稿(processDesign)流程定义(processDefine)
本质画布草稿 + 历史快照可执行模型(版本化)
存储processDesign 表 + processDesignHis 历史表processDefine
创建设计器保存(save / updateDefine发布产生(deploy / redeploy
状态isDeployed(1 已发布 / 0 未发布)state(1 启用 / 0 停用)+ version
变更影响改草稿不影响运行中的流程新版本只影响新发起的实例

关键规则:设计稿内容变更后 isDeployed 自动置 0(防误用旧定义);发布后 同 name 的定义 version+1——运行中的旧实例仍走旧版本,新发起走新版本。

2. 生命周期(画图 → 保存 → 发布 → 启停)

设计器画图 ──updateDefine──→ 设计稿快照(isDeployed=0)

     ├──deploy──→ 流程定义 v1(version+1,isDeployed=1)

     └──改图──→ 快照 v2(isDeployed 又变 0)
          ├──deploy──→ 流程定义 v2(version+1)
          └──redeploy──→ 原地替换 v1 内容(version 不变,运行中实例受影响)

                                     └──upAndDown──→ 停用(state=0,不再发起新实例)
动作门面 action语义
新建/改基本信息processDesign/save无 id 新建;有 id 更新基本信息(内容快照可选)
保存画布processDesign/updateDefine设计稿 JSON 入历史表 + 同步 name/displayName/type + 置未部署(与最新相同则不重复存)
发布processDesign/deploy取最新快照 → 生成流程定义(version+1)→ 置已部署
重新发布processDesign/redeploy取最新快照 → 按 name 原地替换定义内容(version 不变)
删除processDesign/remove删设计稿(不影响已发布定义)
启停processDefine/upAndDown停用后不能发起新实例(运行中实例不受影响)

3. 属性面板字段 ↔ 引擎配置项映射

设计器内置属性面板(可配置 fieldConfigs 扩展),各节点可编辑字段与引擎 properties 的对应关系(引擎侧完整字典见 规范 02 · 属性字典):

3.1 任务节点(审批节点)

面板字段写入 properties引擎语义
唯一编码name(节点 id)节点编码 → 任务名 taskName
显示名称text.value节点显示名
参与人assignee固定参与者(逗号分隔;applicant = 发起人)
任务类型taskType(Major/Aidant → 0/1)0=主办 1=协办
参与类型performType(ANY/ALL → 0/1)0=普通 1=会签
表单form表单标识 → formKey
前置拦截器preInterceptors节点执行前拦截器注册名
后置拦截器postInterceptors节点执行后拦截器注册名(persist 权限判定路径)

面板未列出的属性(assignmentHandler / autoExecute / callback / candidateUsers / countersignType / field 等)编辑时原样保留——先写 JSON 再在设计器打开,或通过扩展 fieldConfigs 加入面板。 会签模式(PARALLEL/SEQUENTIAL)与候选人在钉钉版通过高级配置/扩展面板设置。

3.2 条件分支节点(决策节点)

面板字段写入 properties引擎语义
唯一编码 / 显示名称name / text.value同上
决策表达式expr节点级默认表达式(出边条件见下)
处理类handleClass自定义决策器注册名
决策类路径clazz决策处理类
方法名 / 参数变量methodName / args决策方法调用

分支条件(分支编辑面板):

面板字段写入引擎语义
分支名称text.value(边)分支标签(渲染在线上)
条件表达式properties.expr(边)分支条件——首条为真者胜;无 expr 为默认分支

3.3 自定义节点 / 子流程 / 开始结束

节点面板字段写入 properties
自定义类路径/方法名/参数变量clazz / methodName / args
子流程表单/版本号form / version
开始/结束前置/后置拦截器preInterceptors / postInterceptors

4. 设计器输出 JSON 与引擎模型对应

设计器导出即 LogicFlow JSON,结构与 规范 02 一致:

设计器元素输出 JSON引擎模型
审批节点{type: "snaker:task", properties: {...}}TaskModel
条件分支容器{type: "snaker:decision", properties: {expr, handleClass}}DecisionModel
条件分支线edge {properties: {expr}, text: {value}}TransitionModel.expr
并行分支/合并snaker:fork / snaker:joinForkModel / JoinModel
自定义节点snaker:custom + clazz/methodName/argsCustomModel
子流程snaker:subprocess + form/versionSubProcessModel

type 兼容两种写法:snaker:task(带前缀)与 task(去前缀),引擎解析等价。 设计器属性面板实时生效(无需"保存"按钮),导出时未在面板编辑的原有 properties 字段不丢失。

5. 前端集成(宿主接入方式)

mldong-flow-designer-plus 是纯前端组件,宿主只需:

  1. 加载设计稿processDesign/detaildata.jsonObject 喂给设计器
  2. 保存画布:设计器 getData() 输出 JSON → processDesign/updateDefine(草稿)
  3. 发布processDesign/deploy → 得到 processDefineId
  4. 回显/预览:只读模式 + 高亮数据(processInstance/highLight
宿主集成形态
jeeflow-ui(演示站)内置 FlowViewer 只读预览 + 高亮
mldong-vben5-wf完整设计器页面(canvas/dingtalk 双模式)

6. 常见问题

问题原因处理
发布后流程没变化改了草稿但没 deployupdateDefine 后必须 deploy 才生成新版本定义
运行中的流程不受新版本影响版本化语义(符合预期)已发起实例走发起时的版本;redeploy 可原地替换定义内容
停用后还能发起发起页缓存了旧列表发起前重新拉 processDesign/listByType,前端过滤 processDefineState=0
属性面板找不到某个属性面板字段为内置默认集fieldConfigs 扩展面板,或直接编辑 JSON 后回设计器(属性保留)

jeeflow · 轻量级多语言工作流引擎