开发者社区> 问答> 正文

子表单关联多子表单完成数据填充

1.主要场景:采购申请(应用的有子表单),合同(需要关联采购申请)
2.要求实现:创建合同的时候,需要多选采购申请完成合同申请,同时完成关联进来的采购申请子表单自动填充到合同的子表单
目前进度:已经从合同创建数据源完成多选采购申请的数据获取

需要解决的问题:怎么获取到子表单的值后给合同子表单赋值
目前看的文档:https://docs.aliwork.com/docs/yida_subject/ia5rwopaz3wn2ur4?spm=a311a.7996332.0.0.6a9815b5BHUpCZ

image.png
但是这块代码示例是获取目标表单的主表数据填充子表
怎么实现获取到目标表单的子表数据进行填充到子表
两个表单都是流程表单

数据已经获取到,就是怎么完成赋值

我的js代码
export async function onAssociatnormChange({ value }) {
if (value.length) {
const batchFetchResult = []; // 请求结果
const failedInstId = []; // 请求失败的实例ID
const batchFetchLoading = this.utils.toast({
title: 处理中,请不要关闭浏览器,预计需要 ${value.length / 5} 秒,
type: 'loading'
});
for (let i = 0; i < value.length; i++) {
const delay = i === 0 ? 0 : 200;
const processInstanceId = value[i].instanceId;
await new Promise((resolve => {
// 注意节流,每次请求间隔 200 ms
setTimeout(async () => {
await this.dataSourceMap.getInstanceById.load({
// 数据源参数
processInstanceId,
}).then(res => {
// 处理每次返回的结果
if (!res) { return };
batchFetchResult.push(res || {});
}).catch(error => {
// 处理错误,收集错误的实例ID
failedInstId.push(processInstanceId);
});
resolve();
}, delay);
}));
};
batchFetchLoading();
if (failedInstId.length > 0) {
let content = (


{failedInstId.map((instId) => {
return

{instId}


})}

);
this.utils.dialog({
method: 'alert',
title: 处理完成,失败 ${failedInstId.length} 条,
content,
onOk: () => { },
onCancel: () => { },
});
};
// 上述代码均不需要修改
// 下述代码按照实际情况修改字段映射即可
const tableData = batchFetchResult.map(item => {
const { formData = {} } = item;
return {
textField_lxl3qu1p: formData.textField_lxl3utuu || '', // 物料名称
textField_lxl3qu1q: formData.textField_lxi8xbb7 || '', // 物料类型
textField_lxibgcc0: formData.textField_lxl3utut || '', // 物料编码
}
});
this.$('tableField_lxibgcby').setValue(tableData);
console.log('111===>', tableData)
} else {
// 初始化子表单
this.$('tableField_lxibgcby').setValue([]);
};
}

展开
收起
游客asj7gaseswq6o 2024-06-27 16:04:28 119 0
来自:钉钉宜搭
1 条回答
写回答
取消 提交回答
  • 如果问题得到了解决,辛苦点下采纳回答哦~

    首先你参考的文档,是获取「普通表单」数据的接口,而你现在的页面是「流程表单」,文档中提供的接口不适用,需要换掉,其次文档中获取的是主表数据,而不是子表数据,所以接口建议直接使用获取子表单数据接口,
    宜搭接口可参考:https://docs.aliwork.com/docs/yida_support/lbtl0t/aql605#CV7py
    如下:

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

    image.png
    2、因为接口变更,所以页面JS获取数据的接口请求参数,以及接口返回数据处理需要更换下,如下:
    image.png
    代码如下:

    export async function onAssociationFormChange({ value }) {
      if (value.length) {
        const batchFetchResult = []; // 请求结果
        const failedInstId = []; // 请求失败的实例ID
        const batchFetchLoading = this.utils.toast({
          title: `处理中,请不要关闭浏览器,预计需要 ${value.length / 5} 秒`,
          type: 'loading'
        });
        for (let i = 0; i < value.length; i++) {
          const delay = i === 0 ? 0 : 200;
          const formInstanceId = value[i].instanceId;
          await new Promise((resolve => {
            // 注意节流,每次请求间隔 200 ms
            setTimeout(async () => {
              await this.dataSourceMap.getDataById.load({
                // 数据源参数
                formInstanceId,
                formUuid:'FORM-2E15BB6FDC464E348C8D0E26760ECE203VUZ', // 这里是采购申请的表单formUuid
                tableFieldId:'tableField_lxy0w8lw', // 这里放采购申请的子表单唯一标识
                currentPage:1,
                pageSize:50,
              }).then(res => {
                // 处理每次返回的结果
                if (!res) { return };
                batchFetchResult.push(res || {});
              }).catch(error => {
                // 处理错误,收集错误的实例ID
                failedInstId.push(formInstId);
              });
              resolve();
            }, delay);
          }));
        };
        batchFetchLoading();
        if (failedInstId.length > 0) {
          let content = (
            <div>
              {failedInstId.map((instId) => {
                return <p>{instId}</p>
              })}
            </div>
          );
          this.utils.dialog({
            method: 'alert',
            title: `处理完成,失败 ${failedInstId.length} 条`,
            content,
            onOk: () => { },
            onCancel: () => { },
          });
        };
        const allData = [];
        // 遍历提供的数组
        batchFetchResult.forEach(item => {
          item.data.forEach(dataItem => {
            const newTable = { 
              textField_lxy0urnp: dataItem.textField_lxy0w8lx, 
              numberField_lxy0urnq: dataItem.numberField_lxy0w8ly
              };
            allData.push(newTable);
          });
        });
        this.$('tableField_lxy0urno').setValue(allData); // 合同申请里面的子表单唯一标识
      } 
      else {
        // 初始化子表单
        this.$('tableField_lxy0urno').setValue([]);
      };
    }
    

    效果图:
    1、采购申请数据
    image.png
    2、合同申请:
    image.png

    2024-06-28 10:11:03
    赞同 4 展开评论 打赏
问答分类:
问答地址:
关联地址:
来源圈子
更多
收录在圈子:
+ 订阅
「宜搭」是云钉原生低代码平台(钉钉 PaaS - aPaaS),让企业应用搭建更简单! 帮助中小企业降本提效,加强组织的数字化自主权; 帮助大型企业释放个体创新力,助力组织创新涌现。
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载