2017-01-11 3 views
1

ich einen XML-Datensatz von BI Publisher produziert haben, die zwei Gruppen enthältdynamisch Header in BI Publisher Vorlage

XML-Input-:

<DS> 
    <G_1> 
     <TASK_NAME>IMPORTANT TASK</TASK_NAME> 
     <PROJECT_DESCRIPTION>ACTIVATION</PROJECT_DESCRIPTION> 
     <CS_SUM_TASK_COST>100.03</CS_SUM_TASK_COST> 
     <CS_SUM_TASK_FUNDING>2000</CS_SUM_TASK_FUNDING> 
    </G_1> 

    <G_1> 
     <TASK_NAME>IMPORTANT TASK</TASK_NAME> 
     <PROJECT_DESCRIPTION>DEACTIVATION</PROJECT_DESCRIPTION> 
     <CS_SUM_TASK_COST>50.00</CS_SUM_TASK_COST> 
     <CS_SUM_TASK_FUNDING>5000</CS_SUM_TASK_FUNDING> 
    </G_1> 
    . 
    . 

    <G_2> 
     <INVOICE_NUMBER>7000006861</INVOICE_NUMBER> 
     <INVOICE_DATE>2004-03-26T07:23:49.000-05:00</INVOICE_DATE> 
     <INV_AMOUNT>5.01</INV_AMOUNT> 
    </G_2> 
    <G_2> 
     <INVOICE_NUMBER>7000006862</INVOICE_NUMBER> 
     <INVOICE_DATE>2004-03-26T07:23:49.000-05:00</INVOICE_DATE> 
     <INV_AMOUNT>10.01</INV_AMOUNT> 
    </G_2> 
    . 
    . 
</DS> 

wie kann ich einen anderen Header für die INVOICE wählen Knoten?

Ich habe in meinem RTF-Dokument versucht, den folgenden Ansatz

<?choose:?> 
<?when://G_2[contains(local-name(), 'INVOICE')]?> 
HEADER 1 
<?end when?> 

<?otherwise?> 
HEADER 2 
<?end otherwise?> 
<?end choose?> 

<?body:begin?> 
for each processing of G_1 nodes 

<<I Want to start using the second header here>> 

for each processing of G_2 nodes 
<?body end?> 

Der Header ändert sich nie.

Bitte assistieren Sie mir.

+0

Ich habe vergessen zu erwähnen, dass ich einige Werte aus dem Datensatz in der Kopfzeile benötigen. Bei diesem Ansatz setzt @section alle Werte zurück, so dass sie in der Kopfzeile leer sind. Es funktioniert, wenn ich nur statischen Text in der Kopfzeile anzeigen möchte. – JBOYD

Antwort

1

Verwenden Sie zum Steuern des Headers den Befehl @section und eine globale Variable. Versuche dies.

Setzen Sie diesen Code in den Körper.

<[email protected]:G_1?> 
<?xdoxslt:set_variable($_XDOCTX, 'HEADER', 'INVOICE')?> 
<?end for-each?> 
<[email protected]:G_2?> 
<?xdoxslt:set_variable($_XDOCTX, 'HEADER', 'OTHER')?> 
<?end for-each?> 

diese nun in den Kopf gesetzt: <?xdoxslt:get_variable($_XDOCTX, 'HEADER')?>

BIP teilt den Datensatz mit @section ersten und druckt die Variable ‚Header‘ für alle Seiten, bis die nächste Zwischenzeit erreicht ist.

+0

Dies erzeugt ein leeres Dokument – JBOYD

0

Dieser Ansatz funktioniert für die gestellte Frage.

Aber ich habe vergessen zu erwähnen, dass ich Werte aus dem Datensatz in der Kopfzeile und nicht nur statischen Text enthalten muss. Die Verwendung von @section verhindert dies, weil alle Werte außerhalb von jedem zurückgesetzt werden und daher in der Kopfzeile leer sind.

Ich markiere dies als gelöst für die ursprünglich gestellte Frage.

Verwandte Themen