使用搜索过滤PXselector

时间:2017-03-15 20:59:23

标签: acumatica

我有一个使用我声明的自定义dac的自定义网格。最初我将PXselector属性设置为POOrder.orderNbr

使用此选择器可以在网格选择器中抓取所有POOrders

 [PXDBString(50, IsKey = true, IsUnicode = true, InputMask = "")]
    [PXSelector(typeof(POOrder.orderNbr))]
    [PXUIField(DisplayName = "Po#")]
    public string Po { get; set; }

    public class po : IBqlField { }

enter image description here

但我希望选择器能够过滤出现在文档详细信息 - > POReceiptLine 上的POOrders。我尝试使用搜索进行过滤,但只获得收据上的最低值POOrder.ordnbr。下面的图片应该说明我的意思。我希望它显示所有POOrder.orderNbr,但它只检索第一个最低值的顺序。

[PXDBString(50, IsKey = true, IsUnicode = true, InputMask = "")] [PXSelector(typeof(Search<POOrder.orderNbr,Where<POOrder.orderNbr,Equal<Current2<POReceiptLine.pONbr>>>>))] [PXUIField(DisplayName = "Po#")] public string Po { get; set; } public class po : IBqlField { }

Document Details

Grid with only lowest order

2 个答案:

答案 0 :(得分:3)

我相信如果你内部加入POReceiptLine DAC,然后聚合相关的采购订单以消除可能的重复,那会更好:

[PXSelector(typeof(Search5<POOrder.orderNbr, 
    InnerJoin<POReceiptLine, On<POReceiptLine.pOType, Equal<POOrder.orderType>,
        And<POReceiptLine.pONbr, Equal<POOrder.orderNbr>,
        And<POReceiptLine.receiptNbr, Equal<Current<POReceipt.receiptNbr>>>>>>,
    Aggregate<GroupBy<POOrder.orderType,
        GroupBy<POOrder.orderNbr>>>>))]

答案 1 :(得分:2)

选择器中的主要问题是您正在寻找POOrder,其中订单号等于当前的收据行。这意味着,根据所选的行,该值将更改,但始终只会产生一个结果。然后,解决方案是将条件更改为“采购收据”文档。

为此,您有两种选择。您可以直接搜索POReceiptLine.poNbr,但是您的选择器将显示该表中的列,或者您将POOrder加入POReceiptLine。

  1. 搜索POReceiptLine
  2. [PXSelector(typeof(Search<POReceiptLine.pONbr,
        Where<POReceiptLine.receiptType,
            Equal<Optional<POReceipt.receiptType>>,
        And<POReceiptLine.receiptNbr,
            Equal<Optional<POReceipt.receiptNbr>>>>>), DirtyRead = true)]
    
    1. 搜索POOrder
    2. [PXSelector(typeof(Search2<POOrder.orderNbr,
              InnerJoin<POReceiptLine, On<POReceiptLine.pOType,
                  Equal<POOrder.orderType>,
              And<POReceiptLine.pONbr,
                  Equal<POOrder.orderNbr>>>>,
              Where<POReceiptLine.receiptType,
                  Equal<Optional<POReceipt.receiptType>>,
              And<POReceiptLine.receiptNbr,
                  Equal<Optional<POReceipt.receiptNbr>>>>>))]
      

      另请注意参数DirtyRead = true。此参数将告诉选择器在缓存中获取它的信息,而不仅仅是从数据库中获取信息。因为您正在从同一页面中选择某些内容,所以在能够选择该记录之前,您需要保存整个文档。不幸的是,它不适用于第二个选项,因为Join是在数据库级别完成的。