如何:自定义欢迎页

上次修改时间: 2010年4月19日

适用范围: SharePoint Server 2010

本文内容
使用基于 Web 的 SharePoint 编辑器来编辑"欢迎"页
自定义页面查询字符串以基于元数据值对"欢迎"页的内容进行筛选
为文档集内容类型指定新表单

文档集包含一个可自定义的 Web 部件页,即"欢迎"页。默认情况下,此页将显示一个图像、您指定的文档集的属性以及文档集的内容。本主题介绍您可在网站级别和列表级别对"欢迎"页执行的自定义。

若要在网站级别进行更改,请选择用户界面 (UI) 中的"更新继承自此内容类型的文档集的欢迎页面。"选项。保存文档集设置以在您的文档库中更新"欢迎"页。

警告注释警告

在列表级别通过自定义"欢迎"页所做的更改将会立即针对该内容类型的所有实例更新"欢迎"页。

默认情况下,并不将"欢迎"页向下推送到子内容类型。此约束可防止用户在子页面上意外地覆盖"欢迎"页自定义项。我们建议仅在所需的最低级别更改"欢迎"页,或将内容类型设置为只读。例如,假设您创建一个"宣传手册"文档集内容类型并自定义"欢迎"页,然后自定义基文档集内容类型的"欢迎"页并向下推送此更改,则父文档集内容类型中的页面将覆盖"宣传手册"自定义页面。若要将"欢迎"页的更改向下推送至所有子级,则选中"更新继承自此内容类型的文档集的欢迎页面"复选框。

文档集对于每个内容类型都具有一个页面,因此,对某一文档集内容类型的"欢迎"页所做的更改将应用于该内容类型的所有实例。可使用 Web 部件基于上下文动态地获取数据。例如,添加一个"记事板 Web 部件"可使用文档集的上下文,以便在宣传手册的每个特定示例上显示不同的说明。

您可使用三种方法来自定义一个"欢迎"页:

  1. 通过单击文档集的"设置"页的"自定义欢迎页面"链接,使用基于 Web 的 SharePoint 页面编辑器。

  2. 使用 SharePoint Designer。您必须具备足够的权限才能访问 All Files 网站对象。打开 SharePoint Designer,依次浏览到存储文档集的文档库、Forms 文件夹和文档集内容类型对应的文件夹,然后打开 docsethomepage.aspx

  3. 使用文档集对象模型来实现一个完整的自定义页面。在 Microsoft.Office.DocumentManagement.DocumentSets 命名空间中查找用于自定义"欢迎"页的 API。

使用基于 Web 的 SharePoint 编辑器来编辑"欢迎"页

转到您在网站内容类型库中创建的自定义"文档集"内容类型,单击"文档集设置",然后单击链接以自定义"欢迎"页。此时将出现一个类似文档集的页面。在功能区上的"页面"选项卡上,单击"编辑页面"以对页面进行编辑。

您可在四个区域中添加 Web 部件。更改 Web 部件的图像以使用一个不同的图像。向图像区域的底部添加一个"记事板 Web 部件",以便用户可发表评论。若要做出这些更改,请在区域 4 中单击"添加 Web 部件",然后选择"社会协作 Web 部件"类别中的"记事板"。

完成编辑后,您可保存更改。在功能区上的"页面"选项卡上,选择"停止编辑"。由于"欢迎"页是在网站级别进行编辑的,因此请返回到"文档集设置"页,选中相应的复选框以推送"欢迎"页的更改,然后保存文档集设置。现在,导航到一个文档集,您可以看到,所有文档集的"欢迎"页都进行了自定义。

自定义页面查询字符串以基于元数据值对"欢迎"页的内容进行筛选

文档集的"欢迎"页基于当前文档集的内容来动态加载内容。这意味着,某些 Web 部件(例如,查询内容 Web 部件 (CQWP))并不会完全按照您的指令执行。如果您配置一个 CQWP,则它对于每个文档集保持静态,并且您无法基于上下文中的文档集动态地获取结果。您可以设置 CQWP 以基于页面的元数据值进行筛选,但是由于每个文档集内容类型只存在一个"欢迎"页,因此,此操作不适用于文档集的"欢迎"页。最可行的方法是使用一个页面查询字符串。然而,默认情况下文档集可能不会提供您想要的页面查询字符串,因此,您需要对其进行自定义。

若要基于自定义页面查询字符串实现一个解决方案,请创建一个重定向到文档集的"欢迎"页的 Web 部件,并包含一个带有您要在 CQWP 中使用的元数据值的查询字符串。通过创建您将其置于文档集的"欢迎"页上的一个 Web 部件,您可以实现这一点。在 Web 部件的 .ascx 文件中,插入以下代码:

if (!String.IsNullOrEmpty(Request.QueryString["Column"]))
{
 
}
else
{
   string thisPage = Request.Url.AbsoluteUri; 
   integer docSetId = Request.QueryString["ID"];
    DocumentSet myItem = Microsoft.Office.DocumentManagement.DocumentSets.DocumentSet.GetDocumentSet(templates.Items[docSetId].Folder); 
    thisPage+="&Column=";
    thisPage+=myItem["Column"].ToString();
    Response.Redirect(thisPage);  
}

If 语句检查是否已传递 Column 的查询字符串。如果已传递,则无需执行任何操作。否则,应重定向到包括查询字符串的文档集的"欢迎"页。现在,您可添加一个 CQWP,以使用您传递的页面查询字符串。在 CQWP 的其他筛选器部分,选择您的列,并为"自定义值或查询"输入 [PageQueryString: Column Name]。现在,您无需创建用于查询相关内容的自定义 Web 部件,便具有一个可基于作为查询字符串传入的元数据属性进行筛选的 CQWP。

为文档集内容类型指定新表单

用于创建新文档集的表单位于 SharePoint 服务器上的 _layouts 文件夹中。对于每个文档集内容类型,只存在一个表单。在某些情况下,可能需要一个自定义表单。利用自定义表单,您可自动填充元数据或添加条件格式,以便仅根据用户所选择的选项来显示指定的字段。

文档集内容类型包括一个名为 NewFormUrl 的属性;通过更改此属性,您可指定内容类型所使用的新表单。另外,通过更改此属性,您还可以为每个文档集内容类型指定一个自定义新表单。在更改此属性之前,需创建一个新的 .aspx 页面,并将其存储在 _layouts 文件夹中,或存储在 _layouts 下的某个文件夹中。如果将表单存储在某个文件夹中,则添加一个包含文档集程序集的 web.config 文件,这对于使用文档集对象模型来创建文档集是必需的。

以下示例演示了一个自定义的新文档集页面:首先,演示 customdocumentset.aspx 代码隐藏页,然后演示 customdocumentset.cs 代码页。

<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="CustomNewDocset.aspx.cs" Inherits="_Default" %>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <asp:Literal ID="litList" runat="server" />
    <asp:Literal ID="litCt" runat="server" />
</body>
</html>
 
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Microsoft.SharePoint;
 
public partial class _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {
SPList list = SPContext.Current.List;
litList.Text = list.Title;
SPContentTypeId ctid = new SPContentTypeId(Request.QueryString.GetValues("ContentTypeId")[0]);
SPContentType ct = list.ContentTypes[ctid];
litCt.Text = ct.Name;
    }
}

web.config 文件是一个配置文件,必须将其置于包含自定义的新文档集 .aspx 页的文件夹中。web.config 文件是必需的,否则将无法访问文档集对象模型。根据需要添加对其他程序集的引用。如果将自定义的新文档集页置于 _layouts 文件夹的根目录中,而不是置于另一个文件夹中,则无需 web.config 文件。

<?xml version="1.0"?>
<!-- 
    Note: As an alternative to editing this file manually, you can use the 
    Web admin tool to configure settings for your application. Use
    the Website->ASP.NET Configuration option in Visual Studio.
    A full list of settings and comments can be found in 
    machine.config.comments, which is usually located in the 
    \Windows\Microsoft.Net\Framework\v2.x\Config directory.
-->
<configuration>
<system.web>
<!-- 
            Set compilation debug="true" to insert debugging 
            symbols into the compiled page. Because this 
            affects performance, set this value to true only 
            during development.
        -->
<compilation debug="false">
<assemblies>
<add assembly="Microsoft.Office.DocumentManagement, Version=14.0.0.0, Culture=neutral, PublicKeyToken=94DE0004B6E3FCC5"/>
</assemblies>
</compilation>
</system.web>
</configuration>

若要使用自定义的新文档集页,则必须更新该文档集内容类型的 URL。下一个示例是一个可供使用的 Windows PowerShell 脚本。传入包含您想要更改的文档集内容类型的网站 URL。指定您想要更改的内容类型的 ctid 的适当内容类型 ID。SharePoint Server 将更新 NewFormUrl 属性以使用自定义的新文档集页,而不是使用默认页。$siteurl 字符串应是具有自定义文档集内容类型的 URL。$ctid 字符串是正在进行修改的文档集的内容类型 ID。$contentType.NewFormUrl 设置是相对于包含自定义的新文档集表单的 _layouts 文件夹的位置。

$siteUrl = "http://mysite"
$ctid = "0x0120D520"
param($siteUrl)
$site = New-Object Microsoft.SharePoint.SPSite($siteUrl)
$web = $site.RootWeb; 
$contentTypeId = New-Object Microsoft.Sharepoint.SPContentTypeId($ctid)
$contentType = $web.ContentTypes[$contentTypeId]
$contentType.NewFormUrl = "_layouts/CustomNewDocset/CustomNewDocset.aspx"
$contentType.Update()
$web.Dispose()
$site.Dispose()

在运行 Windows PowerShell 脚本之后,SharePoint Server 将创建一个新的自定义文档集页,并将 newFormUrl 属性的值更改为新的页面。当您使用文档库中的"新建文档"下拉列表来创建一个新的文档集时,将出现自定义页面。

请参阅

任务

如何:新建文档集窗体

引用

DefaultDocumentCollection

WelcomePageFields

FieldLinks

概念

文档集