SharePoint 2013 图文开发系列之自定义字段

原文:SharePoint 2013 图文开发系列之自定义字段

  SharePoint使用的优势,就在于开箱即用、快速搭建,SharePoint自身为我们提供了很多字段类型,已经很丰富了。但是,在实际应用中,我们还需要一些功能特殊的字段,下面,我们简单介绍下字段的开发,大家了解以后,可以按照需求扩展自己的字段类型。

1、新建项目,选择SharePoint 2013 空项目,如下图:

2、选择调试网站和解决方案类型,如下图:

3、添加新项,类,这个是用来定义字段的,如下图:

4、添加新项,类,这个是用来编写字段展示的,如下图:

5、添加映射文件夹,如下图:

6、选择映射文件夹,这个文件夹,添加的是CustomFieldControl.cs的前台文件,如下图:

7、添加映射文件夹,选择Xml,这个是字段的描述文件,如下图:

8、为xml目录下添加一个xml文件,用来写字段的描述文件,如下图:

9、在CONTROLTEMPLATES文件夹下,添加用户控件,用来写CustomFieldControl.cs的前台文件,因为这样,比较好进行字段展示,如下图:

10、删除没用的cs文件,最后的如下图

11、为字段类CustomField.cs添加方法,如下图:

12、字段类CustomField.cs完整代码,有点长,关键代码有注释,如下:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 using System.Web;
 7 using System.Web.UI;
 8 using System.Web.UI.WebControls;
 9 using Microsoft.SharePoint;
10 using Microsoft.SharePoint.WebControls;
11
12 namespace SP2013CustomField
13 {
14     class CustomField : SPFieldText
15     {
16         public CustomField(SPFieldCollection fields, string fieldName)
17             : base(fields, fieldName)
18         {
19         }
20
21         public CustomField(SPFieldCollection fields, string typeName, string displayName)
22             : base(fields, typeName, displayName)
23         {
24         }
25
26         public override string DefaultValue //设置字段的默认值
27         {
28             get
29             {
30                 return "http://";
31             }
32         }
33
34         public override BaseFieldControl FieldRenderingControl //关联字段展示控件
35         {
36             get
37             {
38                 BaseFieldControl fc = new CustomFieldControl();
39                 fc.FieldName = this.InternalName;
40                 return fc;
41             }
42         }
43
44         public override string GetValidatedString(object value)//验证字段是否符合要求
45         {
46             string StartStr = this.GetCustomProperty("CustomFieldProperty").ToString().ToLower();//获得字段属性
47             string StartValue = string.Empty;
48             if (value.ToString().Length > StartStr.Length)
49             {
50                 StartValue = value.ToString().ToUpper().Substring(0, StartStr.Length).ToLower();
51             }
52             // this.Required是否必填项的值
53             if (this.Required == true || value == null || StartStr != StartValue)
54             {
55                 throw new SPFieldValidationException("该字段必须以" + StartStr + "开头");//将不符合要求的错误抛出来,以小红字显示在栏的下面
56             }
57             return base.GetValidatedString(value);
58         }
59     }
60 }

CustomField Class

13、为字段展示控件类CustomFieldControl.cs添加方法,如下图:

14、附CustomFieldControl.cs完整代码,如下:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 using System.Web;
 7 using System.Web.UI;
 8 using System.Web.UI.WebControls;
 9 using Microsoft.SharePoint;
10 using Microsoft.SharePoint.WebControls;
11
12 namespace SP2013CustomField
13 {
14     class CustomFieldControl : BaseFieldControl
15     {
16         public TextBox tbStart;
17         public Image myImage;
18
19         //获取控件的值
20         public override object Value
21         {
22             get
23             {
24                 EnsureChildControls();
25                 if (tbStart != null)
26                 {
27                     return tbStart.Text;
28                 }
29                 else
30                 {
31                     return null;
32                 }
33             }
34             set
35             {
36                 EnsureChildControls();
37                 if (tbStart != null)
38                 {
39                     tbStart.Text = (String)value;
40                 }
41             }
42         }
43
44         //重写默认模板
45         protected override string DefaultTemplateName
46         {
47             get
48             {
49                 if (this.ControlMode == SPControlMode.Display)
50                 {
51                     return this.DisplayTemplateName;
52                 }
53                 else
54                 {
55                     return "DefaultCustomFieldControl";
56                 }
57             }
58         }
59
60         public override string DisplayTemplateName
61         {
62             get
63             {
64                 return "DisplayCustomFieldControl";
65             }
66             set
67             {
68                 base.DisplayTemplateName = value;
69             }
70         }
71
72         //重写控件生成方法
73         protected override void CreateChildControls()
74         {
75             base.CreateChildControls();
76             if (this.Field != null)
77             {
78                 this.myImage = (Image)TemplateContainer.FindControl("myImage");
79                 this.tbStart = (TextBox)TemplateContainer.FindControl("tbStart");
80             }
81             if (this.ControlMode == SPControlMode.Display)
82             {
83                 string strHeight = base.Field.GetCustomProperty("Height").ToString();
84                 string strWidth = base.Field.GetCustomProperty("Width").ToString();
85                 if (myImage != null)
86                 {
87                     myImage.ImageUrl = this.ItemFieldValue.ToString();
88                     myImage.Width = Convert.ToInt32(strWidth);
89                     myImage.Height = Convert.ToInt32(strHeight);
90                 }
91             }
92         }
93     }
94 }

CustomFieldControl Class

15、CustomFieldControl.cs类的前台文件,如下图:

16、CustomFieldControl.cs前台文件完整代码,如下:

<%@ Control Language="C#" %>
<%@ Assembly Name="Microsoft.SharePoint, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register TagPrefix="SharePoint" Assembly="Microsoft.SharePoint, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" Namespace="Microsoft.SharePoint.WebControls" %>
<SharePoint:RenderingTemplate ID="DefaultCustomFieldControl" runat="server">
    <Template>
        <asp:TextBox ID="tbStart" runat="server" />
    </Template>
</SharePoint:RenderingTemplate>
<SharePoint:RenderingTemplate ID="DisplayCustomFieldControl" runat="server">
    <Template>
        <asp:Image ID="myImage" runat="server" />
    </Template>
</SharePoint:RenderingTemplate>

17、设置字段的描述文件,主要是字段的定义、字段属性,如下图:

18、字段描述文件完整xml,如下:

<?xml version="1.0" encoding="utf-8" ?>
<FieldTypes>
  <FieldType>
    <Field Name="TypeName">自定义单行文本</Field>
    <Field Name="ParentType">Text</Field>
    <Field Name="TypeDisplayName">必须有特定标识开头的单行文本</Field>
    <Field Name="TypeShortDescription">自定义单行文本</Field>
    <Field Name="UserCreatable">TRUE</Field>
    <Field Name="ShowOnListCreate">TRUE</Field>
    <Field Name="ShowOnSurveyCreate">TRUE</Field>
    <Field Name="ShowOnDocumentLibraryCreate">TRUE</Field>
    <Field Name="ShowOnColumnTemplateCreate">TRUE</Field>
<Field Name="FieldTypeClass">SP2013CustomField.CustomField, SP2013CustomField, Version=1.0.0.0, Culture=neutral, PublicKeyToken=42c0b47fe35d0f54</Field>
//字段属性,如下
    <PropertySchema>
      <Fields>
        <Field Name="CustomFieldProperty" DisplayName="设置起始标识" MaxLength="255" Type="Text"></Field>
        <Field Name="Height" DisplayName="图片高度" MaxLength="255" Type="Text"></Field>
        <Field Name="Width" DisplayName="图片宽度" MaxLength="255" Type="Text"></Field>
      </Fields>
    </PropertySchema>
  </FieldType>
</FieldTypes>

19、在列表里添加栏,可以添加属性,如下图:

20、新建一条项目,图片栏的验证,如下图:

21、展示页面,如下图:

22、查看项目页面,不显示url,在图片控件中显示,如下图:

  自定义字段,主要有字段定义、字段控件、字段控件前台、字段描述文件等组成,其中,字段前台文件并非必须,可以添加Render将控件输出,但是不好控制排版,所以复杂的字段需要前台展示。

  其开发过程也不复杂,基本就是搭建开发模型,将各个部分创建,然后为各个部分添加代码,建议先编写简单控件,部署没有问题再添加复杂功能,以免出错不好调试。当然,调试附加相应w3wp.exe进程即可。

时间: 2024-08-02 22:58:46

SharePoint 2013 图文开发系列之自定义字段的相关文章

SharePoint 2013 图文开发系列之定义站点模板

原文:SharePoint 2013 图文开发系列之定义站点模板 SharePoint站点模板是一个非常好的功能,方便我们开发一类网站,然后在此基础上做二次开发,对于SharePoint的使用,有着举足轻重的作用. 因为篇幅比较长,所以加上目录,方便大家查看: 一.为站点模板添加母版页 二.为站点模板添加自定义列表 三.为站点模板添加可视化WebPart 1.添加新项目,选择SharePoint 2013 空项目,如下图: 2.选择调试站点,部署为场解决方案,如下图: 3.添加新项,选择网站定义

SharePoint 2013 图文开发系列之代码定义列表

原文:SharePoint 2013 图文开发系列之代码定义列表 在SharePoint的开发中,用Visual Studio自定义列表是经常会用到的,因为很多时候,我们并不会手动创建列表,而手动创建列表在测试服务器和正式机之间同步字段,也很麻烦,所以我们经常用代码来定义列表或者文档库. 尤其在工作流的开发中,我们经常会用到代码定义任务列表,或者历史记录列表,用来存储我们需要存储的相关数据.而在Visual Studio 2013中,定义列表也提供了模板,通过模板创建,我们很容易就可以定义需要的

SharePoint 2013 图文开发系列之Visual Studio 创建母版页

原文:SharePoint 2013 图文开发系列之Visual Studio 创建母版页 一直以来,对于SharePoint母版页的创建,都是使用SharePoint Designer来创建和修改的,而后接触了SharePoint 2013,发现可以使用Html文件,通过设计管理器导入,然后生成Master页面使用,但是效果不是很好. 其实,SharePoint还可以通过代码方式创建和部署母版页,创建的过程比较简单,篇幅很短,也不需要很详细的解说,相信了解开发的人,很容易就能搞定.之前浏览博客

SharePoint 2013 图文开发系列之创建内容类型

原文:SharePoint 2013 图文开发系列之创建内容类型 SharePoint内容类型,是很有特色的,就好比发布新闻,同在一张列表里,可以由内容类型区分图片新闻.文字新闻等,顾名思义,就是在一张列表里发布不同类型的项目. 1.添加新项目,选择SharePoint 2013 空项目,如下图: 2.选择调试网站和解决方案类型,如下图: 3.添加新项,选择内容类型,如下图: 4.选择继承的父内容类型,如下图: 5.修改内容类型的Feature文件,如下图: 6.查看内容类型的xml文件,如下图

SharePoint 2013 图文开发系列之WebPart

原文:SharePoint 2013 图文开发系列之WebPart 这是我们介绍SharePoint开发入门的第一篇,在这一篇里,我们会介绍SharePoint开发的几个关键物理路径,一些开发技巧和最基础的WebPart开发. 开发工具 在SharePoint 2013开发中,我们使用的是Visual Studio 2012/2013均可,但是VS2012要额外安装Microsoft Office Develop Tools for Visual Studio 2012,可以使用Microsof

SharePoint 2013 图文开发系列之计时器任务

原文:SharePoint 2013 图文开发系列之计时器任务 SharePoint的计时器任务,又称TimerJob,由服务里的Timer服务执行,在管理中心管理,是一个类似于Windows任务计划的功能,方便定时执行一些需要的功能,以免影响服务器性能. 在SharePoint 2013的开发中,很多时候我都会选择2013的空项目,方便以后添加项,也许是个人习惯问题,是不是好习惯,还是希望大家在开发中自己体会. 1.添加新项目,选择SharePoint 2013空项目,如下图 2.选择场解决方

SharePoint 2013 图文开发系列之可视化WebPart

原文:SharePoint 2013 图文开发系列之可视化WebPart 有了WebPart开发的基础,再进行可视化WebPart开发,就容易多了.创建和开发过程,两者非常相似,下面,我们简单介绍下可视化WebPart的开发. 1.添加新项目,选择SharePoint 2013空项目 ,如下图: 当然,你也可以直接选择可视化web部件,这样会在项目里自动创建一个可视化WebPart(如下图),不过我不喜欢它默认的命名方式,还要重命名或删除重建,所以我就创建空项目,而后自己添加. 2.选择部署为场

SharePoint 2013 图文开发系列之InfoPath入门

原文:SharePoint 2013 图文开发系列之InfoPath入门 本文主要介绍SharePoint 2013中,简单发布InfoPath表单,并添加后台代码,示例比较简单,主要描述的是一个创建InfoPath的过程,而非多么深奥的后台代码,希望能够给初学者带来帮助. 主要过程有 Ø  新建一个InfoPath表单 Ø  修改表单的信任级别并添加证书 Ø  发布到InfoPath得到管理员认证 Ø  设计InfoPath布局及添加控件,在代码中编辑,添加表单功能 Ø  发布表单到Share

SharePoint 2013 图文开发系列之应用程序页

原文:SharePoint 2013 图文开发系列之应用程序页 在SharePoint中,有两种页面类型,一种是保存在数据库中的页面,我们可以在网站的页面库中看到:还有一种叫做应用程序页,部署在服务器上,Layouts下面的页面,是应用程序页,主要是完成特定功能的页面. 特定功能的页面,听起来比较笼统,举个例子,比如说图片上传到特定文档库,文档批量迁移,权限管理等. 1.添加新建项目,选择SharePoint 2013 空项目,如下图: 2.选择场解决方案,如下图: 3.添加新项,选择应用程序页