2013-02-12 43 views
0

Ektron 801 SP1sort Ektron內容類型

我正在使用下面的代碼來獲取一些智能表單內容。在獲取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); 
+0

你在什麼領域排序? contentdata字段,智能表單字段,元數據字段等?知道會影響答案。 – egandalf 2013-02-12 13:31:13

+0

在一種情況下,我需要根據contentdata進行排序,而在另一種情況下,smartform數據 – zkent 2013-02-12 15:43:12

+0

然而,後一種情況是我最需要的一種情況。 – zkent 2013-02-12 18:50:38

回答

1

我對你有好消息和壞消息。

首先,好消息。您可以按照內容屬性對之前的條件對象進行排序,然後在之前抽取20個項目。您需要使用條件的OrderByField和OrderByDirection屬性。試圖訂購基礎上,智能表中的字段項目時

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

壞消息來了。你可能能夠使用IndexSearch API來做到這一點,但由於Ektron 8.0 *仍然依賴微軟的索引服務,我不是那種方法的粉絲,也沒有任何代碼可以共享。如果您選擇走這條路線,前提是使用搜索以正確的順序返回內容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 for 8.5及更高版本。這具有更強大得多的API,並且在速度和可靠性方面表現出色(無論在速度還是可靠性方面)。前提將保持與IndexSearch相同,使用Search以正確的順序獲取ID,然後使用ContentManager(或ContentTypeManager)獲取項目。我已經多次使用這種方法,儘管沒有專門針對Smart Forms。您的最佳結果將來自升級到8.6和Microsoft Search Server,並一起使用這兩個API來獲取每頁數據。這樣做的話,混合高級搜索和過濾選項以及新的搜索API實際上幾乎是微不足道的。

+0

這基本上是我採取的方法,但你的更優雅:) – zkent 2013-02-14 17:47:57