Acumatica 添加新SOLine时动态更新所有SOLine项目单价

Acumatica 添加新SOLine时动态更新所有SOLine项目单价,acumatica,Acumatica,我有一个由PXAction调用的存储过程。我知道使用存储过程违背了Acumatica的最佳实践,但我还没有找到一个替代方案来实现我的目标。存储过程根据确定单价的breakQuantity来评估每个行项目及其关联的价格类。如果多个项目属于同一价格类别==或超过中断数量,则单价降低 我开始的时候是一排 protected virtual void SOLine_RowUpdating(PXCache sender, PXRowUpdatingEventArgs e) { S

我有一个由PXAction调用的存储过程。我知道使用存储过程违背了Acumatica的最佳实践,但我还没有找到一个替代方案来实现我的目标。存储过程根据确定单价的breakQuantity来评估每个行项目及其关联的价格类。如果多个项目属于同一价格类别==或超过中断数量,则单价降低

我开始的时候是一排

 protected virtual void SOLine_RowUpdating(PXCache sender, PXRowUpdatingEventArgs e)
    {
        SOLine row = (SOLine)e.Row;
        formalizeOrderTotal(row);
    }
然后,在我的formalizeOrderTotal函数中,它在
SOLine in line.Select()
上执行foreach循环,将订单数量相加。作为测试,我只是尝试将所有订单数量相加,并将其应用于每一行项目。这仅在刷新后更新,这否定了将存储过程移动到c#function/Acumatica事件处理程序的目的


如果有人对更新缓存中所有行项目的好方法有一些建议,如果您能提供一些输入,我们将不胜感激

尝试使用
Base.Transactions.View.RequestRefresh()将要求网格刷新自身。在本例中,我将每条线的数量设置为栅格中存在的Soline数

使用PX.Data;
命名空间PX.Objects.SO
{
公共类SOOrderEntry\u扩展:pxGrapherExtension
{
受保护的虚拟void SOLine_行更新(PXCache发送方,PXRowUpdateingEventArgs e)
{
SOLine行=(SOLine)e.row;
正式订单(row);
}
private void OrderTotal(索林行)
{
foreach(Base.Transactions.Select()中的SOLine行)
{
if(line.Qty==Base.Transactions.Select().Count)
{
继续;
}
行数量=基本交易。选择()。计数;
Base.Transactions.Update(行);

Base.Transactions.View.RequestRefresh(); } } } }
“仅在刷新后更新”,您的意思是在刷新屏幕/网格后?您是对的!很抱歉,我没有指定.Base.Transactions.View.RequestRefresh();将解决您的问题。谢谢Simon,我现在就来试试!成功了!我将尝试使用RequestRefresh()来应用价格更新。谢谢你,西蒙。