Ektron分类和库项目(第9版)

时间:2013-11-25 04:00:53

标签: c# asp.net ektron

我们最近从Ektron 8.6升级到9.0(Ektron CMS400.NET,版本:9.00 SP2(Build 9.0.0.249))。

我有一些代码(下面),我们用它来显示分类中项目的链接。在8.6下,这将显示库项目是否已添加到分类中。从9.0开始,它不再显示库项目。它仍适用于DMS项目和普通页面(Ektron中的所有头等内容)。

private List<ContentData> getTaxonomyItems(long TaxonomyId)
{
    listContentManager = new ContentManager();
    criteria = new ContentTaxonomyCriteria(ContentProperty.Id, EkEnumeration.OrderByDirection.Ascending);

    criteria.PagingInfo = new Ektron.Cms.PagingInfo(400); // there's a lot of items and I don't want to page them.

    criteria.AddFilter(TaxonomyId, true); // this gets sub taxonomies too :)

    List<ContentData> contentList = listContentManager.GetList(criteria);

    return contentList;
}

(我想简单地告诉用户使用DMS而不是库,但我们有安全要求,我不知道我可以在DMS项目上强制执行安全性,就像我们可以使用库项目一样将webconfig文件放在库文件夹中。)

这是其他人经历过的错误吗? 或者我的代码是否有问题(升级到9.0时是否有API更改)?

感谢。

1 个答案:

答案 0 :(得分:2)

我最后通过电子邮件向悉尼发送了Ektron支持(我在澳大利亚),他们说:

  

我希望ContentManager只返回内容,而不是库   项目 - 必须是一个现已关闭的漏洞。分类是   要走的路。

所以我使用了他们提供的一些代码并提出了以下内容,这似乎有用......

private List<TaxonomyItemData> getTaxonomyItems(long TaxonomyId)
{
    List<TaxonomyItemData> list = new List<TaxonomyItemData>();

    TaxonomyManager taxManager = new TaxonomyManager(Ektron.Cms.Framework.ApiAccessMode.Admin);
    TaxonomyCriteria taxonomyCriteria = new Ektron.Cms.Organization.TaxonomyCriteria();
    taxonomyCriteria.AddFilter(Ektron.Cms.Organization.TaxonomyProperty.Path,
        Ektron.Cms.Common.CriteriaFilterOperator.StartsWith, GetTaxonomyPathById(TaxonomyId));
    List<TaxonomyData> TaxonomyDataList = taxManager.GetList(taxonomyCriteria);

    foreach (TaxonomyData taxd in TaxonomyDataList)
    {
        TaxonomyData taxTree = taxManager.GetTree(taxd.Path,
        1, // depth. doesn't seem to work. have to manually tranverse lower taxonomies.
        true, // include items
        null,
        Ektron.Cms.Common.EkEnumeration.TaxonomyType.Content,
        Ektron.Cms.Common.EkEnumeration.TaxonomyItemsSortOrder.taxonomy_item_display_order);

        foreach (TaxonomyItemData taxItem in taxTree.TaxonomyItems)
        {
            list.Add(taxItem);
        }
    }
    return list;
}

private static String GetTaxonomyPathById(long taxonomyId)
{
    TaxonomyManager tMgr = new TaxonomyManager();
    TaxonomyData tData = tMgr.GetItem(taxonomyId);
    if (tData != null)
    {
        return tData.Path;
    }
    return "";
}

此代码提取所有子分类的项目以及返回库项目。 一个问题是它为某些项目提取重复项,但这些项目很容易清理。

Ektron也告诉我......

  

TaxonomyManager.GetItem(“{path}”)是一种更有效的方法   类

这就是为什么我已经包含了GetTaxonomyPathById()方法(灵感来自这篇博文:http://www.nimbleuser.com/blog/posts/2009/iterating-through-ektron-content-in-multiple-taxonomies-via-directly-interfacing-with-search-indexing-services/