Trabalhar com perfis de usuário e perfis de organização usando o modelo de objeto de servidor no SharePoint
Saiba como criar, recuperar e alterar perfis de usuário do SharePoint e propriedades de perfil de usuário, via programação, usando o modelo de objeto de servidor do SharePoint.
O que são perfis de usuário no SharePoint?
No SharePoint, os perfis de usuário representam os usuários do SharePoint. Propriedades de perfil de usuário representam informações sobre os usuários e também sobre as propriedades em si. Por exemplo, as propriedades incluem o endereço de email ou nome de conta de um usuário e o tipo de dados de uma propriedade. Você pode usar o modelo de objeto de servidor para criar programaticamente, recuperar e alterar propriedades de perfil, subtipos de perfil e perfis de usuário.
Observação
Para obter mais informações sobre tarefas comuns de programação para trabalhar com perfis de usuário e a API que você usa para executar as tarefas, consulte Trabalhar com perfis de usuário no SharePoint.
Pré-requisitos para configurar seu ambiente de desenvolvimento para trabalhar com perfis de usuário usando o modelo de objeto do servidor do SharePoint
Para criar um aplicativo de console que utiliza o modelo de objeto de servidor para trabalhar com perfis de usuário e propriedades de perfil de usuário, você precisará de:
SharePoint com o perfil criado para o usuário atual.
Visual Studio 2012.
Permissões para criar, recuperar e alterar os objetos de perfil de usuário. (A criação e modificação de perfis exige a permissão de Modificar perfis de usuário.)
Criar um aplicativo de console que funcione com perfis de usuário usando o modelo de objeto do servidor do SharePoint
Abra Visual Studio e escolha arquivo, novoprojeto.
Na caixa de diálogo Novo projeto, escolha o .NET Framework 4.5 da lista suspensa na parte superior da caixa de diálogo.
Na lista de modelos, escolha Windows e, em seguida, escolha o Aplicativo de Console.
Nome do projeto UserProfilesSSOMe escolha o botão OK.
Observação: verifique se a configuração Preferir 32 bits não está selecionada nas propriedades Build do projeto.
- Adicione referências a assemblies a seguir:
- Microsoft.Office.Server
- Microsoft.Office.Server.UserProfiles
- Microsoft.SharePoint
- System.web
- Substitua o conteúdo da classe Program o exemplo de código de um dos seguintes cenários:
- Criar um perfil de usuário
- Criar uma propriedade de perfil de usuário
- Recuperar e alterar os perfis de usuário
- Recuperar e alterar os atributos para propriedades de perfil de usuário
- Recuperar e alterar valores para propriedades de usuário
- Para testar o aplicativo de console, na barra de menus, escolha Depurar, Iniciar depuração. Você pode verificar suas alterações na página Gerenciar Serviço de Perfil para o aplicativo de serviço de perfil de usuário na Administração Central.
Exemplo de código: criar perfis de usuário usando o modelo de objeto do servidor do SharePoint
No SharePoint, os perfis de usuário representam os usuários do SharePoint. Tipos de perfil e subtipos ajudam a categorizar perfis em grupos, como funcionários ou clientes. Tipos de perfil e subtipos são usados para definir propriedades de perfil e atributos comuns no nível do subtipo. SharePoint Server inclui um subtipo de perfil de usuário padrão.
O exemplo de código a seguir cria um objeto UserProfile associado ao subtipo de perfil de usuário padrão. Algumas propriedades de perfil de usuário são preenchidas automaticamente com informações que são importadas do diretório que contém as contas de usuário, como Active Directory Domain Services. Para obter um exemplo de código que cria um subtipo personalizado, consulte ProfileSubtype .
Observação
Altere os valores de espaço reservado domain\username andservername antes de executar o 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();
}
}
}
}
}
Exemplo de código: criar propriedades de perfil de usuário usando o modelo de objeto do servidor do SharePoint
Propriedades de perfil de usuário descrevem informações pessoais e organizacionais sobre usuários. Você pode criar e adicionar uma propriedade de perfil personalizado para o conjunto de propriedades de perfil do SharePoint padrão.
Uma propriedade de perfil e seus atributos são representados por um conjunto de objetos vinculados: um objeto CoreProperty , um objeto ProfileTypeProperty e um objeto ProfileSubtypeProperty .
O exemplo de código a seguir cria um CoreProperty que tem um tipo de dados de URL (ou opcionalmente um CoreProperty que tem um tipo de dados de cadeia de caracteres multivalue). Além disso, ele cria um ProfileTypeProperty e ProfileTypeProperty que definem a disponibilidade, privacidade e outras configurações para a propriedade. A propriedade ProfileSubtypeProperty.DefaultPrivacy controla a visibilidade das propriedades e outros conteúdos de Meu Site. Para obter uma lista completa dos tipos de dados possíveis dos valores de propriedade de perfil, consulte PropertyDataType .
Observação
[!OBSERVAçãO] Altere o valor de espaço reservado de nomedoservidor antes de executar o 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();
}
}
}
}
}
Exemplo de código: recuperar e alterar perfis de usuário usando o modelo de objeto do servidor do SharePoint
O exemplo de código a seguir recupera todos os perfis de usuário dentro do contexto e altera o valor da propriedade DisplayName de um usuário. A maioria das propriedades de perfil são acessados por meio do acessador UserProfile.Item .
Observação
Altere os valores de espaço reservado domain\username andservername antes de executar o 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();
}
}
}
}
}
Exemplo de código: recuperar e alterar atributos para propriedades de perfil de usuário usando o modelo de objeto do servidor do SharePoint
O exemplo de código a seguir recupera o conjunto de propriedades que representam uma propriedade de usuário específica e seus atributos e, em seguida, altera o atributo CoreProperty.DisplayName , o atributo ProfileTypeProperty.IsVisibleOnViewer e o atributo ProfileSubtypeProperty.PrivacyPolicy . Essas alterações se aplicam globalmente ao conjunto de propriedades. ProfileSubtypeProperty.PrivacyPolicy Especifica se os usuários precisarão fornecer um valor para a propriedade. PrivacyPolicy se aplica apenas propriedades de perfil do usuário.
Observação
[!OBSERVAçãO] Altere o valor de espaço reservado de nomedoservidor antes de executar o 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();
}
}
}
}
}
Exemplo de código: recuperar e alterar valores para propriedades do usuário usando o modelo de objeto do servidor do SharePoint
O exemplo de código a seguir recupera todas as propriedades do tipo UserProfile e recupera os valores de propriedade para um usuário específico. Em seguida, ele altera a propriedade de valor único PictureUrl e a propriedade de vários valores PastProjects . Para obter uma lista completa das constantes de nome de propriedade de perfil, consulte PropertyConstants .
Observação
Altere os valores de domínio\nome de usuário, http://servername/docLib/pic.jpge espaço reservado de nome de servidor antes de executar o 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();
}
}
}
}
}