デフォルトでは、Sitecore ワークボックスはアイテム名を表示し、アイテム リストをアイテム名で並べ替えます。
これに関する以前の投稿の 1 つで、項目名をカスタム フィールドに変更することができました。
ここで、このフィールドでワークボックスを並べ替える必要があります。これどうやってするの?
デフォルトでは、Sitecore ワークボックスはアイテム名を表示し、アイテム リストをアイテム名で並べ替えます。
これに関する以前の投稿の 1 つで、項目名をカスタム フィールドに変更することができました。
ここで、このフィールドでワークボックスを並べ替える必要があります。これどうやってするの?
質問でリンクした投稿で説明されているように、独自の実装が既にあると仮定するとWorkboxForm
、メソッドのコードを変更する必要がありますDisplayState
。
このメソッドのDataUri[] items
inflow パラメーターは、ワークフローの特定の状態にあるすべてのアイテムのリストを提供します。このパラメーターからすべてのSitecoreアイテムを取得して並べ替える必要があります。
DataUri[] items = new DataUri[0];
List<Item> sitecoreItems = items
.Select(uri => Context.ContentDatabase.Items[uri])
.OrderBy(item => item["YourCustomField"])
.ToList();
そして、現在のページ項目を選択するために新しいリストを使用します。このソリューションは、パフォーマンスのために最適化されていません。カスタム フィールドにアクセスできるように、データベースから特定の状態のすべてのアイテムを取得する必要があります。
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;
}
このアプローチは、パフォーマンスのために最適化されています。