默认情况下,Sitecore工作箱显示项目名称,并按项目名称对项目列表进行排序。
在我的一个previous posts中,我设法将项目名称更改为自定义字段。
现在我需要按此字段对工作箱进行排序。我怎么能这样做?
答案 0 :(得分:4)
假设您已经拥有自己的WorkboxForm
实现,如您在问题中链接的帖子中所述,您需要更改DisplayState
方法的代码。
此方法的DataUri[] items
流入参数为您提供处于给定工作流状态的所有项目的列表。您需要从此参数中检索所有 Sitecore 项并对其进行排序:
DataUri[] items = new DataUri[0];
List<Item> sitecoreItems = items
.Select(uri => Context.ContentDatabase.Items[uri])
.OrderBy(item => item["YourCustomField"])
.ToList();
并使用新列表选择当前页面项。此解决方案未针对性能进行优化 - 您需要从数据库获取给定状态中的每个项目,以便您可以访问自定义字段。
答案 1 :(得分:1)
在研究Sitecore workbox modifications之后,我遇到了以下解决方案。
步骤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;
}
此方法针对性能进行了优化。