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
Post a Comment