搜索托管导航术语集

时间:2014-03-19 17:15:02

标签: sharepoint sharepoint-2013

是否有办法使用服务器对象模型

通过guid搜索/查找特定的托管导航术语

此代码

var termGuid = new Guid(fieldValue.TermGuid);
        var navTermSet = TaxonomyNavigation.GetTermSetForWeb(SPContext.Current.Web, StandardNavigationProviderNames.GlobalNavigationTaxonomyProvider, true);
        if (navTermSet == null) return String.Empty;
        var navTerm = navTermSet.Terms.Where(c => c.Id == termGuid).FirstOrDefault();

        if (navTerm == null) return String.Empty;
        return navTerm.GetWebRelativeFriendlyUrl();

只有当这个词位于第一级时才有效,如果它在层次结构中更深层次却找不到它,而且我没有看到任何其他机制让我得到一个扁平的术语列表

看起来像API的严重限制

1 个答案:

答案 0 :(得分:0)

当你一段时间并且你不知道它有多深,并且它是父母或孩子时,这变得更加复杂。如果API没有直接获取所有条款的方式,无论他们是孩子还是父母,我想你最好的选择是通过循环所有术语+孩子来自己列出它们然后找到它们由Guid。

下面的代码可用于列出所有条款。从this article开始,代码将被简化并缩短。

List<Term> allTerms = new List<Term>();

void BuildTermList()
{
    SPSite thisSite = SPContext.Current.Site;
    TaxonomySession session = new TaxonomySession (thisSite);

    foreach (TermStore termStore in session.TermStores)
    {
        foreach (Group group in termStore.Groups)
        {
            foreach (TermSet termSet in group.TermSets)
            {
                foreach (Term term in termSet.Terms)
                {
                    AddTermSet(term);
                }
            }
        }
    }
}

void AddTermSet(Term term)
{
    allItems.Add(term);

    foreach (Term t in term.Terms)
        AddTermSet(t);
}

现在您已拥有该列表,您可以查询它。希望这会有所帮助。