RunOn,顧名思義,就是指Object在那一層上面運行,客戶端,還是服務器端?當然,前提是要在三層結構下面。Axapta當中與RunOn有關的,大概在以下這幾個地方:
相關的Object,如Form, Report, Class等,Class當中的靜態方法,以及MenuItem。
Form和Report是不能設置RunOn屬性的,Form只能是運行在客戶端,而Report則是由MenuItem所決定的,因為它的RunOn屬性其實是被設為(Always)Called from的。當然,假如Report不用MenuItem指定激活的話,如直接在AOT當中用右鍵打開(Open),那就肯定是在客戶端生成了。
那么剩下可以討論的就是Class的RunOn屬性,和Class當中的靜態方法了。
靜態方法,由它本身的modifier所決定。不寫的情況下,默認為client server(可顯式聲明,一般情況下不用),也就是等于Called from,在哪里被調用就在哪里運行。
Class本身的RunOn屬性是具有最高優先級的,只有當設置為Called from的時候,才會取決于MenuItem中的RunOn屬性。還有一種情況就是,很多Class的main方法也指定了modifier,這個時候main方法的modifier比MenuItem更有優先權來決定Class運行的位置。
也就是說Class的RunOn屬性 優先于 main方法的modifier 優先于 MenuItem的RunOn屬性。
那么我們再來討論這個RunOn屬性的作用。
我們知道,在Axapta三層結構體系當中,不同層之間的調用,無論是方法,還是數據的交換,都會造成運行效率的降低。所以我們必須要盡可能減少不同層之間的調用。譬如說,某個Class具體的作用是進行數據運算,那么這個時候我們把它放在Client端運行是非常不合理的。因為這種情況下它需要和database進行大量的數據交換(中間需要通過AOS),所以我們就需要強制性的把它指定運行在AOS上,這樣也可以減少了網內部的帶寬消耗,更可以充分利用三層結構的優點,降低了客戶端機器的負載。
然后還是有一個Best Practice原則,就是盡量把RunOn設置在MenuItem,而不要指定在Class本身的屬性上面(盡量默認為Called from)。這樣做的好處在于,可以靈活運用,因為某一個Class可以在不同的情況下,被指定運行在不同層上。開發人員只需要更改和使用不同的MenuItem,就可以達到這種效果。這也是Axapta里面所謂的API原則,盡量都通過MenuItem去激活和指定Object的運行狀態。
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/junevoful/archive/2006/01/06/572496.aspx
posted on 2010-02-03 18:53
何克勤 閱讀(244)
評論(0) 編輯 收藏 所屬分類:
Microsoft Dynamic AX