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

Polarion Velocity脚本自定义整数字段求和失败求助

Velocity脚本工作项字段求和失败问题解决

问题场景

刚接触Velocity脚本,此前简单脚本运行正常,但筛选工作项并对自定义整数字段NumberPack求和时,总和Total始终为0,原脚本如下:

#set($PCR = $transaction.workItems.search.query("type:Paramrequest AND created:[20220101 TO 30000000] AND NumberPack.1:[00000000001 TO 02147483647]"))
#set($Total = 0)
#set($Pack = 0)
#set($x = 0)

#foreach($PCR in $PCR)
    ##set($Pack = $Pack.parseInt($PCR.fields.get("NumberPack")))
    ##set($x = $Total.add($Pack))
    $PCR.fields.get("NumberPack").render ## this renders each NumberPack of each WI
    #set($Pack = $PCR.fields.get("NumberPack"))
    ##set($x = $Total2.add($PCR.fields.get("NumberPack")))
    ##set($Total2 = $Total2 + 1)
    #set($x = $math.add($x, 1))

#end

<br> Total: $Total
<br> $x

问题排查

  1. 变量名冲突:循环变量$PCR和存储查询结果的变量$PCR重名,导致循环遍历逻辑异常,无法正确访问每个工作项的字段。
  2. 未有效更新总和:原脚本没有对$Total执行有效的累加操作,被注释的代码要么语法错误,要么未实际生效;且Velocity中数值为不可变类型,必须通过重新赋值更新变量。
  3. 类型处理缺失:未确保NumberPack字段值被转为可运算的整数类型,若返回为字符串会导致累加逻辑失效。
  4. $math.add使用错误:原代码中$math.add($x, 1)未重新赋值给$x,虽然这里不影响求和,但属于不规范用法。

修正后的脚本

#set($pcrList = $transaction.workItems.search.query("type:Paramrequest AND created:[20220101 TO 30000000] AND NumberPack.1:[00000000001 TO 02147483647]"))
#set($Total = 0)
#set($itemCount = 0)

#foreach($item in $pcrList)
    #set($packValue = $item.fields.get("NumberPack"))
    #set($packInt = $numberTool.parseInt($packValue))
    #set($Total = $math.add($Total, $packInt))
    #set($itemCount = $math.add($itemCount, 1))
    $packValue.render
#end

<br> Total: $Total
<br> 处理的工作项数量: $itemCount

关键修改说明

  • 修复变量冲突:将查询结果变量改为$pcrList,循环变量用$item,保证遍历逻辑正常执行。
  • 正确累加总和:通过$math.add()计算新总和并重新赋值给$Total,符合Velocity不可变数值的特性。
  • 类型安全转换:用$numberTool.parseInt()将字段值转为整数,避免字符串类型导致的运算错误。
  • 简化冗余代码:移除无效注释和冗余变量,让逻辑更清晰易懂。

内容的提问来源于stack exchange,提问作者Julien Llanes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 23:45:40