Oracle BI Publisher RTF模板XSLT双条件If语句使用问题
BI Publisher RTF模板choose分支逻辑报错修复
问题定位
代码报错、逻辑不执行的问题来自3个明确的语法错误:
- 标签嵌套违规:在
<?xdofx?>语法块内部嵌套了原生XDO的<?if?>流程控制标签,两类语法不能交叉嵌套,属于解析级错误,会直接导致模板预览失败。同时在xdofx块的赋值语句末尾多拼了一个无意义的右括号),进一步破坏了语法结构。 - 闭合标签拼写错误:choose块的结束标签写成了
<?end chose?>,正确拼写为<?end choose?>,拼写错误会导致整个for-each内的choose分支全部解析失效。 - 多条件逻辑写法冗余:要实现的「匹配MessageID后,同时判断国家、币种两个条件再赋值」的逻辑,不需要混用xdofx的if-then语法,直接沿用代码里其他分支已经在用的
and拼接多条件写法即可,写法统一也能避免解析异常。
修复方案
- 替换两处标注异常的REMITTO_CA、REMITTO_CD分支代码,删除错误的xdofx嵌套写法,直接用原生if+and拼接判断条件:
<?when:MessageID_ID5='REMITTO_CA'?> <?if:../Sold_To_Country_ID47='CA' and ../CurrencyCodeFrom_ID18='USD'?> <?xdoxslt:set_variable($_XDOCTX, 'REMITTO', PrintMessage_ID3)?> <?end if?> <?end when?> <?when:MessageID_ID5='REMITTO_CD'?> <?if:../Sold_To_Country_ID47='CA' and ../CurrencyCodeFrom_ID18='CAD'?> <?xdoxslt:set_variable($_XDOCTX, 'REMITTO', PrintMessage_ID3)?> <?end if?> <?end when?>
- 将choose块末尾的错误闭合标签
<?end chose?>修改为<?end choose?>。
注意事项
- 其余分支的现有写法(包括REMITTO_IN的and多条件判断、REMITTO_US的嵌套not判断)均为合法语法,不需要调整。
xdofx语法仅适合做单行函数计算、简单值映射,不要在其内部嵌套if/for-each/choose这类流程控制标签,流程控制统一使用原生XDO标签实现即可。- 修复后可先用CA地区+USD/CAD币种的测试样本预览,验证REMITTO变量赋值是否符合预期。
内容的提问来源于stack exchange,提问作者Jagarious
相关产品推荐
相关产品推荐

