Trabajar con perfiles de usuario y perfiles de organización con el modelo de objetos del servidor en SharePoint
Aprenda a crear, recuperar y cambiar los perfiles de usuario y las propiedades de los perfiles de usuario de SharePoint de forma programada utilizando el modelo de objetos del servidor de SharePoint.
¿Qué son los perfiles de usuario en SharePoint?
En SharePoint, los perfiles de usuario representan los usuarios de la plataforma. Las propiedades de los perfiles de usuario representan la información de los usuarios y las propiedades por sí mismas. Por ejemplo, las propiedades incluyen la dirección de correo electrónico o nombre de cuenta de un usuario y el tipo de datos de una propiedad. Puede usar el modelo de objetos de servidor para crear, recuperar y cambiar los perfiles de usuario, subtipos de perfil y las propiedades de perfil mediante programación.
Nota:
Para obtener más información sobre las tareas de programación comunes para trabajar con perfiles de usuario y la API que usa para realizar las tareas, vea Trabajar con perfiles de usuario en SharePoint.
Requisitos previos para configurar el entorno de desarrollo para trabajar con perfiles de usuario mediante el modelo de objetos de servidor de SharePoint
Para crear una aplicación de consola que usa el modelo de objetos de servidor para trabajar con perfiles de usuario y propiedades de perfil de usuario, necesitará:
SharePoint con el perfil creado para el usuario actual.
Visual Studio 2012.
Permisos para crear, recuperar y cambiar objetos del perfil de usuario. (La creación y modificación de perfiles requiere el permiso Modificar perfiles de usuario).
Creación de una aplicación de consola que funcione con perfiles de usuario mediante el modelo de objetos de servidor de SharePoint
Abra Visual Studio y seleccione Archivo, Nuevo, Proyecto.
En el cuadro de diálogo Nuevo proyecto, seleccione .NET Framework 4.5 en la lista desplegable situada en la parte superior del cuadro de diálogo.
En la lista Plantillas, elija Windows y, a continuación, elija Aplicación de consola.
Asigne al proyecto el nombre UserProfilesSSOM y, a continuación, haga clic en el botón Aceptar.
Nota: Asegúrese de que la opción Prefer 32-bit (Preferir 32 bits ) no está seleccionada en las propiedades de compilación del proyecto.
- Agregue referencias a los ensamblados siguientes:
- Microsoft.Office.Server
- Microsoft.Office.Server.UserProfiles
- Microsoft.SharePoint
- System.web
- Reemplace el contenido de la clase Program con el código de ejemplo de uno de los siguientes escenarios:
- Crear un perfil de usuario
- Crear propiedades de perfil de usuario
- Recuperar y cambiar los perfiles de usuario
- Recuperar y cambiar atributos de propiedades de perfiles de usuario
- Recuperar y cambiar valores de propiedades de usuario
- Para probar la aplicación de consola, en la barra de menús, elija Depurar, Iniciar depuración. Puede comprobar los cambios en la página Administrar servicio de perfiles de la aplicación de servicio de perfiles de usuario en Administración central.
Ejemplo de código: Creación de perfiles de usuario mediante el modelo de objetos de servidor de SharePoint
En SharePoint, los perfiles de usuario representan los usuarios de la plataforma. Tipos de perfil y subtipos ayudan a clasificar los perfiles en grupos, como los empleados o clientes. Subtipos y tipos de perfil se usan para establecer las propiedades de perfil y atributos comunes en el nivel de subtipo. SharePoint Server incluye un subtipo de perfil de usuario predeterminado.
En el ejemplo de código siguiente se crea un objeto UserProfile que está asociado al subtipo de perfil de usuario predeterminado. Algunas propiedades de perfil de usuario se rellenan automáticamente con la información que se importa desde el directorio que contiene cuentas de usuario, como Servicios de dominio de Active Directory. Para obtener un ejemplo de código crea un subtipo personalizado, consulte ProfileSubtype .
Nota:
Cambie los valores de marcador de posición domain\username yservername antes de ejecutar el código.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Office.Server;
using Microsoft.Office.Server.UserProfiles;
using Microsoft.SharePoint;
using System.Web;
namespace UserProfilesSSOM
{
class Program
{
static void Main(string[] args)
{
// Replace "domain\\username" and "servername" with actual values.
string newAccountName = "domain\\username";
using (SPSite site = new SPSite("http://servername"))
{
SPServiceContext serviceContext = SPServiceContext.GetContext(site);
try
{
// Create a user profile that uses the default user profile
// subtype.
UserProfileManager userProfileMgr = new UserProfileManager(serviceContext);
UserProfile userProfile = userProfileMgr.CreateUserProfile(newAccountName);
Console.WriteLine("A profile was created for " + userProfile.DisplayName);
Console.Read();
}
catch (System.Exception e)
{
Console.WriteLine(e.GetType().ToString() + ": " + e.Message);
Console.Read();
}
}
}
}
}
Ejemplo de código: Creación de propiedades de perfil de usuario mediante el modelo de objetos de servidor de SharePoint
Las propiedades de perfil de usuario describen la información personal y organizativa de los usuarios. Puede crear y agregar una propiedad de perfil personalizada para el conjunto predeterminado de propiedades del perfil de SharePoint.
Una propiedad de perfil y sus atributos se representan mediante un conjunto de objetos vinculados: un objeto CoreProperty , un objeto ProfileTypeProperty y un objeto ProfileSubtypeProperty .
En el ejemplo de código siguiente se crea una propiedad CoreProperty que tiene un tipo de datos URL (o, opcionalmente, una CoreProperty que tiene un tipo de datos de cadena multivalor). Además, crea una ProfileTypeProperty y una ProfileTypeProperty que definen la disponibilidad, privacidad y otros valores para la propiedad. La propiedad ProfileSubtypeProperty.DefaultPrivacy controla la visibilidad de propiedades y otros contenidos de Mi sitio. Para obtener una lista completa de los tipos de datos posibles para los valores de propiedad de perfil, consulte PropertyDataType .
Nota:
[!NOTA] Cambie el valor del marcador de posición servername antes de ejecutar el código.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Office.Server;
using Microsoft.Office.Server.Administration;
using Microsoft.Office.Server.UserProfiles;
using Microsoft.SharePoint;
using System.Web;
namespace UserProfilesSSOM
{
class Program
{
static void Main(string[] args)
{
// Replace "servername" with an actual value.
using (SPSite site = new SPSite("http://servername"))
{
SPServiceContext serviceContext = SPServiceContext.GetContext(site);
try
{
ProfilePropertyManager profilePropMgr = new UserProfileConfigManager(serviceContext).ProfilePropertyManager;
CorePropertyManager corePropMgr = profilePropMgr.GetCoreProperties();
// Create a URL property.
CoreProperty coreProp = corePropMgr.Create(false);
coreProp.Name = "AppsWebsite";
coreProp.DisplayName = "Apps site";
coreProp.Type = PropertyDataType.URL;
coreProp.Length = 100;
corePropMgr.Add(coreProp);
//// Create a multivalue property.
//// To create this property, comment out the previous
//// block of code and uncomment this block of code.
//CoreProperty coreProp = corePropMgr.Create(false);
//coreProp.Name = "PublishedAppsList";
//coreProp.DisplayName = "Published apps";
//coreProp.Type = PropertyDataType.StringMultiValue;
//coreProp.IsMultivalued = true;
//coreProp.Length = 100;
//corePropMgr.Add(coreProp);
// Create a profile type property and make the core property
// visible in the Details section page.
ProfileTypePropertyManager typePropMgr = profilePropMgr.GetProfileTypeProperties(ProfileType.User);
ProfileTypeProperty typeProp = typePropMgr.Create(coreProp);
typeProp.IsVisibleOnViewer = true;
typePropMgr.Add(typeProp);
// Create a profile subtype property.
ProfileSubtypeManager subtypeMgr = ProfileSubtypeManager.Get(serviceContext);
ProfileSubtype subtype = subtypeMgr.GetProfileSubtype(ProfileSubtypeManager.GetDefaultProfileName(ProfileType.User));
ProfileSubtypePropertyManager subtypePropMgr = profilePropMgr.GetProfileSubtypeProperties(subtype.Name);
ProfileSubtypeProperty subtypeProp = subtypePropMgr.Create(typeProp);
subtypeProp.IsUserEditable = true;
subtypeProp.DefaultPrivacy = Privacy.Public;
subtypeProp.UserOverridePrivacy = true;
subtypePropMgr.Add(subtypeProp);
Console.WriteLine("The properties were created.");
Console.Read();
}
catch (System.Exception e)
{
Console.WriteLine(e.GetType().ToString() + ": " + e.Message);
Console.Read();
}
}
}
}
}
Ejemplo de código: Recuperación y cambio de perfiles de usuario mediante el modelo de objetos de servidor de SharePoint
En el ejemplo de código siguiente se recuperan todos los perfiles de usuario dentro del contexto y se cambia el valor de la propiedad DisplayName de un usuario. La mayoría de las propiedades de perfil se tiene acceso mediante el descriptor de acceso de UserProfile.Item .
Nota:
Cambie los valores de marcador de posición domain\username yservername antes de ejecutar el código.
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Office.Server;
using Microsoft.Office.Server.UserProfiles;
using Microsoft.SharePoint;
using System.Web;
namespace UserProfilesSSOM
{
class Program
{
static void Main(string[] args)
{
// Replace "domain\\username" and "servername" with actual values.
string targetAccountName = "domain\\username";
using (SPSite site = new SPSite("http://servername"))
{
SPServiceContext serviceContext = SPServiceContext.GetContext(site);
try
{
// Retrieve and iterate through all of the user profiles in this context.
Console.WriteLine("Retrieving user profiles:");
UserProfileManager userProfileMgr = new UserProfileManager(serviceContext);
IEnumerator userProfiles = userProfileMgr.GetEnumerator();
while (userProfiles.MoveNext())
{
UserProfile userProfile = (UserProfile)userProfiles.Current;
Console.WriteLine(userProfile.AccountName);
}
// Retrieve a specific user profile. Change the value of a user profile property
// and save (commit) the change on the server.
UserProfile user = userProfileMgr.GetUserProfile(targetAccountName);
Console.WriteLine("\\nRetrieving user profile for " + user.DisplayName + ".");
user.DisplayName = "Pat";
user.Commit();
Console.WriteLine("\\nThe user\\'s display name has been changed.");
Console.Read();
}
catch (System.Exception e)
{
Console.WriteLine(e.GetType().ToString() + ": " + e.Message);
Console.Read();
}
}
}
}
}
Ejemplo de código: Recuperar y cambiar atributos para las propiedades de perfil de usuario mediante el modelo de objetos de servidor de SharePoint
En el ejemplo de código siguiente se recupera el conjunto de propiedades que representan una propiedad de usuario específica y sus atributos y, a continuación, cambia el atributo CoreProperty.DisplayName , el atributo ProfileTypeProperty.IsVisibleOnViewer y el atributo ProfileSubtypeProperty.PrivacyPolicy . Estos cambios se aplican globalmente al conjunto de propiedades. ProfileSubtypeProperty.PrivacyPolicy especifica si los usuarios deben proporcionar un valor para la propiedad. PrivacyPolicy se aplica solo a propiedades de perfil de usuario.
Nota:
[!NOTA] Cambie el valor del marcador de posición servername antes de ejecutar el código.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Office.Server;
using Microsoft.Office.Server.UserProfiles;
using Microsoft.SharePoint;
using System.Web;
namespace UserProfilesSSOM
{
class Program
{
static void Main(string[] args)
{
// Replace "servername" with an actual value.
using (SPSite site = new SPSite("http://servername"))
{
SPServiceContext serviceContext = SPServiceContext.GetContext(site);
try
{
ProfilePropertyManager profilePropMgr = new UserProfileConfigManager(serviceContext).ProfilePropertyManager;
ProfileSubtypePropertyManager subtypePropMgr = profilePropMgr.GetProfileSubtypeProperties("UserProfile");
// Retrieve a specific property set (a profile subtype property and
// its associated core and profile type properties).
// Changing these properties affects all instances of this property set.
ProfileSubtypeProperty subtypeProp = subtypePropMgr.GetPropertyByName(PropertyConstants.Title);
CoreProperty coreProp = subtypeProp.CoreProperty;
ProfileTypeProperty typeProp = subtypeProp.TypeProperty;
Console.WriteLine("Property name: " + coreProp.DisplayName);
Console.WriteLine("IsVisibleOnViewer = " + typeProp.IsVisibleOnViewer);
Console.WriteLine("PrivacyPolicy = " + subtypeProp.PrivacyPolicy);
Console.WriteLine("Press Enter to change the values.");
Console.Read();
// Change attributes on the properties and save (commit) the changes
// on the server.
coreProp.DisplayName = "Position";
coreProp.Commit();
typeProp.IsVisibleOnViewer = true;
typeProp.Commit();
subtypeProp.PrivacyPolicy = PrivacyPolicy.OptOut;
subtypeProp.Commit();
Console.WriteLine("The property attributes have been changed.");
Console.Read();
}
catch (System.Exception e)
{
Console.WriteLine(e.GetType().ToString() + ": " + e.Message);
Console.Read();
}
}
}
}
}
Ejemplo de código: Recuperación y cambio de valores para las propiedades de usuario mediante el modelo de objetos de servidor de SharePoint
En el ejemplo de código siguiente se recupera todas las propiedades de tipo UserProfile y se recuperan valores de propiedades de un usuario específico. A continuación, se cambia la propiedad PictureUrl de valor único y la propiedad PastProjects de varios valores. Para obtener una lista completa de constantes de nombre de propiedad de perfil, consulte PropertyConstants .
Nota:
Cambie los valores de marcador de posición domain\username, http://servername/docLib/pic.jpgy servername antes de ejecutar el código.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Office.Server;
using Microsoft.Office.Server.UserProfiles;
using Microsoft.SharePoint;
using System.Web;
namespace UserProfilesSSOM
{
class Program
{
static void Main(string[] args)
{
// Replace "domain\\username," "http://servername/docLib/pic.jpg," and "servername" with actual values.
string accountName = "domain\\username";
string newPictureUrl = "http://servername/docLib/pic.jpg";
using (SPSite site = new SPSite("http://servername"))
{
SPServiceContext serviceContext = SPServiceContext.GetContext(site);
try
{
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);
IEnumerator<ProfileSubtypeProperty> userProfileSubtypeProperties = subtypePropMgr.GetEnumerator();
while (userProfileSubtypeProperties.MoveNext())
{
string propName = userProfileSubtypeProperties.Current.Name;
ProfileValueCollectionBase values = userProfile.GetProfileValueCollection(propName);
if (values.Count > 0)
{
// Handle multivalue properties.
foreach (var value in values)
{
Console.WriteLine(propName + ": " + value.ToString());
}
}
else
{
Console.WriteLine(propName + ": ");
}
}
Console.WriteLine("Press Enter to change the values.");
Console.Read();
// Change the value of a single-value user property.
userProfile[PropertyConstants.PictureUrl].Value = newPictureUrl;
// 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");
// Save the changes to the server.
userProfile.Commit();
Console.WriteLine("The property values for the user have been changed.");
Console.Read();
}
catch (System.Exception e)
{
Console.WriteLine(e.GetType().ToString() + ": " + e.Message);
Console.Read();
}
}
}
}
}