2017-03-15 166 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