Freigeben über


Arbeiten mit Benutzerprofilen und Organisationsprofilen mithilfe des Serverobjektmodells in SharePoint

In diesem Artikel erfahren Sie, wie Sie Benutzerprofile und Benutzerprofileigenschaften in SharePoint programmgesteuert mithilfe des SharePoint-Serverobjektmodells erstellen, abrufen und ändern können.

Was sind Benutzerprofile in SharePoint?

Benutzerprofile stellen in SharePoint SharePoint-Benutzer dar. Benutzerprofileigenschaften stellen Informationen über die Benutzer und über die Eigenschaften selbst dar. Eigenschaften umfassen beispielsweise den Kontonamen oder die E-Mail-Adresse eines Benutzers und den Datentyp einer Eigenschaft. Sie können das Serverobjektmodell verwenden, um Benutzerprofile, Profiluntertypen und Profileigenschaften zu erstellen, abzurufen und zu ändern.

Hinweis

Weitere Informationen zu allgemeinen Programmieraufgaben für die Arbeit mit Benutzerprofilen und der API, die Sie zum Ausführen der Aufgaben verwenden, finden Sie unter Arbeiten mit Benutzerprofilen in SharePoint.

Voraussetzungen für die Einrichtung der Entwicklungsumgebung für die Arbeit mit Benutzerprofilen mithilfe des SharePoint-Serverobjektmodells

Zur Erstellung einer Konsolenanwendung, die das Serverobjektmodell für die Arbeit mit Benutzerprofilen und Benutzerprofileigenschaften verwendet, benötigen Sie Folgendes:

  • SharePoint mit dem für den aktuellen Benutzer erstellten Profil

  • Visual Studio 2012

  • Berechtigungen zum Erstellen, Abrufen und Ändern der Benutzerprofilobjekte. (Für das Erstellen und Ändern der Profile ist die Berechtigung Benutzerprofile ändern erforderlich.)

Erstellen einer mit Benutzerprofilen funktionierenden Konsolenanwendung mithilfe des SharePoint-Serverobjektmodells

  1. Öffnen Sie 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. Wählen Sie in der Liste VorlagenWindows und dann Konsolenanwendung.

  4. Geben Sie dem Projekt den Namen „UserProfilesSSOM“, und klicken Sie dann auf OK.

Hinweis: Vergewissern Sie sich, dass die Einstellung 32-Bit bevorzugen in den Buildeigenschaften des Projekts deaktiviert ist.

  1. Fügen Sie Verweise auf die folgenden Assemblys hinzu:
  • Microsoft.Office.Server
  • Microsoft.Office.Server.UserProfiles
  • Microsoft.SharePoint
  • System.Web
  1. Ersetzen Sie die Inhalte der Program-Klasse durch das Codebeispiel aus einem der folgenden Szenarien:
  1. Wählen Sie zum Testen der Konsolenanwendung auf der Menüleiste Debuggen, Debuggen starten aus. Sie können Ihre Änderungen auf der Seite Profildienst verwalten für die Benutzerprofildienstanwendung in der Zentraladministration überprüfen.

Codebeispiel: Erstellen von Benutzerprofilen mithilfe des SharePoint-Serverobjektmodells

Benutzerprofile stellen in SharePoint SharePoint-Benutzer dar. Profiltypen und Untertypen helfen bei der Kategorisierung von Profilen in Gruppen wie Mitarbeiter oder Kunden. Profiltypen und Untertypen werden zum Festlegen von allgemeinen Profileigenschaften und Attributen auf Untertypebene verwendet. SharePoint Server enthält einen standardmäßigen Benutzerprofil-Untertyp.

Im folgenden Codebeispiel wird ein UserProfile-Objekt erstellt, das dem Standardbenutzerprofiluntertyp zugeordnet ist. Einige Benutzerprofileigenschaften werden automatisch mit Informationen aufgefüllt, die aus dem Verzeichnis importiert werden, das Benutzerkonten enthält, z. B. Active Directory Domain Services. Ein Codebeispiel zum Erstellen eines benutzerdefinierten Untertyps finden Sie unter ProfileSubtype .

Hinweis

Ändern Sie die Platzhalterwerte domäne\benutzername undservername, bevor Sie den Code ausführen.


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();
                }
            }
        }
    }
}

Codebeispiel: Erstellen von Benutzerprofileigenschaften mithilfe des SharePoint-Serverobjektmodells

Benutzerprofileigenschaften beschreiben persönliche und Organisationsinformationen über Benutzer. Sie können eine benutzerdefinierte Profileigenschaft erstellen oder sie zu dem Standardsatz der SharePoint-Profileigenschaften hinzufügen.

Eine Profileigenschaft und ihre Attribute werden durch eine Reihe verknüpfter Objekte dargestellt: ein CoreProperty-Objekt , ein ProfileTypeProperty-Objekt und ein ProfileSubtypeProperty-Objekt .

Im folgenden Codebeispiel wird eine CoreProperty mit einem URL-Datentyp (oder optional einer CoreProperty mit einem mehrwertigen Zeichenfolgendatentyp) erstellt. Es erstellt auch einen ProfileTypeProperty und einen ProfileTypeProperty , die Verfügbarkeit, Datenschutz und weitere Einstellungen für die Eigenschaft definieren. Die ProfileSubtypeProperty.DefaultPrivacy -Eigenschaft steuert die Sichtbarkeit der Eigenschaften und weiteren „Meine Website"-Inhalten. Eine vollständige Liste möglicher Datentypen für Profileigenschaftenwerte finden Sie unter PropertyDataType .

Hinweis

Ändern Sie den Platzhalterwert „servername“, bevor Sie den Code ausführen.


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();
                }
            }
        }
    }
}

Codebeispiel: Abrufen und Ändern von Benutzerprofilen mithilfe des SharePoint-Serverobjektmodells

Im folgenden Codebeispiel werden alle Benutzerprofile innerhalb des Kontexts abgerufen und der Wert der DisplayName-Eigenschaft eines Benutzers geändert. Auf die meisten Profileigenschaften wird mit dem UserProfile.Item -Accessor zugegriffen.

Hinweis

Ändern Sie die Platzhalterwerte domäne\benutzername undservername, bevor Sie den Code ausführen.


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();
                }
            }
        }
    }
}

Codebeispiel: Abrufen und Ändern der Attribute von Benutzerprofileigenschaften mithilfe des SharePoint-Serverobjektmodells

Im folgenden Codebeispiel wird der Satz von Eigenschaften abgerufen, die eine bestimmte Benutzereigenschaft und deren Attribute darstellen. Anschließend werden die Attribute CoreProperty.DisplayName , ProfileTypeProperty.IsVisibleOnViewer und ProfileSubtypeProperty.PrivacyPolicy geändert. Diese Änderungen gelten global für den Eigenschaftensatz. ProfileSubtypeProperty.PrivacyPolicy gibt an, ob Benutzer einen Wert für die Eigenschaft angeben müssen. PrivacyPolicy gilt nur für Benutzerprofileigenschaften.

Hinweis

Ändern Sie den Platzhalterwert „servername“, bevor Sie den Code ausführen.


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();
                }
            }
        }
    }
}

Codebeispiel: Abrufen und Ändern der Werte von Benutzereigenschaften mithilfe des SharePoint-Serverobjektmodells

Das folgende Beispiel ruft alle UserProfile-Typeigenschaften und Eigenschaftswerte für einen bestimmten Benutzer ab. Anschließend ändert es die PictureUrl -Eigenschaft mit einem Wert und die PastProjects -Eigenschaft mit mehreren Werten. Eine vollständige Liste der Profileigenschaften-Namenkonstanten finden Sie unter PropertyConstants .

Hinweis

Ändern Sie die Platzhalterwerte domäne\benutzername, http://servername/docLib/pic.jpgund servername, bevor Sie den Code ausführen.


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();
                }
            }
        }
    }
}

Siehe auch