BI Publisher logi c для проверки существования в группе - PullRequest
0 голосов
/ 28 января 2020

Я работаю с шаблоном PeopleSoft BI Publisher RTF и буду работать с документом XML, содержащим несколько строк, как показано ниже:

<?xml version='1.0'?>
<query numrows="3" queryname="GH3_HRS_OFFER_DS" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="">
<row rownumber="1">
<A.ERNCD/>
<A.EARNS_AMT>0</A.EARNS_AMT>
<A.OFFER_COMPONENT><![CDATA[BASSAL]]></A.OFFER_COMPONENT>
</row>
<row rownumber="2">
<A.ERNCD/>
<A.EARNS_AMT>0</A.EARNS_AMT>
<A.OFFER_COMPONENT><![CDATA[PROB]]></A.OFFER_COMPONENT>
</row>
<row rownumber="3">
<A.ERNCD/>
<A.EARNS_AMT>0</A.EARNS_AMT>
<A.OFFER_COMPONENT><![CDATA[SIGNON]]></A.OFFER_COMPONENT>
</row>
</query>

Мне нужно отобразить 1-й абзац, если у данных есть строка с OFFER_COMPONENT = 'PROB', и я думаю, что это работает нормально, как и для первого абзаца.

Однако я хочу, чтобы эта функция работала так, чтобы отображался либо 1-й абзац выше, или 2-й абзац (<?if@inlines:A.OFFER_COMPONENT<>'PROB'?>), но не оба.

Я надеваю Не думаю, что способ, которым у меня есть 2-й абзац с кодировкой <?if@inlines:A.OFFER_COMPONENT<>'PROB'?>), не позволит отображать этот абзац, поскольку, когда он встречает строку со значением, отличным от 'PROB', он также отображает этот абзац. Я хочу иметь возможность по существу проверить наличие в группе (несколько строк), является ли поле A.OFFER_COMPONENT ='PROB'. Если одна из строк для этого поля содержит «PROB», тогда я НЕ хочу, чтобы отображался второй абзац.

Я посмотрел в Интернете и не сразу увидел способ проверки существование значения поля в нескольких строках, поэтому, если кто-нибудь знает способ сделать это, я был бы признателен. Заранее спасибо!

enter image description here

Ответы [ 2 ]

0 голосов
/ 29 января 2020

Во-первых, для выбора абзаца используйте <?if@inlines:A.OFFER_COMPONENT='PROB'?> для первого абзаца и <?if@inlines:A.OFFER_COMPONENT<>'PROB'?> для второго абзаца. Обязательно завершая каждое условие if с помощью end-if

Во-вторых, я вижу, что вы используете много операторов for-each для разделов, которые не будут содержать или не должны содержать несколько строк. Например, у вас есть это:

... будет только $ для каждого 0,00 end в час, ...

для -все для нескольких записей. Вы уже находитесь на уровне row, поэтому нет необходимости go снова вводить row с for-each. В противном случае, если вам нужно перейти по пути XML, просто используйте row/A.OFFER_AMT.

for-each следует использовать для чего-то вроде строки счета-фактуры или упаковочного листа, где вы хотите отображать одно и то же несколько раз, как для всех предметов в счете-фактуре или упаковочном листе.

0 голосов
/ 29 января 2020

Таким образом, вы можете проверить, нужно ли печатать первый абзац. Ницца. Теперь, сразу после того, как вы напечатаете первый абзац, вы можете установить для глобальной переменной значение true. Проверьте xdoxslt:set_variable. Теперь вам нужно распечатать второй абзац, только если значение этой глобальной переменной равно false.

...