在开发金蝶苍穹的自定义动态表单时,如果添加了 单据列表 (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) | 在移动端可能存在失效或异常问题 |
开发建议: 如果你的单据涉及移动端应用,建议统一使用 方案一。通过设置一个无效的过滤条件,既能达到阻止初始加载的目的,又具备更好的平台兼容性。
