跳转至

实现流程明细内容的校验,及拦截后清空明细内容


title: 实现流程明细内容的校验,及拦截后清空明细内容 created: 2026-04-19 updated: 2026-04-19 type: reference tags: [imported, pptx] source: "Weaver Doc Import"


Slide 1

流程明细内容校验及拦截后清空明细内容 泛微网络 培训服务中心

Slide 2

需求背景及实现效果

Slide 3

在资产管理应用中,进行低值易耗品的资产领用时,要求领用数量不能大于领用资产的库存数量。因为流程表单中的领用是明细表,可以填写多行,且领用数量是手工填写的,所以就有可能出现填错,那么就要求在提交流程时需要先校验领用数量是否大于领用资产的库存数量,如果大于库存数量,要进行拦截,并弹出提示框进行提醒;且需要清空超出库存数量的领用数量内容。

Slide 4

在领用明细中填写领用数量,提交流程时会进行校验,满足条件流程可正常提交下去;如果领用数量大于库存数量,则会弹出提示框并阻止流程提交,且清空领用明细中对应内容。 实现效果

Slide 5

实现思路

Slide 6

实现思路 🔧注册保存事件:在表单保存操作前触发自定义校验函数; 🔧校验库存:遍历明细表的每一行,比较“领用数量(lysl)”和“库存数量(kcsl)”; 🔧错误处理:若领用数量大于库存数量,则清空该行的领用数量字段,并最终阻止保存;

Slide 7

JS代码块应用样例

Slide 8

配置实现步骤 实现方式: 打开发起节点的显示布局; 插入修改好的代码块; 流程表单

Slide 9

代码示例 // 注册保存事件 // 当用户点击表单的“保存”按钮时,触发此自定义校验 formSdk.registerCheckEvent(WeFormSDK.OPER_SAVE, (successFn, failFn) => { // 调用自定义的库存校验函数 if(validateStock()){ // 校验通过,调用成功回调函数,允许保存操作继续 successFn(); }else{ // 校验失败,调用失败回调函数,阻止保存并提示用户 failFn({msg:"领用数量不能大于库存数量,请重新填写。"}); } });

Slide 10

代码示例 // 自定义库存校验函数 function validateStock(){ // 1. 获取明细表的唯一标识(fieldId) // 使用表单设计器中定义的明细表“名称”进行转换 const detailMark = formSdk.convertFieldNameToId("zclysqlcb_dzyhply"); // 2. 获取当前明细表的总行数 const detailRowStr = formSdk.getDetailRowCount(detailMark); // 如果明细表没有数据,则无需校验,直接返回true通过 if (detailRowStr == 0) { return true; } // 初始化错误标志和记录错误行的数组 var hasError = false; var errorRows = []; // 用于记录需要清空领用数量的字段完整ID

return true; } // 初始化错误标志和记录错误行的数组 var hasError = false; var errorRows = []; // 用于记录需要清空领用数量的字段完整ID### Slide 11 代码示例 // 3. 获取明细表中关键字段的标识(fieldId) // 库存数量字段 const kcFieldMark = formSdk.convertFieldNameToId("kcsl"); // 领用数量字段 const lyFieldMark = formSdk.convertFieldNameToId("lysl"); // 4. 循环遍历明细表的每一行,进行库存校验 for (var i = 1; i <= detailRowStr; i++) { // 获取当前遍历行的唯一行ID(rowId) const tempRowId = formSdk.getDetailRowIdByIndex(detailMark, i); // 获取当前行“领用数量”字段的值,并转换为浮点数,若为空或非数字则默认为0 var useQty = parseFloat(formSdk.getFieldValue(${lyFieldMark}_${tempRowId})) || 0; // 获取当前行“库存数量”字段的值,并转换为浮点数,若为空或非数字则默认为0 var stockQty = parseFloat(formSdk.getFieldValue(${kcFieldMark}_${tempRowId})) || 0;

Slide 12

代码示例 // 核心校验逻辑:判断领用数量是否大于库存数量 if (useQty > stockQty) { // 如果超过,标记存在错误 hasError = true; // 记录当前错误行的领用数量字段完整ID,格式为:字段ID_行ID errorRows.push(lyFieldMark+"_"+tempRowId); } } // 5. 如果存在校验错误,执行清理操作 if(hasError){ // 遍历所有记录到的错误行 errorRows.forEach(function(fieldMark,index) { // 将对应行的领用数量字段值清空,以提示用户重新填写 formSdk.changeSingleField(fieldMark, {value: ""}); }); } // 6. 返回校验结果 // hasError为true表示有错误,但函数需要返回布尔值表示校验是否“通过” // 所以通过 !hasError 转换:有错误返回false(不通过),无错误返回true(通过) return !hasError; }

Slide 13

志达宇泛 见著于微 感谢您的信任与支持! 我们始终努力提供好用的移动办公平台


🖼️ 提取的插图 (共 13 张)

image12.jpeg

image14.jpeg

image5.jpeg

image6.gif