多选择枚举自定义字段取值异常求助:工作项YES/NO输出问题
问题描述
需要在报表中为每个工作项,从多选择枚举自定义字段取值:若字段包含指定值则输出YES,否则输出NO,但以下代码无法正常工作:
#foreach($ref in $refList) #set($refWi = $transaction.workItems().getBy().oldApiObject($ref)) #set($arr=[$refWi.fields().get("Values")]) #foreach($item in $arr) #if($item == "Tablets") #set($isTablet = "YES") #else #set($isTablet = "NO") #end #end #end Printing the YES/No value .
问题分析
- 错误包装字段值:
$refWi.fields().get("Values")本身已经是多选择字段的集合(列表/数组),你用[$...]把它包裹成了单元素数组,导致内层循环只遍历一次,且是拿整个集合和字符串"Tablets"做比较,永远不会匹配。 - 逻辑覆盖问题:如果字段有多个值,只要最后一个值不是"Tablets",
$isTablet就会被设为NO,哪怕前面有符合条件的值。 - 未输出结果:代码末尾仅注释了输出说明,没有实际打印
$isTablet的值。
修正后的代码
#foreach($ref in $refList) #set($refWi = $transaction.workItems().getBy().oldApiObject($ref)) #set($isTablet = "NO") #set($values = $refWi.fields().get("Values")) #if($values) #foreach($item in $values) #if($item == "Tablets") #set($isTablet = "YES") #break // 找到目标值后直接跳出循环,避免被后续值覆盖 #end #end #end // 输出当前工作项的判断结果 $isTablet #end
修正说明
- 直接将多选择字段的集合赋值给
$values,不再额外包装数组。 - 初始化
$isTablet为NO,仅在找到匹配值时改为YES,避免后续值覆盖正确结果。 - 找到目标值后用
#break终止循环,提升处理效率。 - 增加
$values的空值判断,避免字段为空时触发循环错误。 - 在循环内直接输出每个工作项的判断结果,确保结果能正常显示。
内容的提问来源于stack exchange,提问作者Devi
相关产品推荐
相关产品推荐

