Gewusst wie: Abrufen aktueller Benutzerprofiländerungen mithilfe des Änderungsprotokolls

Letzte Änderung: Mittwoch, 27. Januar 2010

Gilt für: SharePoint Server 2010

In Microsoft SharePoint Server 2010 wird ein Änderungsprotokoll-Objektmodell für den Benutzerprofilspeicher bereitgestellt, das personenbasierte Benachrichtigungen unterstützt. Sie werden bei Jahrestagen sowie zahlreichen anderen Änderungen in einem Benutzerprofil über diese Benachrichtigungen benachrichtigt. In SharePoint Server 2010 werden alle Datenfelder im Benutzerprofil als Jahrestage behandelt. Stimmt ein Datum im Profil eines Benutzers mit dem aktuellen Datum (auf der Grundlage der Serverzeit) überein, wird ein neues Jahrestagsereignis in SharePoint Server 2010 erstellt. Aufgrund von Änderungen an einem Datumsfeld wird kein Ereignis erstellt.

Die Implementierung des Änderungsprotokoll-Objektmodells ist zwar weniger robust, jedoch vergleichbar mit dem SPChange-Objekt in Microsoft SharePoint Foundation 2010. Die UserProfile-Klasse definiert zwei überladene Methoden zur Unterstützung der Änderungsprotokollierung. Diese lauten wie folgt:

  • public Microsoft.Office.Server.UserProfiles.UserProfileChangeCollection GetChanges(Microsoft.Office.Server.UserProfiles.UserProfileChangeQuery)

  • public Microsoft.Office.Server.UserProfiles.UserProfileChangeCollection GetColleagueChanges (Microsoft.Office.Server.UserProfiles.UserProfileChangeQuery)

Mithilfe der GetChanges-Methode des UserProfile-Objekts kann die Auflistung der Änderungen, die in einem bestimmten zeitlichen Rahmen im Benutzerprofil stattgefunden haben, zurückgegeben werden. Ein SPChange-Objekt enthält Informationen zum Änderungstyp wie durch die ChangeType-Aufzählung dargestellt. Der ChangeType-Wert gibt den Änderungstyp, einschließlich Hinzufügungen, Aktualisierungen, Löschungen oder Umbenennungen von Änderungen an.

UserProfileChangeQuery ist eine Aufzählung, die das Änderungsereignis beschreibt, an dem Sie interessiert sind. Dabei kann es sich z. B. um folgende handeln:

  • DistributionListMembership

  • Colleague

  • QuickLink

  • Anniversary

  • ProfileProperty

  • UserProfile

  • PrivacyItem

  • SingleValueProperty

  • MultivalueProperty

  • SiteMembership

Im folgenden Codebeispiel wird die Verwendung der GetChanges() -Methode dargestellt, um die Änderungen in einem Benutzerprofil im Laufe der vergangenen fünf Tage festzustellen. Die GetColleagueChanges() -Methode ist vergleichbar und gibt die Änderungen im Profil des Kollegen des Benutzers zurück.

Ersetzen Sie vor der Verwendung des Codebeispiels domainname, username und sonstige Platzhalter durch tatsächliche Werte. Fügen Sie Ihrem Microsoft Visual Studio-Projekt zudem Verweise auf Folgendes hinzu:

  • Microsoft.Office.Server

  • Microsoft.Office.Server.UseProfiles

  • Microsoft.SharePoint

  • System.Web

Beispiel

using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Office.Server;
using Microsoft.Office.Server.Administration;
using Microsoft.Office.Server.UserProfiles;
using Microsoft.SharePoint;
using System.Web;

namespace UserProfilesOMApp
{
    class Program
    {
        static void Main(string[] args)
        {

            using (SPSite site = new SPSite("https://servername"))
            {
                SPServiceContext context = SPServiceContext.GetContext(site);
                UserProfileManager profileManager = 
                    new UserProfileManager(context);

                // this gets some subset of changes to a user profile

                DateTime startDate = 
                    DateTime.UtcNow.Subtract(TimeSpan.FromDays(5));
                UserProfileChangeQuery changeQuery = 
                    new UserProfileChangeQuery(false, true);
                UserProfileChangeToken changeToken = 
                    new UserProfileChangeToken(startDate);
                changeQuery.ChangeTokenStart = changeToken;
                changeQuery.Anniversary = true;
                changeQuery.SingleValueProperty = true;
                changeQuery.MultiValueProperty = true;
                changeQuery.DistributionListMembership = true;
                changeQuery.SiteMembership = true;

                UserProfileChangeCollection changes = 
                    profileManager.GetUserProfile
                    ("domainname\\username").
                    GetChanges(changeQuery);
                foreach (UserProfileChange change in changes)
                {
                    Console.WriteLine(change.EventTime.ToString());
                    if (change is UserProfilePropertyValueChange)
                    {
                        UserProfilePropertyValueChange propertyChange = 
                            (UserProfilePropertyValueChange)change;
                            Console.WriteLine(propertyChange.
                            ChangeType.ToString());
                    }
                    else if (change is UserProfileMembershipChange)
                    {
                        UserProfileMembershipChange membershipChange = 
                            (UserProfileMembershipChange)change;
                            Console.WriteLine(membershipChange.
                            ChangeType.ToString());
                    }

                }
                Console.Read();
               }
            }
        }
    }

Siehe auch

Aufgaben

Gewusst wie: Abrufen eines Benutzerprofils

Gewusst wie: Abrufen von Benutzerprofileigenschaften

Gewusst wie: Abrufen der Gemeinsamkeiten zweier Benutzerprofile