В противном случае в Oracle BI Publisher не работает - PullRequest
0 голосов
/ 04 ноября 2019

У меня есть следующая структура 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>

Я поместил следующую логику в свой шаблон RTF внутри FOR-EACH в таблице:

<?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 Имен источников, и я хотел быупростить код.

Есть идеи, почему он не работает?

1 Ответ

1 голос
/ 04 ноября 2019
<?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

Даже если вы делаете цикл for-each, // перейдет к корню и затем просто выберет все элементы BATCH_SOURCE_NAME.

//BATCH_SOURCE_NAME='FreightMaster' всегда верно для ваших данных, потому что существует строка, в которой напечатано BATCH_SOURCE_NAME='FreightMaster', поэтому <?CT_REFERENCE?>, что является нулем для первой строки.

Во втором случае BATCH_SOURCE_NAME='MIGRATION'всегда верно по той же причине, поэтому теперь вы печатаете INVOICE_NUMBER для каждой строки. Результат правильный, потому что INVOICE_NUMBER совпадает с CT_REFERENCE для строк 2 и 3.

...