tagMapping 在SharePoint中的应用
在SharePoint的自定制开发中, 或多或少的会涉及到更改默认的一些控件或者对现有控件进行功能上的扩展和限制, 以往的做法基本是重新开发控件来替代原有的控件, 这里我们来介绍另外一种实现方式.
首先我们来了解tagMapping.
微软的定义:
定义一个标记类型的集合,这些标记类型在编译时重新映射为其他标记类型。
此元素是 .NET Framework 2.0 版中的新元素。
<add />
<remove />
<clear/>
</tagMapping>
从上面简单的介绍我们可以知道, tagMapping 元素定义一个标记类型的集合,这些标记类型在编译时重新映射为其他标记类型。 此重新映射会导致在配置文件范围内使用映射的类型替代 ASP.NET 应用程序中所有页和控件的原始标记类型.
所以如果我们对原有的控件进行更改,然后在web.config, 配置我们自定义的类型,这样就可以对默认的控件进行扩展了.
下面通过实例来看看具体的实现方式.
本实例我们对SharePoint People Picker进行扩展, 添加我们的验证方法, 我们禁止用户对用户名包含Eric的关键字进行搜索.
创建一个空的SharePoint 项目, 创建一个新的class 并继承与.
我们的验证逻辑需要放在ValidateEntity, 所以我们要重写ValidateEntity这个方法, 在这个方法内,你可以放置你需要的任何的逻辑. 简单代码如下.
public override Microsoft.SharePoint.WebControls.PickerEntity ValidateEntity(Microsoft.SharePoint.WebControls.PickerEntity entity)
{
Microsoft.SharePoint.WebControls.PickerEntity vEntity = entity;
if (vEntity.DisplayText.Contains("Eric"))
{
vEntity.IsResolved = false;
}
return base.ValidateEntity(entity);
}
当然你也可以重载其他方法,比如CreateChildControls, 添加自己的控件.等等.
编译, 打包,部署后剩下最后一步,添加tagmapping.
打开SharePoint 应用程序目录下的web.config (哪个web application需要这个验证逻辑,就需要把tagMapping添加到相应的web.config中, 你也可以通过Feature自动添加tagMapping).
<tagMapping>
<add tagType="System.Web.UI.WebControls.SqlDataSource, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" mappedTagType="Microsoft.SharePoint.WebControls.SPSqlDataSource, Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" />
<add tagType="Microsoft.SharePoint.WebControls.PeopleEditor,Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" mappedTagType="SP2010.WebControls.PeopleEditor, MWLINK.WebControls, Version=1.0.0.0, Culture=neutral, PublicKeyToken=c7d5eba68c789280" />
</tagMapping>
打开SharePoint站点,尝试用People Picker控件搜索Eric相关用户,就会报出找不到用户的错误.