如何:创建自定义字段类型

上次修改时间: 2011年3月3日

适用范围: SharePoint Foundation 2010

本文内容
1. 创建字段类型定义
2. 创建字段类
3.(可选)创建自定义 XSLT 样式表
4. 创建呈现控件类
5. 创建一个或多个呈现模板
6.(可选)创建字段值类型
7.(可选)创建编辑控件
8. 部署元素
移动设备上的字段呈现与计算机上的字段呈现有何区别

本主题概述创建自定义字段类型以及定义其如何呈现在列表视图、显示表单、新建表单和编辑表单中的过程。

有关创建自定义字段和定义其呈现方式的具体示例,请参阅演练:创建自定义字段类型

1. 创建字段类型定义

字段类型定义是一个 XML 文件,其中包含 Microsoft SharePoint Foundation 对字段类型进行注册和正确呈现字段所需的信息。最重要的是,其中包含有关含有已编译字段类型的程序集的信息。

有关字段类型定义的详细信息,请参阅如何:创建自定义字段类型定义

2. 创建字段类

字段类是一种类,其实例可以表示基于您的自定义字段类型的特殊字段。此类必须继承自 SPField 或 SharePoint Foundation 中派生自它的某一个类。可将此类编译为强名称程序集并将其部署到全局程序集缓存。在列表视图上下文中,SPField 对象表示某一列及其属性,例如是否可以对该列进行排序。在"显示"、"新建"和"编辑"模式上下文中,SPField 对象表示列表项的特定字段(构建该列表的表中的一个单元格)以及该单元格在内容数据库中的值。

此类还可以包含字段类型的自定义数据验证。有关自定义验证的详细信息,请参阅自定义字段数据验证

有关自定义字段类的详细信息,请参阅如何:创建自定义字段类

3.(可选)创建自定义 XSLT 样式表

使用 XSLT 样式表是 SharePoint Foundation 在列表视图中呈现字段的标准方式。默认情况下,SharePoint Foundation 的内置样式表只以纯文本形式呈现字段的值。如果要在列表视图中显示各种不同的呈现形式,则系统呈现自定义字段所需的一个基本要素是自定义 XSLT 样式表。您可以根据 fldtypes_*.xsl 模式对其命名,并将其部署到 %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\LAYOUTS\XSL。自定义样式表优先于默认样式表。

列表视图中列顶部的标题也是通过 XSLT 样式表呈现的,并且,还是当且仅当需要非标准呈现自定义字段类型的列标题时,才会创建新的样式表来替代内置样式表。

有关为自定义字段创建 XSLT 样式表的详细信息,请参阅如何:自定义列表视图中字段的呈现方式

备注

如果旧的自定义字段类型是在早期版本的 SharePoint Foundation 中开发的,且其在列表视图中的呈现形式不同于 XSLT 呈现基础结构提供的默认呈现形式,则可以选择关闭该字段的 XSLT 呈现功能。为此,可以在包含旧的自定义字段的协作应用程序标记语言 (CAML) 定义的 fldtypes*.xml 文件中,添加 <Field Name="CAMLRendering">TRUE</Field> 作为 FieldType 元素的子级。使用此选项可使列表视图中的字段(和列标题)依据 RenderPattern 来呈现。有关详细信息,请参阅 RenderPattern 元素(字段类型)

4. 创建呈现控件类

可以将呈现控件类与呈现模板(请参阅下一节)一起使用,以便在"新建"模式、"编辑"模式或"显示"模式中呈现您的字段。此类必须从 BaseFieldControl 或从它派生的 SharePoint Foundation 中的类之一继承。可将此类编译为与字段类相同的程序集。

验证逻辑由字段呈现控件的 ValidateIsValidErrorMessage 成员以及基础字段类型的 GetValidatedString 方法实现。(CreateChildControls 可能会调用 Validate。)

有关呈现控件的详细信息,请参阅如何:创建字段呈现控件

5. 创建一个或多个呈现模板

每个字段呈现控件至少具有一个与之关联的字段呈现模板,以便在"新建"、"编辑"或"显示"模式中呈现字段。通过让字段呈现控件在它的一个属性中包含对字段呈现模板 ID 的引用,即可实现这种关联。在呈现时,SharePoint Foundation 通过搜索 %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\CONTROLTEMPLATES 中 .ascx 文件中声明的所有呈现模板的 ID 来查找所需模板(Web 应用程序启动时将加载所有这些模板)。呈现控件的 CreateChildControls 方法通常会完成"最终完善"的字段呈现工作,不过大部分呈现工作都由模板来完成。通常,CreateChildControls 方法在"新建"模式中将默认值分配给呈现控件的子控件。它在"编辑"和"显示"模式中将字段的当前值分配给子控件。它还可能执行其他的最终完善呈现工作,例如将 CSS 类分配给 Label 子控件。

通常,必须具有两个呈现模板:一个用于以可编辑形式在"新建"和"编辑"模式中呈现字段,另一个用于以只读形式在"显示"模式中呈现字段。不过,可以让三种模式都共享同一个呈现模板,也可以让各个模式使用不同的呈现模板。利用根据上下文的不同方面(例如,特定用户上下文或显示字段的列表或网站的类型)调用一个或另一个模板的逻辑,您甚至可以对给定模式使用多个模板。

有关呈现模板的详细信息,请参阅如何:创建字段呈现模板

"新建"和"编辑"模式的呈现模板通常需要交互式控件(例如可编辑的文本框、复选框、单选按钮和下拉列表控件)作为其子控件。而"显示"模式通常只需要 LabelLiteral 控件或其他静态显示控件。为此,您可能需要为"显示"模式创建不同的呈现模板。可以在 DisplayTemplateName 属性中(通过 ID)指定该模板。对于"显示"以外的模式,其使用的主模板通过 TemplateName() 属性指定。

实际用来在任何给定上下文中呈现字段的呈现模板是由呈现控件的 ControlTemplate 属性返回的模板。该属性的 get 取值函数使用诸如下列决策条件从与呈现控件关联的呈现模板中进行选择:

  • 当前 HTTP 上下文

  • 控制模式

  • 字段是否为必需字段

  • 如果是数字字段,是否应以百分数的形式呈现

  • 列表项是否为文件夹

当处于"显示"模式时,可以重写此属性并令其 get 取值函数检查控制模式并返回 DisplayTemplate。(除非它已被明确设置为其他某个模板,否则 DisplayTemplate 将返回 DisplayTemplateName 所标识的模板。)对于 ControlTemplate,除非您在 get 取值函数中需要其他决策逻辑,否则在"新建"或"编辑"模式下,可让它调用基本属性的 get 取值函数。

备注

在"显示"模式下指定呈现模板的备选方法是:让 CreateChildControls 方法在"显示"模式下将 DisplayTemplateName 赋予 TemplateName。(除非它已被重写,否则 ControlTemplate 将返回 Template,并且除非后者的 get 取值函数被重写,否则它将返回 TemplateName 所标识的模板。)以这种方式使用 CreateChildControls 方法可能存在一个弱点:即,在不呈现字段的上下文中,此方法不会运行,例如在为调试目的而检查对象模型中的 ControlTemplate 值时。

6.(可选)创建字段值类型

如果要创建一个自定义字段类,该字段类要求字段数据采用特殊数据结构,则可以创建一个值类(或结构)来包含您的字段数据。

有关创建自定义值类的详细信息,请参阅如何:创建自定义字段值类

7.(可选)创建编辑控件

所有字段类型都需具有名称、数据类型、说明和其他常见属性;不过许多字段类型还具有仅与该特定类型的字段关联的属性。当用户创建基于字段类型的新列时,他们在用户界面 (UI) 中设置这些变量属性。通常,字段类型定义(请参阅本主题的前面部分)中的元素可确定如何呈现这些属性设置控件。但有时需要特殊编辑控件。此类控件在用户控件中进行定义;用户控件即 .ascx 文件,它通常有一个包含其逻辑的代码隐藏文件。如果需要执行自定义功能(例如,复杂的计算逻辑、从数据源中查找值或对用户在配置新列时可能选择的值进行自定义数据验证),则建议创建特殊编辑控件。

备注

不能将可变属性的编辑控件与前面所述的呈现模板 .ascx 文件混淆。呈现模板在页面上呈现字段及其值,以创建特定列表项或者从现有列表(通常已定义了其列)编辑或显示特定列表项。相反,当基于字段类型创建列时,可变属性的编辑控件将呈现该字段类型的特定属性。

有关可变属性的自定义字段类型呈现和编辑控件的详细信息,请参阅自定义字段类型属性呈现字段类型属性的编辑器控件

8. 部署元素

有关在何处部署创建的各种类和文件的详细信息,请参阅自定义字段类型部署

移动设备上的字段呈现与计算机上的字段呈现有何区别

在 SharePoint Foundation 中,移动设备与计算机在使用自定义字段呈现控件呈现字段方面类似。但应记住以下区别:

请参阅

任务

演练:创建自定义字段类型

演练:为移动页面创建自定义字段呈现控件

概念

自定义字段类型

如何:创建自定义字段类

自定义字段数据验证

如何:创建自定义字段值类

如何:创建自定义字段类型定义

自定义字段类型属性呈现

字段类型属性的编辑器控件

如何:创建字段呈现控件

如何:创建字段呈现模板

移动页呈现系统