Skip to content

低代码应用管理实战教程

本教程以采购仓储模块为完整案例,带你走完「创建业务域 → 创建业务对象 → 设计表单与列表 → 创建应用入口 → 绑定审批流程 → 配置自动化动作 → 发布检查 → 全流程测试」的全链路。


一、低代码应用体系总览

Forge Admin 低代码平台采用「业务域 → 业务对象 → 应用入口」三级结构:

业务域(Business Suite)         例如:采购仓储
  └── 业务对象(Business Object)   例如:采购单、出库单、物料
        ├── 基本信息               对象名称、编码、类型、图标
        ├── 高级字段资产            定义业务字段和数据类型
        ├── 表单设计               拖拽式配置表单布局
        ├── 列表设计               配置搜索条件和表格列
        ├── 关系与级联             配置主子表、记录选择器
        ├── 业务处理               配置自动化动作(审批回调)
        ├── 自动化触发器           配置事件触发器
        ├── 业务流程配置           绑定审批流程模型
        ├── 数据权限               配置行级数据权限
        ├── 发布检查               上线前检查清单
        └── 高级配置               运行数据源、API 等

核心概念

概念说明采购仓储示例
业务域一组相关业务对象的集合采购仓储
业务对象一个独立的数据实体采购单、出库单、物料、供应商
应用入口用户访问的菜单/页面采购管理、仓储管理、物料管理
单据配置流程驱动的业务单据采购单审批、出库单审批
自动化动作审批回调自动执行的业务处理审批通过后入库、出库扣减库存
数量台账通用库存数量管理仓库物料库存余额、流水

应用中心首页

💡 进入应用中心:登录系统后,在左侧菜单点击「应用中心」即可进入低代码应用管理工作台。


二、创建业务域

业务域是组织业务对象的第一层容器,相当于一个业务模块的「命名空间」。

2.1 操作步骤

  1. 进入 应用中心,左侧面板展示所有业务域列表
  2. 点击左上角 「新建业务域」 按钮
  3. 在弹出的抽屉面板中填写:
字段说明采购仓储示例
业务域名称业务域的显示名称采购仓储
业务域编码大写字母+下划线,全局唯一PROCUREMENT_WAREHOUSE
业务域图标从图标库选择📦
创建管理端目录是否在系统菜单中创建对应目录勾选
父级菜单目录在系统菜单中的挂载位置顶级
业务说明描述业务域覆盖的业务范围采购仓储模块,涵盖物料、供应商、采购、出入库管理
  1. 点击 「确定」 保存

新建业务域

业务域编码规则

编码使用大写字母+下划线格式(如 PROCUREMENT_WAREHOUSE),创建后不可修改。编码会作为业务对象和运行配置的前缀隔离标识。

2.2 业务域层级

业务域支持父子层级结构。例如可以在「采购仓储」下创建子业务域:

  • 采购仓储
    • 采购管理(子域)
    • 仓储管理(子域)
    • 供应商管理(子域)

点击业务域右侧的 「⋯」 菜单,选择「新增子业务域」即可。


三、创建业务对象

业务对象是低代码应用的核心,定义了一个数据实体的字段、表单、列表和关系。

3.1 新建业务对象

  1. 在应用中心主区域,点击右上角 「新建」 → 选择 「新建业务对象」
  2. 弹出三步向导:

第一步:选择业务域

选项说明
选择已有业务域从下拉列表选择已创建的业务域
新建业务域如果对象不属于已有业务域,可在此快速创建

采购仓储示例:选择 PROCUREMENT_WAREHOUSE

向导第一步

第二步:选择创建方式

创建方式说明适用场景
数据库导入选择已有数据表,自动解析字段已有数据库表,快速创建对象
手动创建从零开始定义字段全新业务,尚无数据库表

选择「数据库导入」时,需要:

  1. 运行数据源:选择低代码运行数据源(从已配置的数据源列表中选择)
  2. 数据表:选择要导入的表(如 pw_purchase_order),系统自动解析表结构

采购仓储示例:采购单对象选择 pw_purchase_order 表导入

向导第二步

第三步:填写对象信息

字段说明采购单示例
对象名称对象的显示名称采购单
对象编码大写字母,业务域内唯一PW_PURCHASE_ORDER
对象类型标准 / 主子表 / 单据单据
图标从图标库选择📋
启用状态是否启用启用
业务说明描述对象的业务用途采购订单,记录采购明细和审批流程
  1. 点击 「确定」 完成创建

向导第三步

3.2 采购仓储模块的业务对象清单

采购仓储模块共创建了以下业务对象:

对象编码对象名称对象类型数据表
PW_MATERIAL物料标准pw_material
PW_SUPPLIER供应商主子表pw_supplier
PW_WAREHOUSE仓库标准pw_warehouse
PW_PURCHASE_ORDER采购单单据(主子表)pw_purchase_order
PW_OUTBOUND_ORDER出库单单据(主子表)pw_outbound_order
PW_TRANSFER_ORDER调拨单单据(主子表)pw_transfer_order
PW_SUPPLIER_MATERIAL供应商物料报价标准pw_supplier_material

四、设计业务对象

创建业务对象后,点击对象卡片上的 「设计」 按钮进入对象设计器。设计器左侧导航包含以下面板:

对象设计器

4.1 基本信息

进入设计器后默认展示「基本信息」面板,可修改对象名称、默认标题字段、启停状态等。

字段说明采购单示例
对象名称显示名称采购单
默认标题字段列表和详情中作为标题展示的字段purchaseNo
启用状态是否启用启用

4.2 高级字段资产

字段管理定义业务对象的数据字段。

  1. 点击左侧导航 「高级字段资产」 进入字段管理
  2. 数据库导入的对象会自动解析字段,你可以:
操作说明
编辑字段修改字段标签、数据类型、组件类型
设置必填开启「必填」开关
设置字典为状态类字段关联数据字典
配置校验设置最大长度、正则校验等
隐藏字段在表单中隐藏(如内部 ID 字段)

采购单关键字段配置示例:

字段编码字段标签组件类型配置说明
purchaseNo采购单号Input自动编号 PO-{yyyyMMdd}-{seq4}
projectName项目名称Input必填
warehouseId目标仓库RecordSelector关联仓库对象,选择后回填仓库名称
supplierId供应商RecordSelector关联供应商对象,选择后回填供应商名称和联系人
orderStatus单据状态Input默认值 DRAFT,流程驱动自动变更
purchaseAmountCent采购金额InputNumber只读,明细汇总

子表内部 ID 隐藏

子表中的 idxxxId 等内部主键/外键字段默认在表单中隐藏(formVisible: false),由记录选择器自动回填。如需显示,可在字段属性中设置 formVisible=true

4.3 表单设计

表单设计器提供拖拽式布局能力。

  1. 点击左侧导航 「表单设计」 进入表单设计器
  2. 左侧为字段列表,中间为画布,右侧为属性面板
  3. 从左侧拖拽字段到画布,支持:
    • 单列 / 双列 / 三列布局
    • 分组容器
    • 字段必填、只读、默认值设置
    • 字段联动规则配置

表单设计器

采购单表单布局建议:

  • 基本信息组:采购单号、项目名称、采购日期、采购人
  • 供应商信息组:供应商、联系人、联系电话
  • 仓库信息组:目标仓库
  • 金额信息组:采购金额(只读,自动汇总)
  • 其他信息组:附件、备注

RecordSelector 字段

采购仓储模块大量使用 RecordSelector 类型字段,实现对象间的选择关联:

主表字段选择器数据源回填字段
采购单目标仓库仓库对象warehouseId + warehouseName
采购单供应商供应商对象supplierId + supplierName + supplierContact + supplierPhone
出库单所属仓库仓库对象warehouseId + warehouseName
调拨单调出仓库仓库对象fromWarehouseId + fromWarehouseName
调拨单调入仓库仓库对象toWarehouseId + toWarehouseName

4.4 列表设计

列表设计器配置运行态列表页的搜索条件和表格列。

  1. 点击左侧导航 「列表设计」 进入列表设计
  2. 配置搜索条件:
配置项说明采购单示例
搜索字段列表上方的搜索栏字段采购单号、项目名称、单据状态
搜索方式精确匹配 / 模糊匹配单号精确、名称模糊
隐藏字段搜索条件中不显示但可传参warehouseId(供子表选择器使用)
  1. 配置表格列:
配置项说明采购单示例
显示列表格展示的字段单号、项目、仓库、供应商、金额、状态
列宽每列的最小宽度单号 170px、金额 130px
行动作行级操作按钮提交审批(成功后刷新列表)

列表设计

4.5 关系与级联

关系配置定义对象间的关联关系,是主子表和记录选择器的基础。

  1. 点击左侧导航 「关系与级联」 进入关系设计器
  2. 点击 「新增关系」,配置:
字段说明采购单→采购明细示例
关系名称关系的显示名称采购明细
关系编码关系标识pw_purchase_order_item
关系类型一对多 / 多对一 / 多对多一对多
目标对象关联的业务对象采购明细
关联字段外键字段purchase_id
保存方式merge / replacemerge(增量保存)
页签标题详情页中的页签名称采购明细

关系配置

采购仓储的关系配置清单:

主对象关系名称子对象保存方式
供应商供应商物料报价供应商物料报价merge
采购单采购明细采购明细merge
出库单出库明细出库明细merge
调拨单调拨明细调拨明细merge

merge 保存模式

merge 模式下,子表编辑时支持增量保存——新增行、修改行、删除行分别处理,无需整表替换。这对于大量明细行的场景更高效。

4.6 记录选择器

记录选择器让子表行可以从其他对象批量选择记录并自动映射字段。

在关系配置中,可以为子表关系配置记录选择器:

配置项说明采购明细选择器示例
选择器对象候选记录来源供应商物料报价
按钮文字选择器按钮的显示文字选择报价
显示字段候选列表展示的列供应商、物料编号、物料名称、报价、有效期
关键词搜索支持模糊搜索的字段materialCodematerialNamesupplierName
动态过滤条件按上下文字段过滤候选记录supplierId = ${formData.supplierId}
字段映射选中的记录字段自动填入子表materialId→materialIdmaterialName→materialName

采购仓储的选择器配置:

子表选择器数据源动态过滤条件
供应商物料报价物料无(全部可选)
采购明细供应商物料报价supplierId = ${formData.supplierId}
出库明细物料warehouseId = ${formData.warehouseId}
调拨明细物料fromWarehouseId = ${formData.fromWarehouseId}

记录选择器


五、创建应用入口

业务对象设计完成后,需要创建应用入口,让用户可以在应用中心或系统菜单中访问。

5.1 新建应用入口

  1. 在应用中心主区域,点击右上角 「新建」 → 选择 「新建应用入口」
  2. 弹出三步向导:

第一步:选择场景

场景说明适用
数据管理低代码运行页,基于业务对象的 CRUD✅ 采购仓储主要使用此场景
仪表盘打开系统已有页面用于统计概览
外部页面内嵌或新窗口打开外部链接集成第三方系统
移动入口H5 / 移动端业务移动端访问

入口向导-选择场景

第二步:填写信息

字段说明采购管理示例
入口名称显示名称采购管理
入口编码唯一标识PW_PURCHASE_MANAGE
所属业务域下拉选择采购仓储
关联业务单元关联业务对象采购单
图标从图标库选择🛒

第三步:运行配置(数据管理场景)

字段说明采购管理示例
入口模式RUNTIME / CODE / EXTERNALRUNTIME
运行打开方式列表页列表页
业务页面配置自动带出 configKeypw_purchase_order
  1. 点击 「确定」 保存

创建应用入口

5.2 采购仓储的应用入口清单

入口名称业务域关联对象场景入口模式
物料管理采购仓储物料数据管理RUNTIME
供应商管理采购仓储供应商数据管理RUNTIME
仓储管理采购仓储仓库数据管理RUNTIME
采购管理采购仓储采购单数据管理RUNTIME
出库管理采购仓储出库单数据管理RUNTIME
调拨管理采购仓储调拨单数据管理RUNTIME

RUNTIME 模式

RUNTIME 模式下,运行态页面通过 configKey 读取已发布的 ai_crud_config 配置渲染,无需编写任何前端代码。采购仓储所有入口均使用此模式,实现完全低代码。


六、绑定审批流程

对于需要审批的业务对象(如采购单、出库单、调拨单),需要配置单据流程。

6.1 业务流程配置面板

  1. 进入业务对象设计器,点击左侧导航 「业务流程配置」
  2. 在流程配置面板中完成以下设置:

选择流程模型

从已发布的 Flowable 流程模型中选择。采购仓储三个单据对象统一使用 leave_multi 流程模型(通用多级审批流程)。

配置项说明采购单示例
流程模型从已发布流程中选择leave_multi(采购仓储通用审批流程)
发起方式流程启动方式ACTION_ONLY(仅动作触发)
流程标题模板流程实例的标题采购单审批

发起方式说明

方式说明采购仓储使用
BUTTON_ONLY列表中点击「提交审批」按钮直接发起
TRIGGER_ONLY满足条件自动发起
BOTH手动 + 触发器
ACTION_ONLY由自动化动作的 START_FLOW 步骤发起

采购仓储使用 ACTION_ONLY 模式,因为提交审批时需要先执行业务逻辑(如出库单先锁定库存),再发起流程。这种方式允许在发起流程前/后编排多个业务步骤。

流程配置

业务字段绑定

将业务字段映射为流程变量,供流程节点中的条件分支和表达式使用:

采购单的流程变量映射:

业务字段流程变量说明
purchaseNodocumentNo采购单号
projectNameprojectName项目名称
createByapplicantId申请人ID
orderStatusdocumentStatus单据状态
purchaseAmountCentamountCent采购金额(分)

未手动配置的字段,系统会自动按字段编码同名传递。

回调动作配置

流程审批结果通过回调触发对应的自动化动作:

对象审批通过回调审批驳回回调
采购单inbound_purchase_stock(采购入库)
出库单commit_outbound_stock(出库扣减)release_outbound_stock(释放锁定)
调拨单transfer_stock(调拨转移)

6.2 单据配置

在「业务流程配置」面板中还可以配置单据驱动:

配置项说明采购单示例
启用单据开启单据流程驱动
单据名称单据的显示名称采购单据
单据编号规则自动编号格式PO-{yyyyMMdd}-{seq4}
状态字段驱动流程的状态字段orderStatus
发起人字段记录创建人createBy
负责人字段记录负责人createBy
默认流程 Key绑定的流程模型 Keyleave_multi

状态映射配置:

数据库状态值流程状态值说明
DRAFTDRAFT草稿
SUBMITTEDSUBMITTED已提交
IN_PROCESSIN_PROCESS审批中
APPROVEDAPPROVED已通过
REJECTEDREJECTED已驳回
CANCELEDCANCELED已取消
CLOSEDCLOSED已关闭

单据配置

6.3 采购仓储的流程绑定清单

对象流程 Key发起方式审批通过审批驳回
采购单leave_multiACTION_ONLY执行入库
出库单leave_multiACTION_ONLY执行扣减释放锁定
调拨单leave_multiACTION_ONLY执行转移

流程模型前置条件

绑定前需在「流程管理」中创建并发布对应的 Flowable 流程模型。流程模型定义审批节点、分支条件和审批人。leave_multi 是系统内置的通用多级审批流程,可直接使用。


七、配置自动化动作

自动化动作是审批回调后自动执行的业务处理,是业务闭环的关键。

7.1 动作设计器

进入业务对象设计器 → 「业务处理」 面板。

这里配置的是审批回调后要执行的业务动作。动作由「步骤序列」组成,每个步骤可以是:

步骤类型说明示例
START_FLOW发起审批流程提交采购审批
FOREACH遍历子表逐行处理逐条明细入库
DOMAIN_ACTION领域动作(数量台账等)入库、扣减、锁定、释放、转移
UPDATE_STATUS更新单据状态草稿 → 审批中

7.2 采购入库动作(FOREACH + QUANTITY/INBOUND)

采购单审批通过后,逐行遍历采购明细,执行入库动作:

动作配置:

配置项
动作编码inbound_purchase_stock
动作名称采购入库过账
按钮位置详情(DETAIL)
动作类型COMMAND
需要确认
成功消息"采购入库已写入数量台账"
失败回滚rollbackOnFailure = true

执行步骤:

步骤 1: FOREACH(逐行处理明细)
  ├─ collectionPath: record.children.pw_purchase_order_item
  ├─ itemAlias: item
  ├─ indexAlias: index
  └─ 子步骤:
      └─ DOMAIN_ACTION(明细入库)
          ├─ actionType: QUANTITY
          ├─ operationType: INBOUND
          └─ params:
              ├─ accountCode:    ${record.main.warehouseId}    (仓库账户)
              ├─ itemCode:       ${item.materialId}            (物料编码)
              ├─ dimensionKey:   ""                            (维度,空表示无维度)
              ├─ quantity:       ${item.quantity}              (入库数量)
              ├─ sourceDetailId: ${item.id}                    (来源明细ID)
              └─ remark:         采购审批通过入库

自动化动作配置

7.3 出库三阶段库存流转

出库单的库存流转最复杂,涉及三个阶段:

阶段时机操作说明
锁定提交审批时QUANTITY/LOCK锁定库存,防止超卖
扣减审批通过时QUANTITY/COMMIT实际扣减库存,释放对应锁定
释放审批驳回时QUANTITY/RELEASE释放已锁定库存

提交审批动作(锁定 + 发起流程):

步骤 1: FOREACH(逐行锁定)
  ├─ collectionPath: record.children.pw_outbound_order_item
  └─ 子步骤: DOMAIN_ACTION / QUANTITY / LOCK
      ├─ accountCode:    ${record.main.warehouseId}
      ├─ itemCode:       ${item.materialId}
      ├─ quantity:       ${item.outboundQuantity}
      ├─ lockCode:       ${item.id}           (锁定编码,幂等键)
      ├─ sourceDetailId: ${item.id}
      └─ remark:         出库提交审批锁定

步骤 2: START_FLOW(发起审批)
  ├─ flowModelKey: leave_multi
  ├─ title: 出库单审批
  └─ staticValues: { approvalScene: "OUTBOUND" }

审批通过回调(扣减):

FOREACH(逐行扣减)
  └─ DOMAIN_ACTION / QUANTITY / COMMIT
      ├─ accountCode:    ${record.main.warehouseId}
      ├─ itemCode:       ${item.materialId}
      ├─ quantity:       ${item.outboundQuantity}
      ├─ lockCode:       ${item.id}           (释放对应锁定)
      ├─ sourceDetailId: ${item.id}
      └─ remark:         出库审批通过扣减

审批驳回回调(释放):

FOREACH(逐行释放)
  └─ DOMAIN_ACTION / QUANTITY / RELEASE
      ├─ accountCode:    ${record.main.warehouseId}
      ├─ itemCode:       ${item.materialId}
      ├─ lockCode:       ${item.id}
      └─ remark:         出库审批驳回释放锁定

注意:释放动作的 rollbackOnFailure = false,确保部分释放不会因个别失败而全部回滚。

7.4 调拨转移动作(FOREACH + QUANTITY/TRANSFER)

调拨单审批通过后,从调出仓库转移到调入仓库:

FOREACH(逐行转移)
  └─ DOMAIN_ACTION / QUANTITY / TRANSFER
      ├─ accountCode:        ${record.main.fromWarehouseId}  (调出仓库)
      ├─ itemCode:           ${item.materialId}
      ├─ targetAccountCode:  ${record.main.toWarehouseId}    (调入仓库)
      ├─ targetItemCode:     ${item.materialId}
      ├─ quantity:           ${item.transferQuantity}
      ├─ sourceDetailId:     ${item.id}
      └─ remark:             调拨审批通过转移

7.5 动作配置要点

幂等键

每个数量动作的幂等键包含「对象编码 + 记录ID + 明细ID + 动作编码」,确保审批回调重复执行不会导致重复入库或重复扣减。

FOREACH 事务控制

FOREACH 步骤默认在同一事务中执行。rollbackOnFailure=true 时任一子步骤失败会回滚整个 FOREACH。释放锁定动作设置 rollbackOnFailure=false,确保部分释放不会因个别失败而全部回滚。

7.6 采购仓储动作清单

对象动作编码动作名称位置步骤概要
采购单submit_purchase_approval提交审批行(ROW)START_FLOW
采购单inbound_purchase_stock采购入库过账详情(DETAIL)FOREACH → QUANTITY/INBOUND
出库单submit_outbound_approval提交审批并锁定库存行(ROW)FOREACH → QUANTITY/LOCK → START_FLOW
出库单commit_outbound_stock出库扣减过账详情(DETAIL)FOREACH → QUANTITY/COMMIT
出库单release_outbound_stock释放出库锁定详情(DETAIL)FOREACH → QUANTITY/RELEASE
调拨单submit_transfer_approval提交审批行(ROW)START_FLOW
调拨单transfer_stock调拨转移过账详情(DETAIL)FOREACH → QUANTITY/TRANSFER

八、详情页配置

详情页展示业务对象的完整信息,包括主信息、关联数据页签和数量台账区块。

8.1 主信息展示

详情页的主信息自动复用表单设计的布局,以只读模式展示,无需重复配置。

8.2 关联数据页签

在「关系与级联」中配置的关系会自动出现在详情页中,以页签形式展示。此外,可以在「详情设置」中配置额外的页签区块:

仓库详情页的页签配置:

  • 库存余额(数量台账区块 - quantity-balance
  • 数量流水(数量台账区块 - quantity-ledger
  • 数量锁定(数量台账区块 - quantity-lock
  • 采购记录(API 关联表 - table
  • 出库记录(API 关联表 - table
  • 调出记录(API 关联表 - table
  • 调入记录(API 关联表 - table

8.3 数量台账区块

数量台账区块是详情页中的特殊组件,直接读取通用数量台账服务:

区块类型说明数据源参数
quantity-balance库存余额数量台账服务accountCode=${row.id}
quantity-ledger数量流水数量台账服务accountCode=${row.id}
quantity-lock数量锁定数量台账服务accountCode=${row.id}

物料详情页也可以配置数量区块,按 itemCode 过滤:

  • 库存信息(quantity-balance,参数 itemCode=${row.id}
  • 近 3 次出入库(quantity-ledger,参数 itemCode=${row.id},pageSize=3)

8.4 API 关联表区块

除了数量台账,详情页还支持配置 API 关联表区块,通过调用其他对象的列表 API 展示关联数据:

配置项说明仓库→采购记录示例
区块类型table
标题页签名称采购记录
数据源类型api
API接口地址get@/ai/crud/pw_purchase_order/page
参数映射接口参数与当前记录的字段映射warehouseId=${row.id}
数据字段返回数据的列表字段名records
列配置表格列定义采购单号、供应商、金额、状态

8.5 描述信息区块

详情页还支持 descriptions 类型区块,以描述列表形式展示字段信息:

采购单详情页的供应商信息区块:

  • 区块类型:descriptions
  • 标题:供应商信息
  • 列数:3
  • 字段:供应商名称、联系人、联系电话

详情页配置


九、发布检查与发布

9.1 发布检查

发布前需通过发布检查。进入设计器 → 「发布检查」 面板:

检查项分为以下几个维度:

检查维度说明常见问题
字段检查字段定义是否完整必填字段未设置、字段类型不匹配
页面检查表单和列表配置是否完整表单未配置字段、列表缺少搜索条件
关系检查关系配置是否完整主子表关系缺少外键字段
数据表检查数据表结构是否同步新增字段未同步到数据库
运行配置检查CRUD 配置是否完整API 配置缺失、权限标识未设置

每个检查项按严重程度分级:

级别说明
ERROR阻断项,必须修复才能发布
WARN警告项,建议修复但不阻断发布
INFO提示项,供参考

发布检查

9.2 发布操作

  1. 发布检查无阻断项后,点击右上角 「发布」 按钮
  2. 如有「同步数据表结构」选项,勾选后系统会自动将新增字段同步到数据库
  3. 发布成功后,对象状态变为「已发布」

发布后生效

发布后,运行态页面会立即使用最新配置。用户刷新页面即可看到变更。

9.3 单据闭环配置检查

设计器左侧导航底部有「单据闭环配置」检查清单,直观展示闭环状态:

步骤说明检查条件
单据流程是否已配置流程documentEnabled + statusField + mainFlow.configured
发起方式是否配置发起startMode 不为空
自动化触发器触发器是否配置按发起方式判断是否需要
发布检查是否通过发布检查publishable = true
试运行是否可打开运行canOpen = true

每个步骤显示 ✅(完成)、⚠️(待处理)或 ⬜(未开始)状态,点击可跳转到对应面板。

闭环检查


十、全流程测试

10.1 测试环境准备

  1. 确保后端服务(端口 8580)和前端(端口 3000)已启动
  2. 确保数据库已执行 Flyway 迁移(含采购仓储 seed 数据)
  3. 确保 leave_multi 流程模型已在流程管理中发布

10.2 基础数据准备

登录系统后,先准备基础数据:

步骤操作说明
1进入物料管理新增 3-5 个物料(如:钢筋、水泥、砂石)
2进入供应商管理新增 2 个供应商,并在子表「供应商报价」中为每个供应商添加物料报价
3进入仓储管理新增 2 个仓库(如:中心仓、项目现场仓)

基础数据准备

10.3 采购流程测试

步骤操作预期结果
1进入采购管理,点击「新增」打开采购单表单
2填写项目名称、采购日期,通过 RecordSelector 选择仓库和供应商选择后自动回填仓库名称、供应商名称和联系人
3在采购明细子表中点击「选择报价」弹出记录选择器,仅显示当前供应商的物料报价
4选择 2-3 条报价,确认明细行自动填入物料编号、名称、规格、单位、成本单价、成交单价
5填写采购数量,保存采购单创建成功,单号自动生成(如 PO-20260705-0001
6在列表中点击该采购单的「提交审批」弹出确认提示「确认提交采购审批?」
7确认提交单据状态变为「审批中」,流程实例创建
8进入流程管理,处理待办任务,点击「同意」审批通过
9回到采购管理,查看该采购单状态状态变为「已通过」
10进入仓储管理,打开仓库详情查看库存余额页签,应显示刚入库的物料和数量
11查看数量流水页签有一条入库流水,来源为采购单

采购流程测试

10.4 出库流程测试

步骤操作预期结果
1进入出库管理,点击「新增」打开出库单表单
2通过 RecordSelector 选择仓库(上一步入库的仓库)仓库选择正常
3在出库明细子表中点击「选择物料」弹出选择器,仅显示该仓库有库存的物料
4选择物料,填写出库数量明细行自动填入物料信息
5保存出库单创建成功,单号自动生成(如 OUT-20260705-0001
6点击「提交审批并锁定」弹出确认提示
7确认提交库存被锁定,单据状态变为「审批中」
8进入流程管理处理待办
8a点击「同意」审批通过,库存扣减,锁定释放
8b(可选)点击「驳回」审批驳回,锁定释放,库存恢复
9回到仓库详情,查看库存余额余额已扣减(或锁定已释放)
10查看数量流水流水记录显示入库、锁定、扣减/释放的完整链路
11查看数量锁定页签审批中时显示锁定记录,审批后锁定记录消失

出库流程测试

10.5 调拨流程测试

步骤操作预期结果
1进入调拨管理,点击「新增」打开调拨单表单
2通过 RecordSelector 分别选择调出仓库和调入仓库两个仓库不能相同
3在调拨明细子表中选择物料,填写调拨数量明细行显示当前库存
4保存并点击「提交审批」单据状态变为「审批中」
5流程审批通过
6查看调出仓库库存余额减少
7查看调入仓库库存余额增加
8查看调出仓库的数量流水有一条调出流水
9查看调入仓库的数量流水有一条调入流水

10.6 数量台账验证

进入仓储管理 → 打开仓库详情,逐项验证:

验证项检查内容
库存余额物料编号、名称、当前库存、锁定数量是否正确
数量流水入库、出库、调拨的流水记录是否完整,每条流水有来源单据标识
数量锁定提交审批后的锁定记录是否正确,审批完成后锁定是否释放
流水来源每条流水是否能追溯到来源单据(通过 sourceDetailId

进入物料管理 → 打开物料详情,还可以按物料维度查看:

验证项检查内容
库存信息该物料在各仓库的库存余额
供应商报价该物料各供应商的报价记录
近 3 次出入库最近的流水记录

数量台账验证


十一、常见问题

Q1: 应用入口创建后打开白屏?

  1. 检查业务对象是否已「发布」
  2. 检查 configKey 是否正确指向 ai_crud_config 记录
  3. 检查运行数据源是否正确配置
  4. 查看浏览器控制台是否有报错
  5. 检查后端日志是否有 CRUD 配置解析异常

Q2: 记录选择器弹出后没有数据?

  1. 检查选择器数据源对象是否有数据
  2. 检查动态过滤条件表达式是否正确(如 ${formData.supplierId}
  3. 检查当前用户是否有该对象的数据权限
  4. 检查关键词搜索字段配置是否支持多字段
  5. 检查选择器的 searchParams 中是否有隐式过滤条件导致结果为空

Q3: 提交审批后流程没有启动?

  1. 检查流程模型是否已发布(流程管理中状态应为「已发布」)
  2. 检查 flowModelKey 是否与流程模型的 Key 一致(采购仓储使用 leave_multi
  3. 检查单据配置的 statusField 和状态映射是否正确
  4. 查看后端日志是否有流程启动异常
  5. 检查 START_FLOW 步骤的 fieldMapping 是否正确传递了必填的流程变量

Q4: 审批通过后库存没有变化?

  1. 检查自动化动作的执行场景是否匹配(APPROVED 回调)
  2. 检查 FOREACHcollectionPath 是否正确指向子表关系编码(如 record.children.pw_purchase_order_item
  3. 检查 DOMAIN_ACTION 的参数表达式是否正确(如 ${item.materialId}${item.quantity}
  4. 查看后端日志中 BusinessActionExecutionService 的执行记录
  5. 检查幂等键是否因重复执行被跳过
  6. 检查 accountCodeitemCode 是否正确引用了仓库ID和物料ID

Q5: 出库提交后库存没有锁定?

  1. 检查「提交审批并锁定」动作的步骤序列是否正确(FOREACH → LOCK → START_FLOW)
  2. 检查 QUANTITY/LOCKlockCode 是否设置了唯一标识(${item.id}
  3. 检查仓库详情页的「数量锁定」页签是否有锁定记录
  4. 如果锁定失败,检查 rollbackOnFailure 是否为 true(锁定步骤失败应回滚整个提交)

Q6: 审批驳回后出库锁定没有释放?

  1. 检查流程绑定中的驳回回调动作是否配置(REJECTED → release_outbound_stock
  2. 检查 QUANTITY/RELEASE 动作的 lockCode 是否与锁定时的 lockCode 一致
  3. 检查释放动作的 rollbackOnFailure 是否为 false(部分释放失败不应回滚)
  4. 查看后端日志中释放动作的执行记录

附录:采购仓储数据库表一览

表名说明类型
pw_material物料主表
pw_supplier供应商主表
pw_supplier_material供应商物料报价主表
pw_warehouse仓库主表
pw_purchase_order采购单主表
pw_purchase_order_item采购明细子表(外键 purchase_id
pw_outbound_order出库单主表
pw_outbound_order_item出库明细子表(外键 outbound_id
pw_transfer_order调拨单主表
pw_transfer_order_item调拨明细子表(外键 transfer_id

附录:低代码配置数据表一览

表名说明
ai_lowcode_domain低代码业务域
ai_lowcode_model低代码数据模型
ai_business_suite业务域(设计器)
ai_business_object业务对象(设计器)
ai_business_object_relation业务对象关系
ai_business_app应用入口
ai_crud_configCRUD 运行配置
ai_business_document_config单据配置
ai_business_binding流程绑定
ai_business_action自动化动作
ai_business_quantity_balance数量台账余额
ai_business_quantity_ledger数量台账流水
ai_business_quantity_lock数量台账锁定