如何:使用更改日志获取最新用户配置文件更改

上次修改时间: 2010年1月27日

适用范围: SharePoint Server 2010

Microsoft SharePoint Server 2010 提供了用户配置文件存储的更改跟踪对象模型,支持基于个人的警告。这些警告通知您有关纪念日及用户配置文件中的其他更改。SharePoint Server 2010 将用户配置文件中的所有日期字段作为纪念日。当用户配置文件中的某个日期与当前日期匹配(基于服务器时间)时,SharePoint Server 2010 将创建一个新的纪念日事件。注意,更改日期字段不会创建事件。

更改跟踪对象模型的实现与 Microsoft SharePoint Foundation 2010SPChange 对象类似,但是没有后者稳固。UserProfile 类定义了两种过载方法,以支持更改跟踪。这两种方法是:

  • 公共 Microsoft.Office.Server.UserProfiles.UserProfileChangeCollection GetChanges(Microsoft.Office.Server.UserProfiles.UserProfileChangeQuery)

  • 公共 Microsoft.Office.Server.UserProfiles.UserProfileChangeCollection GetColleagueChanges (Microsoft.Office.Server.UserProfiles.UserProfileChangeQuery)

使用 UserProfile 对象的 GetChanges 方法返回在给定时间范围内用户配置文件中发生的更改集合。SPChange 对象包含更改类型的相关信息,如 ChangeType 枚举所呈现的类似。ChangeType 值表明更改类型,包括添加、更新、删除或重命名更改。

UserProfileChangeQuery 是一种枚举,说明了您关注的更改事件。例如,它可以是:

  • DistributionListMembership

  • Colleague

  • QuickLink

  • Anniversary

  • ProfileProperty

  • UserProfile

  • PrivacyItem

  • SingleValueProperty

  • MultivalueProperty

  • SiteMembership

以下代码示例演示了如何使用 GetChanges() 方法来查找最近 5 天内用户配置文件中的更改。注意,GetColleagueChanges() 方法的运行方式相同,将返回用户同事的配置文件中的更改。

在使用此代码示例前,请用实际值替换 domainname、username 和其他占位符,同时在 Microsoft Visual Studio 中将引用添加到以下各项:

  • Microsoft.Office.Server

  • Microsoft.Office.Server.UseProfiles

  • Microsoft.SharePoint

  • System.Web

示例

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

请参阅

任务

如何:检索用户配置文件

如何:检索用户配置文件属性

如何:检索两个用户配置文件之间的共同之处