在之前两个练习中,在使用数据视图或XLV Web部件时,你使用了XPath Expression Builder创建公式处理从SP返回的XML数据。然而使用XPathExpression Builder不能创建所有你需要的公式或表达式。有时候,为了获得更高程度的灵活性和控制,你需要以代码视图编辑XSLT,智能提示可以帮忙。然而,你需要深入了解XSLT才能直接编辑。你需要以代码视图编辑XSLT的例子就是处理计算值栏。
默认情况下,SP给每个数字栏目提供两个栏。一个栏提供列表项目数值,第二个提供数值的显示格式。当数字栏目代表货币时,显示栏的值就包含逗号、点和货币符号。为了计算这些货币值的和,你使用数字栏。如果你使用显示栏来完成数学计算的话,XPath表达式会出错,显示NaN(not a number)。数字栏有与显示栏相同的名字,但是名字附加有个点。
计算值栏没有相关数字栏。因此在XPath表达式中选择正确的栏目不是简单的任务。你在下面练习中使用的解决方案首先计算了节点函数,捕获XSL变量中的结果作为结果树部分,紧接着使用msxsl:node-set函数被转化用来作为总和函数的输入。在你配置计算值栏的时候,如果你不想创建自己的XLST代码,不要选择公式返回为货币类型。相反,创建额外的栏目储存货币符号。
本次练习中,你使用插入公式对话框,并在代码视图中,修改XSLT代码来更正两个组的总和(非数字)。
准备:打开CreateDVWP.aspx,选中SalesReport DFWP
1. 在List Price栏目点击NaN,在选项,点击公式
小贴士:你可能需要再次点击NaN来高光。
2. 在Price和)中间,输入“.”点击确定。
小贴士:你可以使用format-number公式将List Price格式为货币
3. 在Total Purchased栏,点击NaN,点击拆分(视图)。
小贴士:你可能需要再次点击NaN来高光。
4. 在快速标签选择器上,点击<xsl:if>
代码视图中,<xsl:iftest "$showfootercolumn ddwrt:cf-ignore "1">标签内部高光
5. 在代码视图,在<xsl:if左边按下Enter两次
6. 在第一空行,输入<xsl:var,按下Tab选择xsl:variable.按下空格,输入n,按下Tab选择name。
7. 在两个引号中间输入SumTotalPurchaseNodeset。在引号右边输入“>”,按下Enter两次。代码应该是这样:
<xsl:variable name="SumTotalPurchasedNodeset">
</xsl:variable>
8. 使用前几步用的技巧,创建下面的代码:
<xsl:variable name="SumTotalPurchasedNodeset">
<xsl:for-each select="$nodeset">
<Value>
<xsl:value-of
select="substring-after(translate(@Total_x0020_Purchased,',',''),'$')"/>
</Value>
</xsl:for-each>
</xsl:variable>
小贴士:如果你不想输入代码,在SPDSBSC05.txt中复制粘贴也可以。
9. 在设计视图,Total Purchased栏目,点击NaN,在代码视图,删除
<xsl:value-of select="sum($nodeset/@Total_x0020_Purchased"/>。输入:
<xsl:value-of
select="concat('$',sum(msxsl:node-set($SumTotalPurchasedNodeset)/Value))"/>
10. 在设计视图,点击NaN。
页面刷新,NaN被代替为$80619.40.