Leveraging User Profiles and My Sitesin SharePoint 2010 and 2013
Beatrice Baciu - ArchitectDerek Cash-Peterson - Practice Director
http://thebookofsharepoint.blogspot.com/ @BeatriceBaciu
@spdcp http://spdcp.com
The Challenge
Centralize all profile data
Searching profile data
Integrate with other systems of record
Agenda
• How does the user profile service work?
• The benefits of the user profile service.
• How does the user profile relate to MySites?
• Configuring user profile service
• Ways to develop against the user profile service in 2010 & 2013
What We Are Not Talking About
• Enterprise Social
• Tagging/Notes
• Basic configuration of User Profile Service
How Does the User Profile Service Work
SharePoint
User ProfileService
Application
FIM
C#
Direct Active Directory Import
BCS
External System
?
Active Directory
Benefits of the User Profile Service
• Allows centralized location for all user properties
• Aggregation of user properties regardless of source
• Out-of-the-box storage of links to user mysites
• Individual MySite provides indivudal location to manage and store documents, links, etc.
• Easy consumption of data in code
How does the user profile relate to MySites
• There is a link to the users MySite in the User Profile
• MySite provides user with an interface to edit profile data
• MySite Provides an individual repository for users that is security trimmed
• Aggregation of all user profile properties in one source
User Profile Service Demo Configuration with ADFS and a custom database
Recap
• Use AD/ADFS as primary sync connection
• Use BCS to import additional profile properties
• Use property mapping to aggregate the User Profile
• If using SPD, the primary key will be used as the identifier; modify the BDCM file yourself and use a unique logical key
• Permissions in BDC
Troubleshooting
• Connections Disappear: consider restarting the User Profile Synchronization Service
• Random Sync issues: consider restarting the SharePoint Timer Service
• when MySite gets created, user profile gets created if not there
Limitations
• BDC cannot be the primary sync connection
• Duplicate profiles
• Once sync connection is deleted, profiles need to be purged via PS
User Profile Service in Farm-level scenario
Design Approach
Coding with the User Profile Service in SharePoint 2010
Coding with the User Profile Service in SharePoint 2013
User Profile Service Data Access via REST• GET• All current user properties
http://siteurl/_api/SP.UserProfiles.PeopleManager/GetPropertiesFor(accountName=@v)?@v='domain\username
• Get specific property of current userhttp://siteurl/_api/SP.UserProfiles.PeopleManager/GetMyProperties?$select=PictureUrl,AccountName
• Get all properties for a specific userhttp://siteurl/_api/SP.UserProfiles.PeopleManager/GetPropertiesFor(accountName=@v)?@v='domain\username’
• Get specific property for a specific userhttp://siteurl/_api/SP.UserProfiles.PeopleManager/GetUserProfilePropertyFor(accountName=@v,propertyName='LastName')?@v='domain\username‘
User Profile Service Data Access via REST• POST• Provision user MySite
http://siteurl/_api/SP.UserProfiles.ProfileLoader.GetProfileLoader/GetUserProfile/CreatePersonalSiteEnqueue
• Set current user’s profile picturehttp://siteurl/_api/SP.UserProfiles.PeopleManager/SetMyProfilePicture
• NOTES• Changing user’s profile properties is not implemented in REST or CSOM• Deletion of user profiles is not implemented in REST or CSOM• o365 authentication uses account names like @v='i:0%23.f|membership|
User Profile Service Data Access via RESTvar inputParameters = {
“props”: {
"__metadata": { "type": "SP.UserProfiles. GetUserProfilePropertyFor" }, "accountName": "demo\bbaciu","propertyName": [“FirstName”]
}}; var requestHeaders = {
"Accept": "application/json;odata=verbose","X-RequestDigest": jQuery("#__REQUESTDIGEST").val()};
jQuery.ajax({
url:_spPageContextInfo.webAbsoluteUrl + "/_api/SP.UserProfiles.PeopleManager/GetUserProfilePropertyFor",
type:"POST",data: JSON.stringify(inputParameters ),contentType : "application/json;odata=verbose",headers: requestHeaders,success:function(data){
//read property},error:function(jqxr,errorCode,errorThrown){
//handle error}
});
User Profile Service Data Access via CSOMSP.SOD.executeOrDelayUntilScriptLoaded(getUserProperties, 'SP.UserProfiles.js');
function getUserProperties() {
var targetUser = "domainName\\username”;
var clientContext = new SP.ClientContext.get_current(); var peopleManager = new SP.UserProfiles.PeopleManager(clientContext); personProperties = peopleManager.getPropertiesFor(targetUser); clientContext.load(personProperties);clientContext.executeQueryAsync(onRequestSuccess, onRequestFail);
} function onRequestSuccess()
{//we distinguish between user properties and user profile propertiesvar messageText = " \"DisplayName\" property is " + personProperties.get_displayName(); messageText += "<br />\"Department\" property is " + personProperties.get_userProfileProperties()['Department'];
}
Recap
• How the user profile service works.
• The benefits of the user profile service.
• How does the user profile relate to MySites?
• Configuring user profile service
• Ways to develop against the user profile service in 2010 & 2013
Beatrice Baciu@BeatriceBaciuhttp://thebookofsharepoint.blogspot.com/
Derek Cash-Peterson@spdcphttp://www.spdcp.com
BlueMetal Architectswww.bluemetal.comBlog.bluemetal.com@bluemetalinc
Thank You!