函数体

  1. //循环调用,适用于请求全量数据(单次数据量大于100)的场景,调用后,请在then方法里面查看请求结果。
  2. //dpName:String,数据源名称(必填),formUuid:String,查询目标表的formUuid(必填),searchFieldJson:Object,查询条件(非必填)。
  3. export async function loopLoad(dpName, formUuid, searchFieldJson) {
  4. if (!dpName) {
  5. this.utils.toast({
  6. title: 'dpName参数必填',
  7. type: 'error',
  8. });
  9. return;
  10. };
  11. if (!formUuid) {
  12. this.utils.toast({
  13. title: 'formUuid参数必填',
  14. type: 'error',
  15. });
  16. return;
  17. };
  18. if (dpName && Object.prototype.toString.apply(dpName) !== '[object String]') {
  19. this.utils.toast({
  20. title: 'dpName参数数据格式错误',
  21. type: 'error',
  22. });
  23. return;
  24. };
  25. if (formUuid && Object.prototype.toString.apply(formUuid) !== '[object String]') {
  26. this.utils.toast({
  27. title: 'formUuid参数数据格式错误',
  28. type: 'error',
  29. });
  30. return;
  31. };
  32. if (searchFieldJson && Object.prototype.toString.apply(searchFieldJson) !== '[object Object]') {
  33. this.utils.toast({
  34. title: 'searchFieldJson参数数据格式错误',
  35. type: 'error',
  36. });
  37. return;
  38. };
  39. const result = []; // 最终数据集合
  40. const errorPages = []; // 错误请求页码
  41. await this.dataSourceMap[dpName].load({
  42. formUuid,
  43. searchFieldJson: JSON.stringify(searchFieldJson),
  44. pageSize: 100
  45. }).catch(error => {
  46. this.utils.toast({
  47. title: error.message,
  48. type: 'error',
  49. });
  50. errorPages.push(1);
  51. });
  52. if (!this.state[dpName]) { return result };
  53. if (this.state[dpName].totalCount <= 100) {
  54. //当实例总数不大于100时
  55. result.push(...this.state[dpName].data); //归整数据
  56. } else {
  57. //当实例总数大于100时
  58. for (let i = 0; i < Math.ceil(this.state[dpName].totalCount / 100); i++) {
  59. await this.dataSourceMap[dpName].load({
  60. formUuid,
  61. searchFieldJson: JSON.stringify(searchFieldJson),
  62. pageSize: 100,
  63. currentPage: i + 1
  64. }).then(res => {
  65. if (!res) { return };
  66. result.push(...res.data);
  67. }).catch(error => {
  68. errorPages.push(i + 1);
  69. });
  70. };
  71. };
  72. return { result, errorPages };
  73. }

使用方法

1、首先建立宜搭数据源,用于查询表单数据,关闭自动加载,无需添加数据处理函数。
数据源地址如下:

  1. `/${window.pageConfig.appType || window.g_config.appKey}/v1/form/searchFormDatas.json`

配置如下图:
image.png
2、调用示例:

  1. this.loopLoad("getData", "FORM-T2B66FA1NN1YZIJO2ZZ6C5UX507W2MVSNFXZK1", {
  2. textField_l25xk894: ""
  3. }).then(res => {
  4. // 此处可以获取到返回的结果
  5. // res:Object 例:{ result:Array, errorPages:Array }
  6. console.log("请求结果", res);
  7. });

3、数据返回示例: :::info result:Array 最终的返回数据,errorPages:Array 请求错误时的页码 ::: image.png

注意事项

1、loopLoad函数可以传三个参数dpName、formUuid、searchFieldJson。
2、其中dpName参数为定义的数据源的名称(此例为getData),类型为String,必填;formUuid参数为需要获取数据表的formUuid,类型为String,必填;searchFieldJson参数为查询条件,类型为Object,非必填。
3、查询100条数据大概需要300-400ms,受宜搭接口性能影响。

附录

宜搭前端数据源