You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

关键优化点

  1. 从后往前遍历:避免插入新行导致的索引偏移问题,确保所有选中行都能被处理
  2. 移除手动维护的rowCount更新:直接依赖实例管理器的count属性,保证行数量的准确性
  3. 简化索引逻辑:无需在插入后递增i,减少逻辑出错的可能

内容的提问来源于stack exchange,提问作者Krm Ynk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 07:12:49