否则在 Oracle BI Publisher 中不工作

Otherwise in Oracle BI Publisher not Working

我的数据集中有以下 XML 结构:

<DATA_DS>
<G_1>
<INVOICE_NUMBER>20005</INVOICE_NUMBER>
<BATCH_SOURCE_NAME>MIGRATION</BATCH_SOURCE_NAME>
<CT_REFERENCE/>
</G_1>
<G_1>
<INVOICE_NUMBER>454162</INVOICE_NUMBER>
<BATCH_SOURCE_NAME>FM Source Number</BATCH_SOURCE_NAME>
<CT_REFERENCE>454162</CT_REFERENCE>
</G_1>
<G_1>
<INVOICE_NUMBER>455920</INVOICE_NUMBER>
<BATCH_SOURCE_NAME>FM Source Number</BATCH_SOURCE_NAME>
<CT_REFERENCE>455920</CT_REFERENCE>
</G_1>
</DATA_DS>

我已将以下逻辑放入 Table 中的 FOR-EACH 中的 RTF 模板中:

<?choose:?>
<?when://BATCH_SOURCE_NAME='FreightMaster'?><?CT_REFERENCE?><?end when?>
<?when://BATCH_SOURCE_NAME='FreightMaster-deactivated'?><?CT_REFERENCE?><?end when?>
<?when://BATCH_SOURCE_NAME='FM Source Number'?><?CT_REFERENCE?><?end when?>
<?otherwise:?><?INVOICE_NUMBER?><?end otherwise?>
<?end choose?>

但是,我的数据显示不正确。它显示为:

Invoice Number
-----------------
<null>
454162
455920

它应该像下面这样:

Invoice Number
-----------------
20005
454162
455920

当我尝试将 MIGRATION 定义为选项时,它起作用了:

<?choose:?>
<?when://BATCH_SOURCE_NAME='MIGRATION'?><?INVOICE_NUMBER?><?end when?>
<?when://BATCH_SOURCE_NAME='FreightMaster'?><?CT_REFERENCE?><?end when?>
<?when://BATCH_SOURCE_NAME='FreightMaster-deactivated'?><?CT_REFERENCE?><?end when?>
<?when://BATCH_SOURCE_NAME='FM Source Number'?><?CT_REFERENCE?><?end when?>
<?otherwise:?><?INVOICE_NUMBER?><?end otherwise?>
<?end choose?>  

实际输出与预期输出匹配:

Invoice Number
-----------------
20005
454162
455920

我知道我可以在 WHEN 子句中指定源名称,但是源名称有 20 多个,我想简化代码。

知道为什么它不起作用吗?

<?choose:?>
   <?when:BATCH_SOURCE_NAME='FreightMaster'?><?CT_REFERENCE?><?end when?>
   <?when:BATCH_SOURCE_NAME='FreightMaster-deactivated'?><?CT_REFERENCE?><?end when?>
   <?when:BATCH_SOURCE_NAME='FM Source Number'?><?CT_REFERENCE?><?end when?>
   <?otherwise:?><?INVOICE_NUMBER?><?end otherwise?>
<?end choose?>

勾选XPath reference

即使您正在执行 for-each 循环,// 也会导航到根目录,然后 select 所有 BATCH_SOURCE_NAME 元素。

//BATCH_SOURCE_NAME='FreightMaster' 对于您的数据始终为真,因为 BATCH_SOURCE_NAME='FreightMaster' 处存在一行,因此打印 <?CT_REFERENCE?>,第一行为空。

在第二种情况下,出于同样的原因,BATCH_SOURCE_NAME='MIGRATION' 始终为真,所以现在你为每一行打印 INVOICE_NUMBER。结果是正确的,因为 INVOICE_NUMBER 与第 2 行和第 3 行的 CT_REFERENCE 相同。