コード サンプル: 仕事仲間承認ソーシャル タグ付けアプリケーション ページ
最終更新日: 2011年8月22日
適用対象: SharePoint Server 2010
Colleague Approval Social Tagging Application ページは、仕事仲間を一覧表示し、チェック ボックスをオンにすることによって各仕事仲間の承認を示すことができるアプリケーション ページです。このサンプルは、Microsoft Visual Studio 2010 SharePoint アプリケーション ページ プロジェクトです。このプロジェクトをビルドして、Microsoft SharePoint Server 2010 サイトに展開すると、このページを使用して、仕事仲間のリストにあるユーザーの承認を表すことができます。現在のフォームでは、承認を示すためにアスタリスクだけがページに表示されます。このアスタリスクは、ユーザーの状況に合った記号または画像に置き換えることができます。
このコード サンプルをコンピューターにインストールするには、Microsoft SharePoint 2010 Software Development Kit (英語) (SDK) をダウンロードするか、Code Gallery (英語) からサンプルをダウンロードします。SharePoint 2010 SDK をダウンロードすると、サンプルはファイル システムの次の場所にインストールされます。C:\Program Files\Microsoft SDKs\SharePoint 2010\Samples\Social Data and User Profiles。
ソーシャル タグを使用したアイテムの承認の表示
アプリケーションは、コードに直接記述するサイトまたはサイト コレクションを使用して作成する SPServiceContext オブジェクトを使用して、UserProfileManager オブジェクトと SocialTagManager オブジェクトを作成します。また、アプリケーションは、現在のユーザーを表す UserProfile オブジェクトを取得します。アプリケーションは、現在のユーザーのすべてのソーシャル タグを取得し、ユーザーの仕事仲間の名前を含んだ文字列のリストを作成します。現在のユーザーの仕事仲間を表す UserProfile オブジェクトには、PublicUrl プロパティがあります。URL で表すことができるオブジェクトにはソーシャル タグを付けることができるので、SharePoint リストまたはドキュメント ライブラリのアイテムなど、URL で表すことができるアイテムの任意のセットに対する承認をユーザーが表すことができるようにこのアプリケーションを変更できます。
string mySite = "http://mysite";
protected void Page_Load(object sender, EventArgs e)
{
using ( SPSite site = new SPSite(mySite) )
{
//Create UserProfileManager with desired SPContext.
SPServiceContext serviceContext = SPServiceContext.GetContext(site);
UserProfileManager myUserProfileManager = new UserProfileManager(serviceContext);
UserProfile myUserProfile = myUserProfileManager.GetUserProfile(true);
SocialTagManager mySocialTagManager = new SocialTagManager(serviceContext);
string [] colleagueAccountNames = new string [myUserProfile.Colleagues.GetItems().GetLength(0)];
SocialTag[] mySocialTags = mySocialTagManager.GetTags(myUserProfile);
ユーザー プロファイル サービス アプリケーションの権限アクセス制御リスト (ACL) に含まれるユーザーだけが、UserProfileManager オブジェクトのインスタンスを作成することができます。ユーザー プロファイル サービス アプリケーションの権限 ACL にユーザーを追加するには、以下の手順を実行します。
ユーザー プロファイル サービス アプリケーションの権限 ACL にユーザーを追加するには
ブラウザーで、SharePoint サーバーの全体管理のホーム ページを開きます。
[アプリケーション構成の管理] 見出しの下に表示される、[サービス アプリケーションの管理] ページに移動します。
[ユーザー プロファイル サービス アプリケーション] オプションを選択します。[権限] をクリックします。
ダイアログ ボックスで、ユーザー アカウントを追加します。[OK] をクリックします。
ソーシャル タグでは有効な分類用語しか使用しないので、アプリケーションが最初に実行する必要があるタスクは、SocialTagManager オブジェクトから TaxonomySession オブジェクトを取得することです。次に、アプリケーションは、承認を表すために使用する分類用語が既定のキーワード用語ストア (分類用語の既定の位置) に存在するかどうかを確認します。この例では、Thumbs Up という用語を使用しますが、ユーザーの要件に応じて変更できます。このコードは、FeatureActivated イベント レシーバーに配置することもできます。その場合、1 回だけ実行されます。
TaxonomySession taxSession = mySocialTagManager.TaxonomySession;
TermStore termStore = taxSession.DefaultKeywordsTermStore;
TermCollection thumbsUp = termStore.KeywordsTermSet.GetTerms("Thumbs Up", true, StringMatchOption.ExactMatch, 1, true);
Term thumbsUpTerm;
if (thumbsUp.Count < 1 || !thumbsUp[0].IsAvailableForTagging)
{
thumbsUpTerm = termStore.KeywordsTermSet.CreateTerm("Thumbs Up", termStore.DefaultLanguage);
termStore.CommitAll();
}
else
{
thumbsUpTerm = thumbsUp[0];
}
次に、アプリケーションは、string オブジェクトの配列に各仕事仲間を格納します。
int n = 0;
foreach (Colleague colleague in myUserProfile.Colleagues.GetItems())
{
colleagueAccountNames[n] = (string)colleague.Profile[PropertyConstants.AccountName].Value;
n++;
}
アプリケーションは、ユーザーの仕事仲間を取得し、各仕事仲間にタグを付けるときに使用する分類用語を設定した後で、ページが読み込まれたのは、ユーザーの仕事仲間を表示するリストでユーザーがチェック ボックスをオンまたはオフにした後なのかどうかを確認します。ユーザーがフォームのチェック ボックスをオンまたはオフにした結果、ページが読み込まれた場合は、アプリケーションは、ユーザーがチェック ボックスをオンまたはオフにした仕事仲間を確認します。ソーシャル タグは、チェック ボックスをオンにした仕事仲間に追加され、チェック ボックスをオフにした仕事仲間から削除されます。UserProfileManager オブジェクトは、各仕事仲間を表す UserProfile オブジェクトを取得するので、各仕事仲間のパブリック URL からソーシャル タグを取得、追加、または削除できます。アプリケーションは、アスタリスク (*) の HTML 文字参照を使用して、現在のユーザーの承認を表します。この記号は、ユーザーの要件に応じて変更または削除できます。
if (IsPostBack)
{
for (int i = 0; i < CheckBoxList1.Items.Count; i++)
{
UserProfile userProfile = myUserProfileManager.GetUserProfile(CheckBoxList1.Items[i].Value);
Uri userUrl = userProfile.PublicUrl;
bool itemProcessed = false;
foreach (SocialTag tag in mySocialTags)
{
if (tag.Term == thumbsUpTerm && tag.Url == userUrl && CheckBoxList1.Items[i].Selected == false)
{
mySocialTagManager.DeleteTag(userUrl, thumbsUpTerm);
CheckBoxList1.Items[i].Text = CheckBoxList1.Items[i].Value;
itemProcessed = true;
}
else if (tag.Term == thumbsUpTerm && tag.Url == userUrl)
{
CheckBoxList1.Items[i].Text = CheckBoxList1.Items[i].Value + " *";
itemProcessed = true;
}
}
if (CheckBoxList1.Items[i].Selected == true && !itemProcessed)
{
SocialTag thumbsUpTag = mySocialTagManager.AddTag(userUrl, thumbsUpTerm);
CheckBoxList1.Items[i].Text = CheckBoxList1.Items[i].Value + " *";
itemProcessed = true;
}
else if (!itemProcessed)
{
CheckBoxList1.Items[i].Text = CheckBoxList1.Items[i].Value;
}
}
}
ユーザーがリストのチェック ボックスをオンまたはオフにせずにページに移動した結果、ページが読み込まれた場合は、アプリケーションは、チェック ボックスのリストにユーザーの各仕事仲間の名前を設定し、各仕事仲間にタグが付けられているかどうかを確認します。
else
{
CheckBoxList1.DataSource = colleagueAccountNames;
CheckBoxList1.DataBind();
for (int i = 0; i < CheckBoxList1.Items.Count; i++)
{
UserProfile userProfile = myUserProfileManager.GetUserProfile(CheckBoxList1.Items[i].Value);
Uri userUrl = userProfile.PublicUrl;
bool itemProcessed = false;
foreach (SocialTag tag in mySocialTags)
{
if (tag.Term == thumbsUpTerm && tag.Url == userUrl && !itemProcessed)
{
CheckBoxList1.Items[i].Selected = true;
CheckBoxList1.Items[i].Text = CheckBoxList1.Items[i].Value + " *";
itemProcessed = true;
}
}
if ( !itemProcessed )
{
CheckBoxList1.Items[i].Text = CheckBoxList1.Items[i].Value;
}
}
}
}
}
サンプルのビルドと実行
以下の手順では、開発サイトあるいはテスト サイトで、このプロジェクトをテストする方法を説明します。
サンプルをビルドするには
「Microsoft.SDK.Server.Samples」という名前のフォルダーを作成し、そのフォルダーに RatingColleagues.zip ファイルを解凍します。
Visual Studio 2010 を起動し、手順 1. で作成したフォルダーにある RatingColleagues.sln ファイルを開きます。
[プロパティ] ウィンドウで、開発サイトまたはテスト サイトのサイト URL の値を絶対アドレス (たとえば、http://mysite/) で指定します。終了スラッシュを入力していることを確認してください。また、この URL を ColleagueRating.aspx.cs ファイルの mySite 変数の値にします。
もし存在しない場合は、プロジェクトに以下のアセンブリへの参照を追加します。
Microsoft.SharePoint.dll
Microsoft.SharePoint.Taxonomy.dll
Microsoft.Office.Server.dll
Microsoft.Office.Server.UserProfiles.dll
[ビルド] メニューの [ソリューションの展開] をクリックします。ビルドが完了した後で、アプリケーション ページは開発あるいはテスト サイトにインストールされます。
サンプルの実行
- ソリューションをビルドし、展開した後で、http://mysite/_layouts/ColleagueRating.aspx に移動します。仕事仲間のユーザー アカウント名がページのチェック ボックスの横に表示されます。