Leveraging User Profiles and My Sites in SharePoint 2010 and 2013 Beatrice Baciu - Architect Derek Cash-Peterson - Practice Director http://thebookofsharepoint.blogspot.com/ @spdcp http://spdcp.com @BeatriceBaciu 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 FIM External System User Profile Service Application Direct Active Directory Import Active Directory C# 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 user http://siteurl/_api/SP.UserProfiles.PeopleManager/GetMyProperties?$select=PictureUrl,AccountName • Get all properties for a specific user http://siteurl/_api/SP.UserProfiles.PeopleManager/GetPropertiesFor(accountName=@v)?@v='domain\username’ • Get specific property for a specific user http://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 picture http://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@siteurl.onmicrosoft.com‘ User Profile Service Data Access via REST var 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 CSOM SP.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 properties var 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 Thank You! Beatrice Baciu @BeatriceBaciu http://thebookofsharepoint.blogspot.com/ Derek Cash-Peterson @spdcp http://www.spdcp.com BlueMetal Architects www.bluemetal.com Blog.bluemetal.com @bluemetalinc