引用 BI 发布者 RTF 模板中子重复部分中的父组项



我的项目需要能够在子组的重复部分中引用父组中的字段。这是设置。我已经标记了每个位置:AB 和 C 用于我自己的测试目的。D 是实际需要打印的那个。A 是唯一实际会打印的。令人困惑的部分是,"每次检查"组在每个Q_P58W1上循环,P58WCHCK是其中的成员,但它仅在该分组之外打印。

作为记录,每个for-each组之后的代码在实际文档中不存在,我只是将其粘贴在那里以明确分组结构的工作原理。

这是我正在使用的xml的副本(编辑以删除敏感信息(:

<?xml version="1.0" encoding="UTF-8"?>
<!--Generated by Oracle BI Publisher 12.2.1.3.0 -Dataengine, datamodel:_ICIM_DM_P58R01_DM_xdm -->
<DATA_DS><P_JNO_IN>271720364</P_JNO_IN>
<Q_A01F>
<A01SEQ>1</A01SEQ><VOID_LINE1>VOID     VOID     VOID     VOID     VOID</VOID_LINE1><VOID_LINE2>    VOID     VOID     VOID     VOID</VOID_LINE2><LOCATION_IN>0005</LOCATION_IN><AHL1>03</AHL1><ACCOUNT_IN>290</ACCOUNT_IN>
<Q_P58W1>
<P58WCHCK>09077475</P58WCHCK>
<G_1>
<P58WVENNO>93373</P58WVENNO><P58WNAME1>FASTSIGNS</P58WNAME1><P58WADR1></P58WADR1><P58WCSZ></P58WCSZ><P58WPAYN>$12.00</P58WPAYN><P58WPAYW1>Twelve Dollars and 00 Cents*****</P58WPAYW1><P58WGAMT>12</P58WGAMT><P58WDAMT>0</P58WDAMT><P58WNAMT>12</P58WNAMT><P58WCDATE>11 21 19</P58WCDATE><C_PRT_CHK></C_PRT_CHK><PAY_WORDS1>Twelve Dollars and 00 Cents*****</PAY_WORDS1><ADR_LINE1>FASTSIGNS</ADR_LINE1><ADR_LINE3></ADR_LINE3><ADR_LINE6></ADR_LINE6><ACCOUNT_NAME></ACCOUNT_NAME><COUNTRY></COUNTRY><ADDRESS1></ADDRESS1><ADDRESS2></ADDRESS2><ADDRESS3>VOID VOID VOID</ADDRESS3><CITY></CITY><STATE></STATE><ZIP></ZIP><DUMMY_FLAG>DUMMY</DUMMY_FLAG><LOGO_FLAG></LOGO_FLAG><ADR_LINES>FASTSIGNS

</ADR_LINES>
<Q_P58W2>
<P58WINVNO>12</P58WINVNO><P58WVOUCH>637866</P58WVOUCH><P58WIDATE>2019-11-22T00:00:00.000-06:00</P58WIDATE><P58WGAMT>12</P58WGAMT><P58WDAMT>0</P58WDAMT><P58WNAMT>12</P58WNAMT><C_PRT_DATE>11/22/19</C_PRT_DATE>
</Q_P58W2>
<C_PRT_PAY_TOT>$12.00</C_PRT_PAY_TOT>
<CS_NUM_VOUCHERS>1</CS_NUM_VOUCHERS>
</G_1>
<G_1>
<P58WVENNO>93373</P58WVENNO><P58WNAME1>FASTSIGNS</P58WNAME1><P58WADR1></P58WADR1><P58WCSZ></P58WCSZ><P58WPAYN>$12.00</P58WPAYN><P58WPAYW1>Twelve Dollars and 00 Cents*****</P58WPAYW1><P58WGAMT>12</P58WGAMT><P58WDAMT>0</P58WDAMT><P58WNAMT>12</P58WNAMT><P58WCDATE>11 21 19</P58WCDATE><C_PRT_CHK></C_PRT_CHK><PAY_WORDS1>Twelve Dollars and 00 Cents*****</PAY_WORDS1><ADR_LINE1>FASTSIGNS</ADR_LINE1><ADR_LINE3></ADR_LINE3><ADR_LINE6></ADR_LINE6><ACCOUNT_NAME></ACCOUNT_NAME><ACCOUNT_NUMBER></ACCOUNT_NUMBER><ROUTING_NUMBER></ROUTING_NUMBER><COUNTRY></COUNTRY><ADDRESS1></ADDRESS1><ADDRESS2></ADDRESS2><ADDRESS3>VOID VOID VOID</ADDRESS3><CITY></CITY><STATE></STATE><ZIP></ZIP><DUMMY_FLAG>NORMAL</DUMMY_FLAG><LOGO_FLAG></LOGO_FLAG><ADR_LINES>FASTSIGNS

</ADR_LINES>
<Q_P58W2>
<P58WINVNO>12</P58WINVNO><P58WVOUCH>637866</P58WVOUCH><P58WIDATE>2019-11-22T00:00:00.000-06:00</P58WIDATE><P58WGAMT>12</P58WGAMT><P58WDAMT>0</P58WDAMT><P58WNAMT>12</P58WNAMT><C_PRT_DATE>11/22/19</C_PRT_DATE>
</Q_P58W2>
<C_PRT_PAY_TOT>$12.00</C_PRT_PAY_TOT>
<CS_NUM_VOUCHERS>1</CS_NUM_VOUCHERS>
</G_1>
</Q_P58W1>
</Q_A01F>
<CF_PROPERTIES>
<REPORT_NAME>P58R01</REPORT_NAME><REPORT_DESCRIPTION>Check Print And Update</REPORT_DESCRIPTION><VERSION_NUMBER>V11.0.001</VERSION_NUMBER><DATABASE_NAME>DEV</DATABASE_NAME><USER_NAME></USER_NAME><RUN_DATE>2019-11-22T10:39:20.000-06:00</RUN_DATE>
</CF_PROPERTIES>
</DATA_DS>

很难确切地说出你想要什么,但我想我明白了。只需为您想要升级的每个级别使用../即可。

XML 示例:

<LIST_PARENT>
   <PARENT>
      <PARENT_NUMBER>1</PARENT_NUMBER>
      <PARENT_ATTRIBUTE>A</PARENT_ATTRIBUTE>
      <LIST_CHILD>
         <CHILD>
            <CHILD_NUMBER>1</CHILD_NUMBER>
            <CHILD_ATTRIBUTE>A</CHILD_ATTRIBUTE>
         </CHILD>
         <CHILD>
            <CHILD_NUMBER>2</CHILD_NUMBER>
            <CHILD_ATTRIBUTE>B</CHILD_ATTRIBUTE>
         </CHILD>
      </LIST_CHILD>
   </PARENT>
   <PARENT>
      <PARENT_NUMBER>2</PARENT_NUMBER>
      <PARENT_ATTRIBUTE>B</PARENT_ATTRIBUTE>
      <LIST_CHILD>
         <CHILD>
            <CHILD_NUMBER>1</CHILD_NUMBER>
            <CHILD_ATTRIBUTE>A</CHILD_ATTRIBUTE>
         </CHILD>
         <CHILD>
            <CHILD_NUMBER>2</CHILD_NUMBER>
            <CHILD_ATTRIBUTE>B</CHILD_ATTRIBUTE>
         </CHILD>
      </LIST_CHILD>
   </PARENT>
</LIST_PARENT>

RTF 代码:

<for-each:PARENT>
   Parent Number: <PARENT_NUMBER>
   Parent Attribute: <PARENT_ATTRIBUTE>
   <for-each:CHILD>
      Child Number: <CHILD_NUMBER>
      Child Attribute: <CHILD_ATTRIBUTE>
      Parent Number: <../../PARENT_ATTRIBUTE>
   <end for-each>
<end for-each>

以下作品:

<?for-each:Q_P58W1?>
    <?P58WCHCK?>
<?end for-each?>

添加重复组for-each-check 时,您已经在循环Q_P58W1 。FOProcessor只是将其解释为<?for-each:Q_P58W1?>。然后,您在文本中添加了另一个<?for-each:Q_P58W1?>,但 FOProcessor 以相同的方式解释它。

这使您的示例代码:

<?P58WCHCK?>
<?for-each:Q_P58W1?><?for-each:Q_P58W1?>
    <?P58WCHCK?>
    ...
<?end for-each?>

在您的示例中,不清楚如何关闭 for-each 循环。如果您没有两次关闭 for-each 循环,则您的语法不正确。如果您确实关闭它,则您正在尝试打印不存在的Q_P58W1/Q_P58W1/P58WCHCK

解决方案: 删除文本<?for-each:Q_P58W1?><?for-each:G_1?>,如果适用,删除匹配的结束<?end for-each?>

经过更多的环顾四周,我找到了答案。我想包含在子组中的元素 - Q_P58W1/P58WCHCK - 拒绝在<?for-each:G_1?>循环中打印,因此我只是更改了我的 BI Publisher 数据模型,以便查询两次选择检查号,作为具有不同别名的两个不同元素。其中之一,P58WCHCK,仍然是分组在Q_P58W1下的单一元素,因为这是必需的功能。另一个只是成为子组每一行的一部分。为清楚起见,下面是数据模型框的屏幕截图。

最新更新