我有一个自定义处理屏幕,其中包含一个为用户提供的下拉框。下拉列表用于提供数据视图委托中使用的排序顺序。我选择数据视图委托的原因是查询完全取决于所选的排序顺序。根据选择,查询必须排序结果以及其他逻辑,然后将结果集发布到网格。我使用switch语句来评估下拉列表中选择的选择。目前,结果集返回查询的结果。但排序顺序基于声明的数据视图。我的order by子句在switch语句中没有被使用。我相信默认情况下,排序顺序基于定义数据视图中的键。如何动态重新排序查询结果?
switch (filter.ProcessOrder)
{
//new[] { "O", "P", "R", "B" },
//new[] { "By Order Date", "By Order Priority", "By Request Date", "By Backorder Only" }
case "O":
foreach (PXResult<SOOrder, SOOrderShipment> res in PXSelectJoin<SOOrder,LeftJoin<SOOrderShipment, On<SOOrder.orderNbr, Equal<SOOrderShipment.orderNbr>, And<SOOrder.orderType, Equal<SOOrderShipment.orderType>>>>,
Where<SOOrderShipment.shipmentNbr, IsNull, And<SOOrder.orderType, Equal<OrderTypes.salesOrder>>>,
OrderBy<Desc<SOOrder.orderDate>>>.Select(this))
{
SOOrder order = (SOOrder)res;
SOOrderShipment oShip = (SOOrderShipment)res;
//ASSIGN VALUES OR EXCLUDE FRON RESULTSET BASED ON CRITERIA TO BE DEFINED
yield return new PXResult<SOOrder, SOOrderShipment>(order, oShip);
}
break;
答案 0 :(得分:1)
视图委托返回的结果列表始终根据视图选择中指定的条件进行排序。正如您所猜测的那样,如果您未在select中指定任何排序条件,则结果将按键排序。
然而,有一种默认方法可以解决这个问题。您可以使用代理中OrderByNew
或PXSelectBase
的{{1}}方法更改视图所需的排序条件,如下所示:
PXView
使用上面的子句但在不同的public PXSelect<SOOrder> Orders;
public virtual IEnumerable orders()
{
switch(filter.ProcessOrder)
{
case "O": // by Order Date
foreach (PXResult<SOOrder, SOOrderShipment> res in PXSelectJoin<SOOrder,LeftJoin<SOOrderShipment, On<SOOrder.orderNbr, Equal<SOOrderShipment.orderNbr>, And<SOOrder.orderType, Equal<SOOrderShipment.orderType>>>>,
Where<SOOrderShipment.shipmentNbr, IsNull, And<SOOrder.orderType, Equal<OrderTypes.salesOrder>>>,
OrderBy<Desc<SOOrder.orderDate>>>.Select(this))
{
SOOrder order = (SOOrder)res;
SOOrderShipment oShip = (SOOrderShipment)res;
//ASSIGN VALUES OR EXCLUDE FRON RESULTSET BASED ON CRITERIA TO BE DEFINED
yield return new PXResult<SOOrder, SOOrderShipment>(order, oShip);
}
// !!!
Orders.OrderByNew<SOOrder.OrderDate>();
// !!!
break;
// Other cases
}
}
中使用不同的字段,您可以获得所需的结果。
答案 1 :(得分:0)
我有一个类似的案例,
我做的是,添加了一个名为SortOrder的新的未绑定的int列,我手动对结果进行排序并从委托中返回。
#region SortOrder
public abstract class sortOrder : PX.Data.IBqlField
{
}
protected Int32? _SortOrder;
[PXDefault(TypeCode.Int32, "5")]
[PXInt()]
public virtual Int32? SortOrder
{
get
{
return this._SortOrder;
}
set
{
this._SortOrder = value;
}
}
#endregion
使用基于新列的排序声明视图
public PXSelect<Something,
Where<True, Equal<False>>, OrderBy<Asc<Something.sortOrder>>> SomethingElse; // My delegate will give the result always
在委托中,获取结果并设置结果集记录的sortorder值并返回结果。
它正在工作^^