Skip to main content

Update all user profile properties in SharePoint Server side ObjectModel SSOM

using Microsoft.Office.Server.UserProfiles;
using Microsoft.SharePoint;
using System;
using System.Data;

namespace SSOM_UserProfileUpdate
{
class Program
{
// Central Admin URL
static string siteUrl = "http://win2012:1412/";
static void Main(string[] args)
{

SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (SPSite site = new SPSite(siteUrl))
{
try
{
SPServiceContext serviceContext = SPServiceContext.GetContext(site);
UserProfileManager userProfileMgr = new UserProfileManager(serviceContext);
ProfilePropertyManager profilePropMgr = new UserProfileConfigManager(serviceContext).ProfilePropertyManager;

Console.WriteLine("Start Working on update user profile poperties . . . ");
Console.WriteLine("");

#region Build profiles to update to Datatable
// This could be implemented with a CSV reading, reading Excel or any method you prefer
// Since Account name is act like primary key, it should the query key for the updates
DataTable dataTable = new DataTable();
dataTable.Columns.Add("AccountName");
dataTable.Columns.Add("SPS-Skills");
dataTable.Columns.Add("CustomProperty");
dataTable.Rows.Add(new Object[] { @"dev\lahiru", "Developer", "IT;HR;" });
dataTable.Rows.Add(new Object[] { @"dev\operator", "Developer", "IT;" });
#endregion Build profiles to update

#region User Profile Upate Logic
//Definitions
string accountName = "";
string propertyValue = "";
string stringProp = "";
//Iterate through data table
foreach (DataRow row in dataTable.Rows)
{
//Account name is the key
accountName = row["AccountName"].ToString();
Console.WriteLine("Updating properties of user : " + accountName);

foreach (var prop in dataTable.Columns)
{
stringProp = prop.ToString();
Console.WriteLine("Updating property => " + stringProp);
if (!string.IsNullOrEmpty(stringProp) && stringProp != "AccountName")
{
propertyValue = row[stringProp].ToString();
Console.WriteLine("Updating property with value => " + propertyValue);

//UpdateUserProfileProperty(@"MYDOMAIN\admin", "Metadata Property", "sample@sample");
if (!string.IsNullOrEmpty(propertyValue))
UpdateUserProfileProperty(accountName, stringProp, propertyValue);
}

}
}

#endregion User Profile Upate Logic
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("User profile update success . . . !");
Console.ResetColor();
}
//Catch exceptions here, ex. NullReferenceException
catch (System.Exception ex)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("General Error: " + ex.ToString());
Console.ResetColor();
}
}
});
Console.ReadKey();

}

private static void UpdateUserProfileProperty(string accountName, string property, string propertyValue)
{
if (accountName != "" && property != "" && propertyValue != "")
{
using (SPSite site = new SPSite(siteUrl))
{
try
{
SPSecurity.RunWithElevatedPrivileges(delegate()
{
SPServiceContext serviceContext = SPServiceContext.GetContext(site);
UserProfileManager userProfileMgr = new UserProfileManager(serviceContext);
ProfilePropertyManager profilePropMgr = new UserProfileConfigManager(serviceContext).ProfilePropertyManager;

// Retrieve all properties for the "UserProfile" profile subtype,
// and retrieve the property values for a specific user.
ProfileSubtypePropertyManager subtypePropMgr = profilePropMgr.GetProfileSubtypeProperties("UserProfile");
UserProfile userProfile = userProfileMgr.GetUserProfile(accountName);

// Add a value to a multivalue user property.
//userProfile[PropertyConstants.PastProjects].Add((object)"Team Feed App");
//userProfile[PropertyConstants.PastProjects].Add((object)"Social Ratings View Web Part");

//Prop mapping
userProfile[property].Value = propertyValue;

// Save the changes to the server.
userProfile.Commit();
Console.WriteLine("Success on updating account : " + accountName + "with value of : " + propertyValue + "property :" + property);

});
}
//Catch exceptions here, ex. NullReferenceException
catch (System.Exception ex)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("Error when updating account : " + accountName + "with value of : " + propertyValue + "property :" + property);
Console.WriteLine(ex.ToString());
Console.ResetColor();
}
}
}
else
{
Console.WriteLine("Error on property values passed. account =>" + accountName + " value => " + propertyValue + " property => " + property);
}

}
}
}

Comments

Popular posts from this blog

Turn off/ Hide Details panel/ Information Panel on modern SharePoint lists

Not always we require to show changes done by other which is a mandatory feature in SharePoint online.  What is details pane (aka. Information Pane)? Detail pane/ Information shows information regarding the document if you selected a one or its showing recent changes within a list or library. Follow link to Microsoft documentation about details pane. Bad news: Until Microsoft listen to User Voice , there is no straightforward way to enable disable this even you don't want. Good news: We could write a SharePoint framework extension to hack styles until Microsoft give us a permanent solution. How? I found this sample project (Inject CSS into modern SharePoint pages with React) which could reuse to our purpose. Thanks to Hugo for saving my time.  Steps to awesomeness:  Clone the project Resolve dependencies >  npm i Bundle >  gulp bundle --ship Package >  gulp package-solution --ship Upload package into SharePoint App catalog  

📢 Update -Top 10 Microsoft Teams questions from customers around the world

Over the last 4 months, we’ve traveled to 9 countries on Microsoft Ignite | The Tour meeting and speaking with users like you about Microsoft Teams. The insights and feedback at every location has been invaluable — Thank you. During our travels, there have been 10 questions that have repeatedly surfaced. Below are all of the questions — including the answers too, of course!   Can you restrict access to a specific channel in a team? What are best practices for governance, specifically around team creation, naming, and retention? Can I add guests to my team? If so, how? How does external access/federation work? How is this different to guest access? What functionalities do I get in a hybrid environment? Is Teams available for on-prem environments? How do I configure Direct Routing in Microsoft Teams? Why should I move from Skype for Business to Teams? How do I make this transition? I have existing SharePoint sites that I would like to bring into Teams. Can I do that? I need t

Eliminate Duplicates in Microsoft Flow and Azure Logic Apps

There is no straight forward method or Microsoft Flow action  to eliminate values in a collection like Microsft Excel (as of March 2019). This little hack will help you to eliminate/ remove duplicates and create a collection of unique values. Sample scenario: Need to send daily summarized notification to assigned approved with pending approval items. Sample workflow: Initialize an array Iterate collection of data and append items that are not there in the filtered array Side note: This won't be an option to consider if you too concerned about the performance of the workflow but for the time being its an option to consider.