Sitecore工作盒更改排序顺序

Sitecore工作盒更改排序顺序,sitecore,Sitecore,默认情况下,Sitecore workbox显示项目名称,并按项目名称对项目列表进行排序 在我的一个例子中,我成功地将项目名称更改为自定义字段 现在我需要按此字段对workbox进行排序。我该怎么做?假设您已经有了自己的WorkboxForm实现,如您在问题中链接的帖子所述,您需要更改DisplayState方法的代码 此方法的DataUri[]itemsinflow参数提供处于给定工作流状态的所有项的列表。您需要从此参数中检索所有Sitecore项目并对其进行排序: DataUri[] ite

默认情况下,Sitecore workbox显示项目名称,并按项目名称对项目列表进行排序

在我的一个例子中,我成功地将项目名称更改为自定义字段


现在我需要按此字段对workbox进行排序。我该怎么做?

假设您已经有了自己的
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();
DataUri[]items=newdatauri[0];
列出sitecoreItems=items
.Select(uri=>Context.ContentDatabase.Items[uri])
.OrderBy(项目=>item[“YourCustomField”])
.ToList();
并使用新列表选择当前页面项目。此解决方案没有针对性能进行优化-您需要从数据库中获取处于给定状态的每个项目,以便访问自定义字段。

研究后,我发现了以下解决方案

步骤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[] { };
    }
private DataUri[]GetItems(工作流状态,IWorkflow工作流)
{  
if(工作流!=null)
{
var items=workflow.GetItems(state.StateID);
排序(项,新比较(CompareDataUri));
退货项目;
}
返回新的DataUri[]{};
}
这就是“比较牛头”法

private int CompareDataUri(数据URI x,数据URI y)
{
//编写用于比较两个值的自定义方法-达努卡
Item itemX=Sitecore.Context.ContentDatabase.GetItem(x);
Item itemY=Sitecore.Context.ContentDatabase.GetItem(y);
字符串m_sortField=“\u更新”;
bool m_descSort=false;
var-res=0;
res=string.Compare(itemX[m_sortField],itemY[m_sortField]);
if(m_descSort)
{
如果(分辨率>0)
返回-1;
如果(res<0)
返回1;
}
返回res;
}
此方法针对性能进行了优化

    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;
    }