SPCAMLEditor使用系列(3)利用SPCamlEditor实现 时间字段跟当前时间进行实时比较计算

有这样一个需求:

 列表中有一个时间字段记录任务的开始时间(BeginTime), 现在要添加另外一个字段(TotalDay),这个字段显示到今天为止,任务开始了多少天。

看到这个需求,第一反应是采用计算列结合Today函数来实现。

经过研究,计算列式只有在编辑列表项的时候才会求值, 而且它是不支持Today和Me函数的。无法实现这个需求。

另外一个方案:写一个timer job,每天定时运行一下,更新下TodalDay字段的值。

毫无疑问,这个方案是行得通的,但是实现起来比较复杂。

幸运的是,我们可以通过列表视图的caml,直接控制列表的html输出。结合caml和javascript可以比较简单的实现这个需求。 

既然要修改视图的caml,自然少不了SPCamlEditor这个工具:http://www.cnblogs.com/jianyi0115/archive/2008/05/04/1182483.html

修改方法:

1)用SPCamlEditor复制出一个字段(从编辑字段复制)

2)修改DisplayPattern如下: 

  <DisplayPattern>

    <HTML><![CDATA[<script>currentTimeFieldValue = "]]></HTML>

    <Column Name="BeginTime" />

    <HTML><![CDATA[";</script>

      ]]></HTML>

    <HTML><![CDATA[<script>

       document.write(parseInt((new Date() - Date.parse(currentTimeFieldValue)) / 1000 / 24 / 3600));

      </script>]]></HTML>

  </DisplayPattern>

这个caml代码还是比较简单的,为了简化caml的结构,声明了一个js变量currentTimeFieldValue 放置当前的时间字段值。然后document.write将计算结果输出到页面。

实际使用时,请修改BeginTime为相应时间字段名。 

 

 

原文地址:https://www.cnblogs.com/jianyi0115/p/1776627.html