以前一直是我自已在用DataReport展示数据, 如今天随着数据越来越多, 我的同事也开始使用DataReport来展示数据了. 在他们使用的过程中, 渐渐显示出某些需要改进和完善的地方. 对于我的同事来讲, 编辑报表定义文件已不是问题, 但编辑用于控制报表显示的XSL文件则相当痛苦, 我也充分理解这种痛苦.
比如让页面显示一排表单(Form)输入框, 让用户自行输入参数, 几经思量, 终于想出了一个解决的方法, 在报表定义中新增了一个属性.
WEBCHART.INPUTS=Type|Name|Value[|Attributes]
Type|Name|Value[|Attributes]
比如在报表定义文件中加入如下一行.
WEBCHART.INPUTS=TEXT|P1|$P1|size="4" label="Year:"
TEXT|P2|$P2|size="3" label="Mon:"
在生成的XML数据流中, 就会有如下数据.
<inputs>
<item type="TEXT" name="P1" value="P1" size="4" label="Year:" />
<item type="TEXT" name="P2" value="P2" size="3" label="Mon:" />
</inputs>
在XSL文件中, 就可以用统一的方式进行HTML转换.
......
<xsl:apply-templates select="inputs" />
......
<xsl:template match="inputs" >
<div>
<form. method="POST">
<xsl:attribute name="action">
<xsl:value-of select="//param[@id='REQUEST.FILE']" />
</xsl:attribute>
<xsl:for-each select="item">
<xsl:if test="@label">
<xsl:value-of select="@label" />
</xsl:if>
<input>
<xsl:attribute name="type"><xsl:value-of select="@type" />
</xsl:attribute>
<xsl:attribute name="name"><xsl:value-of select="@name" />
</xsl:attribute>
<xsl:attribute name="value"><xsl:value-of select="@value" />
</xsl:attribute>
<xsl:if test="@size">
<xsl:attribute name="size"><xsl:value-of select="@size" />
</xsl:attribute>
</xsl:if>
</input>
</xsl:for-each>
<input type="submit" value="Query" />
</form>
</div>
</xsl:template>
......
将原本需要在XSL中定义的内容, 移到报表定义文件的属性中, 增加XSL文件的通用性.