2016-03-02 75 views
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调用调用。

以这种方式创建扩展可以在不必每次都完全重新定义方法的情况下进行升级。

第二种方法可能只是重写stockcode。这与以下语法

[PXOverride] 
public virtual void ConfirmShipment(SOOrderEntry docgraph, SOShipment shiporder) 
{} 

完成时采取这种方法,股票方法是首先调用,然后你重写方法被调用。

这两个将在图形扩展处理定义为:

public class SOShipmentEntryExt : PXGraphExtension<SOShipmentEntry> 

之前尝试要么,我想看看在Wiki上PXOverride的文章,因为他们提供进一步的例子/情况下对这些