2016-09-02 9 views
0

お客様からの現在のカスタマイズ要求には、出荷確認プロセスが実行される前に、何らかのロジックに基づく確認メッセージを[荷送人]画面に追加する必要があります。"出荷確認"を実行する前に確認を追加

私の最初の考えは、チェックルーチンを使ってデフォルトの "ConfirmShipment"メソッドをオーバーライドし、在庫確認ロジックを続行するための確認が明確である場合です。以下は

使用されているコードのsnippitです:

[PXOverride] 
    public virtual void ConfirmShipment(SOOrderEntry docgraph, SOShipment shiporder, ConfirmShipmentDelegate confirmdelegate) 
    { 
       var baseConfirm = true; 
       WebDialogResult result = Base.Document.View.Ask(Messages.ShippingConfirmation, MessageButtons.YesNo); 
       if (result == WebDialogResult.Yes) 
       { 
        baseConfirm = false; 
       } 

       if (baseConfirm) 
       { 
        confirmdelegate(docgraph,shiporder); 
       } 
    } 

オーバーライド機能が作業を行い、私はしかし、「はい/いいえ」のプロンプト、コードの実行が終了を選択しなかった後、私の確認プロンプトを取得します。結果== WebDialogResultのチェックは呼び出されません。これは、ダイアログの結果によって中断された、長時間実行されている操作からメソッドがトリガーされているために発生する可能性があります。

私の2番目の考えは、ConfirmShipmentメソッドが呼び出される前に、「アクション」メソッドをオーバーライドしてチェックを処理することでした。以下のサンプルメソッドを使用して、これをしようとすると

、委任は常に両方でヌル

//[PXOverride] 
    //[PXUIField(DisplayName = "Actions", MapEnableRights = PXCacheRights.Select, MapViewRights = PXCacheRights.Select)] 
    //[PXButton] 
    //public virtual IEnumerable Action(PXAdapter adapter, 
    //  [PXInt] 
    //  [PXIntList(new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }, new string[] { "Confirm Shipment", "Create Invoice", "Post Invoice to IN", "Apply Assignment Rules", "Correct Shipment", "Create Drop-Ship Invoice", "Print Labels", "Get Return Labels", "Cancel Return", "Print Pick List" })] 
    //  int? actionID, 
    //  [PXString()] 
    //  string ActionName, 
    //  Func<PXAdapter,int?,string,IEnumerable> actiondelegate 
    //  ) 
    //{ 

/心の中で上記のいずれかで、「ConfirmShipment」アクションを傍受するための最良の方法は何を追加するだろうが返されますストックメソッドを実行する前にwebdialogの確認を行います。 confirmshipmentで長いrunnignプロセスの問題を回避する方法はありますか、またはそれが正しく戻るのを防ぐ別の問題がありますか?

お手伝い、ご指摘いただければ幸いです。

答えて

1

以下のコードが動作します。どのように私はActionNameを読み取ることができませんが、アクションIDはこの場合正しいようです。 :s

public PXAction<SOShipment> action; 
     [PXUIField(DisplayName = "Actions", MapEnableRights = PXCacheRights.Select, MapViewRights = PXCacheRights.Select)] 
     [PXButton] 
     protected virtual IEnumerable Action(PXAdapter adapter, 
      [PXInt] 
      [PXIntList(new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }, new string[] { "Confirm Shipment", "Create Invoice", "Post Invoice to IN", "Apply Assignment Rules", "Correct Shipment", "Create Drop-Ship Invoice", "Print Labels", "Get Return Labels", "Cancel Return", "Print Pick List" })] 
      int? actionID, 
      [PXString()] 
      string ActionName 
      ) 
     { 
      if (actionID == 1) 
      { 
       var baseConfirm = false; 
       WebDialogResult result = Base.Document.View.Ask("confirm?", MessageButtons.YesNo); 
       if (result == WebDialogResult.Yes) 
       { 
        baseConfirm = true; 
       } 

       if (baseConfirm) 
       { 
        return Base.action.Press(adapter); 
       } 
       else 
        return adapter.Get(); 
      } 
      else 
       return Base.action.Press(adapter); 
     } 
+0

ありがとうHybridzz。最終的には、私が返すadapter.Get()を除いては、それはそれか、まさにIISを再起動して最終的にそれを蹴飛ばしたのです。 –

関連する問題