任何人都可以告诉我这个我在SharePoint Designer中使用的代码有什么问题:
<xsl:choose>
<xsl:when test="number((ddwrt:DateTimeTick(ddwrt:GenDisplayName(string(ddwrt:Today())))- (ddwrt:DateTimeTick(ddwrt:GenDisplayName(string(@Date_x0020_only))))) div 864000000000) > 7 div 864000000000 and <= 14 div 864000000000">
<h2> <strong><span style="font-size: 8pt"> WEEK 1 </span></strong>
<xsl:text xmlns:ddwrt="http://schemas.microsoft.com/WebParts/v2/DataView/runtime" ddwrt:whitespace-preserve="yes" xml:space="preserve"> </xsl:text>
</h2>
</xsl:when>
</xsl:choose>
如果我取出<= 14 div 864000000000
部分,它就有效但我基本上试图标记一些东西,如果它的年龄介于7和<= 14天之间,但似乎无法使其发挥作用。
这是错误:
SharePoint Designer cannot render the XSLT in this Data View. Try to undo your changes or re-insert the Data View.
Failed setting processor stylesheet : 0x80004005 : Expression expected. number((ddwrt:DateTimeTick(ddwrt:GenDisplayName(string(ddwrt:Today())))- (ddwrt:DateTimeTick(ddwrt:GenDisplayName(string(@Date_x0020_only))))) div 864000000000) > 7 div 864000000000 and --><=<-- 14 div 864000000000
更新:
非常感谢@matthias_h和@Jason Aller
所以这是我最终使用的代码:
<xsl:variable name="X"
select="number((ddwrt:DateTimeTick(ddwrt:GenDisplayName(
string(ddwrt:Today())))-(ddwrt:DateTimeTick(ddwrt:GenDisplayName(
string(@Date_x0020_only))))) div 864000000000)">
</xsl:variable>
<xsl:if test="$X > 0 div 864000000000 and $X <= 7 div 864000000000">
<xsl:text> WEEK 1</xsl:text>
</xsl:if>
<xsl:if test="$X > 7 div 864000000000 and $X <= 14 div 864000000000">
<xsl:text> WEEK 2</xsl:text>
</xsl:if>
<xsl:if test="$X > 14 div 864000000000 and $X <= 21 div 864000000000">
<xsl:text> WEEK 3</xsl:text>
</xsl:if>
<xsl:if test="$X > 21 div 864000000000">
<xsl:text> Escalation</xsl:text>
</xsl:if>
现在,这在Sharepoint设计器预览部分中有效,它看起来像这样:
11/7/2014 11:56 AM升级
11/7/2014 11:56 AM升级
11/7/2014 11:56 AM升级
11/26/2014 8:47 AM升级
2014年12月18日下午3:10第2周
但是在浏览器中显示如下:
11/7/2014 11:56 AM升级
11/7/2014 11:56 AM升级
11/7/2014 11:56 AM升级
11/26/2014 8:47 AM升级
12/18/2014 3:10 PM升级
12/29/2014 1:48 PM Escalation
由于某种原因,它称它们全部升级。有什么建议吗?
我真的很感激帮助。
更新2
谢谢@matthias_h
回答你的问题:
1。)是的,它在SPD预览中是正确的,但在浏览器中不正确。
2。)这就是SPD中的值
11/7/2014 11:56 AM升级0.00000000006134259259259259
11/7/2014 11:56 AM升级0.00000000006134259259259259
11/7/2014 11:56 AM升级0.00000000006134259259259259
11/26/2014 8:47 AM升级0.00000000003935185185185185
2014年12月18日下午3:10第2周0.000000000013888888888888888
这些是浏览器中的值的样子
11/7/2014 11:56 AM升级53
11/7/2014 11:56 AM升级53
11/7/2014 11:56 AM升级53
11/26/2014 8:47 AM升级34
12/18/2014 3:10 PM Escalation 12
您认为它与我有关,将所有内容划分为864000000000?
我这样做的原因是因为它没有在浏览器中正确地延迟日期差异。
所以我使用了这个解决方案:http://sympmarc.com/2013/01/page/2/
再次感谢您的帮助
答案 0 :(得分:2)
由于缺少命名空间和函数,我无法测试完整的表达式,但我认为存在以下语法错误,例如:
<xsl:when test="value > 14 and < 7">
应该是
<xsl:when test="value > 14 and value < 7">
我建议 - 为了可读性,将number()中的表达式作为变量,例如
<xsl:variable name="testString"
select="number((ddwrt:DateTimeTick(ddwrt:GenDisplayName(
string(ddwrt:Today())))-(ddwrt:DateTimeTick(ddwrt:GenDisplayName(
string(@Date_x0020_only))))) div 864000000000)">
然后检查是否
<xsl:when test="$testString > 7 div 864000000000
and $testString <= 14 div 864000000000">
会奏效
此外,如果您没有xsl:otherwise
或其他xsl:when
个案例,则可以改为xsl:if
。