可以使用Acumatica的事件处理程序(event handlers)来解决此问题。具体来说,可以在Delete事件处理程序中使用PXParentAttribute来获取其他订单,并使用PXUpdateJoin和PXSelectJoin来更新这些订单。
以下示例代码演示了如何在Delete事件处理程序中更新订单:
public class SOOrderEntry_Extension : PXGraphExtension
// get a list of other orders that reference this order
List otherOrders = new List();
PXSelectJoin>>,
Where>,
And>>>> selectOtherOrders =
new PXSelectJoin>>,
Where>,
And>>>>(Base);
foreach (PXResult result in selectOtherOrders.Select(order.ShipmentNbr, order.OrderNbr))
{
SOOrder otherOrder = result;
otherOrders.Add(otherOrder);
}
// update the other orders
foreach (SOOrder otherOrder in otherOrders)
{
SOOrder copy = PXCache.CreateCopy(otherOrder);
copy.ShipmentNbr = null;
Base.Orders.Update(copy);
}
Base.Save.Press();
} }
在上述示例代码中,PXSelectJoin查找其他所有对指定订单的Shipment引用的订单,然后在更新之前进行了复制。最终,对更新的订单调用Save.Press()方法来保存更改并提交事务。