AEM Forms表格插入行脚本问题:首次迭代后停止执行部分代码
AEM Forms FormCalc脚本:插入选中行后停止运行的问题修复
你的脚本在执行第一次行插入操作后就停止迭代,导致取消复选框、更新行计数、跳至下一行的逻辑未正常执行。核心问题是从前往后遍历行时,插入新行会打乱后续行的索引,导致循环逻辑提前终止。
问题根源
当你从前往后遍历行(i从0开始递增),插入新行后,后续行的索引会自动+1,而手动维护的rowCount和索引i的同步逻辑存在漏洞,最终导致循环提前结束。
修复方案
改为从后往前遍历行,这样插入新行不会影响未遍历的行索引,避免逻辑混乱。同时直接使用实例管理器的实时count属性,不需要手动维护rowCount变量。
修正后的代码:
form1.Button.Button8::click - (FormCalc, client) var rowCount = Table1.Row1.instanceManager.count; // 从最后一行开始往前遍历 var i = rowCount - 1; while (i >= 0) do if (Table1.Row1[i].Subform01.CheckBox1.rawValue == 1) then // 在选中行后插入新行 var newRow = Table1.Row1.instanceManager.insertInstance(i + 1); // 复制选中行的内容到新行 newRow.Subform02.Text01.rawValue = Table1.Row1[i].Subform02.Text01.rawValue; newRow.Subform02.Text02.rawValue = Table1.Row1[i].Subform02.Text02.rawValue; newRow.Subform02.Image01.rawValue = Table1.Row1[i].Subform02.Image01.rawValue; newRow.Quantity.rawValue = Table1.Row1[i].Quantity.rawValue; newRow.Unit.rawValue = Table1.Row1[i].Unit.rawValue; newRow.UnitPrice.rawValue = Table1.Row1[i].UnitPrice.rawValue; newRow.TotalPrice.rawValue = Table1.Row1[i].TotalPrice.rawValue; // 取消选中行的复选框 Table1.Row1[i].Subform01.CheckBox1.rawValue = 0; // 插入后无需调整i,因为是从后往前遍历,新行在当前行之后,不影响前面的行 endif i = i - 1; // 往前移动一行 endwhile
关键优化点
- 从后往前遍历:避免插入新行导致的索引偏移问题,确保所有选中行都能被处理
- 移除手动维护的rowCount更新:直接依赖实例管理器的
count属性,保证行数量的准确性 - 简化索引逻辑:无需在插入后递增
i,减少逻辑出错的可能
内容的提问来源于stack exchange,提问作者Krm Ynk
相关产品推荐
相关产品推荐

