2017-03-15 171 views
0

我有一个自定义的网格使用我已经声明的自定义dac。本来我有一个PXselector属性设置为POOrder.orderNbr使用搜索过滤PXselector

有了这个选择它抓住所有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

但我想选择来筛选出现POOrders在文档详细信息 - > POReceiptLine。我试图使用搜索进行过滤,但仅在收据上获得最低值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

+0

忘记在购物订单收据页面上添加此项 – JB90

回答

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>>>>))] 
+0

谢谢Ruslan!我会尝试你和菲利普给我的所有实施选项。我真的很感谢帮助。 – JB90

+0

我结束了使用这个实现,消除重复是我最初的目标以及选择器。再次感谢你们两位! – JB90

2

选择器中的主要问题是您正在寻找POOrder wh订单号码等于当前收货行。这意味着根据所选择的行,该值将会改变,但总是只会产生一个结果。那么解决方法就是将条件改为在Purchase Receipt文档上。

要做到这一点,你有两个选择。您可以直接搜索POReceiptLine.poNbr,但是您的选择器将显示该表中的列,或者您将POOrder加入POReceiptLine。

  1. 随着搜索上POReceiptLine
[PXSelector(typeof(Search<POReceiptLine.pONbr, 
    Where<POReceiptLine.receiptType, 
     Equal<Optional<POReceipt.receiptType>>, 
    And<POReceiptLine.receiptNbr, 
     Equal<Optional<POReceipt.receiptNbr>>>>>), DirtyRead = true)] 
  • 随着搜索上POOrder
  • [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是在数据库级完成的。

    +0

    感谢您解释两种实现之间的差异,这非常有帮助,我很感激。 – JB90