2017-08-25 82 views
0

在創建銷售訂單屏幕我想顯示在文檔細節耳線的總數GI。任何人都可以提出一種方法來開始實施這個?Acumatica GI定製 - 加共線列

包括胃腸道的自定義字段後,它不使用數據填充列。

用於打印行數的代碼如下這Adding custom button in acumatica

public void SOOrder_UsrTotalTransactions_FieldSelecting(PXCache sender, PXFieldSelectingEventArgs e) 
    { 
     e.ReturnValue = GetTotalTransactions(sender); 
    } 

    // Update values 
    public void SOLine_RowDeleted(PXCache sender, PXRowDeletedEventArgs e) 
    { 
     UpdateTotals(sender, e.Row as SOOrder, true); 
    } 

    public void SOLine_RowInserted(PXCache sender, PXRowInsertedEventArgs e) 
    { 
     UpdateTotals(sender, e.Row as SOOrder, true); 
} 

    public void SOLine_OrderQty_FieldUpdated(PXCache sender, PXFieldUpdatedEventArgs e) 
    { 
     UpdateTotals(sender, e.Row as SOOrder, false); 
    } 

    public void UpdateTotals(PXCache sender, SOOrder soOrder, bool isUpdateTranCount) 
    { 
     // Get SOOrder DAC extension 
     if (soOrder != null) 
     { 
      SOOrderExt soOrderExt = sender.GetExtension<SOOrderExt>(soOrder); 

      if (soOrderExt != null) 
      {    
       if (isUpdateTranCount) 
       { 

        sender.SetValueExt<SOOrderExt.usrTotalTransactions>(soOrder, GetTotalTransactions(sender)); 

       } 
      } 
     } 
    } 



    public int? GetTotalTransactions(PXCache sender) 
    { 
     return Base.Transactions.Select().Count(); 
    } 
} 
} 

的DAC代碼也討論是: [PXDBInt] [PXUIField(DisplayName的= 「行總數」,啓用=假)]

+0

它不工作的原因是胃腸只是使用DAC的,如果你是在另一個圖形或DAC中引用另一個圖形設置的未綁定字段也不會在這是它自己的圖形中的GI工作。也許使用某種類型的PXProjection或PXDBCalc字段。另一種方法是將價值存儲到字段中並保存到銷售訂單圖中的數據庫中。 – Brendan

+0

你能解釋一下我該如何將值存儲在數據庫中? 我創建的自定義確實顯示出價值,但它不保存在數據庫中......它顯示NULL – Naina

+0

你需要找到合適的扳機......也許堅持覆蓋將是最簡單和呼叫基地之前一直存在檢查行計數(注意刪除仍然包含在計數中)並更新您的訂單UsrRowCount值。 – Brendan

回答

0

如果你試圖設置我會嘗試你的例子是這樣的簡化版本值...

namespace PX.Objects.SO 
{ 
    public class SOOrderEntry_Extension : PXGraphExtension<SOOrderEntry> 
    { 
     public void SOLine_RowDeleted(PXCache sender, PXRowDeletedEventArgs e) 
     { 
      UpdateTotals(sender, e.Row as SOOrder); 
     } 

     public void SOLine_RowInserted(PXCache sender, PXRowInsertedEventArgs e) 
     { 
      UpdateTotals(sender, e.Row as SOOrder); 
     } 

     public void UpdateTotals(PXCache sender, SOOrder soOrder) 
     { 
      if (soOrder != null) 
      { 
       SOOrderExt soOrderExt = sender.GetExtension<SOOrderExt>(soOrder); 

       if (soOrderExt != null) 
       { 
        sender.SetValueExt<SOOrderExt.usrRowCount>(soOrder, GetRowCount()); 
       } 
      } 
     } 

     public int GetRowCount() 
     { 
      return Base.Transactions?.Select().Count() ?? 0; 
     } 
    } 
} 

您將使用FieldSelecting設置未綁定的字段值。由於您的字段已被綁定,因此您不希望爲您的示例調用字段選擇。

+0

謝謝先生! – Naina

+0

歡迎您光臨我的幫助。我猜你只需要刪除fieldselecting並使用sender.SetValueExt設置你的值,這是在事件中設置值的更好方法。更何況,當你希望相關的現場事件在該時間點發射,並等待直到呼叫事件結束。 – Brendan

+0

我得到這個錯誤後,根據上面的代碼修改... 錯誤CS0118:'PX.Objects.SO.SOOrderExt.UsrRowCount'是'屬性',但用於'類型' 錯誤是對於這一行>> sender.SetValueExt (soOrder,GetRowCount()); – Naina