如何过滤 ProcessOrders 流程屏幕中的记录

How can I filter the records in the ProcessOrders process screen

我需要向“流程订单”屏幕网格添加一个过滤器,这样只有未付余额为 0 的订单才会显示,这取决于被选中的名为 'Must Have Payment' 的过滤器区域的附加复选框。我以为我可以通过在订单视图中添加一个 where 子句来实现它,但这没有用。

    [PXFilterable]
    public PXFilteredProcessing<SOOrder, SOOrderFilter,
                                Where<SOOrder.unpaidBalance, NotEqual<Zero>,
                                Or<Current<SOOrderFilterExt.mustHavePayment>, Equal<False>>>> Orders;

我确定我做错了,因为所有订单都显示了,而不仅仅是我添加此更改之前的 'Open' 个订单。我想覆盖视图委托并修改它以将我的过滤器/条件添加到返回的行,但我无法覆盖此方法 - 至少我可以告诉。

将此自定义过滤器限制放入该网格的 select 的最佳方法是什么?

非常感谢...

在这种特定情况下,覆盖数据视图委托可能不是最好的主意。

我注意到 AddCommonFilters() 方法不是私有的(在数据视图委托中使用),所以我认为您可以尝试覆盖此方法,调用 Base 方法,然后注入您的自定义代码以将您的查询过滤器包含在其中for each 上使用的主要查询。

也许这是您可以用来实现过滤的东西,请参见下面的代码片段:

public class SOCreateShipment_Extension : PXGraphExtension<SOCreateShipment>
{
    #region Event Handlers
    public delegate void AddCommonFiltersDelegate(SOOrderFilter filter, 
       PXSelectBase<SOOrder> cmd);
    [PXOverride]
    public void AddCommonFilters(SOOrderFilter filter, PXSelectBase<SOOrder> cmd, AddCommonFiltersDelegate baseMethod)
    {
        baseMethod(filter,cmd);
        //Add your custom code here

        if (Yourcondition)
        {
           cmd.WhereAnd<Where<YOURFILTERINGCondition>>>>();
        } 
     }
........................

如果需要,还请查看 AlterFilters() 方法。