0

爱克创 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);
4

1 回答 1

1

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

首先,好消息。在拉出 20 个项目之前,您可以使用 Criteria 对象按 Content Properties 排序。您需要使用条件的 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 混合在一起实际上几乎是微不足道的。

于 2013-02-13T17:01:55.467 回答