Acumatica 更新销售订单行单价

Acumatica 更新销售订单行单价,acumatica,Acumatica,我试图用我自己在别处查到的价格覆盖销售订单条目中的单价。我确实使用了下面的代码,但我不明白为什么注释掉的行会导致“堆栈溢出”。价格确实正确更新,并在会话之间保存到数据库 我下面的例子在这篇文章中提供了,很明显需要注释掉的行: 它似乎在做的是line Base.Transactions.Update(soLine);调用SOLine_,然后在无限循环中调用您 谢谢 protected virtual void SOLine_RowUpdating(PXCache sender, PXRowUpda

我试图用我自己在别处查到的价格覆盖销售订单条目中的单价。我确实使用了下面的代码,但我不明白为什么注释掉的行会导致“堆栈溢出”。价格确实正确更新,并在会话之间保存到数据库

我下面的例子在这篇文章中提供了,很明显需要注释掉的行:

它似乎在做的是line Base.Transactions.Update(soLine);调用SOLine_,然后在无限循环中调用您

谢谢

protected virtual void SOLine_RowUpdating(PXCache sender, PXRowUpdatingEventArgs e)
{
    if (e.NewRow == null)
    {
    return;
    }

    SOLine soLine = (SOLine)e.NewRow;

    decimal NewUnitPrice = 12349.56M;

    sender.SetValueExt<SOLine.curyUnitPrice>(soLine, NewUnitPrice);

    Base.Transactions.Cache.RaiseRowUpdated(soLine, soLine);

   // Base.Transactions.Update(soLine);

    Base.Transactions.View.RequestRefresh();

}
protected virtual void SOLine\u行更新(PXCache sender,pxrowupdateingeventargs e)
{
如果(e.NewRow==null)
{
返回;
}
索林索林=(索林)e.纽罗;
十进制新单价=12349.56米;
sender.SetValueExt(soLine,新单价);
Base.Transactions.Cache.RaiseRowUpdated(soLine,soLine);
//Base.Transactions.Update(soLine);
Base.Transactions.View.RequestRefresh();
}

假设您的扩展名为SOOrderEntryExt(为了简化解释)。 然后我们有3位演员:
1.SOOrderEntry,使用其方法SOLine_RowUpdate(由Acumatica团队创建) 2.SoorderEntryText及其方法SOLine_RowUpdate(由您创建)
3.针灸缓存
4.针灸

Acumatica有以下代码:
每次在缓存中修改SOLine后,我都需要执行两个方法:

SOOrderEntry.SOLine_RowUpdating 
SOOrderEntryExt.SOLine_RowUpdating 
以下代码行:

Base.Transactions.Update(soLine);
基本上是对Acumatica说,嘿,soLine在缓存中被更新了。针灸应该做什么?再次执行这两行:

SOOrderEntry.SOLine_RowUpdating 
SOOrderEntryExt.SOLine_RowUpdating 
一次又一次,一次又一次。 然后问题就出现了,如何执行

SOOrderEntry.SOLine_RowUpdating 
不引起永恒的循环?下一行代码是一个解决方案:

Base.Transactions.Cache.RaiseRowUpdated(soLine, soLine);

假设您的扩展名为SOOrderEntryExt(为了简化解释)。 然后我们有3位演员:
1.SOOrderEntry,使用其方法SOLine_RowUpdate(由Acumatica团队创建) 2.SoorderEntryText及其方法SOLine_RowUpdate(由您创建)
3.针灸缓存
4.针灸

Acumatica有以下代码:
每次在缓存中修改SOLine后,我都需要执行两个方法:

SOOrderEntry.SOLine_RowUpdating 
SOOrderEntryExt.SOLine_RowUpdating 
以下代码行:

Base.Transactions.Update(soLine);
基本上是对Acumatica说,嘿,soLine在缓存中被更新了。针灸应该做什么?再次执行这两行:

SOOrderEntry.SOLine_RowUpdating 
SOOrderEntryExt.SOLine_RowUpdating 
一次又一次,一次又一次。 然后问题就出现了,如何执行

SOOrderEntry.SOLine_RowUpdating 
不引起永恒的循环?下一行代码是一个解决方案:

Base.Transactions.Cache.RaiseRowUpdated(soLine, soLine);

Yuriy感谢您的明确回复。这样可以完美地保存记录,而不会进入无限循环。我对折扣有进一步的问题,但由于这是一个单独的话题,我将发表一篇新的帖子。Yuriy谢谢你的明确回复。这样可以完美地保存记录,而不会进入无限循环。我有进一步的问题与折扣,但因为它是单独的主题,我将作出一个新的职位。