KingdeeTools Logo
KingdeeTools
返回列表
2026-05-30

金蝶苍穹:控制动态表单中“单据列表”控件的自动数据加载

在自定义动态表单中,单据列表控件默认会自动加载数据。本文介绍两种通过插件代码干预加载逻辑的方法,并对比其兼容性。

在开发金蝶苍穹的自定义动态表单时,如果添加了 单据列表 (BillList) 控件,你会发现它的数据默认会自动加载。官方目前并没有在配置界面提供直接控制“是否自动加载”开关。

为了实现“按需加载”或“延迟加载”,我们可以通过插件代码进行干预。以下是两种常用的实现方案:

方案一:设置“永不匹配”的过滤条件(推荐)

这是最稳妥的方案。通过在数据绑定前,为单据列表设置一个逻辑上永远不会成功的 QFilter,从而变相阻止数据的加载。

实现代码

@Override public void beforeBindData(EventObject e) { super.beforeBindData(e); // 获取单据列表控件,请替换为你的实际标识 BillList billList = getControl("xxxx_billlistap"); if (billList != null) { // 创建一个永远不成立的过滤条件,例如 ID 等于 -1 FilterParameter emptyFilter = new FilterParameter( new QFilter("id", QCP.equals, -1), "desc" ); billList.setQueryFilterParameter(emptyFilter); } }

方案二:使用 BeforeBindDataListener 监听器

通过为控件添加监听器并设置 setCancel(true) 来取消本次数据绑定动作。

实现代码

@Override public void beforeBindData(EventObject e) { super.beforeBindData(e); BillList billList = getControl("xxxx_billlistap"); if (billList != null) { billList.addBeforeBindDataListener(new BeforeBindDataListener() { @Override public void beforeBindData(BeforeBindDataEvent beforeBindDataEvent) { if (beforeBindDataEvent instanceof ListBeforeBindDataEvent) { // 取消数据绑定 ((ListBeforeBindDataEvent) beforeBindDataEvent).setCancel(true); } } }); } }

总结与建议

方案优点缺点
方案一 (QFilter)实现简单,全端兼容性好需要写一段过滤逻辑
方案二 (Listener)逻辑更直接(Cancel)在移动端可能存在失效或异常问题

开发建议: 如果你的单据涉及移动端应用,建议统一使用 方案一。通过设置一个无效的过滤条件,既能达到阻止初始加载的目的,又具备更好的平台兼容性。