【问题标题】:sort Ektron content types对 Ektron 内容类型进行排序
【发布时间】:2013-02-12 04:16:23
【问题描述】:

Ektron 801 SP1

我正在使用以下代码来获取一些智能表单内容。我可以在获取 20 行之前进行预排序(使用 OrderByField 吗?)?我正在对成员列表进行排序,但这是事后的事,有点没用。我错过了什么?

Criteria<ContentProperty> criteria1 = new Criteria<ContentProperty>();
criteria1.AddFilter(ContentProperty.XmlConfigurationId, CriteriaFilterOperator.EqualTo, MEMBERS_ID);
criteria1.PagingInfo = new PagingInfo(20);

List<ContentType<member>> memberslist = contentTypeManager.GetList(criteria1);

【问题讨论】:

  • 您按哪个字段排序?内容数据字段、智能表单字段、元数据字段等?知道会影响答案。
  • 在一种情况下我需要按 contentdata 排序,在另一种情况下需要 smartform 数据
  • 不过,后一种情况是我最需要的。

标签: asp.net ektron


【解决方案1】:

我有好消息和坏消息要告诉你。

首先,好消息。您可以在提取 20 个项目之前使用 Criteria 对象按内容属性进行排序。您需要使用条件的 OrderByField 和 OrderByDirection 属性。

criteria.OrderByField = ContentProperty.DateCreated;
criteria.OrderByDirection = EkEnumeration.OrderByDirection.Descending;

当您尝试根据智能表单中的字段订购商品时,坏消息来了。您也许可以使用 IndexSearch API 来做到这一点,但由于 Ektron 8.0* 仍然依赖于 Microsoft 的索引服务,我不喜欢这种方法,也没有任何代码可以分享。如果您选择走那条路线,前提是使用搜索以正确的顺序返回内容 ID,然后按照您的原样使用条件来获取具有这些 ID 的项目。

可以仅使用 API 所做的是在加载数据后使用 Microsoft LINQ 对数据进行排序,但为了以正确的顺序获得正确的结果,您必须首先加载所有项目 (并理想地缓存它们以最大程度地减少性能影响)。我以我的一种内容类型为例,但你应该明白了。

var membersList = new List<SlideBannerType>();
var sortedList = membersList.OrderBy(s => s.EnableAlternateText);
var firstpage = sortedList.Take(20);
var nextpage = sortedList.Skip(20).Take(20);

这并不理想,但它确实适用于较小的(数百个,可能是数千个,但不是数十个)数据集。

不过,第二个好消息是 Ektron 将 Microsoft Search Server 用于 8.5 及更高版本。这有一个更强大的 API,并且性能出色(在速度和可靠性方面)。前提实际上与 IndexSearch 相同,使用 Search 以正确的顺序获取 ID,然后使用 ContentManager(或 ContentTypeManager)获取项目。我已经多次使用这种方法,尽管不是专门针对 Smart Forms。最好的结果来自升级到 8.6 和 Microsoft Search Server 并同时使用这两个 API 来获取每一页数据。这样做时,将高级搜索和过滤选项以及新的搜索 API 混合在一起实际上几乎是微不足道的。

【讨论】:

  • 这基本上是我采用的方法,但你的更优雅:)
猜你喜欢
  • 1970-01-01
  • 2016-05-17
  • 2011-01-24
  • 1970-01-01
  • 2012-05-16
  • 2013-06-07
  • 1970-01-01
  • 2011-03-13
  • 2015-07-09
相关资源
最近更新 更多