如何:创建自定义字段类

上次修改时间: 2015年3月9日

适用范围: SharePoint Foundation 2010

若要创建自定义字段类型类,必须从 SPField 类或下表列出的类(这些类都从 SPField 类派生)之一派生类。

备注

还存在其他字段类型类(其名称采用 SPField* 模式的类),但是由于 Microsoft SharePoint Foundation 以特殊方式处理这些类,因此不支持从它们派生新类。

我们建议您在创建直接或间接从 SPField 类派生的自定义字段类时使用下面的命名约定:

字段类型名称Field

正确命名的类的示例为 TargetDateField 和 RegularExpressionField。(SharePoint Foundation 附带的从 SPField 派生的类在确定此命名约定之前已创建,并且采用模式 SPField字段类型名称,例如 SPFieldDateTime。)

可以从下列 SPField 类成员派生自定义字段类

不直接从 SPField 类继承的自定义字段类型类必须从下列类之一派生。

说明

SPFieldBoolean

表示 Boolean 字段类型。

SPFieldChoice

表示选项字段类型。

SPFieldCurrency

表示货币字段类型。

SPFieldDateTime

表示日期时间字段类型。

SPFieldLookup

表示查阅字段。SPFieldLookup 对象的字段值包含在 SPFieldLookupValue 对象中。

SPFieldMultiChoice

表示多选字段类型。SPFieldMultiChoice 对象的字段值包含在 SPFieldMultiChoiceValue 对象中。

SPFieldMultiColumn

表示多列字段类型。SPFieldMultiColumn 对象的字段值包含在 SPFieldMultiColumnValue 对象中。

SPFieldMultiLineText

表示多行文本字段类型。

SPFieldNumber

表示数字字段类型。

SPFieldRatingScale

表示分级字段类型。SPFieldRatingScale 对象的字段值包含在 SPFieldRatingScaleValue 对象中。

SPFieldText

表示单行文本字段类型。

SPFieldUrl

表示 URL 字段类型。SPFieldUrl 对象的字段值包含在 SPFieldUrlValue 对象中。

SPFieldUser

表示 SharePoint Foundation 用户。

备注

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

指定自定义字段行为

在选择要从中派生自定义字段类型的字段类后,可以选择要替代该类的哪些成员。由于使字段类型唯一的大多数属性和行为都包含在其类中,因此通过选择新实现将替代的派生自 SPField 的类,即可获得一组丰富的替代语义。

例如,SPField 类包含下列成员,在开发自定义字段类型时,可替代这些成员的实现(如有必要)。

备注

对于在这一节中列出的大多数成员,SPField 类的默认实现不用于执行有用工作;例如,GetFieldValue 仅返回传递给它的内容,而 GetValidatedString 仅调用值类的 ToString 方法(不包含任何验证逻辑)。因此,如果自定义字段类型类是直接从 SPField 派生的,则必须 为需要使用其用途的任何成员提供替代。

经常需要替代的 SPField 类成员

SPField 类成员

说明

FieldRenderingControl

返回可用于呈现以下内容的控件:"显示"表单、"编辑"表单和"新建"表单中的字段,以及使用字段控件的所有页面。实例化呈现控件的对象在其 Field 属性中存储对其呈现的字段对象的反向引用。正如这些相互引用所显示的那样,这两个对象是成对出现的。从 SPField 派生的对象处理与内容数据库的交互,而从 BaseFieldControl 派生的呈现控件则处理与用户的交互,以及用户界面 (UI) 中字段的呈现。但请注意,不必使用呈现控件来呈现自定义字段:自定义字段还可以使用字段定义中定义的 RenderPattern 来呈现,在这种情况下,FieldRenderingControl 属性可能为 null。最常见的模式是使用呈现控件在新建模式和编辑模式中呈现字段,并使用呈现模式在显示模式中呈现字段。

如果您确实使用呈现控件,则自定义字段类必须使用以下标准代码模式替代 FieldRenderingControl 属性 get 访问器:

public override BaseFieldControl FieldRenderingControl
{
    [SharePointPermission(SecurityAction.LinkDemand, ObjectModel = true)]
    get 
    {
        BaseFieldControl fieldControl = new field_type_nameFieldControl();
        fieldControl.FieldName = this.InternalName;
        return fieldControl;
    }
}
Public Overrides ReadOnly Property FieldRenderingControl() As BaseFieldControl
    <SharePointPermission(SecurityAction.LinkDemand, ObjectModel := True)> _
    Get
        Dim fieldControl As BaseFieldControl = New field_type_nameFieldControl()
        fieldControl.FieldName = Me.InternalName
        Return fieldControl
    End Get
End Property

权限属性 (Attribute) 可确保只有具有使用 SharePoint Foundation 对象模型的权限的代码才能读取该属性 (Property)。将字段对象的内部名称分配给 FieldName 属性 (Property) 的行还会将 Field 属性 (Property) 设置为字段对象。这可确保字段类型名称FieldControl 知道它要呈现哪个对象。

FieldRenderingMobileControl

返回可用于呈现移动应用程序中的"显示"表单、"编辑"表单和"新建"表单中的字段的控件。

GetFieldValueForEdit

返回要在编辑模式下呈现的字段值。此方法用于编辑表单和新建表单。

GetValidatedString

在派生类中替代时,将返回验证的字段值。请针对自定义验证和数据序列化逻辑替代此方法。(基方法不提供验证逻辑,而且许多从基方法派生的 SharePoint Foundation 类也不提供验证逻辑。)此方法可能转而使用字段值对象的 ToString 方法将字段值对象转换为字符串。典型的替代应为:

  • 当用户赋予字段的值无效,或者该值为 null 且字段为必填字段时,将引发 SPFieldValidationException。如果用户尝试保存无效值,则 SharePoint Foundation 将捕获此异常。例如,新建表单保持打开状态,且此异常的 Message 属性用于在无效字段旁边放置错误消息。

  • 当且仅当值通过自定义验证时,才调用基 GetValidatedString

有关详细信息以及替代的 GetValidatedString 的示例,请参阅自定义字段数据验证

OnAdded

在将字段添加到列表后替代以指定自定义字段类型逻辑。

OnUpdated

在字段更新后替代以指定自定义字段类型逻辑。

OnDeleting

在从列表中删除字段前替代以指定自定义字段类型逻辑。

经常在使用复杂自定义数据类型时替代的 SPField 类成员

当字段类型需要与父字段类型不同的复杂自定义数据类型时,您可能还要替代 SPField 类的几个成员。可以使用自定义字段值类来定义此类自定义数据类型。有关详细信息,请参阅如何:创建自定义字段值类。(可能还需要在其他情况下替代这些成员,即使不创建自定义数据类型也是如此。)

SPField 类成员

说明

DefaultValue

当特定列表项的字段中没有值时,作为字符串返回可用于该字段的默认值。

DefaultValueTyped

当特定列表项的字段中没有值时,返回可用于该字段的默认值。

FieldValueType

返回字段值类型。

GetFieldValue

作为对象返回字段值。

GetFieldValueAsText

作为字符串返回字段数据值。

GetFieldValueAsHtml

以字符串形式返回 HTML 格式的字段数据值。此 HTML 格式的字段值最常用于直接在页面上呈现字段值。例如,它在列表项的版本历史记录页面上使用。但是,此 HTML 格式的字段值不在显示表单上使用。显示表单的字段呈现通常从字段类型的 fldtype*.xml 文件中的协作应用程序标记语言 (CAML)DisplayPattern 元素呈现。

GetValidatedString

请参阅"指定自定义字段行为"一节中的"注意"。

PreviewValueTyped

对显示和编辑模式中的字段控件的设计时间视图,返回字段数据的预览值。

请参阅

任务

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

概念

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

自定义字段类型

自定义字段数据验证

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