多选基础资料字段
# 1 功能介绍
多选基础资料字段,用来选择、录入基础资料数据,可以同时选择多个资料放在一个字段中。
# 2 控件对象
`kd.bos.form.field.MulBasedataEdit`
# 3 视觉展示
* 默认展示
![image.webp](/download/0100543dc8219d6946fd88d6fb0783bb9e71.webp)
* 模糊搜索
![duobasedate.webp](/download/01009cef5b9a067d406d97400a5088b919b8.webp)
# 4 属性说明
## 4.1 通用属性
>通用属性包含字段和控件的一些公有的属性,如宽高,帮助文本等等。请参考[通用属性](https://vip.kingdee.com/article/215559076720798976)
## 4.2 样式属性
>样式属性是每个控件在设计器右侧样式栏可以设置的属性,请参考[样式属性](https://vip.kingdee.com/article/252017936767406336)
## 4.3 业务属性
| 属性名 | 类型 | 默认值 | 说明 |
| --- | --- | --- | --- |
| 组织职能 | 弹框选择 | - | |
| 多行 | 复选框 | false | 开启多行属性后,多选基础资料可以换行显示 |
其他业务属性请参考[基础资料](https://vip.kingdee.com/knowledge/specialDetail/218022218066869248?category=218035461581541632&id=221670300038589696)
# 5 多选基础资料接口介绍
## 5.1 控件编程模型
### 5.1.1 控件编程模型定义
多选基础资料字段,控件编程模型为MulBasedataEdit,派生自基础资料控件编程模型BasedataEdit:
```java
package kd.bos.form.field;
public class MulBasedataEdit extends BasedataEdit {
```
### 5.1.2 控件方法清单
MulBaseDataEdit,重写、增加如下方法:
| 方法 | 说明 |
| --- | --- |
| click | 用户点击前端控件按钮时,调用此方法:
构建列表过滤条件,触发beforeF7Select事件,打开F7列表 | | getBindingValue | 刷新前端字段值时,调用此方法:
把多选基础资料值打包,生成用于前端控件显示的值:自动拼接多个资料的名称 | | getIsOrgBaseAdmin | 是否基础管理员;
专用于关联组织基础资料时,根据此选项控制F7组织列表数据范围; | | getOrgFuncId | 组织职能;
专用于关联组织基础资料时,根据组织职能过滤F7组织列表数据 | | isShowUsed | F7列表是否仅显示未禁用的资料:
通常在单据上,只能录入未禁用的资料;但在过滤条件表格,可以录入已禁用的资料; | ## 5.2 数据模型 ### 5.2.1 属性对象 多选基础资料字段,在主实体模型中的属性对象是 MulBasedataProp类型: 派生于集合属性对象基类DynamicCollectionProperty,与单据体属性对象类似,可以存储集合值,每个基础资料数据对应集合中的一行; * 实现了IFieldHandle接口,具有普通字段的特征,如物理字段值类型、设计时默认值、比较符号等属性; * 实现了IValidatorHanlder接口,能够提供默认的字段值校验器; * 实现了IBasedataField接口,具有普通基础资料字段的特征; ```java package kd.bos.entity.property; public class MulBasedataProp extends DynamicCollectionProperty implements IFieldHandle, IValidatorHanlder,IBasedataField { ``` MulBasedataProp属性对象的层次结构: 关联一个子实体 DynamicObjectType,子实体中具有如下属性对: * 主键:pkid,PKFieldProp类型,存储随机生成的主键; * 基础资料属性对象:fbasedataid,存储基础资料的数据包; * 基础资料主键:fbasedataid_id,PKFieldProp类型,存储基础资料主键; 如下代码演示了如何取多选基础资料各层的属性对象: ```java /** 单据头.多选基础资料字段 */ private final static String KEY_MULBASEDATAFIELD = "mulbasedatafield"; /** * 演示如何取字段的属性对象 */ private void demoFieldProp(){ MainEntityType mainType = this.getModel().getDataEntityType(); // 多选基础资料:集合属性,与物理表格对应 MulBasedataProp mulBasedataProp = (MulBasedataProp)mainType.findProperty(KEY_MULBASEDATAFIELD); // 下级子实体:集合元素对应的实体对象,其下包含了普通基础资料属性对象 DynamicObjectType subEntityType = (DynamicObjectType)mulBasedataProp.getDynamicCollectionItemPropertyType(); // 基础资料:存储每条基础资料的数据包,属性名是个常量fbasedataid BasedataProp basedataProp = (BasedataProp)subEntityType.getProperties().get("fbasedataid"); // 基础资料主键:存储每条资料的主键,与物理字段对应 PKFieldProp refIdProp = (PKFieldProp)basedataProp.getRefIdProp(); } ``` ### 5.2.2 字段值 在表单数据包中,多选基础资料字段的值类型,是DynamicObjectCollection类型,DynamicObject的集合;集合中的每个数据包DynamicObject,包含一条基础资料数据。 ### 5.2.3 字段值存取方法 (IDataModel) 如下示例代码,演示如何给多选基础资料字段取值、赋值: * 方案一:利用表单数据模型存取多选基础资料字段值,适用于表单插件; * 方案二:利用属性对象,自行操作数据包,存取多选基础资料字段值,适用于单据操作插件。 ```java package kd.bos.plugin.sample.dynamicform.pcform.field.bizcase; import kd.bos.dataentity.entity.DynamicObject; import kd.bos.dataentity.entity.DynamicObjectCollection; import kd.bos.dataentity.metadata.dynamicobject.DynamicObjectType; import kd.bos.entity.MainEntityType; import kd.bos.entity.property.BasedataProp; import kd.bos.entity.property.MulBasedataProp; import kd.bos.entity.property.PKFieldProp; import kd.bos.form.plugin.AbstractFormPlugin; import kd.bos.servicehelper.BusinessDataServiceHelper; public class MulBasedataFieldSample extends AbstractFormPlugin { /** 单据头.多选基础资料字段 */ private final static String KEY_MULBASEDATAFIELD = "mulbasedatafield"; /** * 演示如何读取、设置字段值; * @param entryRow 单据体行号 * @param subEntryRow 子单据体行号 * @remark * 设置单据体字段,需要在参数中加上行号 */ private void demoFieldValue(int entryRow, int subEntryRow){ // ************************************************* // 方案一:利用表单数据模型,存取字段值 // 适用于表单插件 // 取值:多选基础资料字段值,DynamicObjectCollection 类型 DynamicObjectCollection rows = (DynamicObjectCollection)this.getModel().getValue(KEY_MULBASEDATAFIELD); for (DynamicObject row : rows){ DynamicObject basedataObj = (DynamicObject)row.getDynamicObject("fbasedataid"); Long basedataId = (Long) basedataObj.getPkValue(); } // 赋值:需要传入DynamicObjectCollection或者主键集合Object[] // 方法1:传入DynamicObjectCollection (难度高) this.getModel().setValue(KEY_MULBASEDATAFIELD, rows); // 方法2:传入Object[],假设需要设置一条资料,主键为1 Object[] basedataIds = new Object[] {1L}; this.getModel().setValue(KEY_MULBASEDATAFIELD, basedataIds); // ************************************************** // 方案二:如下代码演示利用属性对象,直接操作单据数据包,给字段赋值 // 本方案适合在单据操作插件中用,不适合表单插件 // 取属性对象 MainEntityType mainType = this.getModel().getDataEntityType(); // 多选基础资料:集合属性,与物理表格对应 MulBasedataProp mulBasedataProp = (MulBasedataProp)mainType.findProperty(KEY_MULBASEDATAFIELD); // 下级子实体:集合元素对应的实体对象,其下包含了普通基础资料属性对象 DynamicObjectType subEntityType = (DynamicObjectType)mulBasedataProp.getDynamicCollectionItemPropertyType(); // 基础资料:存储每条基础资料的数据包,属性名是个常量fbasedataid BasedataProp basedataProp = (BasedataProp)subEntityType.getProperties().get("fbasedataid"); // 取单据头数据包,不含单据体数据:演示用的字段在单据头上,取单据头数据包就够了 DynamicObject billObj = this.getModel().getDataEntity(); // 如下代码演示如何取值: // 取多选基础资料字段值:DynamicObjectCollection 类型 rows = (DynamicObjectCollection)mulBasedataProp.getValue(billObj); // 逐条取基础资料及其主键 for (DynamicObject row : rows){ DynamicObject basedataObj = (DynamicObject)basedataProp.getValue(row); Long basedataId = (Long) basedataObj.getPkValue(); } // 如下代码,演示给多选基础资料字段,追加一条基础资料,主键假设为1: Long newBasedataId = 1L; // 主键 // 根据主键,自行到数据库读取数据包 DynamicObject newBasedataObj = BusinessDataServiceHelper.loadSingleFromCache(newBasedataId, basedataProp.getDynamicComplexPropertyType()); // 给多选基础资料数据集合,增加新行,在新行上填写基础资料 DynamicObject newRow = new DynamicObject(subEntityType); rows.add(newRow); basedataProp.setValue(newRow, newBasedataObj); // 使用这个方法,系统会同步填写主键属性值 } } ``` ## 5.3 插件事件 多选基础资料字段,继承了[基础资料的插件事件](https://vip.kingdee.com/knowledge/specialDetail/218022218066869248?category=218035461581541632&id=221670300038589696),未增加新插件事件。
构建列表过滤条件,触发beforeF7Select事件,打开F7列表 | | getBindingValue | 刷新前端字段值时,调用此方法:
把多选基础资料值打包,生成用于前端控件显示的值:自动拼接多个资料的名称 | | getIsOrgBaseAdmin | 是否基础管理员;
专用于关联组织基础资料时,根据此选项控制F7组织列表数据范围; | | getOrgFuncId | 组织职能;
专用于关联组织基础资料时,根据组织职能过滤F7组织列表数据 | | isShowUsed | F7列表是否仅显示未禁用的资料:
通常在单据上,只能录入未禁用的资料;但在过滤条件表格,可以录入已禁用的资料; | ## 5.2 数据模型 ### 5.2.1 属性对象 多选基础资料字段,在主实体模型中的属性对象是 MulBasedataProp类型: 派生于集合属性对象基类DynamicCollectionProperty,与单据体属性对象类似,可以存储集合值,每个基础资料数据对应集合中的一行; * 实现了IFieldHandle接口,具有普通字段的特征,如物理字段值类型、设计时默认值、比较符号等属性; * 实现了IValidatorHanlder接口,能够提供默认的字段值校验器; * 实现了IBasedataField接口,具有普通基础资料字段的特征; ```java package kd.bos.entity.property; public class MulBasedataProp extends DynamicCollectionProperty implements IFieldHandle, IValidatorHanlder,IBasedataField { ``` MulBasedataProp属性对象的层次结构: 关联一个子实体 DynamicObjectType,子实体中具有如下属性对: * 主键:pkid,PKFieldProp类型,存储随机生成的主键; * 基础资料属性对象:fbasedataid,存储基础资料的数据包; * 基础资料主键:fbasedataid_id,PKFieldProp类型,存储基础资料主键; 如下代码演示了如何取多选基础资料各层的属性对象: ```java /** 单据头.多选基础资料字段 */ private final static String KEY_MULBASEDATAFIELD = "mulbasedatafield"; /** * 演示如何取字段的属性对象 */ private void demoFieldProp(){ MainEntityType mainType = this.getModel().getDataEntityType(); // 多选基础资料:集合属性,与物理表格对应 MulBasedataProp mulBasedataProp = (MulBasedataProp)mainType.findProperty(KEY_MULBASEDATAFIELD); // 下级子实体:集合元素对应的实体对象,其下包含了普通基础资料属性对象 DynamicObjectType subEntityType = (DynamicObjectType)mulBasedataProp.getDynamicCollectionItemPropertyType(); // 基础资料:存储每条基础资料的数据包,属性名是个常量fbasedataid BasedataProp basedataProp = (BasedataProp)subEntityType.getProperties().get("fbasedataid"); // 基础资料主键:存储每条资料的主键,与物理字段对应 PKFieldProp refIdProp = (PKFieldProp)basedataProp.getRefIdProp(); } ``` ### 5.2.2 字段值 在表单数据包中,多选基础资料字段的值类型,是DynamicObjectCollection类型,DynamicObject的集合;集合中的每个数据包DynamicObject,包含一条基础资料数据。 ### 5.2.3 字段值存取方法 (IDataModel) 如下示例代码,演示如何给多选基础资料字段取值、赋值: * 方案一:利用表单数据模型存取多选基础资料字段值,适用于表单插件; * 方案二:利用属性对象,自行操作数据包,存取多选基础资料字段值,适用于单据操作插件。 ```java package kd.bos.plugin.sample.dynamicform.pcform.field.bizcase; import kd.bos.dataentity.entity.DynamicObject; import kd.bos.dataentity.entity.DynamicObjectCollection; import kd.bos.dataentity.metadata.dynamicobject.DynamicObjectType; import kd.bos.entity.MainEntityType; import kd.bos.entity.property.BasedataProp; import kd.bos.entity.property.MulBasedataProp; import kd.bos.entity.property.PKFieldProp; import kd.bos.form.plugin.AbstractFormPlugin; import kd.bos.servicehelper.BusinessDataServiceHelper; public class MulBasedataFieldSample extends AbstractFormPlugin { /** 单据头.多选基础资料字段 */ private final static String KEY_MULBASEDATAFIELD = "mulbasedatafield"; /** * 演示如何读取、设置字段值; * @param entryRow 单据体行号 * @param subEntryRow 子单据体行号 * @remark * 设置单据体字段,需要在参数中加上行号 */ private void demoFieldValue(int entryRow, int subEntryRow){ // ************************************************* // 方案一:利用表单数据模型,存取字段值 // 适用于表单插件 // 取值:多选基础资料字段值,DynamicObjectCollection 类型 DynamicObjectCollection rows = (DynamicObjectCollection)this.getModel().getValue(KEY_MULBASEDATAFIELD); for (DynamicObject row : rows){ DynamicObject basedataObj = (DynamicObject)row.getDynamicObject("fbasedataid"); Long basedataId = (Long) basedataObj.getPkValue(); } // 赋值:需要传入DynamicObjectCollection或者主键集合Object[] // 方法1:传入DynamicObjectCollection (难度高) this.getModel().setValue(KEY_MULBASEDATAFIELD, rows); // 方法2:传入Object[],假设需要设置一条资料,主键为1 Object[] basedataIds = new Object[] {1L}; this.getModel().setValue(KEY_MULBASEDATAFIELD, basedataIds); // ************************************************** // 方案二:如下代码演示利用属性对象,直接操作单据数据包,给字段赋值 // 本方案适合在单据操作插件中用,不适合表单插件 // 取属性对象 MainEntityType mainType = this.getModel().getDataEntityType(); // 多选基础资料:集合属性,与物理表格对应 MulBasedataProp mulBasedataProp = (MulBasedataProp)mainType.findProperty(KEY_MULBASEDATAFIELD); // 下级子实体:集合元素对应的实体对象,其下包含了普通基础资料属性对象 DynamicObjectType subEntityType = (DynamicObjectType)mulBasedataProp.getDynamicCollectionItemPropertyType(); // 基础资料:存储每条基础资料的数据包,属性名是个常量fbasedataid BasedataProp basedataProp = (BasedataProp)subEntityType.getProperties().get("fbasedataid"); // 取单据头数据包,不含单据体数据:演示用的字段在单据头上,取单据头数据包就够了 DynamicObject billObj = this.getModel().getDataEntity(); // 如下代码演示如何取值: // 取多选基础资料字段值:DynamicObjectCollection 类型 rows = (DynamicObjectCollection)mulBasedataProp.getValue(billObj); // 逐条取基础资料及其主键 for (DynamicObject row : rows){ DynamicObject basedataObj = (DynamicObject)basedataProp.getValue(row); Long basedataId = (Long) basedataObj.getPkValue(); } // 如下代码,演示给多选基础资料字段,追加一条基础资料,主键假设为1: Long newBasedataId = 1L; // 主键 // 根据主键,自行到数据库读取数据包 DynamicObject newBasedataObj = BusinessDataServiceHelper.loadSingleFromCache(newBasedataId, basedataProp.getDynamicComplexPropertyType()); // 给多选基础资料数据集合,增加新行,在新行上填写基础资料 DynamicObject newRow = new DynamicObject(subEntityType); rows.add(newRow); basedataProp.setValue(newRow, newBasedataObj); // 使用这个方法,系统会同步填写主键属性值 } } ``` ## 5.3 插件事件 多选基础资料字段,继承了[基础资料的插件事件](https://vip.kingdee.com/knowledge/specialDetail/218022218066869248?category=218035461581541632&id=221670300038589696),未增加新插件事件。
多选基础资料字段
# 1 功能介绍多选基础资料字段,用来选择、录入基础资料数据,可以同时选择多个资料放在一个字段中。# 2 控件对象`kd.bos.form.field.M...
点击下载文档
本文2024-09-23 00:40:37发表“云苍穹知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-cangqiong-141012.html
您需要登录后才可以发表评论, 登录登录 或者 注册
最新文档
热门文章