SharePoint でのユーザーのセグメント化
用語セット、コンテンツ検索 Web パーツ、クエリ ルールを組み合わせて SharePoint で使用して、ロケール、興味、性別、紹介リンクなどに基づいて定義したユーザー セグメントに合わせてカスタマイズしたコンテンツを表示します。 SharePoint には、性別、住所、興味、紹介リンクなどエンドユーザーの特定の属性に応じて SharePoint サイトに表示するコンテンツをカスタマイズするための構成要素があります。 このようなユーザー属性のグループ化をユーザー セグメントと呼びます。
SharePoint では、このユーザー セグメンテーション機能が多くのシナリオで役立ちます。そのようなシナリオの例を次に示します。
エンドユーザーの性別に応じて異なるバナーをページに表示する
エンドユーザーのロケールに応じて異なる割引サービスを表示する
エンドユーザーの紹介リンク (エンドユーザーがこのページにアクセスする元となった Web サイト) によって異なる記事をページに表示する
SharePoint にユーザー セグメンテーションを実装するには、ユーザー セグメントごとに用語セットを作成する、コンテンツ検索 Web パーツを拡張してユーザー セグメントを認識できるようにする、クエリ ルールを使用してユーザー セグメントごとに特定のアクションを実行する、という 3 つの操作を行います。
前提条件
SharePoint のユーザー セグメンテーションの実装を開始する前に、次に示すものが開発環境にインストールされていることを確認します。
SharePoint
Visual Studio 2012
この記事では、SharePoint で Web パーツを開発した経験があることを前提としています。 Web パーツの開発の詳細については、「文書パーツ: Web パーツ」を参照してください。
ユーザー セグメンテーション機能の SharePoint サイトへの追加の概要
図 1 に、ユーザー セグメンテーション機能を SharePoint サイトに追加する基本手順を示します。
図 1. ユーザー セグメンテーション機能を SharePoint サイトに追加する手順
用語セットを作成する
用語とは、SharePoint のアイテムに関連付けできる単語または語句のことです。 用語セットとは、関連する用語のコレクションのことです。 詳細については、「SharePoint Server 2013 の管理されたメタデータの概要」を参照してください。 用語セットは、SharePoint 用語ストア管理ツールで作成することも、プログラムによって作成することもできます。
注:
用語ストア管理ツールを使用して用語セットを作成する方法の詳細については、次のトピックを参照してください。>用語セットで用語セット>を作成して管理する
Microsoft.SharePoint.Taxonomy で公開されている型を使用して、プログラムで用語セットを作成できます。 次のコード例は、 TermSet オブジェクトを作成し、 NavigationTermSet を取得する方法を示しています。 次に、 TermSet 内に Term オブジェクトを作成します。 最後に、 TermStore に対するこれらの変更をコミットし、ナビゲーションに使用できるように TermSet をロードします。
用語セットに追加した用語ごとに一意の識別子が付与されます。 この識別子は、 コンテンツ検索 Web パーツ にユーザー セグメントを認識させるためのキーです。
static void CreateNavigationTermSet(string siteUrl)
{
using (SPSite site = new SPSite(siteUrl))
{
using (SPWeb web = site.OpenWeb())
{
TaxonomySession taxonomySession = new TaxonomySession(site);
taxonomySession.UpdateCache();
TermStore termStore = taxonomySession.DefaultSiteCollectionTermStore;
// Create a TermSet object in a default site collection term group.
Group siteCollectionGroup = termStore.GetSiteCollectionGroup(site, createIfMissing: true);
TermSet termSet = siteCollectionGroup.CreateTermSet("Navigation Demo", Guid.NewGuid(), lcid: 1033);
// Obtain navigation term set.
NavigationTermSet navigationTermSet = NavigationTermSet.GetAsResolvedByWeb(termSet, web, "GlobalNavigationTaxonomyProvider");
// Create a term that points to a SharePoint page set at the term set level of hierarchy.
NavigationTerm term1 = navigationTermSet.CreateTerm("Term 1", NavigationLinkType.FriendlyUrl, Guid.NewGuid());
// Create a term that points to an already existing URL outside of SharePoint.
NavigationTerm term2 = navigationTermSet.CreateTerm("Term 2", NavigationLinkType.SimpleLink, Guid.NewGuid());
term2.SimpleLinkUrl = "http://www.bing.com/";
// Create a term that points to an existing SharePoint page.
NavigationTerm term3 = navigationTermSet.CreateTerm("Term 3", NavigationLinkType.FriendlyUrl, Guid.NewGuid());
// Save all changes to the term store.
termStore.CommitAll();
}
}
}
ユーザー セグメンテーション用のカスタム Web パーツを作成する
Visual Studio 2012 で、SharePoint カテゴリの視覚的 Web パーツ テンプレートを使用してカスタム Web パーツを作成します。 カスタム Web パーツは 、Content Search Web パーツ オブジェクトから継承する必要があります。
注:
この記事では、SharePoint で Web パーツを開発した経験があることを前提としています。 Web パーツの開発の詳細については、「文書パーツ: Web パーツ」を参照してください。
ユーザー セグメンテーション ロジックを備えたカスタム Web パーツを構成する
カスタム Web パーツでは、メソッドまたはOnInit()
メソッドをOnLoad()
再実装して、カスタム ロジックを実行できます。 どちらの方法も、 Content Search Web パーツ オブジェクトのプロパティを設定またはカスタマイズする場合に便利です。
例 1: Male および Female ユーザー セグメントを SharePoint サイトに追加する
Male および Female ユーザー セグメントを追加するには、次のコードに示すように OnLoad()
メソッドを再実装します。
protected override void OnLoad(EventArgs e)
{
if (this.AppManager != null)
{
if (this.AppManager.QueryGroups.ContainsKey(this.QueryGroupName) && this.AppManager.QueryGroups[this.QueryGroupName].DataProvider != null)
{
this.AppManager.QueryGroups[this.QueryGroupName].DataProvider.BeforeSerializeToClient += new
BeforeSerializeToClientEventHandler(AddMycustomProperties);
}
}
base.OnLoad(e);
}
対応する AddMycustomProperties メソッドは、次のコードのようになります。
private void AddMycustomProperties(object sender, BeforeSerializeToClientEventArgs e)
{
DataProviderScriptWebPart dp = sender as DataProviderScriptWebPart;
string gender = (string)Page.Session["DataProvider.Gender"];
// Depends on what your DataProvider is: Facebook, LinkedIn, etc.
if (dp != null && gender != null)
{ try
{
// Set property to male or female GUID.
if (gender.CompareTo("female") == 0)
{
dp.Properties["TermSetName"] = new String[] { "TermUniqueIdentifier" };
// E.g. 47ba9139-a4c5-4ff0-8f9a-2864be32da92
}
else if(gender.CompareTo("male") == 0)
{
dp.Properties["UserSegmentTerms"] = new String[] { "TermUniqueIdentifier" };
// E.g. f5bf2195-2170-4b11-a018-a688a285e579
}
}
catch (ArgumentException exp)
{
// Do something with the exception.
}
}
}
例 2: エンドユーザーが使用している Web ブラウザーの種類に基づいたユーザー セグメントを作成する
エンドユーザーが使用している Web ブラウザーの種類に基づいてユーザー セグメントを作成して、SharePoint サイトを表示するには、次のコードに示すように OnLoad メソッドを再実装します。
protected override void OnLoad(EventArgs e)
{
if (this.AppManager != null)
{
if (this.AppManager.QueryGroups.ContainsKey(this.QueryGroupName) && this.AppManager.QueryGroups[this.QueryGroupName].DataProvider != null)
{
this.AppManager.QueryGroups[this.QueryGroupName].DataProvider.BeforeSerializeToClient += new
BeforeSerializeToClientEventHandler(AddMycustomProperties);
}
}
base.OnLoad(e);
}
AddMycustomProperties メソッドのコードは、次に示す例のようになります。
private void AddMycustomProperties(object sender, BeforeSerializeToClientEventArgs e)
{
DataProviderScriptWebPart dataProvider = sender as DataProviderScriptWebPart;
SPSite site = SPContext.Current.Site;
TaxonomySession session = new TaxonomySession(site);
TermStore defaultSiteCollectionStore = session.DefaultSiteCollectionTermStore;
List<string> userSegmentTerms = new List<string>();
var userAgentparts = Page.Request.UserAgent.Split(new char[] { ';', '(', ')' });
foreach (var part in userAgentparts)
{
var entry = part.Trim();
var terms = termStore.GetTermsWithCustomProperty("UserAgent", entry, false);
if (terms.Count > 0)
{
userSegmentTerms.Add(terms[0].Id.ToString());
}
}
dataProvider.Properties["UserSegmentTerms"] = userSegmentTerms.ToArray();
}
カスタム Web パーツを SharePoint Web パーツ ギャラリーにアップロードする
カスタム Web パーツをページで使用するには、Web パーツを SharePoint Web パーツ ギャラリーにアップロードする必要があります。
SharePoint Web Part Galleryで [ サイトの設定] を選択し、[ Web デザイナー ギャラリー] で [ Web パーツ] を選択します。 [ ファイル] タブで、[ ドキュメントのアップロード] を選択します。
ユーザー セグメントに応じて特定のアクションを実行するためのクエリ ルールを追加する
クエリ ルールは、ユーザーが検索しようとする対象にインテリジェントに対応することによって、検索結果の関連性を向上させるようにクエリを変換します。 クエリ ルールでは、条件と関連付けられたアクションを指定します。 クエリがクエリ ルールの条件を満たすと、検索結果の絞り込みや結果の表示順の変更など、検索結果の関連性を向上させるためにルールで指定されたアクションが実行されます。
ユーザー セグメンテーションを実装する際に、クエリ ルールを使用して、定義したユーザー セグメント用の条件とアクションを定義します。 エンド ユーザーが特定のユーザー セグメントの一部である場合、クエリ ルールがアクティブになり、 コンテンツ検索 Web パーツ には、その特定のユーザー セグメントに合わせて調整されたコンテンツが表示されます。
特定のユーザー セグメントに対してアクティブになるクエリ ルールを作成するには
[ サイトの設定] にある発行サイト コレクションで [ サイト コレクションの管理] を選択し、[ 検索クエリ ルール] を選択します。
検索先を選択し、[ 新しいクエリ ルール] を選択します。
[ ルール名] フィールドにルール名を入力します。 [ コンテキスト] をクリックして展開します。
[ クエリはこれらのユーザー セグメントごとに実行されます] セクションで [ これらのユーザー セグメントのいずれか] を選択し、[ ユーザー セグメントの追加] をクリックします。
[ タイトル] フィールドに、このユーザー セグメントのクエリ ルールの名前を入力します。 [ ユーザー セグメントの用語の追加] を選択します。
[ 用語ストアからインポートする] ダイアログ ボックスで、[ Managed Metadata Service] を展開します。 [サイト コレクション] で、「用語セットを作成する」で定義済みのユーザー セグメンテーション用語を含む用語セットを探します。 このクエリ ルールを適用するユーザー セグメントを選択します。 [ 保存] をクリックします。
[ ユーザー セグメントの追加] ダイアログ ボックスで、ユーザー セグメントの名前を入力します。
これでクエリ ルールがユーザー セグメントにマッピングされ、結果的にユーザー セグメントの用語にマッピングされます。
[ クエリの条件] で [ 条件の削除] を選択します。
これは、 コンテンツ検索 Web パーツ で構成されたクエリがクエリ条件として機能することを指定します。
クエリ ルールによって実行される、対応するアクションを設定します。 [ アクション] セクションで、クエリ ルールの結果として実行される、対応するアクションを選択します。 [ 昇格した結果の追加] または [ 結果のブロックを追加] を選択できます。
クエリ ルールを保存します。
実行するアクションに応じて、その他のユーザー セグメントに対して手順 1. ~ 10. を繰り返します。
カスタム Web パーツを SharePoint ページに追加してクエリ ルールを表示するように設定する
カスタム Web パーツを SharePoint ページに追加する必要があります。
カスタム Web パーツを追加するには
カテゴリ ページに移動し、[ ページの編集] を選択して、[ ページ テンプレートの編集] を選択します。
ページの上部セクションで [ Web パーツの追加] を選択します。 次に、Web パーツの右上隅にあるドロップダウン メニューからカスタム Web パーツを選択します。
[Web パーツの編集] をクリックします。
[ 設定] セクションを展開し、[ 結果テーブル] フィールドで [ SpecialTermResults] を選択します。
設定を保存します。