无代码解决方案:显示从列表项的上次更改后的天数
Applies To
Microsoft 365 中的 SharePoint Microsoft 365 小型企业版中的 SharePointBy justin Joyce, LANtek
注意: 本文是 SharePoint 最终用户"获取 Point" 博客四年的文章集合中的部分。
概述:包含无代码的自定义聚合报告
SharePoint 网站请求的功能通常所经过的功能部分之一就是一个任务或列表项的显示报告。 换言之,只有一个天/几个月左右未经修改了这个天/
在图面上,这似乎是一个非常简单的请求。 最初,我们提供了项目的日期供创建和修改,当某些项目发生更改时,我们能够在发生事件接收器时存储自定义日期。 我们提供了计算列,我们可以在其中包括 Excel 类似公式来使用我们的信息。 这看起来像是一个相当简单的正斜发的。 我们选取日期字段,创建计算列,然后在 [DateField] - [Today] 行上执行公式内容。 但快来看看快! 当尝试这个"简单"任务的任何人都知道,尝试在计算列中使用类似 [Today] 这样的命令都会导致问题。 尝试将 [Today] 插入到计算列的公式框中将显示如下所示的错误消息:
为什么这是? 计算列的方法也必须一样处理。
我们来看一个简单的公式作为示例:
= IF ( [Column1]<=[Column2], "OK", "Not OK")
所有这意见的就是,如果 Column1 小于或等于 Column2,则显示"确定",否则显示 Not OK。 这是一个典型的计算列基本公式,并且它作出了对包含这些列的列表项做出基本假设:如果未更新列表项上的更新事件,Column1 和 Column2 的值将永远无法更改。
与此也是正确的,只有当列表更新 (或创建) ,因为它们只需要计算的信息包含在项本身中时,计算列合适。 尝试使用不属于项目字段的某些内容时(如今天日期)时,这将创建一个问题。
现在,我在会议中我不知所决已经决定这是计算列的函数,但如果我必须做教育来宾,就会假定用这种性能方式工作。 可以想,如果您有几千位项的列表,则这些项都包含需要"实时"更新的计算列。 这意味着某些机制(或许是一种计时器作业)必须在每次包含计算列的每个项中都进行检查,这样才能更新其值。 这可能会在性能方面进行大量的定制,因为这样会不断运行和更改项目。 这只是我的来宾,但如果想考虑到这个函数,结果将是有很多实用的。
对于类似解决方案,浮出以便接受 SharePoint 的过程中,首先创建名为"今天"的列,然后将其添加到公式,然后将其删除,这样一来就需要考虑使用 SharePoint 来接受当天价值的建议。 这些都能确定得好,但请记住更新计算列时介绍的内容。 仅当更新项时,此值仅会更改,这意味着你的值将很快(在一天大时时)。
我见到了其他人使用 Clever JavaScript 将这些值写入页面。 此功能也可行,但我在暂停时,客户端脚本中仍然会出现此问题。
实现:
那么该怎么办? 计算列中不在"今天"类似的"可变"函数。 我们可能需要开发一些自定义代码来为我们事情处理这一点,如计算后的列、计时器作业或计划的进程,并更新需要此计算的每个单个项。 这使我们回来到最后一段中提到的性能问题,而且这种方式还是在问题中有高度特定于网站/列表/列的功能。 这两个关注事项中,你还可能需要找到一个不确定的疑询,例如自己,它可以了解如何编写代码,并让他为你开发此解决方案。 但是有一个更简单的方法!
如果您有在网站上创建字段和编辑页面的权限,并有点知道 XSLT 和创建视图,则可以将可以包括在列表视图中的 XSL 模板放在一个列表视图中,并将在每次请求页面时收集您的值以收集。 此方案会移除我们对性能的问题的问题,也不需要通过解决方案开发和部署自定义代码。
非常好。 那么我们该如何实现?
-
创建或选择作为源文件的字段。 它必须是一种日期类型。
-
创建我们的字段,该字段将用作计算值的占位符。
-
将这两个字段添加到内容类型并将该类型添加到列表。
-
创建包含源和占位符列的列表视图。
-
将 XSL 模板上载到样式库。
-
通过 UI 为列表视图配置"XSL Web 部件"属性。
-
成功!
让我们探索一个示例用例,并逐步完成实施。 我们的客户需要一个其主列表的视图,用于告诉他们特定列表项在其状态中需要时长。 此列表包含从"项"类型发送出的并添加到列表中的自定义网站内容类型。 发生每次更改列表项上的状态字段并保存该日期时,该日期已保存到名为"日期状态更改"的列时,已经发生事件接收器。 并不是必需的,并可以对任意日期字段执行 (是我们的"实施",但随意试图实) 。 需要至少需要的源日期字段和占位符字段,以在下 (一个段落中保留等该点并将更多内容添加到列表中) 但建议尽管建议您在网站上的其他位置重复使用网站栏和网站内容类型。
因此,我们提供了我们在计算中使用的日期,用于计算今天的日期。 现在,我们可以创建自定义网站列,用作计算值的容器。 在这种情况下,我选择使用计算列,因为它无法更改或编辑项目表单中,但是,由于我们不希望用户在此列中输入任意值,因此可以在视图中进行选择。 可能会对视图等应用不显示在原有理解的原本时,让人为了不进来,因为视图中可能不显示该数据或不理解。
现在,我们已经有了网站栏,便可将其添加到我们在我们的列表中使用的内容类型。 接下来,我们需要创建将要使用 XSLT 自定义的视图。 确保创建包含源日期列和充当计算值占位符的标准视图。
我们现在已经有了一切准证,我们需要提供自定义出来报告。 所有这些仍是在创建我们的 XSL 模板,将其上载到网站的样式库并将其链接到我们的列表视图中。 我们将使用的 XSL 模板将包含一些常规 SharePoint 生成的标记,用于生成视图以及我们自己的自定义标记,用于替代该项的某些部分并为我们计算我们需要的值。
考虑信用额应付款的点数,通常可通过 MSDN 论坛上的"swirch"提供用于执行此解决方案的实际计算的 XSL 模板 :http://social.msdn.microsoft.com/Forums/en-US/sharepointcustomization/thread/aeda905b-9bc6-40c4-bd22-21306c5cb0d2/
下载 XSL 样式表 (aging.zip) 我已在此放在一起 :https://OneDrive.live.com/?cid=c262e8e2d59a86d9&permissionsChanged=1&id=C262E8E2D59A86D9!104
在你最喜欢的文本编辑器中打开此类选项卡时,你将看到大量正常 SharePoint XSL 标记,用于呈现视图,如果继续向下滚动到第 357 行,将看到我添加到标记的自定义模板的起始部分,以及"DateDiff"模板的开始,然后是"calculate-julian-day"和"FieldRef_printTableCell_EcbAllowed.Days_x0020_At_x0020_Status"。 这三种模板将在我们的视图中进行和显示计算。 如果使用的字段名与之前所指定的字段名称不同,则需要完成这些模板并替换对其他名称的任何引用。 请记住,为了使用非要使用文件的字段的内部显示名称。
有了准备好该模板后,导航到样式库,并在"XSL 样式表"文件夹下上传该模板,然后复制指向该文件的链接。 这将允许我们在以后轻松对其进行更改,或在我们后续网站的不同部分中将其添加到网站的不同部分。
接下来,转到列表,然后选择您在本文中以前创建的视图。 从"网站操作"菜单中,单击"编辑网页"。
在页面上查找Web 部件列表视图,单击Web 部件角的小向下箭头打开"开始"菜单。 在该菜单中选择"编辑Web 部件"。
此操作将在Web 部件窗口右侧打开日历的菜单。
单击"杂项"部分的+",找到"XSL 链接"属性。
将 XSL 文件粘贴到之前复制的样式库中的 XSL 文件 (可以是相对或绝对的) 。
单击"确定"保存所做的更改,然后单击页面顶部的"页面"功能区上的"停止编辑"按钮。
如果正确配置了所有内容,你现在应该会在"状态"列中看到数字。
最后,在提供各日期的某些测试数据时的样相应显示方式如下:
摘要:
它是:在 SharePoint 中创建报表的格式有一个好的格式、可疑性和更好的执行方式。其中包含简单的无代码实现。 这除了我们此处介绍的一个使用案例,还包含许多潜在应用程序。 此类报告的另一个常见方案是将其附加到任务列表中,以便你可以确定任务创建起一目了然多长时间。
祝使用愉快!
--Justin
Justin Joyce, LANtek
备注
步骤丢失
2012-10-8 3:51 AM 我查看了这些步骤,但必须缺少一些 - XSL 要如何知道要使用哪一天,或者哪个字段需要增加以来的日期? 当丢失步骤时,请执行该处理。不会对代码进行任何编码!
2012/8/30 12:12 PM 我同意 - 我不认为这实为"没有代码"。 有兴趣,通过 SharePoint 的某些组成部分,我有一个使用今天的工作计算列...不确定因看不到这样做的方式或原因,因为我无法再执行它,但是该方法仍然存在并正常工作。"时间天数"的公式为"时天"计算列?
2012-5-2 7:39 AM 刚刚 - 您对"状态"计算网站列用于"天数"计算后 (占位符列所使用的) ? 它是否是"=今天"?SharePoint 2007
2011-12-2 11:29 AM 目前我没有尝试将此解决方案应用到 SharePoint 2007,但我目前正在观看它。 遗传统的是,Web 部件上不存在通过 UI 显示的 XslLink 属性。出色的文章
2011-11-30 9:53 AM 你好, 出色的文章。 我使用的是 SharePoint 2007。 我没有上述内容的"错过"部分。 是否有 SP2007 配置步骤? 谢谢。重新:无代码解决方案:显示从 SharePoint 列表项最后更改后的天数
2011-10-11 8:24 AM 你好, Chris. "快速查找! 我现在将看看你今天发布的期限,看看我是否可以让该解决方案更加强大。 我很高效地对该帖子表示非常高,我很高看到了一个对欧门日期格式的解决方案。 :) -Justin 2011-10-11 6:45 AM 请稍后 17 月, 提示:我发现我之前在此页面上提到的问题的解决方案;欧交日期格式
2011-10-7 3:59 AM 你好,只看好几 下 这是一个非常好的解决方案,只是我用过去两天的生效数据! 但是这方面存在一个问题,我能为你提供帮助。 通过切换"DateDiff"函数最后一行中的变量,我已更快地计算代码,直到发生事件,而不是从此起得到崩溃; <xsl:value-of select="$JulianToday - $JulianStartDate"></xsl:value-of> 但是,我只能让它插入起来与时间的差异相混乱。 因此,在此日期中 (日期为 dd/MM/yyyy) ; 2011-30-12 它正确计算,但是如果使用了相同 (的格式) 2011-12-10 计算方式显示为 10-12 月 10 日于 2011 年 12 月 12 日。 我只尝试在"JulianStartDate"变量中切换日和月份值的位置,如下所示: <xsl:with-param name="Month" select="substring (ddwrt:FormatDateTime (string ($StartDate) , 1033, "yyyMMdd') ,7,2) "/> <xsl:with-param name="Day" select="substring (ddwrt:FormatDateTime (string ($StartDate) , 1033, "yyyMMdd') ,5,2) "/> 这也会更正第二个日期出现的问题,但它也不正确地用于第一个日期! 我还尝试了将 FormatDateTime 调用改为使用格式日期时间的最后一个参数 (的 European LCI 和最后一个参数 (ddMMyyyy、Mddyyy) 相应调整子字符串位置参数而不成功。 我很想你提供的任何建议。 谢谢, Chris否-代码
2011-9-21 4:27 AM 我并不认为 XSL 指定为"无代码"解决方案,因为了解 XSL 语言并非针对所有人 - 但它不会涉及编程。 除了这些,谢天谢你的解决方案!