Events Acumatica-当调用删除事件时,更新其他订单的最佳解决方案是什么?

Events Acumatica-当调用删除事件时,更新其他订单的最佳解决方案是什么?,events,event-handling,acumatica,Events,Event Handling,Acumatica,UpdateParentAllocation函数有一个用于更新其他订单的图。前面提到的acuminator:不能使用事件处理程序创建PXGraph。我正在考虑覆盖删除事件。这是Acumatica中的最佳解决方案吗?如何覆盖删除事件 protected virtual void SOLine_RowDeleted(PXCache sender, PXRowDeletedEventArgs e, PXRowDeleted del) { del?.Invoke(s

UpdateParentAllocation函数有一个用于更新其他订单的图。前面提到的acuminator:不能使用事件处理程序创建PXGraph。我正在考虑覆盖删除事件。这是Acumatica中的最佳解决方案吗?如何覆盖删除事件

       protected virtual void SOLine_RowDeleted(PXCache sender, PXRowDeletedEventArgs e, PXRowDeleted del)
    {
        del?.Invoke(sender, e);

        var row = (SOLine)e.Row;
        var rowExt = row.GetExtension<SOLineDAExtension>();
        if (row == null || IsBlanketOrder)
        {
            return;
        }
        
        UpdateParentAllocation(rowExt, row.OrderQty.GetValueOrDefault() * -1);
    }
protected virtual void SOLine_RowDeleted(PXCache发送方、PXRowDeletedEventArgs e、PXRowDeleted)
{
del?.Invoke(发送方,e);
var行=(SOLine)e.row;
var rowExt=row.GetExtension();
如果(行==null | | isblankettorder)
{
返回;
}
UpdateParentAllocation(rowExt,row.OrderQty.GetValueOrDefault()*-1);
}
这里是UpdateParentAllocation函数

    protected virtual void UpdateParentAllocation(SOLineDAExtension rowExt, decimal? newQtyBL)
    {
            var blOrder = PXGraph.CreateInstance<SOOrderEntry>();
            blOrder.Document.Current = blOrder.Document.Search<SOOrder.orderNbr>(rowExt.DABlanketOrderNbr, rowExt.DABlanketOrderType);
            blOrder.Transactions.Current = blOrder.Transactions.Search<SOLine.lineNbr>(rowExt.DABlanketLineNbr, rowExt.DABlanketOrderNbr, rowExt.DABlanketOrderType);

            if (blOrder.Document.Current == null || blOrder.Transactions.Current == null)
            {
                return;
            }

            blOrder.Transactions.Current.Qty = newQtyBL;
            blOrder.Transactions.Update(blOrder.Transactions.Current);
            blOrder.Actions.PressSave();
        }
        catch (Exception ex)
        {
            PXTrace.WriteError(ex.ToString());
            throw new PXException(ex.ToString());
        }
    }
protected virtual void UpdateParentAllocation(SOLineDAExtension rowExt,decimal?newQtyBL)
{
var blOrder=PXGraph.CreateInstance();
blOrder.Document.Current=blOrder.Document.Search(rowExt.DABlanketOrderNbr,rowExt.DABlanketOrderType);
blOrder.Transactions.Current=blOrder.Transactions.Search(rowExt.dablanketlinebr,rowExt.DABlanketOrderNbr,rowExt.DABlanketOrderType);
if(blOrder.Document.Current==null | | blOrder.Transactions.Current==null)
{
返回;
}
blOrder.Transactions.Current.Qty=newQtyBL;
blOrder.Transactions.Update(blOrder.Transactions.Current);
blOrder.Actions.PressSave();
}
捕获(例外情况除外)
{
PXTrace.WriteError(例如ToString());
抛出新的PXException(例如ToString());
}
}

如果需要通过与示例代码中不同的图形执行此操作,请尝试重写Persist。如果可以在当前图形本身中安全地执行此操作,则可以在图形扩展中定义视图,并通过事件处理程序中的视图查找/删除记录。。。但前提是在另一个需要调用的图中没有定义业务逻辑。在这种情况下,我们回到了重写persist的首选项。@BrianStevens我已经尝试重写persist,但没有删除行的值。我尝试在覆盖持久化中使用PXSelect来删除该行,但它返回null。明白。为图形创建一个私有变量。将您需要的值存储在rowdelected中,并在persist中使用它。另一种想法。如果要删除的记录是已删除记录的“子项”(始终),则如果在DAC中包含PXParent属性以及与“父项”的正确关系,它将自动删除该子项。我需要看更多的代码来理解您正在做什么,但看起来您正在使用SOOrderEntry的图形扩展,并试图初始化同一个图形以删除记录。您可以在另一个DAC的rowdeleted事件中创建一个视图并从视图中删除记录。