SharePoint 中的用户细分

通过在 SharePoint 中结合使用术语集、内容搜索 Web 部件和查询规则,显示为定义的用户细分(例如,根据区域设置、兴趣、性别或引荐链接)量身定制的内容。 SharePoint 提供构建基块,用于根据最终用户的特定属性(例如,性别、居住地、兴趣或引荐链接),量身定制 SharePoint 网站上的显示内容。 这些用户属性分组称为“用户细分”。

在 SharePoint 中,许多方案都受益于此用户细分功能,如:

  • 根据最终用户的性别在页面上显示不同的横幅

  • 根据最终用户所在地区显示不同的折扣优惠

  • 根据最终用户的引荐链接(将最终用户带到你页面的网站)在页面上显示不同的文章。

若要在 SharePoint 中实现用户分段,需要做三件事情:为每个用户区段创建一个术语集,扩展内容搜索 Web 部件让其了解你的用户区段,然后使用查询规则执行每个用户区段特定的操作。

先决条件

开始在 SharePoint 中实现用户细分前,请务必先在开发环境中安装以下产品:

  • SharePoint

  • Visual Studio 2012

本文假定你具有在 SharePoint 中开发 Web 部件的经验。 有关开发 Web 部件的详细信息,请参阅 构建基块:Web 部件

向 ShaerPoint 网站添加用户区段功能的概述

图 1 显示向 ShaerPoint 网站添加用户区段功能的基本步骤。

图 1. 向 ShaerPoint 网站添加用户区段功能的步骤

用于添加用户区段功能的步骤

创建术语集

术语是可以与 SharePoint 项关联的字词或短语。 术语集是一组相关术语。 有关详细信息,请参阅 SharePoint 中的托管元数据概述。 可以通过 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 类别的 Visual Web 部件模板创建自定义 Web 部件。 自定义 Web 部件必须继承自 内容搜索 Web 部件 对象。

注意

本文假定你具有在 SharePoint 中开发 Web 部件的经验。 有关开发 Web 部件的详细信息,请参阅 构建基块:Web 部件

为自定义 Web 部件配置用户分段逻辑

在自定义 Web 部件中,可以重新实现 OnLoad() 方法或 OnInit() 方法来执行自定义逻辑。 这两种方法都可用于设置或自定义 内容搜索 Web 部件 对象的属性。

示例 1:向 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 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 浏览器类型的用户细分

若要创建基于最终用户浏览 SharePoint 网站时所用 Web 浏览器类型的用户细分,请重新实现 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 部件,需要将 Web 部件上载到 SharePoint Web 部件库

In the SharePoint Web Part Gallery, choose Site Settings, and then choose Web parts under Web Designer Galleries. On the Files tab, choose Upload Document.

添加根据用户细分执行特定操作的查询规则

查询规则通过智能反应用户可能尝试查找的内容来转换查询以提高搜索结果的相关性。 在查询规则中,您指定条件和相关操作。 当查询符合查询规则中的条件时,搜索系统会执行该规则中所指定的操作,从而提高搜索结果的相关性,例如缩小结果范围或更改结果显示的顺序。

在实现用户区段时,您使用查询规则来为已确定的用户区段定义条件和操作。 当最终用户是特定用户段的一部分时,查询规则将激活, 内容搜索 Web 部件 将显示为该特定用户段定制的内容。

创建可为特定用户区段激活的查询规则

  1. 在"网站设置"的发布网站集中,选择"网站集管理",然后选择"搜索查询规则"。

  2. 选择一个结果源,然后选择"新建查询规则"。

  3. 在"规则名称"字段中键入规则名称。 然后,单击以展开"上下文"。

  4. 在"查询由这些用户区段执行"部分下,选择"这些用户区段之一",然后单击"添加用户区段"。

  5. 在"标题"字段中,为此用户区段查询规则键入一个名称。 选择"添加用户区段术语"。

  6. 在“从术语库导入”对话框中,展开“Managed Metadata Service”。 在“网站集”下,找到保留您之前在创建术语集中定义的用户区段术语的术语集。 选择您要对其应用此查询规则的用户区段。 然后,单击“保存”

  7. 在“添加用户细分”对话框中,为用户细分命名。

    现在,您已将查询规则映射到用户区段,后者又映射到用户区段术语。

  8. 在"查询条件"下,选择"删除条件"。

    这指定在 内容搜索 Web 部件 中配置的查询将充当查询条件。

  9. 设置查询规则将执行的相应操作。 在"操作"部分下,选择您要将其作为查询规则结果的相应操作。 您可以选择"添加已升级的结果"或"添加结果块"。

  10. 保存查询规则。

  11. 根据您要执行的操作,对其他用户区段重复步骤 1 到 10。

向 SharePoint 页面添加自定义 Web 部件并将该部件配置为显示查询规则

需要向 SharePoint 页面添加自定义 Web 部件。

添加自定义 Web 部件

  1. 导航到类别页面,选择"编辑页面",然后选择"编辑页面模板"。

  2. 在页面顶部选择 “添加 Web 部件 ”。 然后,从 Web 部件右上角的下拉菜单中选择自定义 Web 部件。

  3. 单击“编辑 Web 部件”。

  4. 展开"设置"部分,并在"结果表"字段中,选择"SpecialTermResults"。

  5. 保存配置。

另请参阅