计算列不能包含 volatile 函数,其中包括那些依赖于当前日期的函数。
SharePoint 列中的值(甚至是计算列中的值)存储在 SharePoint 的基础 SQL Server 数据库中。
计算列中的计算不会在页面加载时执行;相反,它们仅在更改项目时重新计算(在这种情况下,仅针对该特定项目重新计算公式),或者在更改列公式时(在这种情况下,为所有项目重新计算公式)。
如果您需要显示随时间变化的动态值,您有几种选择。
客户端渲染
考虑使用客户端呈现,它允许您使用 JavaScript 动态确定列表视图中的记录如何显示。此 JavaScript 在页面加载时运行,因此它可以比计算列更好地处理当前与时间相关的值。
要使用客户端呈现,您需要创建一个 JavaScript 文件来控制视图的显示方式。您将该文件上传到 SharePoint 上的某个地方,人们至少对其具有读取权限,然后编辑您希望以不同方式显示的列表视图 Web 部件,并将其“JSLink”属性设置为指向您的 JavaScript 文件。
查看此答案以获取使用 JSLink 文件欺骗动态日期字段的示例。
Microsoft 还在这里提供了一些文档,但我认为他们做的工作比必要的要多(在 Visual Studio 中为他们的示例创建一个全新的列表定义项目,而不是仅仅为现有列表创建一个 JSLink JavaScript 文件)。
其他选项
上面链接的旧问题中提到了其他一些选项:
条件格式:您可以应用条件格式来突出显示符合特定条件的记录。这可以使用 SharePoint Designer 或 HTML/JavaScript 完成。
过滤列表视图:由于列表视图是实时查询和生成的,因此您可以在列表视图过滤器中使用可变值。您可以设置仅显示Created
等于 的项目的列表视图 Web 部件[Today]
。由于您可以在一个页面上放置多个列表视图 Web 部件,因此您可以将一个部分用于今天的项目,而将另一个 Web 部件用于所有其他项目,从而为您提供视觉上的分离。
工作流、计时器作业或计划任务:您可以使用重复过程来每天设置普通(非计算)列的值。您需要谨慎使用这种方法以确保良好的性能;例如,如果列表超过列表视图阈值,您不希望它查询和更新列表中的每个项目。
要扩展过滤列表视图选项,您可以拥有一个仅显示在特定天数内到期的项目的视图。例如,您可以通过过滤Due Date
字段小于[Today]+7
和Due Date
大于或等于的位置来显示 7 天内到期的所有项目[Today]
。您还可以对视图进行排序,以将到期日期较早的项目显示在更靠近顶部的位置。