扩展现有活动

时间:2016-03-02 19:56:36

标签: acumatica

我需要在执行现有操作后执行更多操作。例如,After Distribution>销售订单>装运>行动>确认发货,我需要将所有跟踪号码填充到另一个文本框中。 请建议。

1 个答案:

答案 0 :(得分:1)

我认为最好的事情是覆盖股票方法的逻辑。这样您就可以在不触及基本方法的情况下添加所需的代码,并且可以在调用基本方法之前和之后验证信息。

在您的示例中,“确认发货”操作最终执行方法“ConfirmShipment”,其定义如下:

public virtual void ConfirmShipment(SOOrderEntry docgraph, SOShipment shiporder)
{
.....
}

为了在这里自定义逻辑,你有几个选择。

  • 创建一个覆盖方法(添加到方法队列,首先调用base,然后调用所有'覆盖'方法)
  • 创建一个首先调用库存的方法,然后创建代码。 - 这实际上将“替换”库存逻辑,但允许您仍然调用基本方法。在执行此操作时,您可以在调用基础之前运行一些检查。

要做第二步,你会做以下

首先在代码中创建委托:

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中的文章,因为它们为这些提供了更多示例/情况

相关问题