2009-4-17
在调用function module时,如果fm源代码中使用的是RAISE EXCEPTION,那么调用程序的参数列表中如果不存在这个exception参数,那么出现这个exception是程序就会出现dump,否则调用程序已然可以继续执行。还可以在function module的源代码中使用MESSAGE <kind><num>(<id>) RAISING <exception>.语句,当调用程序不存在exception参数时,就会调用message <num>。
可在function group的top include程序中设置message id。
2009-4-20
一般程序的调用都是顺序执行的(sequential calling),如果想并行调用,需要使用语句CALL FUNTION…STARTING NEW TASK…
LEAVE TO TRANSACTION是restart调用,CALL TRANSACTION是insertion调用。
终端内存模型:external session对应于终端的一个窗口,可以通过new session或/otcode的方式产生一个external session,一个终端最多可以产生九个external session。Internal session以堆栈的方式存在于external session中每执行一个程序便会产生自己的internal session,一个external session中可以包括九个internal session。程序的变量只在internal session中可见,即变量的作用域是与程序相关的。
Restart模式的程序调用:当调用executable program时只有最顶端的internal session被覆盖,当调用事务代码时,external session中的memory便会被初始化,产生新的internal session。
Internal session之间传递变量的几种方式:
The interface of the called program | Specifying variant or specifying values to input field |
ABAP memory |
|
SAP Memory | GET/SET |
DATABase table | EXPORT IMPORT |
Local files on your presentation server | GUI_UPLOAD GUI_DOWNLOAD |
SAP Memory:与用户相关的用来存储变量值的内存空间。可用于internal session之间传递变量,不过变量的类型是有限的,SAP Memory的生命周期与用户的终端会话(terminal session)一致。SAP MEMORY在同一个terminal session的不同external session之间共享。可用来存储屏幕输入字段的缺省值。
ABAP Memory也是用户相关的存储变量值的内存空间,它与external session相一致,可以用于external session中的internal session之间传递变量,可以用来传递任何类型的ABAP变量。当用户离开external session时(/I command),相应的内存空间就会被初始化。
通过事务代码调用程序时只有insertion(CALL TRANSACTION)方式才能通过ABAP MEMORY传递变量。