Trabajando con el Perfil de Usuario

Llevo pegándome tiempo con el Perfil de Usuario, tanto para crear perfiles a través del modelo de objetos, como para el aprovisionamiento de Mi Sitio, incluso me ha tocado añadir información al Perfil de Usuario usando una base de datos externa con BDCs…

Para trabajar con este servicio, debemos incluir referencias en nuestro proyecto los siguientes espacios de nombres:

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

Para crear un Perfil de Usuario podemos usar esta funcion:

public static void CreateUserProfile(string requestUrl, string loginName)
{
    using (SPSite siteCollection = new SPSite(requestUrl))
    {
        using (SPWeb webSite = siteCollection.OpenWeb())
        {
            //recupera el ServerContext de la colección de sitio
            ServerContext serverContext = ServerContext.GetContext(siteCollection);
            //recupera el UserProfileManager
            UserProfileManager userProfileManager = new UserProfileManager(serverContext);
            if (!userProfileManager.UserExists(loginName))
            {
                UserProfile userProfile = userProfileManager.CreateUserProfile(loginName);
                //opcionalmente crea el Mi Sitio del Perfil de Usuario
                //if (userProfile.PersonalSite == null) { userProfile.CreatePersonalSite(); }
            }
        }
    }
}

Por otro lado, si lo que necesitas es borrar un Perfil de Usuario, puedes usar la siguiente función:

public static void DeleteUserProfile(string requestUrl, string loginName)
{
    using (SPSite siteCollection = new SPSite(requestUrl))
    {
        using (SPWeb webSite = siteCollection.OpenWeb())
        {
            //recupera el ServerContext de la colección de sitio
            ServerContext serverContext = ServerContext.GetContext(siteCollection);
			//recupera el UserProfileManager
            UserProfileManager userProfileManager = new UserProfileManager(serverContext);
            if (userProfileManager.UserExists(loginName))
            {
                //opcionalmente borra el Mi Sitio del Perfil de Usuario si existe
                //UserProfile userProfile = userProfileManager.GetUserProfile(loginName);
                //if (userProfile.PersonalSite != null) { userProfile.PersonalSite.Delete(); }
                //borra el Perfil de Usuario
                userProfileManager.RemoveUserProfile(loginName);
            }
        }
    }
}

En el caso, que necesites recuperar una cuenta o perfil, haz uso de esta otra función:

public static void RetrieveUserProfile(string requestUrl, string loginName)
{
    using (SPSite siteCollection = new SPSite(requestUrl))
    {
        using (SPWeb webSite = siteCollection.OpenWeb())
        {
            //recupera el ServerContext de la colección de sitio
            ServerContext serverContext = ServerContext.GetContext(siteCollection);
			//recupera el UserProfileManager
            UserProfileManager userProfileManager = new UserProfileManager(serverContext);
            if (userProfileManager.UserExists(loginName))
            {
                UserProfile userProfile = userProfileManager.GetUserProfile(loginName);
                //recupera o dedita las propiedades del usaurio
            }
        }
    }
}

Si lo que necesitas es añadir un colega a un Pefil, usa:

public static void AddColleague(string requestUrl, string loginName, string colleagueLoginName)
{
    using (SPSite siteCollection = new SPSite(requestUrl))
    {
        using (SPWeb webSite = siteCollection.OpenWeb())
        {
            //recupera el ServerContext de la colección de sitio
            ServerContext serverContext = ServerContext.GetContext(siteCollection);
			//recupera el UserProfileManager
            UserProfileManager userProfileManager = new UserProfileManager(serverContext);
            //verifica si existe el Perfil de usuario y el colega a añadir
            if (userProfileManager.UserExists(loginName) &&
                userProfileManager.UserExists(colleagueLoginName) &&
                string.Compare(loginName, colleagueLoginName, true) != 0)
            {
                UserProfile userProfile = userProfileManager.GetUserProfile(loginName);
                UserProfile userProfileColleague = userProfileManager.GetUserProfile(colleagueLoginName);
                //verifica si el Perfil es ya un colega
                if (userProfile.Colleagues.IsColleague(userProfileColleague.ID) == false)
                {
                    userProfile.Colleagues.Create(userProfileColleague,
                        ColleagueGroupType.Peer,
                        string.Empty,
                        true,
                        Privacy.Public);
                    //guarda las modificaciones realizadas en el Perfil
                    userProfile.Commit();
                }
            }
        }
    }
}

Y como no… para borrar un colega, puedes hacer uso de esta otra función:

public static void DeleteColleague(string requestUrl, string loginName, string colleagueLoginName)
{
    using (SPSite siteCollection = new SPSite(requestUrl))
    {
        using (SPWeb webSite = siteCollection.OpenWeb())
        {
            //recupera el ServerContext de la colección de sitio
            ServerContext serverContext = ServerContext.GetContext(siteCollection);
			//recupera el UserProfileManager
            UserProfileManager userProfileManager = new UserProfileManager(serverContext);
            //verifica si existe el Perfil de usuario y el colega
            if (userProfileManager.UserExists(loginName) &&
                userProfileManager.UserExists(colleagueLoginName) &&
                string.Compare(loginName, colleagueLoginName, true) != 0)
            {
                UserProfile userProfile = userProfileManager.GetUserProfile(loginName);
                UserProfile userProfileColleague = userProfileManager.GetUserProfile(colleagueLoginName);
				//verifica si el Perfil es ya un colega
                if (userProfile.Colleagues.IsColleague(userProfileColleague.ID) == true)
                {
                    userProfile.Colleagues[userProfileColleague].Delete();
                    //guarda las modificaciones realizadas en el Perfil
                    userProfile.Commit();
                }
            }
        }
    }
}

Etiquetas: , , , , , , , ,

Dejar un comentario