1

我在 SharePoint On-Premises 中有一个计算列,它显示截止日期前的天数,它可以完美运行一天左右,然后停止计算,但是如果我转到列表设置并单击该列并单击确定,那么它会计算再次?

有没有人遇到过类似的问题。我在 2013 年都遇到过这个问题,但在几周内转移到 2016 年,仍然是同样的问题。

我试过“”空白和“”空白,所以不确定这是否导致问题?

是不是公式有问题?

这是公式:

 =IF(ISBLANK([Due Date])," ",
IF(ISERROR(DATEDIF(NOW(),[Due Date],"d"))," ",DATEDIF(NOW(),[Due Date],"d")))
4

1 回答 1

2

计算列不能包含 volatile 函数,其中包括那些依赖于当前日期的函数。

SharePoint 列中的值(甚至是计算列中的值)存储在 SharePoint 的基础 SQL Server 数据库中。

计算列中的计算不会在页面加载时执行;相反,它们仅在更改项目时重新计算(在这种情况下,仅针对该特定项目重新计算公式),或者在更改列公式时(在这种情况下,为所有项目重新计算公式)。

如果您需要显示随时间变化的动态值,您有几种选择。

客户端渲染

考虑使用客户端呈现,它允许您使用 JavaScript 动态确定列表视图中的记录如何显示。此 JavaScript 在页面加载时运行,因此它可以比计算列更好地处理当前与时间相关的值。

要使用客户端呈现,您需要创建一个 JavaScript 文件来控制视图的显示方式。您将该文件上传到 SharePoint 上的某个地方,人们至少对其具有读取权限,然后编辑您希望以不同方式显示的列表视图 Web 部件,并将其“JSLink”属性设置为指向您的 JavaScript 文件。

查看此答案以获取使用 JSLink 文件欺骗动态日期字段的示例。

Microsoft 还在这里提供了一些文档,但我认为他们做的工作比必要的要多(在 Visual Studio 中为他们的示例创建一个全新的列表定义项目,而不是仅仅为现有列表创建一个 JSLink JavaScript 文件)。

其他选项

上面链接的旧问题中提到了其他一些选项:

  1. 条件格式:您可以应用条件格式来突出显示符合特定条件的记录。这可以使用 SharePoint Designer 或 HTML/JavaScript 完成。

  2. 过滤列表视图:由于列表视图是实时查询和生成的,因此您可以在列表视图过滤器中使用可变值。您可以设置仅显示Created等于 的项目的列表视图 Web 部件[Today]。由于您可以在一个页面上放置多个列表视图 Web 部件,因此您可以将一个部分用于今天的项目,而将另一个 Web 部件用于所有其他项目,从而为您提供视觉上的分离。

  3. 工作流、计时器作业或计划任务:您可以使用重复过程来每天设置普通(非计算)列的值。您需要谨慎使用这种方法以确保良好的性能;例如,如果列表超过列表视图阈值,您不希望它查询和更新列表中的每个项目。

要扩展过滤列表视图选项,您可以拥有一个仅显示在特定天数内到期的项目的视图。例如,您可以通过过滤Due Date字段小于[Today]+7Due Date大于或等于的位置来显示 7 天内到期的所有项目[Today]。您还可以对视图进行排序,以将到期日期较早的项目显示在更靠近顶部的位置。

于 2017-05-03T14:53:24.957 回答