在本文中,将探讨如何在SharePoint2013网站的首页头部区域显示用户头像,并使用C#代码从用户配置服务应用程序获取其他用户信息,如姓名、职位、部门等。
如果没有在活动目录中找到用户头像图片,将显示一个“未找到图片”的图片。也可以添加想要显示的无图片图像。
如果活动目录中存在用户头像图片,图片将如下所示显示在首页的头部区域。可以通过编写自定义CSS文件来修改图片的样式。
要实现这个设计,请按照以下步骤操作:
此服务应用程序将用户信息从活动目录同步到SharePoint网站。它将用户配置信息存储在用户配置服务应用程序数据库中。许多人可能知道如何配置用户配置服务应用程序。如果不知道,请按照以下步骤操作:
导航到中央管理->应用程序管理->管理服务应用程序。
点击功能区菜单中的“新建”->“用户配置服务应用程序”。
在“创建新用户配置服务应用程序”页面上,输入服务应用程序的名称,并选择现有的应用程序池来运行此服务应用程序,或者创建一个新的。
“为这个服务应用程序选择的安全帐户必须有权限访问活动目录服务”。
输入想要存储用户信息的配置数据库服务器和数据库名称。在数据库认证部分提供有权限访问现有数据库服务器的用户名和密码。同样地,为同步数据库和社交标签数据库提供数据库详细信息。最后点击“创建”按钮。
一旦创建了配置服务应用程序,打开用户配置服务应用程序。
点击“同步”组下的“配置同步连接”,设置从活动目录、LDAP目录和商业连接获取数据的连接字符串。如果没有创建,请创建。
填写配置详细信息,然后点击“填充容器”按钮并选择用户复选框。
最后点击“确定”。
在此页面上,可以将活动目录属性映射到SharePoint属性。
在本节中,可以配置同步时间作业计划。选择“配置同步定时作业”。
提供定时作业的配置详细信息。
第一次,点击“开始配置同步”,立即运行定时作业。
下次作业将根据作业计划间隔运行。
一旦定时作业完成,查看从活动目录导入的配置计数。
打开Visual Studio并创建一个新的空项目,给项目一个合适的名称“用户头像图片”。
将解决方案部署为Farm解决方案,因为代码应该在服务器端执行,以从UPS应用程序检索配置信息。
项目创建后,添加一个新项并选择“用户控件”,然后按“确定”。
“选择用户控件项目的原因是,可能需要在更多项目中使用这个控件,并且它将作为委托控件出现在母版页上。”
创建控件后,解决方案资源管理器看起来如下:
表单代码 - UserControl1.ascx
此部分将在母版页上呈现:
<div class="username">
<asp:Literal ID="ltUserName" runat="server"></asp:Literal>
</div>
代码后置 - UserControl1.ascx.cs
为了暴露UserProfileManager类以获取用户配置属性,需要添加以下程序集:
Microsoft.Office.Server
Microsoft.Office.Server.UserProfiles
在代码后置中,获取用户头像图片URL并将其渲染为HTML:
<div class="username">
<div style="text-align: center">
<img style="border-radius: 50%; width: 50px;" src="http/server/my/User Photos/Profile Pictures/sgopal_MThumb.jpg">
</div>
<div style="text-align: center">Senthil Gopal</div>
</div>
getUserProfilePictureUrl()方法:
需要为所有用户显示用户头像,因为用户没有UPA应用程序的权限。所以使用了RunWithElevatedPrivileges方法来使用管理权限执行代码,以读取用户配置属性。
private string getUserProfilePictureUrl(SPUser currentUser)
{
string pictureURL = string.Empty;
SPSecurity.RunWithElevatedPrivileges(
delegate()
{
using(SPSite mySitesCollection = new SPSite(SPContext.Current.Site.Url))
{
using(SPWeb myweb = mySitesCollection.OpenWeb())
{
string currentUserlogin = currentUser.LoginName;
// Get the user profile manager
SPServiceContext context = SPServiceContext.GetContext(mySitesCollection);
UserProfileManager profileManager = new UserProfileManager(context);
UserProfile currentProfile = profileManager.GetUserProfile(currentUserlogin);
// PicutreURL - property name
ProfileValueCollectionBase profileValueCollection = currentProfile.GetProfileValueCollection("PictureURL");
// Only display something if the user has set their picture.
if((profileValueCollection != null) && (profileValueCollection.Value != null))
{
// There is a picture so display it
pictureURL = profileValueCollection.Value.ToString();
}
else
{
// no image found url
pictureURL = "/Style library/AH/Images/user.png";
}
}
}
});
return pictureURL;
}
可以通过调试代码来查看可用的属性名称。
通过使用这个委托控件,可以调用UserControl1.ascx页面。
添加一个新项并选择空元素,给属性一个合适的名称“UserProfilePic”。
打开Element.xml并粘贴以下代码:
<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<Control Id="UserProfilePic" Sequence="11" ControlSrc="~/_controltemplates/15/UserProfilePicture/UserControl1.ascx" xmlns="http://schemas.microsoft.com/sharepoint/" />
</Elements>
<!--SPM:<SharePoint:DelegateControl runat="server" ControlId="UserProfilePic "/>-->