2016-08-12 33 views
1

我正在從事Dynamics AX7表單開發。我必須在按鈕的'Clicked'方法中編寫代碼,但'Clicked'方法中已經有一些'Sys Layer'代碼。我必須對它施加一些條件。但我不想做'over-layering',我必須用擴展來做,但是如果我在onClicked事件中編寫代碼,問題是,我的代碼在sys層代碼之前或之後運行,但是我需要在該系統層代碼上應用一些條件。在AX7的擴展中寫入事件處理程序

我的問題是,我們可以用擴展事件處理程序來實現這個邏輯嗎?我已經完成了over-layering,但是我需要使用擴展來完成。那麼可以用擴展來做到這一點嗎?

代碼在下面添加。

void clicked() 
{  
     super(); 

     // My logic will be written here 

     if(result == true) //This is my code, based on above logic I applied this check 
     { 
      // start of sys layer code 
      remainSalesPhysical.realValue(0); 
      remainInventPhysical.realValue(0); 
      if (formCtrl) 
      { 
       formCtrl.cancelLine(); 
      } 
      element.closeOk(); 
      // end of sys layer code  
     }          //this is my code 
     else         //this is my code 
     {          //this is my code 
      error("Some error message");  //this is my code 
     }          //this is my code 
} 

回答

0

我已經搜索了一下,到目前爲止我得出的結論是,我們不能100%沒有覆蓋。我們有事前和事後的事件,但這些事件無法滿足上述問題,未來我們可能會有更具體的方式來做到這一點,但現在我們有三種選擇。

  1. 做overlayering正如我們在AX 2012(不推薦)
  2. 做它與代表做了(即使我們僅限於做一些overlayering代表,但它是推薦的方式)
  3. 你也可以隱藏該按鈕並將其替換爲您自己的按鈕,但它僅適用於窗體控件,我們不能爲方法執行此操作,因爲您無法避免調用它們。

我用代表解決了我的問題。 這是我發現的一個有用的鏈接,它有幫助。

https://ievgensaxblog.wordpress.com/2016/05/01/ax-7-how-to-override-form-data-source-field-methods-without-overlaying/

0

是,否。如果它只是一個button那麼super()並沒有真正做任何事情,所以你可以做一個pre事件處理程序。

如果它是一個menu item button,其中super()調用類,那麼你會做一個post事件處理程序class,而不是按鈕,讓你的方式邏輯super()電話後立即運行。

而在你的班級中,你可以做類似formRun = _xppPrePostArgs.getThis(),然後if (formRun.name() == formStr(SalesTable))或任何數量的事情,如果類有多個入口點。

+0

感謝@Alex, 是的,你說得對,我們之前和之後的事件,但專門針對上述問題,這些事件也沒有辦法。所以我和代表一起做了。但仍然需要一些覆蓋層委託,但我們需要堅持下去,直到MS介紹一些新的方法。 –

+0

沒有看到更多的代碼,我不明白爲什麼你不能在沒有覆蓋的情況下做到這一點。 'super()'做了一些事情,所以爲了讓你的代碼在你需要的地方得到,你只需要通過按鈕實際上做的事情來獲得'super()'的'post'。 –

+0

請再次關注我的代碼。我已經提到過每件事情。 super()調用後已經有一些sys層的代碼。我想要'if'條件內的代碼。我怎樣才能做到這一點 ? –

相關問題