我正在尝试用其他地方查询的我自己的价格覆盖销售订单条目中的单价。我确实使用下面的代码,但是我不知道是为什么注释掉的行会导致“堆栈溢出”。价格确实正确更新,并且确实在会话之间保存到数据库中。
我遵循的示例在这篇文章中提供,很明显,需要注释掉的行:Sales Price Updating Every Other Time
似乎正在执行的行是Base.Transactions.Update(soLine);调用SOLine_RowUpdating,然后陷入无限循环。
谢谢
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();
}
答案 0 :(得分:2)
假设您的扩展名为SOOrderEntryExt(为简化说明)。
然后我们有3个演员:
1. SOOrderEntry及其方法SOLine_RowUpdating(由Acumatica团队创建)
2. SOOrderEntryExt及其方法SOLine_RowUpdating(由您创建)
3. Acumatica缓存
4. Acumatica
Acumatica具有以下代码:
每次在缓存中修改SOLine之后,我都需要执行两个方法:
SOOrderEntry.SOLine_RowUpdating
SOOrderEntryExt.SOLine_RowUpdating
以下代码行:
Base.Transactions.Update(soLine);
基本上对Acumatica说,嘿,所以Line在缓存中已更新。 Acumatica应该做什么?再次执行这两行:
SOOrderEntry.SOLine_RowUpdating
SOOrderEntryExt.SOLine_RowUpdating
一次又一次,一次又一次。 然后出现了问题,如何执行
SOOrderEntry.SOLine_RowUpdating
没有引起永恒的循环?下一行代码是一种解决方案:
Base.Transactions.Cache.RaiseRowUpdated(soLine, soLine);