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 オブジェクトを使用してコンテンツ プロパティで並べ替えることができます。基準の OrderByField および OrderByDirection プロパティを使用する必要があります。

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

悪いニュースは、スマート フォーム内のフィールドに基づいてアイテムを注文しようとしたときに発生します。IndexSearch API を使用してこれを行うことができるかもしれませんが、Ektron 8.0* は依然として Microsoft の Indexing Service に依存しているため、私はそのアプローチのファンではなく、共有するコードはありません。その方法を選択した場合、前提として、検索を使用してコンテンツ ID を正しい順序で返し、基準をそのまま使用して、それらの ID を持つアイテムを取得します。

API だけでできることは、ロード後に Microsoft LINQ を使用してデータを並べ替えることですが、正しい結果を正しい順序で取得するには、最初にすべてのアイテムをロードする必要があります (そして、パフォーマンスへの影響を最小限に抑えるためにそれらをキャッシュするのが理想的です)。例として私のコンテンツ タイプの 1 つを使用していますが、アイデアは理解できるはずです。

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

これは理想的ではありませんが、小規模な (数百、おそらく数千、数十ではない) データ セットでは非常にうまく機能します。

2 つ目の良いニュースは、Ektron がバージョン 8.5 以降で Microsoft Search Server を使用していることです。これにははるかに堅牢な API があり、(速度と信頼性の両方の点で) 素晴らしいパフォーマンスを発揮します。前提は実際には IndexSearch の場合と同じままで、Search を使用して正しい順序で ID を取得し、次に ContentManager (または ContentTypeManager) を使用してアイテムを取得します。特にスマートフォームではありませんが、私はこのアプローチを数回使用しました。8.6 と Microsoft Search Server にアップグレードし、2 つの API を一緒に使用して各ページのデータを取得すると、最良の結果が得られます。そうすることで、その時点で、新しい検索 API と同様に高度な検索とフィルター オプションを混在させることは、実際にはほとんど簡単になります。

于 2013-02-13T17:01:55.467 に答える