変更ログを使用してユーザー プロファイルの最新の変更を取得する

最終更新日: 2010年1月27日

適用対象: SharePoint Server 2010

Microsoft SharePoint Server 2010 では、ユーザー プロファイル ストアで個人ベースの通知をサポートするための変更追跡オブジェクト モデルが提供されています。これらの通知は、記念日およびその他のさまざまなユーザー プロファイルの変更をユーザーに知らせます。SharePoint Server 2010 では、ユーザー プロファイル内の日付フィールドはすべて記念日として扱われます。ユーザーのプロファイル内の日付が現在の日付 (サーバー時間) と一致したときに、SharePoint Server 2010 によって新しい記念日イベントが作成されます。日付フィールドを変更した場合は、イベントは作成されません。

変更追跡オブジェクト モデルの実装は、Microsoft SharePoint Foundation 2010SPChange オブジェクトと似ていますが、堅牢性は劣ります。UserProfile クラスは、変更追跡をサポートする 2 つのオーバーロード メソッドを定義します。それらを次に示します。

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

  • public 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("http://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();
               }
            }
        }
    }

関連項目

タスク

[方法] ユーザー プロファイルを取得する

[方法] ユーザー プロファイル プロパティを取得する

[方法] 2 つのユーザー プロファイル間の共通点を取得する