我需要在执行现有操作后执行更多操作。例如,After Distribution>销售订单>装运>行动>确认发货,我需要将所有跟踪号码填充到另一个文本框中。 请建议。
答案 0 :(得分:1)
我认为最好的事情是覆盖股票方法的逻辑。这样您就可以在不触及基本方法的情况下添加所需的代码,并且可以在调用基本方法之前和之后验证信息。
在您的示例中,“确认发货”操作最终执行方法“ConfirmShipment”,其定义如下:
public virtual void ConfirmShipment(SOOrderEntry docgraph, SOShipment shiporder)
{
.....
}
为了在这里自定义逻辑,你有几个选择。
要做第二步,你会做以下
首先在代码中创建委托:
public delegate void ConfirmShipmentDelegate(SOOrderEntry docgraph, SOShipment shiporder)
然后定义覆盖方法:
[PXOverride]
public virtual void ConfirmShipment(SOOrderEntry docgraph, SOShipment shiporder, ConfirmShipmentDelegate baseMethod = null)
{
// Call our base method first if it exists
if (baseMethod != null)
{
baseMethod(docgraph,shiporder);
}
// Do my stuff here
}
在这里记下几件事。
该定义对我们的委托有第三个参数,这允许我们调用stock方法然后做进一步的工作。它还告诉Acumatica框架我们的方法应优先于stock方法。
在实际代码中从baseMethod调用调用stock方法。
以这种方式创建扩展允许进行升级,而无需每次都完全重新定义方法。
第二种方法只是重写股票代码。这是通过以下语法
完成的[PXOverride]
public virtual void ConfirmShipment(SOOrderEntry docgraph, SOShipment shiporder)
{}
采用这种方法时,首先调用stock方法,然后调用override方法。
这两个都将在图表扩展中处理,定义为:
public class SOShipmentEntryExt : PXGraphExtension<SOShipmentEntry>
在尝试之前,我会在PXOverride上查看Wiki中的文章,因为它们为这些提供了更多示例/情况