Search This Blog

Monday, May 9, 2011

Monitor User Profile Changes


Recently , I have visited a good post for tracking the user profile changes.SharePoint does not support out of box any functionality to monitor the changes happens in the user profile. This need coding and custom development.The below details will help you for retrieve the changes done in the user profile.

UserProfileManager objuserProfileManager = new UserProfileManager(ServerContext.Default);
UserProfile userProfile = objuserProfileManager.GetUserProfile("Login name");

DateTime startDate = DateTime.Today - 5;

UserProfileChangeQuery userProfileChangeQuery = new UserProfileChangeQuery(true, true);
UserProfileChangeToken userProfileChangeToken = new UserProfileChangeToken(startDate);
userProfileChangeQuery.ChangeTokenStart = userProfileChangeToken;
userProfileChangeQuery.UserProfile = true;
userProfileChangeQuery.PersonalizationSite = true;
userProfileChangeQuery.SingleValueProperty = true;
userProfileChangeQuery.MultiValueProperty = true;
userProfileChangeQuery.Colleague = true;
userProfileChangeQuery.Update = true;
userProfileChangeQuery.Add = true;
userProfileChangeQuery.Delete = true;
userProfileChangeQuery.SiteMembership = true;
userProfileChangeQuery.Anniversary = true;

UserProfileChangeDictionary userProfileChangeDictionary = userProfile.GetColleagueChanges(userProfileChangeQuery);

Dictionary.Enumerator userProfileChangeCollection = userProfileChangeDictionary.GetEnumerator();
while (userProfileChangeCollection.MoveNext())
UserProfileChangeCollection userProfileChanges = userProfileChangeCollection.Current.Value;
foreach (UserProfileChange userProfileChange in userProfileChanges)
if (userProfileChange is UserProfileSingleValueChange)
UserProfileSingleValueChange propertyChange = (UserProfileSingleValueChange)userProfileChange;
//propertyChange will have the new and old value of profile fileds
else if (userProfileChange is UserProfileMultiValueChange)
UserProfileMultiValueChange propertyChange = (UserProfileMultiValueChange)userProfileChange;
//propertyChange will have the new and old value of profile fileds
else if (userProfileChange is UserProfileWebLogChange)
UserProfileWebLogChange listChange = (UserProfileWebLogChange)userProfileChange;
//listChange will have the newly added/modifed list item url

1 comment:

  1. HI Sourabh,

    Thanks for the Post..

    I am able to get the updates like this
    Console.WriteLine(userProfileChange.ChangedProfile.DisplayName + " updated " + Convert.ToString(propertyChange.ProfileProperty.DisplayName) + " : " + propertyChange.NewValue + " at " + propertyChange.EventTime.ToString("dd/MM/yyyy"));

    in my dev machine for testing i have updated(changed) one of my colleague's profile pic. How can i get that information here.
    Please help me.