メインコンテンツまでスキップ

フォームのサブフォーム一括インポートによるデータ連動

このケースは三者の開発者「蘇 _ 」から来ました。

1. 使用シーン

サブフォームを一括インポートしても、配置されたデータ連動はトリガーされないので、この例ではopenapiで対応する効果を実現する方法を学びます。

2.機能を実現する

2.1ページ設定

(1) 在庫表

(2) 一括出庫

2.2ページ機能の設定

(1) 設定データ連動

(2) カスタム検証の設定出庫数量を制限する

function validateRule(value) {
// 注意按实际情况修改唯一标识
const stockCount = this.$('numberField_lf6j04m0').getValue(); // 库存数
if (!stockCount || value > stockCount) {
return false
};
return true;
}

2.3サブフォーム一括インポートイベントの設定

(1) データソースの設定

参考ドキュメント:検索条件によるインスタンス詳細リストの取得

インタフェース構成図:

(2) サブフォーム一括インポート処理の設定

コードは次のとおりです。

在庫表のformuuidを変更することに注意してください。

const formUuid = 'FORM-XXXXXXXXXXXXXX'; // 库存表 formUuid

// 子表单批量导入处理
export async function beforeImportData(data) {
const result = data.slice(0); // 拷贝数据
const loading = this.utils.toast({
title: `数据处理中,预计需要${result.length / 5}`,
type: 'loading'
});
const errorData = []; // 收集错误信息
for (let i = 0; i < data.length; i++) {
const delay = i === 0 ? 0 : 200;
await new Promise((resolve => {
// 注意节流,每次请求间隔 200 ms
setTimeout(async () => {
await this.dataSourceMap.getData.load({
formUuid,
searchFieldJson: JSON.stringify({
// 这里相当于数据联动的条件,只支持且关系
// 出库清单.物品名称 等于 物品名称
textField_lf6ix8iq: data[i].selectField_lf6j04ly, // 物品名称
textField_lf6ix8it: data[i].textField_lf6j04lz // 物品编号
})
}).then(res => {
const { totalCount, data } = res;
if (!totalCount) { return };
const { formData = {} } = data[0];
// 这里相当于数据联动的结果
// 库存数 联动显示为 出库清单.库存数的对应值
result[i].numberField_lf6j04m0 = formData.numberField_lf6ix8is || 0; // 库存数
}).catch(error => {
// 错误处理
errorData.push({
name: data[i].selectField_lf6j04ly,
type: data[i].textField_lf6j04lz
})
});
resolve();
}, delay);
}));
};
loading(); // 关闭loading
// 错误提示
if (errorData.length > 0) {
let content = (
<div>
{errorData.map((item) => {
return <p>物品名称:{item.name},物品编号:{item.type}</p>
})}
</div>
);
this.utils.dialog({
method: 'alert',
title: `处理完成,失败 ${errorData.length}`,
content,
onOk: () => { },
onCancel: () => { },
});
};
return result;
}

3.効果を実現する

4.オンラインで試してみます

この文書は機械翻訳により生成されています。翻訳により生じた齟齬や相違点は拘束力を持たず、コンプライアンスや執行目的において法的効力はありません。
© DingTalk (Singapore) Private Limited