在BI Publisher模板中动态更改标头

时间:2017-01-11 17:15:40

标签: xml xpath rtf bi-publisher

我有一个由BI Publisher生成的XML数据集,它包含两个组

输入XML:

<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>

如何为INVOICE节点选择不同的标头?

我在我的RTF文档中尝试了以下方法

<?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?>

标题永远不会改变。

请帮助我。

2 个答案:

答案 0 :(得分:1)

要控制标题,请使用@section命令和全局变量。试试这个。

将此代码放入正文中。

OpenSessionInViewFilter

现在将其放入标题:<?for-each@section:G_1?> <?xdoxslt:set_variable($_XDOCTX, 'HEADER', 'INVOICE')?> <?end for-each?> <?for-each@section:G_2?> <?xdoxslt:set_variable($_XDOCTX, 'HEADER', 'OTHER')?> <?end for-each?>

BIP首先用@section拆分数据集,并打印变量&#39; HEADER&#39;对于所有页面,直到达到下一个分割。

答案 1 :(得分:0)

这种方法适用于所提出的问题。

但我忽略了提到我需要在标题中包含数据集中的值,而不仅仅是静态文本。使用@section可以防止这种情况,因为for-each之外的所有值都被重置,因此在标题中是空白的。

我将此标记为原始提出的问题已解决。