博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Custom Sharepoint Lookup Field
阅读量:5790 次
发布时间:2019-06-18

本文共 6571 字,大约阅读时间需要 21 分钟。

对sharepoint查阅项字段定制摸索了比较久,感觉微软对sharepoint内部的东西介绍的还是比较模糊。

以下是新建的查阅项字段,有一些不足希望能一起讨论

一、新建一个sharepoint项目

二、接着新建一个cs文件作为字段的主要文件

namespace LookUpProject{    public class RCustomField : SPFieldLookup    {        public RCustomField(SPFieldCollection fields, string fName)            : base(fields, fName) { }        public RCustomField(SPFieldCollection fields,                      string tName, string dName)            : base(fields, tName, dName) { }        public override BaseFieldControl FieldRenderingControl        {            get            {                BaseFieldControl fieldControl = new RCustomFieldControl();       //在下面的内容中定义                fieldControl.FieldName = this.InternalName;                return fieldControl;            }        }     }}

cs文件中必须包含2个构造函数(2个参数和3个参数),在此文件中还可以添加一些其他方法,可以参考MSDN对SPFieldLookup的介绍。

FieldRenderingControl指定呈现控件类。

注:建立Web部件是要在Sharepoint映射文件夹中

 

三、查阅项与其他字段类型不同在于查阅项的值和查阅项的编辑器控件,首先讨论编辑器控件

namespace LookUpProject{    public class RCustomFieldEditor: UserControl, IFieldEditor {        public bool DisplayAsNewSection { get { return true; } }        public void InitializeWithField(SPField field) { }        public void OnSaveChange(SPField field, bool isNewField) {            RCustomField _f = field as RCustomField;            SPSite _site = SPControl.GetContextSite(this.Context);            SPWeb _web = _site.OpenWeb();            _f.LookupWebId = _web.ID;            _f.LookupList = _web.Lists["列表名"].ID.ToString();        }    }}

查阅项的编辑器控件必须继承UserControl,同时要实现IFieldEditor 接口(DisplayAsNewSection,InitializeWithField,OnSaveChange)

不同的接口实现不同的事件处理,在上述代码中主要实现了点击保存按钮后进行的操作,代码表示默认取得当前上下文中的Site、Web以及一个List。

由于查阅项是对其他列表或文档库的引用,所以需要在创建时设置目标网站ID和列表ID:

_f.LookupWebId = _web.ID;_f.LookupList = _web.Lists["列表名"].ID.ToString()

编辑器控件的呈现控件代码如下(.ascx):

<%@ Assembly Name="$SharePoint.Project.AssemblyFullName$" %><%@ Assembly Name="Microsoft.Web.CommandUI, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %><%@ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %><%@ Register Tagprefix="Utilities" Namespace="Microsoft.SharePoint.Utilities" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %><%@ Register Tagprefix="asp" Namespace="System.Web.UI" Assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" %><%@ Import Namespace="Microsoft.SharePoint" %> <%@ Register TagPrefix="wssuc" TagName="InputFormControl" src="~/_controltemplates/InputFormControl.ascx" %><%@ Register TagPrefix="wssuc" TagName="InputFormSection" src="~/_controltemplates/InputFormSection.ascx" %><%@ Register Tagprefix="WebPartPages" Namespace="Microsoft.SharePoint.WebPartPages" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %><%@ Control Language="C#" AutoEventWireup="false" CompilationMode="Always" Inherits="LookUpProject.RCustomFieldEditor" %>
//这里可以添加自定义的控件

 

四、接下来编写上面引用的显示控件:

namespace LookUpProject{    public class RCustomFieldControl : BaseFieldControl    {        protected override string DefaultTemplateName                         //绑定呈现控件的页面元素        {            get { return "UnitedStatesAddressRenderingTemplate"; }        }        protected DropDownList DropDownList1;        protected override void CreateChildControls()        {            base.CreateChildControls();            DropDownList1 = new DropDownList();            RCustomField f = (RCustomField)base.Field;            SPSite s = SPControl.GetContextSite(Context);            SPWeb lookupWeb = s.OpenWeb(f.LookupWebId);                                                 SPList lookupList = lookupWeb.Lists[new Guid(f.LookupList)];            SPListItemCollection items = lookupList.Items;            foreach (SPListItem i in items)            {                ListItem _s = new System.Web.UI.WebControls.ListItem(                      i.Fields[FieldID].GetFieldValueAsText(i[FieldID]), i.ID.ToString());                DropDownList1.Items.Add(_s);            }            this.Controls.Add(DropDownList1);        }        public override object Value        {            get            {                SPFieldLookupValue f = new SPFieldLookupValue(Convert.ToInt32(DropDownList1.SelectedValue),DropDownList1.Text);                return f;            }            set            {                this.EnsureChildControls();                base.Value = value as SPFieldLookupValue;            }        }    }}

 呈现控件是为了在新建、编辑是呈现的页面,在本文中为了简单明了,只用一个下拉列表显示查阅项内容,在后续的文章中会补充多值查阅项字段。

 CreateChildControls方法用来创建页面控件,根据编辑控件指定的WebID和ListID取得查阅项内容。

 查阅项的Value是 SPFieldLookupValue,由查阅项LookupID和LookupValue组成。

呈现页面代码:

 

<%@ Assembly Name="$SharePoint.Project.AssemblyFullName$" %><%@ Assembly Name="Microsoft.Web.CommandUI, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %><%@ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %><%@ Register Tagprefix="Utilities" Namespace="Microsoft.SharePoint.Utilities" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %><%@ Register Tagprefix="asp" Namespace="System.Web.UI" Assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" %><%@ Import Namespace="Microsoft.SharePoint" %> <%@ Register Tagprefix="WebPartPages" Namespace="Microsoft.SharePoint.WebPartPages" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>

五、最后是定义字段的XML

RCustomField
//类型名称
Lookup
//父类型
RCustom Field
//类型显示名称
RCustom Field
//类型描述
TRUE
//可创建类型
//绑定程序集 LookUpProject.RCustomField, $SharePoint.Project.AssemblyFullName$
/_controltemplates/RCustomFieldEditor.ascx
//指定编辑器控件

部署解决方案,测试结果

 

 

转载于:https://www.cnblogs.com/renzh/archive/2013/01/21/2870252.html

你可能感兴趣的文章
【294天】我爱刷题系列053(2017.11.26)
查看>>
可替换元素和非可替换元素
查看>>
2016/08/25 The Secret Assumption of Agile
查看>>
(Portal 开发读书笔记)Portlet间交互-PortletSession
查看>>
搭建vsftpd服务器,使用匿名账户登入
查看>>
JAVA中循环删除list中元素的方法总结
查看>>
Java虚拟机管理的内存运行时数据区域解释
查看>>
人人都会深度学习之Tensorflow基础快速入门
查看>>
ChPlayer播放器的使用
查看>>
js 经过修改改良的全浏览器支持的软键盘,随机排列
查看>>
Mysql读写分离
查看>>
探寻Interpolator源码,自定义插值器
查看>>
一致性哈希
查看>>
Web日志安全分析工具 v2.0发布
查看>>
JS重载
查看>>
python2和python3同安装在Windows上,切换问题
查看>>
android超链接
查看>>
统计数据库大小
查看>>
第十六章:脚本化HTTP
查看>>
EXCEL表中如何让数值变成万元或亿元
查看>>