我们最近从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更改)?
感谢。
答案 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/)