我有一个由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事件处理程序的目的。
如果有人提出了一些更新缓存中所有订单项的好方法,那么如果你能提供一些输入,我们将不胜感激。
答案 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();
}
}
}
}