首页 文章

添加新SOLine时,动态更新所有SOLINE项目单位价格

提问于
浏览
1

我有一个由PXAction调用的存储过程 . 我知道这是违反Acumatica使用存储过程的最佳实践,但我还是为我的目标找到了另一种解决方案 . 存储过程根据确定单价的breakQuantity评估每个订单项及其关联的价格类 . 如果多个项目属于同一价格类==或超过中断数量,则单位价格会降低 .

我开始的是行更新

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事件处理程序的目的 .

如果有人有一些建议是更新缓存中所有行项目的好方法,那么如果你能提供一些输入,将不胜感激 .

1 回答

  • 2

    尝试使用 Base.Transactions.View.RequestRefresh(); ,它将要求网格自行刷新 . 在此示例中,我将每个行数量设置为网格中存在的SOLINE数量 .

    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();
                }
            }
        }
    }
    

相关问题