2016-07-29 84 views
1

我有一個由PXAction調用的存儲過程。我知道這是針對Acumatica使用存儲過程的最佳實踐,但我還沒有爲我的目標找到替代解決方案。存儲過程根據決定單位價格的breakQuantity評估每個行項目及其關聯的價格類別。如果多個項目屬於相同的價格等級==或超過中斷數量,則單價會降低。添加新SOLine時動態更新所有SOLine物品單價

我開始與什麼是行更新

protected virtual void SOLine_RowUpdating(PXCache sender, PXRowUpdatingEventArgs e) 
    { 
     SOLine row = (SOLine)e.Row; 
     formalizeOrderTotal(row); 
    } 

然後在我的formalizeOrderTotal功能它執行上SOLine in lines.Select() foreach循環加起來訂單數量。作爲一項測試,我只是嘗試將所有訂單數量合計並將其應用於每個訂單項。這隻會在刷新後更新,否則會將存儲過程移到c#function/Acumatica事件處理程序中。

如果任何人有一些建議更新緩存中的所有行項目的好方法,如果您可以提供一些輸入,將不勝感激。

+0

'這隻刷新後更新',你的意思是刷新後的屏幕/網格? – Hybridzz

+0

你是對的!對不起,我沒有指定。 – JB90

+0

Base.Transactions.View.RequestRefresh();將解決您的問題。 – Hybridzz

回答

1

嘗試使用Base.Transactions.View.RequestRefresh();這將要求網格刷新自己。在這個例子中,我將每行數量設置爲網格中存在的SOLines的數量。

using PX.Data; 
namespace PX.Objects.SO 
{ 

    public class SOOrderEntry_Extension:PXGraphExtension<SOOrderEntry> 
    { 
     protected virtual void SOLine_RowUpdating(PXCache sender, PXRowUpdatingEventArgs e) 
     { 
      SOLine row = (SOLine)e.Row; 
      formalizeOrderTotal(row); 
     } 

     private void formalizeOrderTotal(SOLine row) 
     { 
      foreach (SOLine line in Base.Transactions.Select()) 
      { 
       if(line.Qty == Base.Transactions.Select().Count) 
       { 
        continue; 
       } 

       line.Qty = Base.Transactions.Select().Count; 
       Base.Transactions.Update(line); 
       Base.Transactions.View.RequestRefresh(); 
      } 
     } 
    } 
} 
+0

謝謝Simon,我現在就試試! – JB90

+0

它解決了!我將嘗試使用RequestRefresh()來嘗試應用價格更新。謝謝西蒙。 – JB90