2017-08-25 78 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