发一个取AD用户属性的自定义字段

在列表中有时候需要取某个用户的属性,比如用户的 displayNamedepartmentmobilehomeDirectory等等,这些东西使用“用户或用户组”字段是无法达到这样的效果的,所以做了这样一个简单的自定义字段,添加/修改List项的时候,填写用户登录名和要显示的属性,显示的时候根据登录名到AD中查询该用户的相关的属性的值来显示,这个东东还没有正式用,处于测试阶段,可以在此基础上扩展,代码在下面,仅供参考哦。
自定义字段开发网上有挺多的教程可以看,推荐请参考 Erucy's blog中的文章。下面只补充一点点,凑个字数^_^

fldtypes_Custom.xml中定义显示的方式在<RenderPattern Name="DisplayPattern"/>定义,对于多字段(继承自 SPFieldMultiColumn),拿这个字段项目的定义XML来说,是这样的:
 1  < RenderPattern  Name ="DisplayPattern" >
 2               < Switch >
 3                   < Expr >
 4                       < Column />
 5                   </ Expr >
 6                   < Case  Value ="" >
 7                   </ Case >
 8                   < Default >
 9                       < Column  SubColumnNumber ="0"  HTMLEncode ="TRUE" />
10                       < HTML > <![CDATA[  's  ]]> </ HTML >
11                       < Column  SubColumnNumber ="1"  HTMLEncode ="TRUE" />
12                       < HTML > <![CDATA[  is  ]]> </ HTML >
13                       < Column  SubColumnNumber ="2"  HTMLEncode ="TRUE" />
14                   </ Default >
15               </ Switch >
16           </ RenderPattern >

他显示的样子是这样的:  皮皮's 部门 is 开发部。 SubColumnNumber的属性值与 SPFieldMultiColumnValue中的属性相对应(在此项目中对应的是 ADUserFieldValue类)。
然后是自定义属性简单的做法,比如这里需要连接AD,那需要的自定义的属性也是在 fldtypes_Custom.xml中定义的,此项目中是:
< PropertySchema >
            
< Fields >
                
< Field  Name ="DomainPath"  DisplayName ="Domain:"  Type ="Text"  Required ="TRUE"   />
                
< Field  Name ="DomainUserName"  DisplayName ="UserName:"  Type ="Text"  Required ="TRUE"   />
                
< Field  Name ="DomainPassword"  DisplayName ="Password:"  Type ="Text"  Required ="TRUE"   />
            
</ Fields >
</ PropertySchema >
在代码里,使用 base.Field.GetCustomProperty("DomainPath")来获取,很简单,在这里也许会有一个bug,参考【 解决Custom Field Type修改时属性显示不正确的问题】 ,通过打补丁即可解决,现在差不多都打了SP1了吧,所以这个bug应该是不会有的了。

代码在这里下载

你可能感兴趣的:(自定义)