
# 变更记录
| 产品版本 | 更新内容 | 更新日期 |
| --- | --- | --- |
| v6.0.1 | 新增了单选基础资料支持配置多行显示的功能,提升了用户体验 | 2023-10-27 |
| v6.0.12 | 优化了基础资料字段,支持通过二开参数隐藏打开F7弹窗的图标,满足用户使用场景 | 2024-05-24 |
| v7.0.1 | 优化了基础资料下拉面板高度自适应显示,提升阅读体验。新增无选项模式 | 2024-10-24 |
# 1 功能介绍
封装了一组基础数据的字段,每条基础数据含有多个属性,是在F7中能够引用的企业基本资料,常见的物料、币别、科目都是基础资料的典型代表。
# 2 控件对象
`kd.bos.form.field.BasedataEdit`
# 3 运行效果
基础资料字段支持以下几种效果:
- **垂直**

- **水平**

- **模糊搜索**

- **下拉展示数据**

# 4 属性说明
## 4.1 通用属性
>通用属性包含字段和控件的一些公有的属性,如宽高,帮助文本等等。请参考[通用属性](https://vip.kingdee.com/article/215559076720798976)
## 4.2 样式属性
>样式属性是每个控件在设计器右侧样式栏可以设置的属性,请参考[样式属性](https://vip.kingdee.com/article/252017936767406336)
## 4.3 业务属性
| 属性名 | 类型 | 默认值 | 说明 |
| --- | --- | --- | --- |
| 快捷新增 | 复选框 | true | 基础资料模糊查询无记录时显示快捷新增按钮,可快速新增基础资料数据,详见4.3.1 |
| 基础资料类型 | 弹框选择 | | 配置关联的基础资料,必须配置 |
| 使用组织 | 下拉 | - | 关联对应的组织基础资料,详见4.3.2 |
| 编辑显示属性 | 弹框选择 | 编码 | 设置在编辑时基础资料的属性:编码(number)、名称(name)、编码+名称(number,name)、名称+编码(name,number) |
| 显示属性 | 弹框选择 | 名称 | 设置基础资料显示的内容:编码(number)、名称(name)、编码+名称(number,name)、名称+编码(name,number) |
| 引用属性 | 弹框选择 | - | 设置引用对应自己资料的属性,可以引用多个,详见4.3.3 |
| 过滤条件 | 弹框选择 | - | 配置基础资料对应的过滤条件,详见4.3.4 |
| 是否只显示启用 | 复选框 | true | 配置F7只显示启用的数据,默认开启 |
| 显示风格 | 下拉 | 缺省 | 配置基础资料展示数据样式:缺省(0)、下拉(1) |
| 缺省值 | 弹框选择 | | 配置基础资料默认值 |
| 列表布局 | 弹框选择 | - | 配置列表布局信息,详见4.3.5 |
| 查看详情 | 复选框 | true | 设置查看详情 |
| 支持模糊查询 | 复选框 | true | 勾选后开启模糊查询功能,输入时可以匹配基础资料数据 |
| 启用我的常用 | 复选框 | false | 开启常用功能,详见4.3.6 |
| 为空提示信息 | 文本 | - | 当字段内容为空时,输入框内显示的信息 |
| 编辑风格 | 下拉 | 按钮+文本编辑 | 编辑风格有两种:按钮+文本编辑和按钮点击编辑, 默认是按钮+文本编辑模式 |
| 按钮图标 | 弹框选择 | - | 基础资料后面的按钮图标 |
| 多行 | 复选框 | false | 开启多行属性后,单选基础资料可以换行显示 |
### 4.3.1 快捷新增
开启快捷新增属性,可快速跳转到新增基础资料数据界面进行添加,提高便利性

### 4.3.2 使用组织
设置使用组织,用于明确引用基础资料的使用主实体,进行数据管控。
在业务层面,基础资料作为业务规则、政策的主要载体,而在系统层面主要体现方式则是通过基础资料的数据管控达到这一目标。
在我们创建基础资料时,系统会记录基础资料的两个关键信息:创建组织与使用组织。基于创建组织我们可以进行纵向的数据管控,即哪些组织可以创建、管理、分配这个基础资料。**而基于使用组织我们可以进行横向的数据协同,即哪些数据可以使用这个基础资料**。所以我们在创建单据时,需要明确引用基础资料的使用主体组织,**配置后,则会依据此使用组织来进行基础资料的数据过滤**。
### 4.3.3 引用属性
引用属性用于选择基础资料表单中想要携带引用的字段,用于之后的计算和赋值。配置引用属性字段后,可以在单据的业务规则中选择“携带基础资料属性到指定列”,则可以携带已引用的基础资料源字段到目标字段。
举例:引用了基础资料的单价字段,携带给单据体的单价字段。

### 4.3.4 过滤条件
过滤条件用于控制基础资料的可选范围。在过滤条件中可以对基础资料内的字段添加多条过滤规则,限定用户可选的基础资料。
示例:对基础资料中的单价进行数值过滤,可以得到更精确的基础资料可选范围。

### 4.3.5 列表布局
列表布局用于对基础资料F7列表的布局选择(F7列表是指弹框列表,此处表示单据运行时点击基础资料字段的放大镜图标得到的弹框列表)。该项属性与基础资料类型关联,基础资料类型有多个布局时,F7列表将以单选按钮提供这些布局选择。

### 4.3.6 启用我的常用
开启了我的常用,在没输入数据搜索的情况下会展示根据使用频次记录的历史记录

### 4.3.7 无选项模式
v7.0.1 新增无选项模式属性。
通过二开写ks脚本插件进行设置 `isNoOptionMode` 属性。启用了无选项模式后,如果当前的字段风格为非下拉风格时,则隐藏图标、F7弹窗和模糊查询面板,进行精确匹配。
```
afterBindData: function(e) {
// 单头字段
var basedataField = this.getControl('basedatafield')
this.getView().updateControlMetadata('basedatafield', { isNoOptionMode: true })
// 分录以及卡片
var clientViewProxy = this.getView().getClientProxy()
clientViewProxy.invokeControlMethod('kdtest_entryentity', 'setColEditorProp', ['basedatafield2', 'isNoOptionMode', true])
}
```
# 5 基础资料接口介绍
## 5.1 控件编程模型
### 5.1.1 控件编程模型定义
基础资料控件编程模型为BasedataEdit,派生自字段控件编程模型基类FieldEdit:
```java
package kd.bos.form.field;
public class BasedataEdit extends FieldEdit implements IFlexEdit, ICloseCallBack {
```
### 5.1.2 控件方法清单
BasedataEdit,重写、添加了如下方法:
| 方法 | 说明 |
| --- | --- |
| addBeforeF7SelectListener | 监听F7基础资料列表显示前事件 |
| bindData | 界面刷新数据时,系统调用此方法:
生成绑定字段值到前端控件的指令 |
| click | 用户点击基础资料字段前端控件上的按钮时,调用此方法:
显示F7基础资料列表 |
| closedCallBack | F7基础资料列表界面关闭时,系统调用此方法:
接收F7列表返回的基础资料,填写到基础资料字段值中 |
| getBindingValue | 输出用于前端控件显示的字段值,包括资料编码、名称 |
| getDisplayProp | 基础资料字段显示的属性名,默认显示名称属性 |
| getF7ComboList | 向前端输出基础资料模糊查询列表数据 |
| getLookUpList | 用户在基础资料字段上,模糊查询,系统调用此方法:
到数据库搜索匹配的数据,输出到前端控件快捷列表上 |
| getQFilter | 获取插件给基础资料字段设置的F7列表过滤条件,只取第一个条件 |
| getQFilters | 获取插件给基础资料字段设置的F7列表过滤条件;
与设计器配置的过滤条件,分开存储,组合过滤 |
| isShowUsed | F7基础资料列表,是否只显示未禁用的资料 |
| setDisplayProp | 设置基础资料字段显示的属性名,默认为显示名称属性 |
| setItemByIdFromClient | 基础资料模糊查询,用户选择了资料后回车,调用此方法:
把选择的资料填写到数据模型中 |
| setItemByNumber | 按编码给基础资料赋值;默认使用内码赋值; |
| setQFilter | 插件给基础资料F7列表,设置过滤条件 |
| setQFilters | 插件给基础资料F7列表,设置过滤条件,多个条件组合 |
## 5.2 数据模型
### 5.2.1 字段的属性对象
基础资料字段在主实体模型中,属性对象有两个:
**PKFieldProp**:基础资料**主键属性对象**,属性名是基础资料字段标识 + “_id”;
* PKFieldProp是抽象基类,需按照主键数据类型,选用合适的主键属性对象
* VarcharProp:字符型主键;
* LongProp:长整型主键;
* 暂时只支持字符型、长整型两种主键
**BasedataProp**:基础资料**属性对象**,属性名是基础资料字段标识;
* 关联基础资料主实体对象RefEntityType,包含了下级属性对象;
* 属性值存储引用的基础资料数据包;
* 基础资料数据包中,包含了基础资料下级属性值;
如下代码,演示如何获取基础资料字段的两个属性对象(表单插件类节选):
```java
/** 单据头基础资料字段 */
private final static String KEY_BASEDATAFIELD = "basedatafield";
/**
* 演示如何取字段的属性对象
*/
private void demoFieldProp(){
// 基础资料字段,属性对象有两个:
// 1. 存储基础资料内码,PKFieldProp的派生类型LongProp或VarcherProp类型
// 2. 存储基础资料引用数据包,BasedataProp 类型
// 方案一:使用数据模型的方法获取
BasedataProp basedataProp = (BasedataProp)this.getModel().getProperty(KEY_BASEDATAFIELD);
PKFieldProp refIdProp = (PKFieldProp)basedataProp.getRefIdProp();
// 方案二:自行到主实体模型中获取
MainEntityType mainType = this.getModel().getDataEntityType();
basedataProp = (BasedataProp)mainType.findProperty(KEY_BASEDATAFIELD);
refIdProp = (LongProp) basedataProp.getRefIdProp();
}
```
### 5.2.2 基础资料主键属性对象(PKFieldProp)
* **主键属性对象基类 (PKFieldProp)**
PKFieldProp类型,派生自字段属性对象基类FieldProp:
```java
package kd.bos.entity.property;
public class PKFieldProp extends FieldProp {
```
* **字符型主键属性对象 (VarcharProp)**
VarcharProp派生自PKFieldProp,重写了数据类型方法getDbType,返回Types.VARCHAR:
```java
package kd.bos.entity.property;
public class VarcharProp extends PKFieldProp {
```
* **长整型主键属性对象 (LongProp)**
LongProp派生自PKFieldProp,重写了数据类型方法getDbType,返回Types.BIGINT:
```java
package kd.bos.entity.property;
public class LongProp extends PKFieldProp {
```
### 5.2.3 基础资料属性对象 (BasedataProp)
BasedataProp属性对象,派生自ORM复杂属性对象基类DynamicComplexProperty:
```java
package kd.bos.entity.property;
public class BasedataProp extends DynamicComplexProperty implements IFieldHandle, IValidatorHanlder,IBasedataField {
```
* **BasedataProp的方法清单**
| 方法 | 说明 |
| --- | --- |
| applyDefaultValue | 表单新建数据包,调用此方法:
解析默认值配置,填写默认值 |
| buildCoreFilter | 根据字段过滤条件配置,构建F7列表过滤条件 |
| buildCoreFilterByString | 根据字段过滤条件配置,构建F7列表过滤条件 |
| createEntityTreeNodes | 构建单据列表设计器,字段树 |
| createEntityTreeNodes | 构建单据列表设计器,字段树 |
| createFilterField | 构建过滤字段 |
| createFilterFields | 构建过滤字段,含引用属性的过滤字段 |
| getBaseEntityId | 取引用的基础资料类型 |
| getBindingBasedataValue | 构建用于前端控件的字段值;
含编码、名称两种属性值 |
| getClientType | 输出引用属性的前端控件类名 |
| getCompareGroupID | 输出字段的比较符号组别Id |
| getCompareProp | 输出一个属性对象,基于此属性的值,判断字段有没有录入;
基础资料字段,输出主键属性 |
| getCompareTypes | 输出字段使用的全部比较符号 |
| getComplexType | 输出引用的基