Skip to content

Muotai Wflow 工作流引擎使用教程 ​

版本: 5.8.0 | 作者: Aroundix SPG Team | 更新时间: 2025-01

目录 ​

  1. 概述
  2. 架构设计
  3. 核心概念
  4. 快速开始
  5. 流程模型设计
  6. 表单设计
  7. 节点类型详解
  8. 审批人配置
  9. 条件表达式
  10. 任务处理
  11. 流程监听器
  12. 接口参考
  13. 最佳实践
  14. 常见问题

1. 概述 ​

1.1 什么是 Wflow ​

Wflow 是 Muotai 平台的工作流引擎模块,基于 Flowable 6.8.0 构建,提供企业级的流程管理能力。它支持:

  • 可视化流程设计:拖拽式流程图设计,支持 14 种节点类型
  • 低代码表单设计:拖拽式表单编辑,支持字段权限控制
  • 灵活的审批路由:支持条件分支、并行审批、会签、加签等
  • 完整的审计追踪:流程执行轨迹、操作日志、讨论记录
  • 多租户架构:企业级数据隔离

1.2 技术栈 ​

组件版本说明
Spring Boot3.4.5基础框架
Spring Cloud2024.0.0微服务框架
Flowable6.8.0BPMN 2.0 工作流引擎
MyBatis-Plus-ORM 框架
Nacos3.0.2服务注册与配置中心

1.3 服务信息 ​

  • 服务端口: 7062
  • 服务名称: muotai-wflow
  • API 前缀: /wflow

2. 架构设计 ​

2.1 模块结构 ​

muotai-wflow/
├── muotai-wflow-api/         # API 接口层
│   ├── dto/                  # 数据传输对象
│   ├── feign/                # Feign 客户端
│   └── entity/               # 公共实体
│
├── muotai-wflow-biz/         # 业务实现层
│   ├── controller/           # REST 控制器
│   ├── service/              # 业务服务
│   ├── core/                 # 核心引擎
│   │   ├── bean/             # 数据模型
│   │   ├── bpmn/             # BPMN 扩展
│   │   ├── listener/         # 事件监听
│   │   └── execute/          # 表达式执行
│   ├── dal/                  # 数据访问层
│   ├── mapper/               # MyBatis 映射
│   ├── integration/          # 系统集成
│   └── config/               # 配置类
│
└── Dockerfile                # 容器化配置

2.2 核心服务架构 ​

┌─────────────────────────────────────────────────────────────┐
│                      REST Controllers                        │
│  FlowModelController │ FlowInstanceController │ FlowTaskController │
└──────────────────────────────┬──────────────────────────────┘
                               │
┌──────────────────────────────▼──────────────────────────────┐
│                      Service Layer                           │
│  WflowModelService │ FlowInstanceService │ FlowTaskService   │
│  FormService │ FlowOrgService │ NotifyService                │
└──────────────────────────────┬──────────────────────────────┘
                               │
┌──────────────────────────────▼──────────────────────────────┐
│                      Core Engine                             │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐          │
│  │  Flowable   │  │  Event      │  │  Expression │          │
│  │  Engine     │  │  Listener   │  │  Executor   │          │
│  └─────────────┘  └─────────────┘  └─────────────┘          │
└──────────────────────────────┬──────────────────────────────┘
                               │
┌──────────────────────────────▼──────────────────────────────┐
│                      Data Access Layer                       │
│  WflowProcModelMapper │ WflowProcInstMapper │ ...            │
└─────────────────────────────────────────────────────────────┘

3. 核心概念 ​

3.1 流程模型 (Process Model) ​

流程模型是流程的定义,包含:

属性说明
code流程唯一标识码
procName流程名称
version版本号
status状态 (draft/active/disabled)
process流程节点定义 (JSON)
formJson表单定义 (JSON)
formFields表单字段列表
events流程事件配置

3.2 流程实例 (Process Instance) ​

流程实例是流程模型的运行态:

属性说明
instId实例 ID (Flowable 生成)
title流程标题
defineId关联的流程定义 ID
currentNodeId当前节点 ID
status实例状态
initiator发起人
createTime创建时间

3.3 实例状态 (InstanceStatus) ​

java
public enum InstanceStatus {
    RUNNING,    // 进行中
    REFUSE,     // 被驳回
    REVOKED,    // 被撤销
    DELETED,    // 被删除
    PASS,       // 审批通过
    EXCEPTION   // 流程异常
}

3.4 处理动作 (HandlerAction) ​

java
public enum HandlerAction {
    startup,     // 发起流程
    agree,       // 同意
    reject,      // 拒绝
    forward,     // 转交
    complete,    // 完成
    fallback,    // 回退
    delegate,    // 委派
    terminate,   // 终止
    cancel,      // 取消
    revoke,      // 撤销
    withdraw,    // 撤销之前的操作
    beforeAdd,   // 前加签
    afterAdd,    // 后加签
    comment,     // 评论
    revise,      // 修改已结束流程
    candidate,   // 认领
    cc,          // 抄送
    pass,        // 自动通过
    warning      // 警告
}

4. 快速开始 ​

4.1 发起流程 ​

步骤 1: 获取可发起的流程列表 ​

http
GET /wflow/model/group/items/byUser

响应示例:

json
{
  "code": 200,
  "data": [
    {
      "id": 1,
      "name": "请假审批",
      "code": "leave_process",
      "icon": "vacation",
      "status": "active"
    }
  ]
}

步骤 2: 获取流程发起表单 ​

http
GET /wflow/startup/model/{code}/{version}

响应示例:

json
{
  "code": 200,
  "data": {
    "code": "leave_process",
    "procName": "请假审批",
    "formJson": {...},
    "formFields": [...],
    "process": {...},
    "setting": {...}
  }
}

步骤 3: 预测流程路径 (可选) ​

http
POST /wflow/startup/forecast
Content-Type: application/json

{
  "code": "leave_process",
  "version": 1,
  "formData": {
    "days": 5,
    "type": "annual"
  }
}

步骤 4: 发起流程 ​

http
POST /wflow/inst/startup
Content-Type: application/json

{
  "defineId": "leave_process_v1",
  "formData": {
    "reason": "年假",
    "days": 5,
    "startDate": "2025-01-08",
    "endDate": "2025-01-12"
  },
  "variables": {},
  "businessKey": "LEAVE-2025-001"
}

响应:

json
{
  "code": 200,
  "data": "inst_12345678"
}

4.2 处理待办任务 ​

步骤 1: 查询待办任务 ​

http
GET /wflow/task/todo?pageNo=1&pageSize=10

响应示例:

json
{
  "code": 200,
  "data": {
    "records": [
      {
        "instId": "inst_12345678",
        "taskId": "task_87654321",
        "title": "张三的请假申请",
        "nodeName": "部门经理审批",
        "initiator": {
          "userId": "user_001",
          "userName": "张三"
        },
        "fieldData": [...]
      }
    ],
    "total": 1
  }
}

步骤 2: 处理任务 ​

http
POST /wflow/task/handler
Content-Type: application/json

{
  "taskId": "task_87654321",
  "instId": "inst_12345678",
  "action": "agree",
  "formData": {
    "approverRemark": "同意请假"
  },
  "comment": {
    "text": "已审批,注意工作交接"
  }
}

4.3 查询流程状态 ​

http
GET /wflow/inst/detail?instId=inst_12345678

响应示例:

json
{
  "code": 200,
  "data": {
    "instId": "inst_12345678",
    "title": "张三的请假申请",
    "status": "RUNNING",
    "currentNodeName": "人事审批",
    "todoUsers": ["李四"],
    "fieldData": [...],
    "createTime": "2025-01-08 10:00:00"
  }
}

5. 流程模型设计 ​

5.1 流程节点结构 ​

流程由节点 (ProcNode) 组成,每个节点包含:

json
{
  "id": "node_001",
  "type": "Approval",
  "name": "部门经理审批",
  "props": {
    "assignedType": "role",
    "roleIds": [1],
    "multiInstance": "sequential",
    "passRate": 100
  },
  "childId": "node_002",
  "approveFormPerms": [
    {"key": "reason", "perm": "SHOW"},
    {"key": "days", "perm": "EDIT"}
  ]
}

5.2 完整流程定义示例 ​

json
{
  "id": "root",
  "type": "Start",
  "name": "发起申请",
  "props": {
    "formPerms": [
      {"key": "reason", "perm": "EDIT"},
      {"key": "days", "perm": "EDIT"}
    ]
  },
  "childId": "approve_1",
  "children": {
    "approve_1": {
      "id": "approve_1",
      "type": "Approval",
      "name": "部门经理审批",
      "props": {
        "assignedType": "deptLeader",
        "leaderLevel": 1
      },
      "childId": "gateway_1"
    },
    "gateway_1": {
      "id": "gateway_1",
      "type": "Exclusive",
      "name": "条件分支",
      "props": {},
      "branch": [
        {
          "id": "branch_1",
          "name": "请假天数>3天",
          "props": {
            "conditions": [
              {"field": "days", "operator": ">", "value": 3}
            ]
          },
          "childId": "approve_2"
        },
        {
          "id": "branch_2",
          "name": "默认",
          "props": {"default": true},
          "childId": "end"
        }
      ]
    },
    "approve_2": {
      "id": "approve_2",
      "type": "Approval",
      "name": "HR审批",
      "props": {
        "assignedType": "role",
        "roleIds": [2]
      },
      "childId": "end"
    }
  }
}

5.3 保存流程模型 ​

http
POST /wflow/model/save
Content-Type: application/json

{
  "code": "leave_process",
  "procName": "请假审批流程",
  "groupId": 1,
  "formType": 0,
  "formJson": {...},
  "formFields": [...],
  "process": {...},
  "events": {
    "onStart": {...},
    "onEnd": {...}
  },
  "setting": {
    "revokeEnable": true,
    "revokeTimeout": 120
  }
}

5.4 部署发布流程 ​

http
POST /wflow/model/deploy
Content-Type: application/json

{
  "code": "leave_process"
}

6. 表单设计 ​

6.1 表单类型 ​

类型值说明
拖拽表单0使用 formJson 定义,低代码表单设计
代码表单1使用 formCode 定义,Vue 单文件组件
引用表单2使用 formRef 引用外部表单

6.2 表单字段定义 ​

json
{
  "formFields": [
    {
      "id": "field_001",
      "key": "reason",
      "name": "请假原因",
      "type": "textarea",
      "required": true,
      "valueType": "String"
    },
    {
      "id": "field_002",
      "key": "days",
      "name": "请假天数",
      "type": "number",
      "required": true,
      "valueType": "Number"
    },
    {
      "id": "field_003",
      "key": "leaveType",
      "name": "请假类型",
      "type": "select",
      "required": true,
      "valueType": "Select",
      "options": [
        {"label": "年假", "value": "annual"},
        {"label": "病假", "value": "sick"},
        {"label": "事假", "value": "personal"}
      ]
    }
  ]
}

6.3 字段权限控制 ​

每个审批节点可以配置字段权限:

json
{
  "approveFormPerms": [
    {"key": "reason", "perm": "SHOW"},    // 只读
    {"key": "days", "perm": "SHOW"},      // 只读
    {"key": "approverRemark", "perm": "EDIT"}  // 可编辑
  ]
}
权限说明
SHOW显示,只读
EDIT显示,可编辑
HIDE隐藏

6.4 表单组件管理 ​

查询组件列表 ​

http
GET /wflow/form/component/list?pageNo=1&pageSize=10

保存表单组件 ​

http
POST /wflow/form/component
Content-Type: application/json

{
  "name": "自定义日期选择器",
  "type": "datePicker",
  "renderCode": "<template>...</template><script>...</script>",
  "version": "1.0.0"
}

发布组件 ​

http
PUT /wflow/form/component/publish/{formCpId}

7. 节点类型详解 ​

7.1 节点类型一览 ​

类型英文名说明
发起节点Start流程起点,配置发起人表单权限
审批节点Approval人工审批,支持会签、或签
任务节点Task人工处理任务
条件网关Exclusive排他分支,满足条件走一个分支
并行网关Parallel并行分支,同时执行多个分支
包容网关Inclusive包容分支,满足条件的都执行
抄送节点Cc抄送通知
等待节点Waiting等待外部信号
子流程Subproc嵌入子流程
路由节点Router自定义路由逻辑
触发器Trigger触发外部事件
代理节点AgentAI 代理处理

7.2 审批节点 (Approval) ​

json
{
  "type": "Approval",
  "name": "部门经理审批",
  "props": {
    "assignedType": "deptLeader",
    "leaderLevel": 1,
    "multiInstance": "sequential",
    "passRate": 100,
    "timeout": {
      "enable": true,
      "value": 24,
      "unit": "hour",
      "action": "pass"
    },
    "rejectTo": "previous",
    "allowTransfer": true,
    "allowDelegate": true
  }
}

审批人类型 (assignedType) ​

类型说明配置
user指定用户userIds: [1, 2]
role指定角色roleIds: [1]
dept指定部门deptIds: [1]
deptLeader部门负责人leaderLevel: 1
initiatorDept发起人部门负责人leaderLevel: 1
selfSelect发起人自选selectRange: {...}
formUser表单字段指定formUserField: "approver"
expression表达式计算expression: "${...}"

多实例类型 (multiInstance) ​

类型说明
sequential依次审批(顺序会签)
parallel同时审批(并行会签)
single单人审批(或签)

7.3 条件网关 (Exclusive) ​

json
{
  "type": "Exclusive",
  "name": "金额判断",
  "branch": [
    {
      "id": "branch_1",
      "name": "金额>10000",
      "props": {
        "conditions": [
          {
            "field": "amount",
            "operator": ">",
            "value": 10000
          }
        ],
        "groupOp": "AND"
      },
      "childId": "approve_finance"
    },
    {
      "id": "branch_2",
      "name": "默认分支",
      "props": {
        "default": true
      },
      "childId": "approve_manager"
    }
  ]
}

条件运算符 ​

运算符说明
==等于
!=不等于
>大于
>=大于等于
<小于
<=小于等于
contains包含
notContains不包含
startsWith以...开头
endsWith以...结尾
empty为空
notEmpty不为空

7.4 并行网关 (Parallel) ​

json
{
  "type": "Parallel",
  "name": "并行审批",
  "branch": [
    {
      "id": "branch_1",
      "name": "财务审批",
      "childId": "approve_finance"
    },
    {
      "id": "branch_2",
      "name": "法务审批",
      "childId": "approve_legal"
    }
  ]
}

7.5 抄送节点 (Cc) ​

json
{
  "type": "Cc",
  "name": "抄送相关人员",
  "props": {
    "assignedType": "user",
    "userIds": [1, 2, 3],
    "notifyType": ["email", "system"]
  }
}

8. 审批人配置 ​

8.1 指定用户 ​

json
{
  "assignedType": "user",
  "userIds": [1, 2, 3]
}

8.2 指定角色 ​

json
{
  "assignedType": "role",
  "roleIds": [1, 2]
}

8.3 部门负责人 ​

json
{
  "assignedType": "deptLeader",
  "leaderLevel": 1,        // 1=直接上级, 2=上上级
  "deptSource": "initiator" // initiator=发起人部门, form=表单指定
}

8.4 发起人自选 ​

json
{
  "assignedType": "selfSelect",
  "selectRange": {
    "type": "all",          // all=全部, dept=指定部门, role=指定角色
    "deptIds": [],
    "roleIds": []
  },
  "selectMode": "single"    // single=单选, multiple=多选
}

8.5 表单字段指定 ​

json
{
  "assignedType": "formUser",
  "formUserField": "nextApprover"  // 表单中的用户选择字段
}

8.6 表达式计算 ​

json
{
  "assignedType": "expression",
  "expression": "${formData.amount > 10000 ? [1, 2] : [3]}"
}

9. 条件表达式 ​

9.1 表达式语法 ​

Wflow 使用 SpEL (Spring Expression Language) 作为表达式引擎。

访问表单数据 ​

${formData.fieldName}

访问流程变量 ​

${variables.varName}

访问发起人信息 ​

${initiator.userId}
${initiator.deptId}
${initiator.roleIds}

9.2 常用表达式示例 ​

金额判断 ​

${formData.amount > 10000}

多条件组合 ​

${formData.amount > 5000 && formData.type == 'urgent'}

包含判断 ​

${formData.deptIds.contains(1)}

空值判断 ​

${formData.remark != null && formData.remark != ''}

9.3 表达式校验 ​

http
GET /wflow/model/el/validate?el=${formData.amount > 1000}

批量校验:

http
POST /wflow/model/el/validate/list
Content-Type: application/json

{
  "expressions": [
    "${formData.amount > 1000}",
    "${initiator.deptId == 1}"
  ]
}

10. 任务处理 ​

10.1 查询待办任务 ​

http
GET /wflow/task/todo?pageNo=1&pageSize=10&code=leave_process

参数说明:

参数说明
pageNo页码
pageSize每页数量
code流程编码(可选)
keyword关键词搜索(可选)

10.2 查询已办任务 ​

http
GET /wflow/task/ido?pageNo=1&pageSize=10

10.3 认领任务 ​

候选人模式下,需要先认领任务:

http
GET /wflow/task/claim/{taskId}

10.4 处理任务 ​

同意 ​

http
POST /wflow/task/handler
Content-Type: application/json

{
  "taskId": "task_001",
  "instId": "inst_001",
  "action": "agree",
  "formData": {
    "approverRemark": "同意"
  },
  "comment": {
    "text": "审批通过"
  }
}

拒绝 ​

http
POST /wflow/task/handler
Content-Type: application/json

{
  "taskId": "task_001",
  "instId": "inst_001",
  "action": "reject",
  "comment": {
    "text": "材料不全,请补充"
  }
}

转交 ​

http
POST /wflow/task/handler
Content-Type: application/json

{
  "taskId": "task_001",
  "instId": "inst_001",
  "action": "forward",
  "targetUsers": ["user_002"],
  "comment": {
    "text": "转交给李四处理"
  }
}

回退 ​

http
POST /wflow/task/handler
Content-Type: application/json

{
  "taskId": "task_001",
  "instId": "inst_001",
  "action": "fallback",
  "targetNodeId": "node_001",
  "comment": {
    "text": "退回修改"
  }
}

加签 ​

http
POST /wflow/task/handler
Content-Type: application/json

{
  "taskId": "task_001",
  "instId": "inst_001",
  "action": "beforeAdd",  // beforeAdd=前加签, afterAdd=后加签
  "targetUsers": ["user_003"],
  "comment": {
    "text": "加签给王五审批"
  }
}

10.5 查询可回退节点 ​

http
GET /wflow/task/fallback/nodes?taskId={taskId}

10.6 催办 ​

http
POST /wflow/task/urging
Content-Type: application/json

{
  "instId": "inst_001",
  "message": "请尽快处理"
}

11. 流程监听器 ​

11.1 监听器类型 ​

类型说明
FlowEventListener全局事件监听器
UserTaskListener用户任务监听器
业务监听器特定流程的业务处理

11.2 全局事件监听器 ​

java
@Component
public class FlowEventListener implements FlowableEventListener {

    @Override
    public void onEvent(FlowableEvent event) {
        switch (event.getType()) {
            case TASK_CREATED:
                // 任务创建时处理
                break;
            case TASK_COMPLETED:
                // 任务完成时处理
                break;
            case PROCESS_COMPLETED:
                // 流程完成时处理
                break;
        }
    }
}

11.3 自定义业务监听器 ​

java
@Component
public class LeaveProcessListener implements ProcessInstanceResultEventListener {

    @Override
    public String getProcessCode() {
        return "leave_process";
    }

    @Override
    public void onProcessCompleted(String instId, InstanceStatus status,
                                   Map<String, Object> formData) {
        if (status == InstanceStatus.PASS) {
            // 请假审批通过,更新考勤系统
            updateAttendance(formData);
        }
    }
}

11.4 节点事件配置 ​

在流程模型中配置节点事件:

json
{
  "type": "Approval",
  "name": "审批节点",
  "props": {
    "events": {
      "onEnter": {
        "type": "http",
        "url": "http://api/notify",
        "method": "POST"
      },
      "onComplete": {
        "type": "expression",
        "expression": "${myService.doSomething(instId)}"
      }
    }
  }
}

12. 接口参考 ​

12.1 流程模型管理 ​

方法路径说明
GET/model/group查询所有流程分组
POST/model/group创建分组
DELETE/model/group删除分组
GET/model/group/items查询分组及模型
GET/model/group/items/byUser获取用户可发起的流程
POST/model/save保存流程模型
POST/model/deploy部署发布模型
GET/model获取已激活模型
GET/model/ver获取模型指定版本
PUT/model/enable启用/停用模型
DELETE/model/{code}删除模型

12.2 流程实例管理 ​

方法路径说明
POST/inst/startup发起流程
GET/inst/list查询流程实例列表
GET/inst/mySubmit/list查询我发起的流程
GET/inst/detail查询实例详情
DELETE/inst/{instId}删除实例
GET/inst/forecast/{instId}查询流程预测
GET/inst/records/{instId}查询流程执行记录
GET/inst/process/{instId}查询流程图
GET/inst/discuss查询讨论记录
POST/inst/discuss/{instId}发送讨论消息

12.3 任务管理 ​

方法路径说明
GET/task/todo查询待办任务
GET/task/ido查询已办任务
GET/task/claim/{taskId}认领任务
POST/task/handler处理任务
GET/task/fallback/nodes查询可回退节点
POST/task/urging催办任务
GET/task/candidate/{taskId}查询任务候选人

12.4 表单管理 ​

方法路径说明
GET/form/component/list查询表单组件列表
GET/form/component/{id}获取组件详情
POST/form/component保存表单组件
PUT/form/component/publish/{id}发布组件
PUT/form/component/disable/{id}禁用组件

12.5 组织架构 ​

方法路径说明
GET/org/tree查询组织架构树
GET/org/search搜索组织信息
GET/org/roles查询系统角色
GET/org/user/detail/{userId}查询用户详情

13. 最佳实践 ​

13.1 流程设计原则 ​

  1. 保持简单:避免过于复杂的流程,必要时拆分为子流程
  2. 使用条件网关:利用条件网关实现灵活路由,而非硬编码
  3. 合理设置超时:为关键审批节点设置超时自动处理
  4. 预留扩展点:使用触发器节点预留业务扩展点

13.2 表单设计原则 ​

  1. 字段权限分离:不同审批节点配置不同的字段权限
  2. 必填字段验证:在发起节点设置必填验证
  3. 数据类型正确:确保字段的 valueType 与实际数据类型匹配

13.3 性能优化 ​

  1. 启用缓存:使用 LocalFlowCache 缓存流程定义
  2. 分页查询:大数据量查询使用分页
  3. 异步处理:耗时业务逻辑放在监听器中异步处理

13.4 错误处理 ​

  1. 异常监听:实现异常监听器捕获流程异常
  2. 日志记录:关键操作记录审计日志
  3. 通知机制:流程异常时通知相关人员

14. 常见问题 ​

14.1 流程发起失败 ​

问题:发起流程时提示 "流程定义不存在"

解决:

  1. 确认流程模型已部署 (POST /model/deploy)
  2. 确认流程状态为 active
  3. 检查 defineId 是否正确

14.2 审批人为空 ​

问题:流程到达某节点后没有审批人

解决:

  1. 检查审批人配置是否正确
  2. 如果使用角色/部门,确认用户已分配相应角色/部门
  3. 如果使用表达式,验证表达式返回值

14.3 条件分支不生效 ​

问题:条件网关总是走默认分支

解决:

  1. 使用表达式校验接口验证条件表达式
  2. 检查表单字段名称是否与条件中的字段名一致
  3. 检查字段值类型是否匹配(数字 vs 字符串)

14.4 回退后无法继续 ​

问题:流程回退后卡住

解决:

  1. 检查回退目标节点是否正确
  2. 确认回退后的审批人配置
  3. 查看流程执行记录定位问题

14.5 并行审批问题 ​

问题:并行分支有一条卡住导致整个流程无法继续

解决:

  1. 为并行分支的每个节点设置超时
  2. 考虑使用包容网关替代并行网关
  3. 增加人工干预机制

附录 ​

A. 数据库表结构 ​

表名说明
wflow_proc_model流程模型定义
wflow_proc_group流程分组
wflow_proc_inst流程实例
wflow_proc_inst_task实例任务
wflow_proc_inst_record执行记录
wflow_proc_inst_form实例表单数据
wflow_proc_inst_discuss讨论消息
wflow_proc_perm流程权限
wflow_form_cp表单组件
wflow_draft流程草稿

B. 配置参数 ​

yaml
wflow:
  bpmn:
    namespace: http://www.aroundix.com/bpmn
  admin-role-id: 1              # 管理员角色ID
  system-user-id: 1             # 系统用户ID
  revoke-timeout: 120           # 消息撤销时限(秒)

flowable:
  async-executor-activate: true # 启用异步执行器
  process:
    definition-cache-limit: 40960

C. 错误码 ​

错误码说明
1001流程模型不存在
1002流程实例不存在
1003任务不存在
1004无权限操作
1005表达式执行错误
1006审批人配置错误

本文档由 Aroundix SPG Team 维护,如有问题请联系技术支持。