Xslt 双发行者条件排序问题
我无法让BI Publisher根据我的参数进行排序。数据模型中的参数名为SORTBY,有两个选项名称:出生日期。这些值来自数据模型中与结果集中的字段名匹配的值列表。我希望报告按用户选择的字段排序 下面是我在RTF模板中使用BI Pub标记的代码:Xslt 双发行者条件排序问题,xslt,obiee,bi-publisher,Xslt,Obiee,Bi Publisher,我无法让BI Publisher根据我的参数进行排序。数据模型中的参数名为SORTBY,有两个选项名称:出生日期。这些值来自数据模型中与结果集中的字段名匹配的值列表。我希望报告按用户选择的字段排序 下面是我在RTF模板中使用BI Pub标记的代码: <?param@begin:SORTBY?> <?for-each:G_1?> <?if:SORTBY='NAME'?> <?sort:NAME;'ascending';'text'?> <?
<?param@begin:SORTBY?>
<?for-each:G_1?>
<?if:SORTBY='NAME'?>
<?sort:NAME;'ascending';'text'?>
<?end if?>
<?if:SORTBY='BIRTH_DATE'?>
<?sort:BIRTH_DATE;'ascending';'text'?>
<?end if?>
下面是从Microsoft Word导出的相关结果xsl fo:
<xsl:for-each select=".//G_1" xdofo:ctx="3">
...
<xsl:if test=".//SORTBY = 'NAME'" xdofo:ctx="3">
<xsl:sort select="(.//NAME)[1]" order="ascending" data-type="text"/>
</xsl:if>
<xsl:if test=".//SORTBY = 'BIRTH_DATE'" xdofo:ctx="3">
<xsl:sort select="(.//BIRTH_DATE)[1]" order="ascending" data-type="text"/>
</xsl:if>
...
</xsl:for-each>
通过一些同行编程,我的一位同事找到了答案。for-each不喜欢在其内部有if或choose。因此,您必须将参数分配给一个变量,并在排序中使用该变量 在for循环之外:
<?xdoxslt:set_variable($_XDOCTX,'Order',SORTBY)?>
For循环:
<?for-each:G_1?>
<?sort:./*[name() = xdoxslt:get_variable($_XDOCTX,'Order')];'ascending';'text'?>
说清楚一点,我认为声明应该是,你不能有条件地应用排序。当然,您可以在for each中使用条件if,选择/when格式化。但不能有条件地应用排序。提出的解决方案是一个很好的解决方案,这里也介绍了这一点: