2009-12-10 116 views
1

下面是創建對象的代碼片段。ABAP創建對象

Form userexit_save_document_prepare. 
    data: /bks/exitmanager type ref to /bks/exit_manager. 
    create object /bks/exitmanager 
     exporting main_prog = 'SAPMV45A' 
        exit_form = 'USEREXIT_SAVE_DOCUMENT_PREPARE'. 
    include /bks/exitman. 
ENDFORM. 

我得到這個從文檔

出於性能的考慮,參數「main_prog」和「exit_form」應填寫,在userexits的情況下,進行經常像「user_field_modification 「在每個單一屏幕字段都要調用的」SAPMV45A「中。

1)調用create object/bks/exitmanager時究竟發生了什麼?內存分配給對象等?

2)爲什麼出於性能原因需要填充創建對象的導出參數?

回答

1

我不是100%肯定,但這裏是我最好的猜測:

  1. /exitmanager構建名爲/ BKS對象(這是類的oject/BKS/exit_manager或更具體一個指向這個類的對象的引用/「指針」)......分配所需的內存等,還調用「構造函數」代碼(可能會設置一些實例變量傳遞給調用)。

  2. 如果您明確地傳遞這些參數,則不必在運行時「計算」(例如,通過查看調用堆棧)。這應該會節省一些時間,特別是如果必須經常進行(如文檔中所述)。

0

這將有助於瞭解什麼是/ bks/exit_manager實際上是什麼,並簡要說明您正在嘗試完成什麼。

擴大對什麼IronGoofy寫道:

數據:/ BKS/exitmanager類型裁判/ BKS/exit_manager 這在你的程序的ABAP內存中創建一個參考指針,就像一個字段符號。此外,它必須已經失寵。如果它在包含中,則需要移動包含。

create object/bks/exitmanager exporting main_prog ='SAPMV45A' exit_form ='USEREXIT_SAVE_DOCUMENT_PREPARE'。 這將根據聲明的類創建一個對象實例,並將其分配給參考指針。它通過首先調用構造函數方法來實現這一點。 只有通過檢查/ bks/exit_manager才能找到您需要導出的內容。

0

不可能告訴發生了什麼以及爲什麼參數應該傳遞而不必看看/ BKS/EXIT_MANAGER的構造函數。儘管保留一個設置緩衝區是一個常見的模式(想想一個靜態散列表,其中鍵是參數,並且該值持有任何複雜且耗費時間的值)。在這種情況下,我希望有一個受保護的構造函數不能直接訪問,但只能使用靜態工廠方法使用散列表來保持退出處理程序本身的引用 - 最佳地使用弱引用...