我是Velocity脚本的新手,制作了一些简单的脚本,它们可以正常工作。我现在正在尝试其他方法,应该很简单,但我似乎不能使它工作。
我正在选择一堆工作项,读取一个自定义字段(NumberPack),我只想把它们加起来。
脚本如下:
#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
正如你所看到的,我尝试了一些方法,但我总是得到总0。
你知道我做错了什么吗?
感谢如果你写
#set($Pack = $PCR.fields.get("NumberPack"))
Pack: $Pack <br>
的输出类似于:
Pack: com.polarion.alm.server.api.model.fields.ProxyIntegerField@67807d51
在API Javadoc (https://almdemo.polarion.com/polarion/sdk/doc/javadoc-rendering/com/polarion/alm/shared/api/model/fields/IntegerField.html)中,您会发现API .model.fields IntegerField有一个get()方法,它为您提供了值。虽然我同意在文档中从未明确说明过这一点。
你需要写
#set($Pack = $PCR.fields.get("NumberPack").get())
获取值。下面的语句将为您提供累积的总和。
#set($Total = $math.add($Total, $PCR.fields.get("NumberPack").get()))
也要小心#foreach语句。在这种情况下,它似乎可以工作,但是给迭代器变量一个不同于要迭代的集合的名称会更安全。例如:
#foreach($PCR in $PCRs)