如何在SharePoint Designer 2013中展示文档库各文件夹的最新文档
需求场景
- SharePoint文档库包含多个存储模板的Document Set文件夹
- 需要创建视图,仅展示每个文件夹内的最新文档,用户无需逐个打开文件夹即可查看各分类最新模板
- 已实现按修改日期降序排序、按文件夹/模板类型分组,但需通过XSLT过滤仅保留每个分组的第一条记录
已尝试的无效方案
- 直接在SharePoint网站创建视图:无法实现分组后仅显示第一条记录
- Content Query Web Part:配置项不足以满足需求
当前可用方案(非目标方案)
通过jQuery调用REST接口可实现需求,但希望找到XSLT原生解决方案
示例XML结构
<Library> <Template> <FileName>ExpensesReport.xslx</FileName> <ModifiedDate>2022-12-10</ModifiedDate> <TemplateType>Excel</TemplateType> </Template> <Template> <FileName>ExpensesReport_v2.xslx</FileName> <ModifiedDate>2022-12-15</ModifiedDate> <TemplateType>Excel</TemplateType> </Template> <Template> <FileName>Presentation.ppt</FileName> <ModifiedDate>2022-12-11</ModifiedDate> <TemplateType>PowerPoint</TemplateType> </Template> </Library>
XSLT解决方案(基于Muenchian分组)
由于数据已按ModifiedDate降序排序,每个分组的第一条即为最新文档,可通过Muenchian分组仅输出每个分组的第一条记录:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html" indent="yes"/> <!-- 定义分组键:按TemplateType分组,实际场景可替换为文件夹字段 --> <xsl:key name="templateGroup" match="Template" use="TemplateType"/> <xsl:template match="/Library"> <table> <tr> <th>文件名</th> <th>修改日期</th> <th>模板类型</th> </tr> <!-- 仅选择每个分组的第一个节点 --> <xsl:for-each select="Template[generate-id() = generate-id(key('templateGroup', TemplateType)[1])]"> <tr> <td><xsl:value-of select="FileName"/></td> <td><xsl:value-of select="ModifiedDate"/></td> <td><xsl:value-of select="TemplateType"/></td> </tr> </xsl:for-each> </table> </xsl:template> </xsl:stylesheet>
- 找到原XSLT中遍历文档节点的
for-each或apply-templates代码块 - 添加分组键定义(根据实际分组字段,比如文件夹的
FileDirRef或自定义分类字段) - 修改遍历条件,仅保留每个分组的第一条记录:
[generate-id() = generate-id(key('groupKey', 分组字段)[1])] - 确保数据源已按
ModifiedDate降序排序,保证分组第一条为最新文档
内容的提问来源于stack exchange,提问作者iamconfusion
相关产品推荐
相关产品推荐

