2017-08-17 16 views
0

修正パーセンテージ(PO Preferencesのカスタムフィールドとして含めることができます)に基づいて、LandedCost in PO Receipt画面(PO302000)を追加する必要があります。購買発注がリリースされるまでに自動的に追加されます。 LandedCostをトリガして追加するには、どのイベントを最適な方法にする必要がありますか?Landedcostを自動的に計算して追加する

ユーザーが[保留]チェックボックスをオフにしていますか?
または、ユーザーが[リリース]ボタンをクリックしますか?はいの場合は、リリースアクションを延長できますか?

答えて

1

POReceiptsを解放するメソッドは静的であり、オーバーライドできません。 しかし、この静的メソッドが呼び出されている場所をオーバーライドできます。 1)リリースのPOReceiptEntry(グラフ)アクションと2)は、プロセスデリゲートを設定するPOReleaseReceipt(グラフ)のコンストラクタに呼び出されます。

1)POReceiptEntryでは、このグラフを拡張して最初にカスタムコードを実行し、次にベースリリースメソッドを呼び出すことができます。プロセスデリゲートはこのグラフのコンストラクタで設定されているのでPOReleaseReceiptグラフで

public class POReceiptEntry_Extension:PXGraphExtension<POReceiptEntry> 
    { 
     public PXSetup<POSetup> posetup; 

     #region Event Handlers 
     public PXAction<POReceipt> release; 
     [PXUIField(DisplayName = Messages.Release, MapEnableRights = PXCacheRights.Update, MapViewRights = PXCacheRights.Update)] 
     [PXProcessButton] 
     public virtual void Release() 
     { 
      //retrieve value from Custom field added on PO Preferences screen 
      //POSetup setup = posetup.Current; 
      //POSetupExt setupExt = setup.GetExtension<POSetupExt>(); 

      LandedCostTran landedCost = Base.landedCostTrans.Insert(); 
      landedCost.LandedCostCodeID = "YOURLANDEDCOSTCODE"; 
      landedCost.InvoiceNbr = "YOURINVOICENUMBER"; 
      landedCost.CuryLCAmount = 2; //Formula here using setupExt.UsrFieldPercentange 
      Base.landedCostTrans.Update(landedCost); 

      Base.release.Press(); 
     } 
    #endregion 
    } 

2)は、あなたがこのグラフを拡張し、カスタムプロセスのデリゲートを設定する初期化()メソッドをオーバーライドすることができます。 カスタムプロセスデリゲートにカスタムコードがあり、その後に基本メソッドが呼び出されます。

using System; 
using System.Collections; 
using System.Collections.Generic; 
using System.Runtime.Serialization; 
using System.Text; 
using PX.Common; 
using PX.Data; 
using PX.Objects.CS; 
using PX.Objects.IN; 
using PX.Objects.AP; 
using PX.Objects.PO; 
using PX.Objects.GL; 
using PX.Objects.CM; 
using PX.Objects; 

namespace PX.Objects.PO 
{ 

    public class POReleaseReceipt_Extension:PXGraphExtension<POReleaseReceipt> 
    { 
     public override void Initialize() 
     { 
      //Gets Process Delegate 
      var processDelegate = (PXProcessingBase<POReceipt>.ProcessListDelegate)Base.Orders.GetProcessDelegate(); 

      //Change the process delegate that was created by the framework by your custom one. 
      Base.Orders.SetProcessDelegate(delegate (List<POReceipt> orders) { POReceiptsProc(orders, processDelegate); }); 

     } 

     public static void POReceiptsProc(List<POReceipt> orders, PXProcessingBase<POReceipt>.ProcessListDelegate processDelegate) 
     { 
      //Execute your custom code here 
      //create POReceiptEntry graph, Loop through the orders, Access your Custom field, Add LandedCost 
      PXTrace.WriteInformation("Start Process execution"); 

      POReceiptEntry graph = PXGraph.CreateInstance<POReceiptEntry>(); 

      ........ 

      //Call the base action 
      if (processDelegate != null) 
       processDelegate(orders); 
     } 
    } 
} 
関連する問題