以前一直是我自已在用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文件的通用性.