сортировать типы контента Ektron

Эктрон 801 СП1

Я использую следующий код для получения некоторого содержимого умной формы. Могу ли я выполнить предварительную сортировку (используя 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);

person zkent    schedule 12.02.2013    source источник
comment
По какому полю вы сортируете? Поле данных содержимого, поле смарт-формы, поле метаданных и т. д.? Знание может повлиять на ответ.   -  person egandalf    schedule 12.02.2013
comment
В одном случае мне нужно отсортировать по данным контента, а в другом случае по данным смарт-формы.   -  person zkent    schedule 12.02.2013
comment
Тем не менее, последний случай - тот, в котором я нуждаюсь больше всего.   -  person zkent    schedule 12.02.2013


Ответы (1)


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

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

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

Плохие новости приходят при попытке упорядочить элементы на основе полей в смарт-форме. Вы можете сделать это с помощью IndexSearch API, но, поскольку 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.

person egandalf    schedule 13.02.2013
comment
Это в основном подход, который я использовал, но ваш более элегантный :) - person zkent; 14.02.2013