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

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拼接多条件写法即可,写法统一也能避免解析异常。

修复方案

  1. 替换两处标注异常的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?>
  1. 将choose块末尾的错误闭合标签<?end chose?>修改为<?end choose?>。

注意事项

  • 其余分支的现有写法(包括REMITTO_IN的and多条件判断、REMITTO_US的嵌套not判断)均为合法语法,不需要调整。
  • xdofx语法仅适合做单行函数计算、简单值映射,不要在其内部嵌套if/for-each/choose这类流程控制标签,流程控制统一使用原生XDO标签实现即可。
  • 修复后可先用CA地区+USD/CAD币种的测试样本预览,验证REMITTO变量赋值是否符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 06:27:18