SAP ABAP 程式之間的呼叫

SAPmatinal發表於2020-01-15

一,同步呼叫從一個程式同步呼叫其他的ABAP程式,有2種方式:

1,呼叫程式被打斷,當被呼叫程式執行完畢之後,呼叫程式繼續執行。如:CALL FUNCTION <function>SUBMIT <program> AND RETURNCALL TRANSACTION <tcode> 使用CALL FUNCTION 'AAA'呼叫FM的時候,相應的FUNCTION GROUP被載入到呼叫程式所在的internal session。當FM執行完畢,接著執行呼叫程式。FUNCTION GROUP和其GLOBAL DATA會一直儲存在這個internal session直到呼叫程式結束。當呼叫程式再次呼叫這個FM的時候,不會再次載入相應的FUNCTION GROUP。這個FUNCTON GROUP的GLOBAL DATA和第一次呼叫它時的內容是一樣的。 使用SUBMIT <program> AND RETURN或者CALL TRANSACTION <tcode>的時候,實際是插入了一個新的internal session,當被呼叫的程式執行完畢之後,新插入的internal session會被刪除,繼續執行呼叫程式。可以使用leave program語句來結束程式。 



2,呼叫程式被結束,被呼叫程式開始執行。如:SUBMIT <program>LEAVE TO TRANSACTION <tcode>. 使用SUBMIT語句之後,呼叫程式從所在的internal session中被刪除了,被呼叫的程式被載入到這個internal session。 使用LEAVE TO TRANSACTION <tcode>之後,當前external session中的所有internal session會被刪除,併產生一個新的internal session,被呼叫的tcode會載入到這個新的internal session中。特別要注意的是,使用這個語句之後,ABAP MEMORY會被初始化,意思就是你不可以透過ABAP MEMORY向被呼叫的tcode傳值。 



二,FUNCTION MODULE的非同步呼叫CALL FUNCTION 'AAA' STARTING NEW TASK <taskname>   PERFORMING <subroutine> ON END OF TASK    EXPORTING          .....使用上面語句之後,AAA和呼叫其的程式 會並行執行。可以在<subroutine>中使用RECEIVE RESULTS FROM FUNCTION 'AAA'語句來獲得FUNCTION執行的結果。值得注意的是,用STARTING NEW TASK形式的FM的processing type必須要是REMOTE-CAPABLE MODULE.


 三,LOGICAL MEMORY一個使用者session可以有多個external session,可以理解你開了幾個SAP的視窗,就有幾個external session,一般設定為6個。 一個external session裡可以有多個internal session(最多20個,想想LIST的LSIND為什麼不能超過20)。一個程式一般來說是在一個internal session裡處理的。 可以用ABAP MEMORY(EXPORT/IMPORT)和SAP MEMORY(GET/SET)在不同的程式之間傳遞資料。 一個使用者session有一個SAP MEMORY,這個使用者session裡所有session都可以訪問SAP MEMORY,但是SAP MEMORY一般用於不同external session間的internal session傳值。每個external session包含一個ABAP MEMORY,屬於這個external session的internal session都可以訪問這個ABAP MEMORY,ABAP MEMORY適合在一個external session的不同internal session間傳值。 當external session終止的時候,自動會釋放其ABAP MEMORY。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69901557/viewspace-2673545/,如需轉載,請註明出處,否則將追究法律責任。

相關文章