注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

忘忧草的博客

品味人生--精通IT管理和技术

 
 
 

日志

 
 
 
 

在MOSS2010中实现OU下的用户的上下级组织关系  

2012-07-13 22:47:17|  分类: Moss2010 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

MOSS2010中实现OU下的用户的上下级组织关系

前言

大家都知道无论是AD还是MOSS,目前都没有实现用户的上下级组织结构关系。AD的用户都是平级的展示。前不久刚好接触一个项目,客户要求实现用户的上下级组织结构关系,如下图:

clip_image002

于是开始动手设计和开发,经过一番的努力思考和测试,发现在MOSS2010的UserProfile带有很多属性,也支持扩展属性。发现自带有【经理】的属性。亮点就在这里,把【经理】属性开放到每个人的个人配置信息中去,让用户自己编辑设置自己的上级经理(注:不一定用此类属性,也可以在扩展一个属性,如:用级别区别等)。如下图:

clip_image004

clip_image005

默认【经理】属性值为空的就是这个OU下的最高领导。以下的依次编辑的自己的经理

提示:这里有个小问题。就是如果每个人都没有编辑设置自己的经理。那么就没有组织关系的产生或有些设置了,有人没设置,那么关系就乱了。当然我们也知道技术只能减轻人的工作量但是代替不了人的工作,所以我们需要靠管理制度去约束。让每个人按照实际规定去设置信息(或采用代码去批量设置)

鉴于上面的思路,设计思路就有了,开发起来就简单多了。左边是AD的OU,右边点击OU展示对应的上下级关系。效果图如下:

clip_image007

实现

左边AD的OU树代码网上很多,我这里不罗嗦了。我重点说说右边的用户属性如何读取?

大家都知道MOSS2010的userProfile提供了接口的。接口方法如下:

方法1:

/// <summary>

/// 获取用户属性

/// </summary>

/// <param name="accountName">登录账号</param>

/// <returns></returns>

public static UserProfile GetUserInfo(string AccountName)

{

UserProfile profile = null;

string strUrl = "http://win-moss:8010";

SPSite site = new SPSite(strUrl);

try

{

SPServiceContext serviceContext = SPServiceContext.GetContext(site);

//SPServiceContext serviceContext = SPServiceContext.Current;

UserProfileManager profileManager = new UserProfileManager(serviceContext);

if (AccountName != string.Empty)

{

profile = profileManager.GetUserProfile(AccountName);

}

else

{

profile = profileManager.GetUserProfile(SPContext.Current.Web.CurrentUser.RawSid);

}

}

finally

{

site.Dispose();

}

return profile;

}

调用,如读取经理属性:

// PropertyConstants很多属性,自己可以看出

userfile[PropertyConstants.Manager].Value

方法2:

/// <summary>

/// 获取用户属性

/// </summary>

/// <param name="accountName">登录账号</param>

/// <param name="propertyDisplayName">属性显示名称</param>

/// <returns></returns>

public static object GetUserProperty(string accountName, string propertyDisplayName)

{

object userPropertyValue = null;

UserProfile userProfile = GetUserInfo(accountName);//调用的1方法中的

if (userProfile != null)

{

var profileSubtypeProperty = userProfile.Properties.First(propertyBase => propertyBase.DisplayName == propertyDisplayName);

if (profileSubtypeProperty != null)

{

userPropertyValue = userProfile.GetProfileValueCollection(profileSubtypeProperty.Name).Value;

}

}

return userPropertyValue;

}

调用,如读取经理属性:

GetUserProperty("contoso\\Liwang", "经理")

经过编码后最后效果图如下:

clip_image009

  评论这张
 
阅读(748)| 评论(1)
推荐

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017