一,同步调用
从一个程序同步调用其他的ABAP程序,有2种方式:
1,调用程序被打断,当被调用程序执行完毕之后,调用程序继续执行。如:
CALL FUNCTION
CALL TRANSACTION
使用CALL FUNCTION 'AAA'调用FM的时候,相应的FUNCTION GROUP被加载到调用程序所在的internal session。当FM执行完毕,接着执行调用程序。FUNCTION GROUP和其GLOBAL DATA会一直保存在这个internal session直到调用程序结束。当调用程序再次调用这个FM的时候,不会再次加载相应的FUNCTION GROUP。这个FUNCTON GROUP的GLOBAL DATA和第一次调用它时的内容是一样的。
使用SUBMIT AND RETURN或者CALL TRANSACTION 的时候,实际是插入了一个新的internal session,当被调用的程序执行完毕之后,新插入的internal session会被删除,继续执行调用程序。可以使用leave program语句来结束程序。
2,调用程序被结束,被调用程序开始执行。如:
LEAVE TO TRANSACTION .
使用SUBMIT语句之后,调用程序从所在的internal session中被删除了,被调用的程序被加载到这个internal session。
使用LEAVE TO TRANSACTION 之后,当前external session中的所有internal session会被删除,并产生一个新的internal session,被调用的tcode会加载到这个新的internal session中。特别要注意的是,使用这个语句之后,ABAP MEMORY会被初始化,意思就是你不可以通过ABAP MEMORY向被调用的tcode传值。
二,FUNCTION MODULE的异步调用
CALL FUNCTION 'AAA' STARTING NEW TASK
PERFORMING ON END OF TASK
EXPORTING
.....
使用上面语句之后,AAA和调用其的程序会并行运行。可以在中使用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。
阅读(1878) | 评论(1) | 转发(0) |