4

デフォルトでは、Sitecore ワークボックスはアイテム名を表示し、アイテム リストをアイテム名で並べ替えます。

これに関する以前の投稿の 1 つで、項目名をカスタム フィールドに変更することができました。

ここで、このフィールドでワークボックスを並べ替える必要があります。これどうやってするの?

4

2 に答える 2

4

質問でリンクした投稿で説明されているように、独自の実装が既にあると仮定するとWorkboxForm、メソッドのコードを変更する必要がありますDisplayState

このメソッドのDataUri[] itemsinflow パラメーターは、ワークフローの特定の状態にあるすべてのアイテムのリストを提供します。このパラメーターからすべてのSitecoreアイテムを取得して並べ替える必要があります。

DataUri[] items = new DataUri[0];
List<Item> sitecoreItems = items
    .Select(uri => Context.ContentDatabase.Items[uri])
    .OrderBy(item => item["YourCustomField"])
    .ToList();

そして、現在のページ項目を選択するために新しいリストを使用します。このソリューションは、パフォーマンスのために最適化されていません。カスタム フィールドにアクセスできるように、データベースから特定の状態のすべてのアイテムを取得する必要があります。

于 2013-04-19T07:41:23.927 に答える
1

Sitecore ワークボックスの変更を調べた後、次の解決策に出会いました。

ステップ 1 - GetItems メソッドを次のように変更します。

    private DataUri[] GetItems(WorkflowState state, IWorkflow workflow)
    {  
        if (workflow != null)
        {
            var items = workflow.GetItems(state.StateID);                
            Array.Sort(items, new Comparison<DataUri>(CompareDataUri));
            return items;
        }
        return new DataUri[] { };
    }

これが「CompareDataUri」メソッドです。

    private int CompareDataUri(DataUri x, DataUri y)
    {
        //Custom method written to compare two values - Dhanuka
        Item itemX = Sitecore.Context.ContentDatabase.GetItem(x);
        Item itemY = Sitecore.Context.ContentDatabase.GetItem(y);

        string m_sortField = "__Updated";
        bool m_descSort = false;

        var res = 0;

        res = string.Compare(itemX[m_sortField], itemY[m_sortField]);

        if (m_descSort)
        {
            if (res > 0)
                return -1;
            if (res < 0)
                return 1;
        }

        return res;
    }

このアプローチは、パフォーマンスのために最適化されています。

于 2013-05-02T09:51:42.673 に答える