Abrufen von Benutzerprofileigenschaften mithilfe des JavaScript-Objektmodells in SharePoint

In diesem Artikel erfahren Sie, wie Sie Benutzereigenschaften und Benutzerprofileigenschaften programmgesteuert mithilfe des JavaScript-Objektmodells in SharePoint abrufen.

Was sind Benutzereigenschaften und 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 auf diese Eigenschaften über das PersonProperties-Objekt und seine userProfileProperties-Eigenschaft zu. Die userProfileProperties-Eigenschaft enthält alle Benutzerprofileigenschaften, aber das PersonProperties-Objekt beinhaltet die normalerweise verwendeten Eigenschaften (wie accountName, displayName und email), auf die leichter zugegriffen werden kann.

Das PeopleManager-Objekt enthält die folgenden Methoden, mit denen Sie Benutzereigenschaften und Benutzerprofileigenschaften mithilfe des JavaScript-Objektmodells abrufen können:

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. Weitere Informationen zum Arbeiten mit Benutzerprofilen finden Sie unter Arbeiten mit Benutzerprofilen in SharePoint.

Hinweis

Das clientseitige UserProfile-Objekt enthält, anders als die serverseitige Version, nicht alle Benutzereigenschaften. Die clientseitige Version stellt aber die Methoden zur Erstellen einer persönlichen Website für den aktuellen Benutzer bereit. Verwenden Sie zum Abrufen die ProfileLoader.getUserProfile-Methode.

Voraussetzungen für das Einrichten der Entwicklungsumgebung zum Abrufen von Benutzereigenschaften über das SharePoint JavaScript-Objektmodell

Um eine Anwendungsseite zu erstellen, die das JavaScript-Objektmodell zum Abrufen von Benutzereigenschafen verwendet, benötigen Sie Folgendes:

  • SharePoint mit Profilen, die für den aktuellen Benutzer und einen Zielbenutzer erstellt wurden

  • Visual Studio 2012

  • Office Developer Tools für Visual Studio 2013

  • Verbindungsberechtigungen für den Vollzugriff, um auf die Benutzerprofildienst-Anwendung für den aktuellen Benutzer zugreifen zu können

Erstellen der Anwendungsseite in Visual Studio 2012

  1. Öffnen Sie auf dem Server, auf dem SharePoint ausgeführt wird, Visual Studio, und wählen Sie Datei, Neu, Projekt.

  2. Wählen Sie im Dialogfeld Neues Projekt aus der Dropdownliste oben im Dialogfeld die Option .NET Framework 4.5.

  3. Erweitern Sie in der Liste Vorlagen das Element Office/SharePoint, wählen Sie die Kategorie SharePoint-Lösungen und dann die Vorlage SharePoint-Projekt.

  4. Benennen Sie das Projekt mit UserProfilesJSOM, und klicken Sie dann auf OK.

  5. Geben Sie im Dialogfeld Assistent zum Anpassen von SharePoint die URL zu Ihrer Ziel-SharePoint-Website, wählen Sie Als Farmlösung bereitstellen, und klicken Sie dann auf Fertig stellen.

  6. Öffnen Sie im Projektmappen-Explorer das Kontextmenü für dasUserProfilesJSOM-Projekt, und fügen Sie dann einen zugeordneten SharePoint-Ordner "Layouts" hinzu.

  7. Öffnen Sie im Ordner Layouts das Kontextmenü für den Ordner „UserProfilesJSOM“, und fügen Sie anschließend eine neue SharePoint-Anwendungsseite mit dem Namen „UserProfiles.aspx“ hinzu.

    Hinweis: Die Codebeispiele in diesem Artikel legen benutzerdefinierten Code im Seitenmarkup fest, verwenden aber nicht die Code-Behind Class-Datei, die Visual Studio für die Seite erstellt.

  8. Öffnen Sie das Kontextmenü für die Seite „UserProfiles.aspx“, und wählen Sie dann Als Startelement festlegen aus.

  9. Fügen Sie in das Markup der Seite "UserProfiles.aspx" den folgenden Code zwischen die Haupt- asp:Content-Tags ein. Dieser Code fügt ein span-Steuerelement, das die Abfrageergebnisse anzeigt, SharePoint:ScriptLink-Steuerelemente, die SharePoint JavaScript Class-Bibliotheksdateien und script-Tags einfügt, die Ihre benutzerdefinierte Logik enthalten.

<span id="results"></span><br />
<SharePoint:ScriptLink ID="ScriptLink1" name="SP.js" runat="server"
    ondemand="false" localizable="false" loadafterui="true" />
<SharePoint:ScriptLink ID="ScriptLink2" name="SP.UserProfiles.js" runat="server"
    ondemand="false" localizable="false" loadafterui="true" />
<script type="text/javascript">
    // Replace this comment with the code for your scenario.
</script>
  1. Um Logik für das Abrufen von Benutzerprofileigenschaften hinzuzufügen, ersetzen Sie den Kommentar zwischen den script-Tags durch das Codebeispiel für eines der folgenden Szenarien:
  1. Um die Anwendungsseite zu testen, wählen Sie in der Menüleiste die Optionen Debuggen, Debuggen starten. Wenn Sie aufgefordert werden, die Datei "web.config" zu ändern, klicken Sie auf OK.

Codebeispiel: Abrufen von Benutzerprofileigenschaften aus dem "PersonProperties"-Objekt und der "userProfileProperties-Eigenschaft im SharePoint JavaScript-Objektmodell

Das folgende Codebeispiel erklärt, wie Sie Benutzerprofileigenschaften für einen Zielbenutzer abrufen, indem Sie das PersonProperties-Objekt und seine userProfileProperties-Eigenschaft anfordern. Es zeigt die Vorgehensweise:

Hinweis

Fügen Sie den folgenden Code zwischen den script-Tags ein, den Sie in der Prozedur Erstellen der Anwendungsseite zur Seite „UserProfiles.aspx“ hinzugefügt haben. Ersetzen Sie den domainName\\userName-Platzhalterwert, bevor Sie den Code ausführen. (In diesem Codebeispiel wird die Code-Behind Class-Datei nicht verwenden.)


var personProperties;

// Ensure that the SP.UserProfiles.js file is loaded before the custom code runs.
SP.SOD.executeOrDelayUntilScriptLoaded(getUserProperties, 'SP.UserProfiles.js');

function getUserProperties() {

    // Replace the placeholder value with the target user's credentials.
    var targetUser = "domainName\\userName";

    // Get the current client context and PeopleManager instance.
    var clientContext = new SP.ClientContext.get_current();
    var peopleManager = new SP.UserProfiles.PeopleManager(clientContext);

    // Get user properties for the target user.
    // To get the PersonProperties object for the current user, use the
    // getMyProperties method.
    personProperties = peopleManager.getPropertiesFor(targetUser);

    // Load the PersonProperties object and send the request.
    clientContext.load(personProperties);
    clientContext.executeQueryAsync(onRequestSuccess, onRequestFail);
}

// This function runs if the executeQueryAsync call succeeds.
function onRequestSuccess() {

    // Get a property directly from the PersonProperties object.
    var messageText = " \\"DisplayName\\" property is "
        + personProperties.get_displayName();

    // Get a property from the UserProfileProperties property.
    messageText += "<br />\\"Department\\" property is "
        + personProperties.get_userProfileProperties()['Department'];
    $get("results").innerHTML = messageText;
}

// This function runs if the executeQueryAsync call fails.
function onRequestFail(sender, args) {
    $get("results").innerHTML = "Error: " + args.get_message();
}

Codebeispiel: Abrufen einer Gruppe von Benutzerprofileigenschaften mithilfe der „getUserProfilePropertiesFor“-Methode im SharePoint JavaScript-Objektmodell

Im folgenden Codebeispiel werden die Werte einer bestimmten Gruppe von Benutzerprofileigenschaften für einen Zielbenutzer mithilfe der getUserProfilePropertiesFor-Methode abgerufen. Es zeigt die Vorgehensweise:

  • Erstellen Sie ein UserProfilePropertiesForUser-Objekt, das den Zielbenutzer und die abzurufenden Benutzerprofileigenschaften angibt. In diesem Beispiel werden die PreferredName-Eigenschaft und die Department-Eigenschaft abgerufen.

  • Rufen Sie die Werte der angegebenen Eigenschaft mithilfe der getUserProfilePropertiesFor-Methode ab, und übergeben Sie die Werte an das UserProfilePropertiesForUser-Objekt. (Zum Abrufen des Werts von nur einer Benutzerprofileigenschaft verwenden Sie die getUserProfilePropertyFor-Methode.)

  • Rufen Sie die Werte aus dem zurückgegebenen Array von Eigenschaftswerten ab.

Hinweis

Fügen Sie den folgenden Code zwischen den script-Tags ein, den Sie in der Prozedur Erstellen der Anwendungsseite zur Seite „UserProfiles.aspx“ hinzugefügt haben. Ersetzen Sie den domainName\\\\userName-Platzhalterwert, bevor Sie den Code ausführen. (In diesem Codebeispiel wird die Code-Behind Class-Datei nicht verwenden.)


var userProfileProperties;

// Ensure that the SP.UserProfiles.js file is loaded before the custom code runs.
SP.SOD.executeOrDelayUntilScriptLoaded(getUserProperties, 'SP.UserProfiles.js');

function getUserProperties() {

    // Replace the placeholder value with the target user's credentials.
    var targetUser = "domainName\\\\userName";

    // Get the current client context and PeopleManager instance.
    var clientContext = new SP.ClientContext.get_current();
    var peopleManager = new SP.UserProfiles.PeopleManager(clientContext);

    // Specify the properties to retrieve and target user for the 
    // UserProfilePropertiesForUser object.
    var profilePropertyNames = ["PreferredName", "Department"];
    var userProfilePropertiesForUser = 
        new SP.UserProfiles.UserProfilePropertiesForUser(
            clientContext,
            targetUser,
            profilePropertyNames);

    // Get user profile properties for the target user.
    // To get the value for only one user profile property, use the
    // getUserProfilePropertyFor method.
    userProfileProperties = peopleManager.getUserProfilePropertiesFor(
        userProfilePropertiesForUser);

    // Load the UserProfilePropertiesForUser object and send the request.
    clientContext.load(userProfilePropertiesForUser);
    clientContext.executeQueryAsync(onRequestSuccess, onRequestFail);
}

// This function runs if the executeQueryAsync call succeeds.
function onRequestSuccess() {
    var messageText = "\\"PreferredName\\" property is " 
        + userProfileProperties[0];
    messageText += "<br />\\"Department\\" property is " 
        + userProfileProperties[1];
    $get("results").innerHTML = messageText;
}

// This function runs if the executeQueryAsync call fails.
function onRequestFail(sender, args) {
    $get("results").innerHTML = "Error: " + args.get_message();
}

Siehe auch