SharePoint 2013/2016计算的列停止计算



我在本地SharePoint本地中有一个计算的列,该列显示到到期日的天数,该日期非常适合一天左右,然后停止计算,但是如果我转到列表设置并单击列,然后单击"确定"然后再次计算?

有人经历了与此类似的问题。我在2013年都遇到了这个问题,但是在几周内转到2016年,但仍然存在同一问题。

我已经尝试过"空白,也要"空",所以不确定这是否引起了问题?

公式是问题吗?

这是公式:

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

计算的列无法包含挥发性函数,其中包括依赖当前日期的功能。

SharePoint列中的值(即使在计算的列中(存储在SharePoint的基础SQL Server数据库中。

页面加载时未执行计算列中的计算;相反,只有在更改项目(在这种情况下,仅针对该特定项目重新计算公式(或每当更改列公式时(在哪个(哪个(时案例该公式是针对所有项目重新计算的(。

如果您需要显示随时间流逝而变化的动态值,则有一些替代方案。

客户端渲染

考虑使用客户端渲染,它使您可以使用JavaScript动态确定列表视图中的记录。此JavaScript在页面加载上运行,因此它可以比计算的列要处理当前的时间依赖值。

要使用客户端渲染,您可以创建一个控制视图显示方式的JavaScript文件。您将该文件上传到SharePoint上的某个地方,其中人们至少可以阅读访问该文件,然后编辑列表查看Web部分,您希望以不同的方式显示并设置其" JSlink"。属性指向您的JavaScript文件。

查看此答案有关使用JSLink文件来欺骗动态日期字段的示例。

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

其他选项

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

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

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

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

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

最新更新