发一个取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应该是不会有的了。

代码在这里下载

原文地址:https://www.cnblogs.com/ycc/p/1036793.html