2013-02-12 2 views
0

Ektron 801 SP1сортировать типы содержимого Ektron

Я использую следующий код для получения некоторого содержимого смарт-формы. Могу ли я предварительно сортировать (используя OrderByField?), Прежде чем я выберу 20 строк? Я сортирую член списка, но это после факта и рода бесполезно. Что мне не хватает?

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); 
+0

В каком поле вы занимаетесь? Поле contentdata, поле интеллектуальной формы, поле метаданных и т. Д.? Знание может повлиять на ответ. – egandalf

+0

В одном случае мне нужно отсортировать по контенту, а в другом случае - данные смартформа – zkent

+0

Однако последний случай - тот, который мне больше всего нужен. – zkent

ответ

1

У меня есть хорошие новости и плохие новости для вас.

Во-первых, хорошие новости. Вы можете сортировать по свойствам контента с объектом Criteria до вы вытаскиваете 20 предметов. Вы захотите использовать свойства OrderByField и OrderByDirection для критериев.

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

Плохие новости возникают при попытке заказать предметы на основе полей в интеллектуальной форме. Вы можете использовать , используя API IndexSearch, но так как Ektron 8.0 * все еще полагается на службу индексирования Microsoft, я не поклонник этого подхода и не имею никакого кода для обмена. Если вы решите пойти по этому маршруту, предпосылка заключается в использовании поиска для возврата идентификаторов содержимого в правильном порядке, а затем используйте критерии, как вы, для получения предметов с этими идентификаторами.

Что вы можете сделать может делать с помощью 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 для получения идентификаторов в правильном порядке, а затем ContentManager (или ContentTypeManager), чтобы получить элементы. Я использовал этот подход несколько раз, хотя и не со Smart Forms. Ваш лучший результат будет получен от обновления до 8.6 и Microsoft Search Server и использования обоих API вместе для получения каждой страницы данных. При этом фактически было бы почти тривиально в этом случае смешивать в расширенных параметрах поиска и фильтрации, а также с новыми API поиска.

+0

Это в основном подход, который я взял, но ваш более элегантный :) – zkent