外观
子表根据主表必填
约 1217 字大约 4 分钟
2026-08-18
原理说明
在 YonBIP 低代码开发中,根据主表字段值动态验证子表字段非空,其核心原理是通过前端交互规则或自定义脚本,监听主表字段值的变化,并基于此值对子表字段的"必填"属性进行动态控制。这属于条件性校验逻辑,通常在单据保存或提交时触发,以确保业务数据的完整性。
系统提供的"交互规则"功能允许配置基于条件的字段属性(如必填)动态变化,是实现此需求的标准方案。
方案一:配置交互规则(推荐)
步骤一:进入交互规则配置页面
- 在应用构建中,打开目标单据的页面建模
- 进入该单据的详情页设计器
- 在右侧面板中,找到并点击 【交互规则】 按钮,进入规则配置界面
步骤二:创建新的交互规则
- 点击 【新建规则】
- 在弹窗中设置规则名称(如"主表字段 A 为 X 时,子表字段 B 必填"),并选择【规则范围】
关键选择
由于要控制子表字段的必填性,规则范围应选择 【表单】。"表单"范围的条件区可以选择主表和子表字段,且动作区支持子表字段的必填规则。
步骤三:配置条件区(触发条件)
- 在条件区,点击 【添加条件】
- 【字段】:选择主表中用于判断的字段(例如"业务类型")
- 【操作符】:根据字段类型选择,例如"等于"、"包含"等
- 【值】:设置触发条件的具体值(例如常量"采购")
操作符右侧支持常量和字段,后续支持公式。
步骤四:配置动作区(执行操作)
- 在动作区,点击 【添加动作】,选择 【必填规则】
- 【组件】:选择需要被控制为必填的子表字段(例如"供应商")
- 【属性值】:设置为
true,表示当条件满足时,该子表字段变为必填

步骤五:保存并发布
- 完成规则配置后,点击保存
- 返回页面建模,保存并发布整个页面模板,使交互规则生效
方案二:使用前端脚本
如果交互规则的逻辑无法满足复杂条件(例如需要遍历子表所有行进行校验),可以通过编写前端脚本,在 viewModel 的 beforeSave 或 beforeSubmit 事件中实现自定义校验逻辑。
viewModel.on('beforeSave', function (args) {
const mainFieldValue = viewModel.get('主表字段编码').getValue() // 获取主表字段值
const gridModel = viewModel.getGridModel() // 获取子表模型
const rows = gridModel.getRows()
let isValid = true
if (mainFieldValue === '特定值') { // 你的判断条件
for (let i = 0; i < rows.length; i++) {
if (!rows[i]['子表字段编码']) { // 检查子表字段是否为空
isValid = false
gridModel.setCellState(i, '子表字段编码', 'error', '该字段不能为空!')
break
}
}
}
if (!isValid) {
return false // 阻止保存
}
})注意事项
- 规则冲突:同一个字段的同一个属性(如必填)不能出现在多个交互规则中,否则系统会提示不允许添加。
- 生效范围:确保交互规则的"规则范围"选择正确。控制子表字段必填,应使用【表单】范围,而不是子表范围。
- 发布生效:配置或修改交互规则后,必须保存并发布页面模板,否则规则在前端不会生效。
- 条件字段类型:配置条件时,注意不同字段类型(文本、选项、数值、日期)支持的操作符不同,需正确选择。
- 子表字段操作符:当条件区选择子表字段时,操作符会变为"全部等于"、"全部大于"等前缀,表示需要子表所有行都满足该条件,规则才会触发。请根据业务逻辑谨慎选择。
参考来源
- 交互规则
- 根据子表字段 A 判断最大行后,取当前行的 B 值赋给主表字段
- [低代码开发][业务流] 转换规则配置不生效问题解决方案
- [低代码开发][业务流] 业务流分单规则使用介绍
- 【页面建模】应用构建中如何控制某个字段是否可以复制
修改记录
| 版本 | 日期 | 修改人 | 修改内容 |
|---|---|---|---|
| 1.0 | 2026/08/18 | — | 初始版本:整理自官方知识库文档 |
更新日志
2026/8/18 19:24
查看所有更新日志
1500f-feat: 新增开发指南模块、修复mermaid显示与图标问题于