SharePoint Development - Custom Field using Visual Studio 2010 based SharePoint 2010

时间:2025-03-10 12:38:03

博客地址 http://blog.****.net/foxdave

自定义列表的时候有时候需要自定义一些字段来更好地实现列表的功能,本文讲述自定义字段的一般步骤

打开Visual Studio,我们还是使用上次创建的小项目,打开。我们只做一个简单的字段,一个图片超链接,此例没有附带ascx用户控件,

第一步,添加两个自定义字段类,继承SPField和SPFieldControl,最简单的格式如下所示

using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls; namespace SharePointProjectCT
{
public class MyField : SPField
{
public MyField(SPFieldCollection fields, string fieldName)
: base(fields, fieldName) { } public MyField(SPFieldCollection fields, string typeName, string displayName)
: base(fields, typeName, displayName) { } public override BaseFieldControl FieldRenderingControl
{
get
{
BaseFieldControl ctr = new MyFieldControl();
ctr.FieldName = this.InternalName;
return ctr;
}
}
}
public class MyFieldControl : BaseFieldControl
{
protected override string DefaultTemplateName
{
get
{
return "MyFieldTemplate";
}
} protected override void CreateChildControls()
{
base.CreateChildControls(); }
}
}

第二步,添加Field定义文件(XML)

右键工程文件添加SharePoint映射文件夹,选择Templates目录下的XML文件夹,确定

右键XML文件夹,添加一个XML文件,名称为fldtypes_MyField。这里需要注意的是,自定义字段的XML定义文件的名称必须以fldtypes_开头。

<?xml version="1.0" encoding="utf-8" ?>
<FieldTypes>
<FieldType>
<Field Name="TypeName">MyField</Field>
<Field Name="ParentType">Text</Field>
<Field Name="TypeDisplayName">我的自定义字段</Field>
<Field Name="TypeShortDescription">我的自定义字段</Field>
<Field Name="UserCreatable">TRUE</Field>
<Field Name="ShowOnListAuthoringPages">TRUE</Field>
<Field Name="ShowOnDocumentLibraryAuthoringPages">TRUE</Field>
<Field Name="ShowOnSurveyAuthoringPages">TRUE</Field>
<Field Name="ShowOnColumnTemplateAuthoringPages">TRUE</Field>
<Field Name="CAMLRendering">TRUE</Field>
<Field Name="FieldTypeClass">SharePointProjectCT.MyField, SharePointProjectCT, Version=1.0.0.0, Culture=neutral, PublicKeyToken=cd984e936255a137</Field>
<RenderPattern Name="DisplayPattern">
<HTML><![CDATA[<a target="_blank" href="/_Layouts/MyField/MyFieldTest.aspx?ID=]]></HTML>
<Field Name="ID"/>
<HTML><![CDATA[">]]></HTML>
<HTML><![CDATA[<img src="../_layouts/image/myField.PNG" alt="" border="0" />]]></HTML>
<HTML><![CDATA[ </a>]]></HTML>
</RenderPattern>
</FieldType>
</FieldTypes>

关于自定义字段定义的相关说明请戳这里

这里说明两个位置,一是FieldTypeClass,这里填写应用程序dll的名称,PublicKeyToken的获得方式介绍两种:1).把dll拖到GAC里,然后右键属性,可以看到。2). 拖到Reflector里,点击这个dll可以看到。二是字段的在列表视图展示页面的样式,通过RenderPattern来定义,同时需要添加<Field Name="CAMLRendering">TRUE</Field>这一行来声明。

我们这里写了一个图片超链接,链接中传入当前Item的ID。

之后保存部署,在列表的新建列操作里就可以看到自己创建的Field类型了。我们将Field与上一次说到的ContentType整合起来,在ContentType的定义文件中添加此字段声明和引用,如下所示

<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<Field ID="{FD0FFFC6-813E-4579-BCCF-797DE7724733}"
Name="MyContent"
Type="Note"
RichText="TRUE"
RichTextMode="Text"
DisplayName="内容"
ShowInDisplayForm="TRUE"
ShowInEditForm="TRUE"
ShowInNewForm="TRUE"
Group="自定义字段"
></Field>
<Field ID="{9F655D24-0579-4B48-AB3F-05A5BCA35463}"
Name="MyCustomField"
Type="MyField"
DisplayName="我的自定义字段"
ShowInDisplayForm="TRUE"
ShowInEditForm="TRUE"
ShowInNewForm="TRUE"
Group="自定义字段"
></Field>
<!-- 父内容类型: 项目 (0x01) -->
<ContentType ID="0x0100aaeaadf3a9204fc38b69ae330f007f26"
Name="SharePointProjectCT - ContentType1"
Group="自定义内容类型"
Description="我的内容类型"
Inherits="TRUE"
Version="0">
<FieldRefs>
<FieldRef ID="{FD0FFFC6-813E-4579-BCCF-797DE7724733}" Name="MyContent"/>
<FieldRef ID="{9F655D24-0579-4B48-AB3F-05A5BCA35463}" Name="MyCustomField"/>
</FieldRefs>
</ContentType>
</Elements>

更多说明参考微软说明文档