无代码解决方案: 由于 SharePoint 列表项目的上次更改显示的天数

无代码解决方案: 由于 SharePoint 列表项目的上次更改显示的天数

重要:  本文是由机器翻译的,请参阅免责声明。请在 此处 中查找本文的英文版本以便参考。

9/20/2011年下午 3:01

通过索 Joyce,LANtek

注意: 本文是从面向 SharePoint 最终用户的四年的获取点博客文章集的一部分。

概述: 自定义帐龄报表的无代码

SharePoint 网站通常请求职能片段之一是任务或列表项的帐龄分析表。 换言之,每个月数天具有它已由于此列表项目的上次修改?

面上这似乎是一个非常简单的请求。所有后,我们提供了正在创建和修改项目的日期,我们有存储时对项目的特定更改发生事件接收器通过自定义日期的能力。 我们有计算的列,我们可以在其中包含类似于 Excel 的公式,以使用我们的信息。 这看起来像非常直接转发主张。 我们选择一个日期字段,创建一个计算的列,然后执行公式内容沿行 [DateField]-[今天]。 嗯,不以便快速通过 ! 为具有尝试此"简单"任务的任何人知道,尝试使用类似于 [今天] 中的计算的列引发问题。 尝试将 [今天] 插入到您的计算列的公式框将为您提供一条错误消息,如下所示:

错误消息

这是为什么? 嗯,有执行的操作方式计算计算列。

作为示例举一个简单的公式:

= IF ( [Column1] < = [Column2],"确定","Not OK")

所有这些说的是,如果 Column1 小于或等于 Column2,则显示确定,否则显示不确定。 这是一个计算列相当典型基本公式并使一个包含这些列的列表项有关的基本假设: Column1 和列 2 的值永远无法更改而更新事件列表项上。

这是正确的更新 (或创建) 的列表时,计算的列将只会重新计算由于他们假定在项目本身中包含要计算的信息。 当您尝试使用内容更改独立于该项目的字段,如今天的日期,这将创建一个问题。

现在,我不在会议中他们决定这是计算列将正常工作,但是,如果要使这些函数的性能这种方式将假定猜测的方式。 假设是否您有多个千项目的列表,其中每个包含所需的"实时"更新计算的列。 这意味着的一些机制,可能是计时器作业,必须循环常常包含该计算的列和更新其值的每个项目。 这可能非常负担列性能因为与较大部署该作业可能不断运行并做一些更改。 只需我估计值,但如果考虑它有大量的有意义。

有有浮动的类似涉及到通过首先创建一个名为今天,列,然后将其添加到您的公式,然后将其删除接受的当前值相同中的 SharePoint 解决方案的一些建议。 这些是不错,但记住我说的是什么有关更新计算的列时。 这意味着您的值将很快不正确,特别是对于天计算更新项目时,将仅更改此值。

我看到其他人使用聪明 JavaScript 写入页的值。 此外,这将工作,但我几乎明确根据客户端脚本时可避免。

实施工作结束后:

因此怎么办? 利用因此称为"可变"功能,如今天的问题是计算的列。 很可能我们可以开发一些自定义的代码来处理此我们如计算列,计时器作业或计划传更新需要进行此计算每个单个项目的过程。 接下来回,提到的最后一个段落中的性能问题,此外将要高度特定于网站/列表/列问题脆弱解决方案。 顶部这些两个问题,您还需要转查找 nerdy 专家,如自己,知道如何代码和诱使他为这种解决方案开发适合您。 但还有更简单的方法 !

如果您有权限才能创建字段和编辑您的网站上的页面,并且有一些有关 XSLT 和创建视图的知识,可以整理 XSL 模板可以包括在列表视图和将切实地计算值每次请求页。 这种情况下删除通过性能,我们的问题,不需要自定义代码以用于开发和部署解决方案通过。

完美。 那么,如何做它?

  1. 创建或选择将充当我们源的字段。 它必须是日期类型。

  2. 创建将作为正在计算值的占位符我们字段。

  3. 将两个这些字段添加到内容类型,并将该内容类型添加到列表。

  4. 创建包含源和占位符列的列表的视图。

  5. 将 XSL 模板上载到样式库。

  6. 设置列表视图 Web 部件通过用户界面的"XSL 链接"属性。

  7. 成功!

我们来浏览示例使用案例和引导您完成实现。 我们的客户想要将告诉他们其主列表的视图的多长时间了已特定的列表项坐在其状态。 此列表中包含自定义网站内容类型派生自项目类型和添加到列表中。 已有事件接收器在捕获每次在列表项的状态字段的位置已更改并保存在名为"状态更改日期"列的日期。 所有此连接并不需要,可执行与任何日期字段 (它只会发生此情况是我们实现,但尽情尝试)。所需的最低是您的源日期字段和要保留您 (在下一个段落中此更多信息) 添加到您的列表中的计算,但建议您想要重复使用这种解决方案,在您的网站上的其他位置的情况下使用网站栏和网站内容类型的占位符字段。

我们有我们可以根据今天的日期计算中使用我们源日期。现在,我们可以创建自定义网站栏以用作容器的我们计算的值。 在此例中选择要使用计算的列,因为它不能在新上进行更改或编辑项目窗体,但可以选中的视图中显示,因为我们不希望用户输入到此列中的任意值。 它可能是混乱,为什么它未显示在视图等。

现在我们有我们网站栏,我们可以将其添加到我们将使用的内容类型列表中。接下来,我们需要创建与我们 XSLT 我们更高版本进行自定义的视图。 请确保您创建包含您的源日期列,您将作为计算的值的占位符的新的计算的列的标准视图。

我们现在已就绪了在我们需要支持我们自定义的帐龄分析表的位置。 所有这些保持创建我们的 XSL 模板,将其上载到网站的样式库,并将其链接到我们的列表视图。 我们将使用的 XSL 模板将包含一些用于生成视图,以及用于覆盖这的某些部分,并为我们计算我们所需的值我们自己自定义标记普通 SharePoint 生成标记。

为信用哪里信用,graciously"swirch"MSDN 论坛上通过提供执行我使用这种解决方案的实际计算的 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

打开此将看到用于呈现视图中,如果保留滚动至行 357 您将看到的标记中添加自定义模板开始的普通 SharePoint XSL 标记大量您喜爱的文本编辑器中,在"DateDiff"模板的第一个后面跟有"计算儒略历-工作日"和"FieldRef_printTableCell_EcbAllowed.Days_x0020_At_x0020_Status"。 以下是我们的三个模板,让我们视图中显示我们计算。 如果您要使用早期版本中本文所指定的不同字段名称,您将需要经过这些模板,并替换为其他名称的任何引用。 请记住,此想要使用的字段不是显示名称的内部名称。

一旦您满意模板已准备好转,导航到样式库并将其上载文件夹下的"XSL 样式表",然后复制下链接到文件。 这将使我们可以轻松地更高版本,对其进行更改,或将其添加到网站的不同部分中,为我们请。

接下来,转到您的列表并选择您之前在本文中创建的视图。 从"网站操作"菜单上单击"编辑页面"。

“网站操作”菜单上的“编辑页面”命令

查找您的列表视图 Web 部件页上,打开 Web 部件菜单上,通过单击右上角的小向下箭头上。 在此菜单中,选择"编辑 Web 部件"。

“Web 部件”菜单上的“编辑 Web 部件”命令

这将打开您的浏览器窗口的右侧上的 Web 部件的菜单。

Web 部件菜单

单击 + 的"杂项"部分,找到"XSL 链接"属性。

“Web 部件”菜单上的“XSL 链接”属性

粘贴的 XSL 文件的早期版本向下复制样式库中的链接 (可以是相对或绝对链接)。

粘贴的 XSL 文件链接

单击"确定"以保存所做的更改,然后单击页面顶部的"页码"功能区上的"停止编辑"按钮。

“页面”选项卡上的“停止编辑”按钮

如果一切已正确配置现在应"状态日期"列中看到的数字。

显示数字的“状态”列中的天数

然后,最后,下面介绍了什么看起来像使用一些测试数据的各种日期:

显示测试数据的帐龄分析表

摘要:

它是: 在 SharePoint。 创建帐龄分析表的格式良好、 可靠且佳方法完成使用简单的无代码实现。 此了非常几个潜在应用程序一个除了使用的案例研究我们下面。 另一种常见情况这种类型的报表将其附加到任务列表,以便您可以看到多长时间后经过了由于快速创建任务。

享受 !

-索

索 Joyce LANtek

注释

步骤缺少
10/8/2012年 3:51 AM
确定我遵循的步骤中,但必须有内容丢失-XSL 如何知道使用,哪个日期或哪个字段添加到天数?不喜欢它时步骤会丢失。

无代码同意 !
2012-8-30 12:12 PM
我同意-我不想这真正计算为"无代码"。
有趣的是,通过 SharePoint 一些 screwup,我必须使用计算的列...使用当前不能确定如何或为什么无法使其重新,但仍存在且正在工作是因为。

"在状态日期"的公式计算列?
5/2/2012年上午 7:39
索-用于您的"状态日期"计算的网站列 (占位符列) 的公式是什么? 它是"今天 ="?

SharePoint 2007
2011-12-2 上午 11:29
当前我您尚未尝试将这种解决方案应用于 SharePoint 2007,但我要为其查找。遗憾的是没有通过用户界面的 web 部件上剖析 XslLink 属性。

出色的文章
11-30 与 2011年上午 9:53
Hello,
出色的文章。
我使用的 SharePoint 2007。
我没有杂项部分中,如上文所述。
是否具有 SP2007 配置的步骤?
感谢。

答复: 无代码解决方案: 更改显示的天数,由于 SharePoint 列表项上次
2011-10-11 AM 8:24
你好 Chris。
出色查找 !
i 将看看什么您发布希望在以后今天,请参阅是否 i 可以使这种解决方案变得更可靠。
i 高兴您赞的文章,和 i 高兴非常能够查找欧洲的日期格式的解决方案。 :)
-索

欧洲日期格式的解决方案
10-11 与 2011年上午 6:45
你好再次索,
转寄,我是否在此页面上; 上面提到的问题找到解决方案
https://sharepointbydummies.wordpress.com/2011/07/13/possible-work-around-to-date-format-issue-sharepoint-2010/

欧洲日期格式
10-7 与 2011年上午 3:59
你好索
这是真正很好的解决方案,谢谢,并且只是这样的内容是否已花费寻找的最后两天 !但是时遇到略有问题,我所希望可帮助我。
我已更改代码稍到 calcultate 的天数,直到出现问题,而不是因为,通过切换"DateDiff"函数; 的最后一行中的变量

< xsl:value-选择 ="$JulianToday-$JulianStartDate">< / xsl:value-的 >

但是我只能够访问其 caclulate 正确下半部分时间的差值。使用此日期 (格式 dd/MM/yyyy); 例如

30-12 与 2011年

其计算正确,但与该日期 (相同格式)

2011-12-10

其计算为 if 如果 10 年 12 月 2011年而不是 12 Oct 2011。
我已尝试只需切换"JulianStartDate"变量,如下所示; 中的天和月值的位置

< xsl: 与参数名称 ="月份"select="substring(ddwrt:FormatDateTime(string($StartDate),1033,yyyyMMdd),7,2)"/ >
< xsl: 与参数名称 ="天"select="substring(ddwrt:FormatDateTime(string($StartDate),1033,yyyyMMdd),5,2)"/ >

和更正此问题的问题的第二个日期,但是它是然后不正确的第一个日期 !
我已尝试更改 FormatDateTime 呼叫,可使用到没有成功位置的子字符串参数的相应调整欧洲 Lcid 和各种改变的最后一个参数的 FormatDateTime (例如 ddMMyyyy,MMddyyyy)。
我大大感谢您可以提供的任何建议。
谢谢,
Chris

无代码
9-21 与 2011年 4:27 AM
我不想 XSL 限定为"无代码"解决方案,但是它不涉及编程,XSL 语言不可供所有人-了解。除了所: 很好的解决方案,谢谢 !

注意: 机器翻译免责声明:本文是由无人工介入的计算机系统翻译的。Microsoft 提供机器翻译是为了帮助非英语国家/地区用户方便阅读有关 Microsoft 产品、服务和技术的内容。由于机器翻译的原因,本文可能包含词汇、语法或文法方面的错误。

扩展你的技能
了解培训
抢先获得新功能
加入 Office 预览体验计划

此信息是否有帮助?

谢谢您的反馈!

谢谢你的反馈! 可能需要转接到 Office 支持专员。

×