函数体
//循环调用,适用于请求全量数据(单次数据量大于100)的场景,调用后,请在then方法里面查看请求结果。
//dpName:String,数据源名称(必填),formUuid:String,查询目标表的formUuid(必填),searchFieldJson:Object,查询条件(非必填)。
export async function loopLoad(dpName, formUuid, searchFieldJson) {
if (!dpName) {
this.utils.toast({
title: 'dpName参数必填',
type: 'error',
});
return;
};
if (!formUuid) {
this.utils.toast({
title: 'formUuid参数必填',
type: 'error',
});
return;
};
if (dpName && Object.prototype.toString.apply(dpName) !== '[object String]') {
this.utils.toast({
title: 'dpName参数数据格式错误',
type: 'error',
});
return;
};
if (formUuid && Object.prototype.toString.apply(formUuid) !== '[object String]') {
this.utils.toast({
title: 'formUuid参数数据格式错误',
type: 'error',
});
return;
};
if (searchFieldJson && Object.prototype.toString.apply(searchFieldJson) !== '[object Object]') {
this.utils.toast({
title: 'searchFieldJson参数数据格式错误',
type: 'error',
});
return;
};
const result = []; // 最终数据集合
const errorPages = []; // 错误请求页码
await this.dataSourceMap[dpName].load({
formUuid,
searchFieldJson: JSON.stringify(searchFieldJson),
pageSize: 100
}).catch(error => {
this.utils.toast({
title: error.message,
type: 'error',
});
errorPages.push(1);
});
if (!this.state[dpName]) { return result };
if (this.state[dpName].totalCount <= 100) {
//当实例总数不大于100时
result.push(...this.state[dpName].data); //归整数据
} else {
//当实例总数大于100时
for (let i = 0; i < Math.ceil(this.state[dpName].totalCount / 100); i++) {
await this.dataSourceMap[dpName].load({
formUuid,
searchFieldJson: JSON.stringify(searchFieldJson),
pageSize: 100,
currentPage: i + 1
}).then(res => {
if (!res) { return };
result.push(...res.data);
}).catch(error => {
errorPages.push(i + 1);
});
};
};
return { result, errorPages };
}
使用方法
1、首先建立宜搭数据源,用于查询表单数据,关闭自动加载,无需添加数据处理函数。
数据源地址如下:
`/${window.pageConfig.appType || window.g_config.appKey}/v1/form/searchFormDatas.json`
配置如下图:
2、调用示例:
this.loopLoad("getData", "FORM-T2B66FA1NN1YZIJO2ZZ6C5UX507W2MVSNFXZK1", {
textField_l25xk894: ""
}).then(res => {
// 此处可以获取到返回的结果
// res:Object 例:{ result:Array, errorPages:Array }
console.log("请求结果", res);
});
3、数据返回示例: :::info result:Array 最终的返回数据,errorPages:Array 请求错误时的页码 :::
注意事项
1、loopLoad函数可以传三个参数dpName、formUuid、searchFieldJson。
2、其中dpName参数为定义的数据源的名称(此例为getData),类型为String,必填;formUuid参数为需要获取数据表的formUuid,类型为String,必填;searchFieldJson参数为查询条件,类型为Object,非必填。
3、查询100条数据大概需要300-400ms,受宜搭接口性能影响。