统一设置创建人、修改人
数据表中需要记录创建人、创建时间、修改人、修改时间,如下图所示,使用动态数据集扩展组件实现
动态数据集扩展组件
- 提供三个模板用于在数据集中创建这些列
- 提供 js 方法,实现在页面上新增和修改数据时,自动写入数据
添加动态数据集扩展组件
切换到页面设计区,从市场添加“动态数据集扩展组件”,如下图所示
添加数据集时选择模板
添加动态数据集时,出现3个模板,如下图所示,选择模板后创建的数据集,除了主键列还会包括模板中的列
使用版本锁模板创建的数据集,如下图所示
使用创建修改人模板创建的数据集,如下图所示
使用创建修改人版本锁模板创建的数据集,如下图所示
系统自带的3个模板
动态数据集扩展主键中带的三个模板位于 model\service\comp\restDataExtender 目录下,如下图所示,分别是
- 版本锁模板:version.data.template.m
- 创建修改人模板:creator.data.template.m
- 创建修改人版本锁模板:creatorVersion.data.template.m
在页面上添加动态数据集扩展组件
新增和修改数据时,需要自动写入创建信息和修改信息时,在页面中添加动态数据集扩展组件,如下图所示
- fcreator 和 fmodifier 写入当前人的全路径编码
- fcreatorName 和 fmodifierName 写入当前人的姓名
- fcreateTime 和 fmodifyTime 写入当前服务器时间
自定义列标识、列名称
当需要修改数据集模板中的列标识、列名称或者增加列时,需要修改动态数据集扩展组件
本例:将 fcreatorName 改为 personName,fcreator 和 fmodifier 写入当前人的ID
定制组件
切换到页面设计区,点击市场组件图标,如下图所示,打开市场组件对话框
找到动态数据集扩展组件,点击定制按钮,如下图所示,选择提交 git
修改模板
切换到代码页,打开 model\service\comp\restDataExtender 目录下的模板文件 xxx.data.template.m
- 修改列标识:修改 property 中的 name
- 修改列名称:修改 property 中的 label
- 添加新列:添加一个 property,property 的写法可以从其他数据集的模型文件(service/main/xxx.data.m)中复制
修改组件 js 文件中的列标识
动态数据集扩展组件的 model\UI2\comp\restDataExtender\components\restDataExtender\restDataExtender.js 文件中,实现新增时写入创建信息和修改信息,保存前写入修改信息,如下图所示
- 新增时在 getDefaults 方法中写入创建信息和修改信息
- 保存前在 processSaveRow 方法中写入修改信息
在这两个方法中,修改列标识,或者增加新的列,代码如下
async getDefaults(){
let now = wx.Date.getServerDatetime();
let id = this._context.getCurrentPersonMemberID();
let name = this._context.getCurrentPersonMemberName();
return {"fcreator":id, "fcreateTime": now, "personName": name, "fmodifier":id, "fmodifyTime": now, "fmodifierName": name};
}
processSaveRow(row, ignoreSlave, allCol){
if(this.canExtend() && row){
let now = wx.Date.getServerDatetime();
let id = this._context.getCurrentPersonMemberID();
let name = this._context.getCurrentPersonMemberName();
let defaults = {"fmodifier":id, "fmodifyTime": now, "fmodifierName": name};
let props = ['fmodifier','fmodifyTime','fmodifierName'];
for(let prop of props){
if(this.getColumnDef(prop)){
row[prop] = defaults[prop];
}
}
}
return super.processSaveRow(row, ignoreSlave, allCol);
}