UNPKG

yonbip-code-gen-mcp

Version:

YonBIP高级版代码生成MCP

201 lines (166 loc) 6.05 kB
# 低代码平台节点开发:参照过滤实现指南 > **适用场景**:本文档适用于在低代码平台中开发节点时,需要对参照字段进行过滤的场景,包括固定条件过滤和自定义条件过滤。 ## 1. 什么是“参照”? **参照**是指对其他实体信息的参考和对照。它通常用于在表单中选择某个实体(如部门、人员、交易类型等)。 ### 1.1 前端实现 - 通过配置 `queryCondition` 属性控制参照的界面显示。 - 通常在 `meta` 对象中设置字段的 `queryCondition`。 ### 1.2 后端实现 - 拼接查询参照数据的 SQL 语句。 - 可以接收前端传入的条件并拼接到 SQL 的 `WHERE` 子句中。 ## 2. 参照过滤的实现方式 ### 2.1 后端可接收的过滤条件 - **固定条件**:如 `pk_org`(组织)、`parentbilltype`(单据类型)等,具体取决于参照实现时支持的字段。 - **自定义条件**:通过实现 `IRefSqlBuilder` 接口,在后端拼接 SQL 条件。 ### 2.2 前端如何传递过滤条件 前端通过 `meta` 获取区域字段信息,并在字段的 `queryCondition` 属性中返回过滤条件对象。 #### 设置 `queryCondition` 的时机: 1. **`initMeta()` 方法中**:适用于静态条件。 2. **编辑后事件中**:适用于依赖其他字段值的动态条件。 3. **编辑前事件中**:适用于当前字段编辑前动态设置条件。 ## 3. 常用案例 ### 3.1 固定条件:交易类型按单据类型过滤 ```js // 交易类型参照过滤:根据单据类型编码过滤 meta.区域编码.items.forEach(item => { if (item.attrcode == "交易类型字段编码") { item.queryCondition = () => { return { parentbilltype: "单据类型编码" } } } }); ``` ### 3.2 表单区:按组织过滤部门参照(三种方式) #### 3.2.1 在 `initMeta()` 中实现 ```js // 表单区:按组织过滤部门参照 meta["form区域编码"].items.forEach(item => { if (item.attrcode == "pk_dept") { item.queryCondition = () => { let pk_org = this.props.form.getFormItemsValue("form区域编码", "pk_org").value; return { pk_org: pk_org } } } }); ``` #### 3.2.2 在编辑后事件中实现 ```js onAfterEditForm = (props, moduleId, key, value, oldValue) => { if (key == "pk_org") { let meta = this.props.meta.getMeta(); meta["form区域编码"].items.forEach(item => { if (item.attrcode == "pk_dept") { item.queryCondition = () => { let pk_org = value.refpk; return { pk_org: pk_org } } } }); this.props.meta.setMeta(meta); } } ``` #### 3.2.3 在编辑前事件中实现 ```js onBeforeEditForm = (props, moduleId, key, value, data) => { if (key == "pk_dept") { let meta = this.props.meta.getMeta(); meta["form表单区域编码"].items.forEach(item => { if (item.attrcode == "pk_dept") { item.queryCondition = () => { let pk_org = this.props.form.getFormItemsValue("form表单区域编码", "pk_org").value; return { pk_org: pk_org } } } }); this.props.meta.setMeta(meta); } return true; } ``` ### 3.3 查询区:按组织过滤人员参照 ```js // 查询区:按组织过滤人员参照 meta["查询区区域id"].items.forEach(item => { if (item.attrcode == "pk_psndoc") { item.queryCondition = () => { let pk_org = this.props.search.getSearchValByField("查询区区域id", "pk_org").value; return { pk_org: !!pk_org && pk_org.firstvalue } } } }); ``` ### 3.4 表格区:按组织过滤部门 ```js onBeforeEditFormlist = (props, moduleId, key, value, index, record, status) => { if (key == 'pk_dept') { let meta = this.props.meta.getMeta(); meta[moduleId].items.forEach(item => { if (item.attrcode == "pk_dept") { item.queryCondition = () => { return { pk_org: record.values.pk_org.value } } } }); this.props.meta.setMeta(meta); } return true; } ``` ### 3.5 自定义过滤(实现 `IRefSqlBuilder` 接口) #### 后端类示例 ```java package nccloud.web.lcdp.extenddev.extenddevmaster.action; import java.util.Map; import nccloud.framework.web.processor.IRefSqlBuilder; import nccloud.framework.web.processor.refgrid.RefQueryInfo; import nccloud.framework.web.ui.meta.RefMeta; import nccloud.pubitf.platform.db.SqlParameterCollection; public class TreeRefSqlBuilder implements IRefSqlBuilder { @Override public String getExtraSql(RefQueryInfo para, RefMeta meta) { Map<String, String> params = para.getQueryCondition(); String code = params.get("code"); if (code != null && !"".equals(code.trim())) { return "code = '" + code + "'"; } return null; } @Override public SqlParameterCollection getExtraSqlParameter(RefQueryInfo para, RefMeta meta) { return null; } @Override public String getOrderSql(RefQueryInfo para, RefMeta meta) { return null; } } ``` #### 前端配置 ```js // 表单区:自定义过滤部门参照 meta["extenddevMasterForm"].items.forEach(item => { if (item.attrcode == "pk_dept") { item.queryCondition = () => { let pk_org = this.props.form.getFormItemsValue("extenddevMasterForm", "pk_org").value; return { pk_org: pk_org, code: "22", TreeRefActionExt: "nccloud.web.lcdp.extenddev.extenddevmaster.action.TreeRefSqlBuilder" } } } }); ```