有这样一个需求:
列表中有一个时间字段记录任务的开始时间(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为相应时间字段名。