FCKEditor – SharePoint 集成,创建自定义字段类型






4.80/5 (10投票s)
如何在 SharePoint 中创建新的字段类型。一个使用 FCKEditor 作为编辑器的 HTML 多行文本字段。
引言
这个项目受到了我关于 SharePoint 集成 FCKEditor 文章评论的启发。在那篇文章中,我们创建了一个自定义 Web 部件(替代内容编辑器 Web 部件),它使用 FCKEditor 作为 Web 编辑器。这还不错,但如果你想要更多呢?如果你想使用 FCKEditor 而不是 SharePoint 和 WSS 自带的富 HTML 编辑器呢?这还不够。与其修改*core.js*,我为你提供一个更简洁的解决方案:创建你自己的字段类型(这样你可以在未来使用它创建的任何列表),并将 FCKEditor 设置为默认的 Web 编辑器。你需要做什么?
- Visual Studio 2005 和 Visual Studio 2005 Extensions for Windows SharePoint Services 3.0, Version 1.1。
我没有在旧版本上尝试过,但正如我在关于这个主题的文章中所见,1.1 版本是一个改进。我不需要手动添加文件和包含(Visual Studio 已经为我完成了)。
- WSS 3.0 或 SharePoint Server 2007。
- FckEditor – 你可以从我之前的文章下载 FckEditor。它完全相同,并且我在这里也使用了我在那篇文章中制作的文件浏览器。
有关如何将 FckEditor 文件添加到 SharePoint 网站的说明,请参阅我之前的文章。
- 步骤 2:配置 FCKEditor,项目 1 和 2。
- 步骤 3:自定义文件浏览器。
背景
基本思路是在 SharePoint 列表中拥有带有自定义所见即所得编辑器的多行文本列。在这篇文章中,我在这个自定义列中实现了 FCKEditor。
好处多多
- 对非 IE 浏览器的更好支持
- 自定义或默认文件管理器,随处可用
- 自定义工具栏
- 更高级的 Web 编辑器
使用代码
CustomWeb 是一个即用型、VS2005 解决方案。文章中的所有示例都包含在该解决方案中。准备好 FCKEditor 后,你只需构建并部署此解决方案。
步骤 1:创建一个新的 SharePoint 项目
- 在 Visual Studio 2005 中,从“文件”菜单选择“新建项目”。
- 在“新建项目”对话框中,在“项目类型”窗口中选择 SharePoint。(如果窗口中没有 SharePoint 项目选项,我建议你安装 Visual Studio 2005 Extensions for Windows SharePoint Services 3.0, Version 1.1。)从 SharePoint 模板中选择“空模板”。
- 对于名称,你可以输入任何你喜欢的名字,我输入了 CustomWeb。
- 按“确定”,你将看到你的空项目。在“解决方案资源管理器”中,右键单击项目名称(对我来说是 CustomWeb),然后选择“添加”,再选择“新建项”。
- 在“SharePoint”类别中,选择“字段控件模板”。
- 在“名称”框中,键入你为项目选择的名称(对我来说是 CustomWeb)。
- 点击“添加”。这将为你创建两个文件:*CustomWeb.Field.cs* 和 *CustomWeb.FieldControl.cs*,它们位于*CustomWeb*文件夹中。
步骤 2:创建控件
- 打开*CustomWeb.Field.cs*文件。默认情况下,此类继承自
SPFieldText
。如果你想继承自其他类,可以更改它。在这种情况下,我不在乎,因为我使用的是自己的控件,所以我省略了SPFieldText
引用。也许,继承自基类SPField
会更清晰;如果有人想尝试,那太好了! - 打开*CustomWeb.FieldControl.cs*。默认情况下,此类继承自
TextField
。对于这个项目,我们将不使用任何标准控件,因此我们将将其更改为BaseFieldControl
。 - 你的 using 部分应该看起来像这样
using System; using System.Runtime.InteropServices; using System.Web.UI.WebControls; using Microsoft.SharePoint; using Microsoft.SharePoint.WebControls; using FredCK.FCKeditorV2;
- 现在,我们将向控件添加一个字段。我们将添加我们的 .NET 版 FCKEditor 控件。你可以从 FCKEditor 网站免费下载。
protected FCKeditor WebEditor; // protected Label WebEditorPrefix;
如果你想在新建或编辑表单中使用
Label
,只需取消注释此行。我不需要它。 - 接下来,你需要重写
CreateChildControls
方法protected override void CreateChildControls() { if (this.ControlMode == SPControlMode.Edit || this.ControlMode == SPControlMode.New) { // Make sure inherited child controls are completely rendered. base.CreateChildControls(); this.WebEditor = new FCKeditor(); ; //this.WebEditorPrefix = new Label(); //If you want your own label for a control /**** If You use ascx template use this two lines instead 2 above // (Label)TemplateContainer.FindControl("WebEditorPrefix"); //if (TemplateContainer.FindControl("WebEditor")!=null) //this.WebEditor = (FCKeditor)TemplateContainer.FindControl("WebEditor"); */ if (!this.Page.IsPostBack) { if (this.ControlMode == SPControlMode.New) { this.WebEditor.Value = ""; } // end assign default value in New mode this.WebEditor.ImageBrowserURL = "/fckeditor/fileUpload.aspx"; this.WebEditor.ToolbarSet = "MyToolbar"; this.WebEditor.Width = 680; this.WebEditor.Height = 500; }// end if this is not a postback
我们在这里做什么?如果控件处于
Edit
或New
模式(当用户在 SharePoint 列表中打开新建或编辑表单时),我们将渲染我们的 FCKEditor 控件。在Display
模式下,我们将渲染 HTML(我们将在本文后面的RenderPattern
标签中指定)。如果项目是新的,我们将值设置为空字符串;否则,它应该从 SharePoint 列表中加载值。我们稍后设置的属性是 FCKEditor 特有的,我们设置了ImageBrowserURL
(即我们的自定义文件浏览器)、工具栏(也是自定义的)、宽度和高度。 - 添加以下
Value
属性的重写,这是字段在 UI 中的属性。public override object Value { get { //EnsureChildControls(); return this.WebEditor.Value; } set { //EnsureChildControls(); this.WebEditor.Value = (String)value; } }
步骤 3:创建字段类型定义
你的字段类型定义已在*Templates/xml*文件夹中为你创建。如果你将项目命名为 CustomWeb,则它名为*fldtypes_CustomWeb.xml*。这是使用 WSS Extensions 1.1 for Visual Studio 的一个优点。否则,你应该自己创建这个文件。只需构建项目,Visual Studio 就会添加除RenderPattern
之外的所有内容。这部分永远不应手动输入。因为我们只想显示 HTML,所以这非常简单,只需添加
<RenderPattern Name="DisplayPattern" DisplayName="DisplayPattern">
<Column AutoNewLine="TRUE" />
</RenderPattern>
在</FieldTypes>
标签之前。另外,还有一件事。如果你想在控件中存储超过 255 个字符,你应该将控件的ParentType
更改为Note
。
最后,你的 XML 文件应该看起来像这样
<?xml version="1.0" encoding="utf-8"?>
<FieldTypes>
<FieldType>
<Field Name="TypeName">CustomWebField</Field>
<Field Name="TypeDisplayName">CustomWebField</Field>
<Field Name="TypeShortDescription">CustomWebField</Field>
<Field Name="ParentType">Note</Field>
<Field Name="UserCreatable">TRUE</Field>
<Field Name="FieldTypeClass">6dee03df-80d1-4a5b-abb2-3aa1ea2ad19e</Field>
<RenderPattern Name="DisplayPattern" DisplayName="DisplayPattern">
<Column AutoNewLine="TRUE" />
</RenderPattern>
</FieldType>
</FieldTypes>
步骤 4:整合
现在,你已准备好部署解决方案。只需点击“部署”,你的字段就会被添加到 SharePoint。你可以在列表的“创建列”选项中看到你的新字段类型(见下图)
你的新字段类型应该位于所有已知 SharePoint 字段类型(文本、选项、超链接…)的末尾。为它起一个好名字,然后选择 CustomWebField 作为你的字段类型。从现在开始,一切都很简单。你像使用其他列类型一样使用这种类型的列。因此,当你在新建表单中打开列表项时,它看起来像这样
如果你下载了我版本的 FCKEditor,你也应该拥有 SharePoint 文件浏览器(否则,你应该拥有默认的文件浏览器)
在显示模式下,我们的字段类型只是渲染 HTML(记住字段定义 XML 中的RenderPattern
标签)
接下来做什么?
正如你所见,我注释掉了引用模板容器的代码行。那都是关于什么的?你可以创建一个 ASCX 页面并使用 UI 来创建你的控件。而不是使用 Controls.Add(this.WebEditor);
,你可以创建一个 ASCX 文件并将你项目所需的控件拖放到其中。你应该将此 ASCX 文件放在项目的根目录中。
然后,在*CustomWeb.FieldControl.cs*中,你应该重写DefaultTemplateName
属性
protected override string DefaultTemplateName
{
get
{
return "CustomFieldControl";
}
}
其中*CustomFieldControl*是你*CustomFieldControl.ascx*文件的名称。请记住,部署后,你的 ASCX 文件应位于*C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\CONTROLTEMPLATES*文件夹中。
这是一个相当简单的控件,所以我选择不为模板使用 ASCX。