Abrufen von Benutzerprofileigenschaften mithilfe des .NET-Clientobjektmodells in SharePoint
In diesem Artikel erfahren Sie, wie Sie Benutzerprofileigenschaften programmgesteuert mithilfe des .NET-Clientobjektmodells in SharePoint abrufen.
Was sind Benutzerprofileigenschaften in SharePoint?
Benutzereigenschaften und Benutzerprofileigenschaften liefern Informationen über SharePoint-Benutzer, wie Anzeigename, E-Mail, Titel und andere geschäftliche oder persönliche Daten. In clientseitigen APIs greifen Sie über das PersonProperties-Objekt und dessen UserProfileProperties-Eigenschaft auf diese Eigenschaften zu. Die UserProfileProperties -Eigenschaft enthält alle Benutzerprofileigenschaften, aber das PersonProperties -Objekt enthält alle normalerweise verwendeten Eigenschaften (wie beispielsweise AccountName , DisplayName und Email ), auf die einfacher zugegriffen werden kann.
Das PeopleManager-Objekt enthält die folgenden Methoden, die Sie verwenden können, um Benutzereigenschaften und Benutzerprofileigenschaften mithilfe des .NET-Clientobjektmodells abzurufen:
Die GetMyProperties-Methode und die GetPropertiesFor-Methode geben ein PersonProperties-Objekt zurück.
Die GetUserProfilePropertiesFor-Methode und die GetUserProfilePropertyFor-Methode geben die Werte der von Ihnen angegebenen Benutzerprofileigenschaften zurück.
Benutzerprofileigenschaften von Client-APIs sind schreibgeschützt (mit Ausnahme des Profilbilds, das Sie mithilfe der PeopleManager.SetMyProfilePicture-Methode ändern können). Wenn Sie weitere Benutzerprofileigenschaften ändern möchten, verwenden Sie das Serverobjektmodell.
Hinweis
Die Clientversion des UserProfile-Objekts enthält nicht alle Benutzereigenschaften als serverseitige Version. Allerdings stellt die clientseitige Version die Methoden zum Erstellen einer persönlichen Website für den aktuellen Benutzer bereit. Zum Abrufen des clientseitigen UserProfile-Objekts für den aktuellen Benutzer verwenden Sie die ProfileLoader.GetUserProfile-Methode.
Weitere Informationen zum Arbeiten mit Profilen finden Sie unter Arbeiten mit Benutzerprofilen in SharePoint.
Voraussetzungen für die Einrichtung der Entwicklungsumgebung zum Abrufen von Benutzerprofileigenschaften über das .NET-Clientobjektmodell in SharePoint.
Zum Erstellen einer Konsolenanwendung, die das .NET-Clientobjektmodell zum Abrufen von Benutzerprofileigenschaften verwendet, benötigen Sie Folgendes:
SharePoint mit Profilen, die für den aktuellen Benutzer und einen Zielbenutzer erstellt wurden
Visual Studio 2012
Verbindungsberechtigungen Vollzugriff zum Zugriff auf die Benutzerprofildienst-Anwendung für den aktuellen Benutzer.
Hinweis
Wenn Sie nicht auf dem Computer entwickeln, auf dem SharePoint ausgeführt wird, rufen Sie den Download der SharePoint-Clientkomponenten ab, der SharePoint-Clientassemblys enthält.
Erstellen der Konsolenanwendung, die Benutzerprofileigenschaften über das .NET-Clientobjektmodell in SharePoint abruft
Öffnen Sie auf dem Entwicklungscomputer Visual Studio, und wählen Sie Datei, Neu, Projekt aus.
Wählen Sie im Dialogfeld Neues Projekt in der Dropdownliste oben im Dialogfeld .NET Framework 4.5 aus.
Wählen Sie in den Projektvorlage Windows und anschließend Konsolenanwendung aus.
Geben Sie für das Projekt den Namen UserProfilesCSOM an, und klicken Sie dann auf OK.
Fügen Sie Verweise auf die folgenden Assemblys hinzu:
- Microsoft.SharePoint.Client
- Microsoft.SharePoint.ClientRuntime
- Microsoft.SharePoint.Client.UserProfiles
- Definieren Sie in der Main-Methode Variablen für die Server-URL und den Benutzernamen, wie im folgenden Code dargestellt.
const string serverUrl = "http://serverName/";
const string targetUser = "domainName\\userName";
Hinweis: Denken Sie daran, die
http://serverName/
Platzhalterwerte unddomainName\\\\userName
zu ersetzen, bevor Sie den Code ausführen.
- Initialisieren Sie den SharePoint-Clientkontext, wie im folgenden Code dargestellt.
ClientContext clientContext = new ClientContext(serverUrl);
- Rufen Sie die Eigenschaften des Zielbenutzers aus dem PeopleManager-Objekt ab, wie im folgenden Code gezeigt.
PeopleManager peopleManager = new PeopleManager(clientContext);
PersonProperties personProperties = peopleManager.GetPropertiesFor(targetUser);
Das personProperties-Objekt ist ein Clientobjekt. Einige Clientobjekte enthalten erst Daten, nachdem sie initialisiert wurden. Beispielweise können Sie auf die Eigenschaftswerte des personProperties-Objekts zugreifen, nachdem dieses initialisiert wurde. Wenn Sie versuchen, auf eine Eigenschaft zuzugreifen, bevor sie initialisiert wurde, erhalten Sie eine PropertyOrFieldNotInitializedException-Ausnahme.
- Zum Initialisieren des personProperties-Objekts registrieren Sie die Anforderung, die Sie ausführen möchten, und führen Sie die Anforderung dann auf dem Server aus, wie im folgenden Code gezeigt.
clientContext.Load(personProperties, p => p.AccountName, p => p.UserProfileProperties);
clientContext.ExecuteQuery();
Wenn Sie die Load-Methode (oder die LoadQuery-Methode) aufrufen, übergeben Sie das Objekt, das Sie abrufen oder ändern möchten. In diesem Beispiel werden durch den Aufruf der Load-Methode optionale Parameter zum Filtern der Anforderung übergeben. Bei den Parametern handelt es sich um lambda-Ausdrücke, die nur die AccountName-Eigenschaft und die UserProfileProperties-Eigenschaft des personProperties-Objekts anfordern.
Tipp: Fordern Sie beim Aufruf der Load-Methode nur die Eigenschaften an, die Sie verwenden möchten, um den Netzwerkverkehr zu reduzieren. Wenn Sie mit mehreren Objekten arbeiten, gruppieren Sie mehrere Aufrufe der Load-Methode nach Möglichkeit vor dem Aufrufen der ExecuteQuery-Methode.
- Durchlaufen Sie die Benutzerprofileigenschaften, und lesen Sie den Namen und den Wert jeder Eigenschaft, wie im folgenden Code dargestellt.
foreach (var property in personProperties.UserProfileProperties)
{
Console.WriteLine(string.Format("{0}: {1}",
property.Key.ToString(), property.Value.ToString()));
}
Codebeispiel: Abrufen sämtlicher Benutzerprofileigenschaften über das .NET-Clientobjektmodell in SharePoint
Das folgende Codebeispiel zeigt, wie alle Benutzerprofileigenschaften eines Zielbenutzers abgerufen und durchlaufen werden, wie im vorherigen Verfahren beschrieben.
Hinweis
Ersetzen Sie die http://serverName/
Platzhalterwerte und domainName\\\\userName
, bevor Sie den Code ausführen.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SharePoint.Client;
using Microsoft.SharePoint.Client.UserProfiles;
namespace UserProfilesCSOM
{
class Program
{
static void Main(string[] args)
{
// Replace the following placeholder values with the target SharePoint site and
// target user.
const string serverUrl = "http://serverName/";
const string targetUser = "domainName\\\\userName";
// Connect to the client context.
ClientContext clientContext = new ClientContext(serverUrl);
// Get the PeopleManager object and then get the target user's properties.
PeopleManager peopleManager = new PeopleManager(clientContext);
PersonProperties personProperties = peopleManager.GetPropertiesFor(targetUser);
// Load the request and run it on the server.
// This example requests only the AccountName and UserProfileProperties
// properties of the personProperties object.
clientContext.Load(personProperties, p => p.AccountName, p => p.UserProfileProperties);
clientContext.ExecuteQuery();
foreach (var property in personProperties.UserProfileProperties)
{
Console.WriteLine(string.Format("{0}: {1}",
property.Key.ToString(), property.Value.ToString()));
}
Console.ReadKey(false);
// TODO: Add error handling and input validation.
}
}
}
Codebeispiel: Abrufen von Benutzerprofileigenschaften von Personen, die mir folgen, mit dem SharePoint .NET-Clientobjektmodell
Im folgenden Codebeispiel wird gezeigt, wie die Benutzerprofileigenschaften von Personen in einer SharePoint-Add-In abgerufen werden können, die Ihnen folgen.
string contextTokenString = TokenHelper.GetContextTokenFromRequest(Request);
if (contextTokenString != null)
{
Uri sharepointUrl = new Uri(Request.QueryString["SP.Url"]);
ClientContext clientContext = TokenHelper.GetClientContextWithContextToken(sharepointUrl.ToString(), contextTokenString, Request.Url.Authority);
PeopleManager peopleManager = new PeopleManager(clientContext);
ClientObjectList<PersonProperties> peopleFollowedBy = peopleManager.GetMyFollowers();
clientContext.Load(peopleFollowedBy, people => people.Include(person => person.PictureUrl, person => person.DisplayName));
clientContext.ExecuteQuery();
foreach (PersonProperties personFollowedBy in peopleFollowedBy)
{
if (!string.IsNullOrEmpty(personFollowedBy.PictureUrl))
{
Response.Write("<img src=\\"" + personFollowedBy.PictureUrl + "\\" alt=\\"" + personFollowedBy.DisplayName + "\\"/>");
}
}
clientContext.Dispose();
}
Codebeispiel: Abrufen einer Gruppe von Benutzerprofileigenschaften über das .NET-Clientobjektmodell in SharePoint
Das folgende Codebeispiel zeigt, wie eine bestimmte Gruppe von Benutzerprofileigenschaften für einen Zielbenutzer abgerufen wird.
Hinweis
Um den Wert für nur eine Benutzerprofileigenschaft abzurufen, verwenden Sie die GetUserProfilePropertyFor-Methode .
Im Gegensatz zum vorherigen Codebeispiel, das ein PersonProperties-Objekt für den Zielbenutzer abruft, ruft dieses Beispiel die PeopleManager.GetUserProfilePropertiesFor-Methode auf und übergibt ein UserProfilePropertiesForUser-Objekt , das den Zielbenutzer und die abzurufenden Benutzerprofileigenschaften angibt. GetUserProfilePropertiesFor gibt eine IEnumerable-Zeichenfolgenauflistung<> zurück, die die Werte der von Ihnen angegebenen Eigenschaften enthält.
Hinweis
Ersetzen Sie die http://serverName/
Platzhalterwerte und domainName\\\\userName
, bevor Sie den Code ausführen.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SharePoint.Client;
using Microsoft.SharePoint.Client.UserProfiles;
namespace UserProfilesCSOM
{
class Program
{
static void Main(string[] args)
{
// Replace the following placeholder values with the target SharePoint site and the
// target user.
const string serverUrl = "http://serverName/";
const string targetUser = "domainName\\\\userName";
// Connect to the client context.
ClientContext clientContext = new ClientContext(serverUrl);
// Get the PeopleManager object.
PeopleManager peopleManager = new PeopleManager(clientContext);
// Retrieve specific properties by using the GetUserProfilePropertiesFor method.
// The returned collection contains only property values.
string[] profilePropertyNames = new string[] { "PreferredName", "Department", "Title" };
UserProfilePropertiesForUser profilePropertiesForUser = new UserProfilePropertiesForUser(
clientContext, targetUser, profilePropertyNames);
IEnumerable<string> profilePropertyValues = peopleManager.GetUserProfilePropertiesFor(profilePropertiesForUser);
// Load the request and run it on the server.
clientContext.Load(profilePropertiesForUser);
clientContext.ExecuteQuery();
// Iterate through the property values.
foreach (var value in profilePropertyValues)
{
Console.Write(value + "\\n");
}
Console.ReadKey(false);
// TO DO: Add error handling and input validation.
}
}
}