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

时间:2016-07-29 21:08:46

标签: acumatica

我有一个由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 个答案:

答案 0 :(得分: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();
            }
        }
    }
}