【问题标题】:Sharepoint 2013/2016 Calculated Column stops calculatingSharepoint 2013/2016 计算列停止计算
【发布时间】:2017-10-01 06:59:33
【问题描述】:

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

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

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

是不是公式有问题?

公式如下:

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

【问题讨论】:

标签: sharepoint sharepoint-2013 sharepoint-2016


【解决方案1】:

Calculated columns cannot contain volatile functions,包括那些依赖于当前日期的。

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

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

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

客户端渲染

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

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

查看 this answer 了解使用 JSLink 文件欺骗动态日期字段的示例。

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

其他选项

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

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

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

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

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

【讨论】:

  • 好的,谢谢,但确实不符合要求,我发布了我要尝试看看它是否有效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多