自定义主键值
新增数据时,系统给主键列默认填充 uuid,填充自定义数据有下面两种方法
单个数据组件设置(49)
设置数据组件的“自定义主键值”属性为 true,此时系统将不给主键列赋值,由开发者在规则设置中给主键列设置默认值,设计界面如下图所示
运行效果如下图所示
全局设置(48)
对某些数据集进行统一设置,通过在动态数据集扩展组件中写代码实现
添加动态数据集扩展组件
在 IDE 中,从市场添加动态数据集扩展组件,设计界面如下图所示
定制空调数据集扩展组件
从市场添加的组件默认是只读的,定制后,才能修改组件。在 IDE 中,定制动态数据集扩展组件,设计界面如下图所示
写代码自定义主键值
切换到代码页,打开动态数据集扩展组件的 model/UI2/comp/restDataExtender/components/restDataExtender/restDataExtender.js 文件,如下图所示
增加 page 对象
在构造方法中,添加下面这行代码,获取的 page 对象用于发送请求
this.page = page;
添加后的代码如下图所示
修改 generateDefaultValue 方法
在第 32 行代码中,添加下面的代码,用于只要是主键列都可重新赋值
this.primaryColumns.indexOf(key) >= 0 ||
添加后的代码如下图所示
修改 getDefaults 方法
getDefaults 方法返回的值,就是默认值。本例通过序号组件获取主键值,代码如下
代码中的
- this 是数据组件
- this.tableName 是表名
- this.microServiceName 是服务名
- this.page 是页面对象
- this.primaryColumns 是主键列,因为支持多主键列,所以是数组
async getDefaults(){
if(this.tableName == "product"){
//获取服务名
let serviceName = this.microServiceName ? this.microServiceName : this.page.getServiceName();
//获取序号
let res = await this.page.request({
url: "/" + serviceName + "/sn/sn/next",
data:{key:this.tableName,format:"%05d",num:1}
})
//去掉表名
let id = res.data.substr(this.tableName.length);
//获取主键列名
let idCol = this.primaryColumns[0];
//写入返回默认值
let defaults = {};
defaults[idCol] = id;
return defaults;
}
}
原来的代码不需要,都被注释了,修改后的代码如下图所示
运行效果如下图所示