2016-03-02 53 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的文章,因爲他們提供進一步的例子/情況下對這些