注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

原来为了你

我的人生就是要一次次的超越

 
 
 

日志

 
 
 
 

abap & sap memory  

2011-12-16 11:11:25|  分类: ABAP基础知识 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

由于一个logon user session中可以最大6个external session(window),
一个external session对应着一个ABAP session.
所以,一个window里的internal session共用着同一个ABAP session.
一个external session中最大可以使用20个Internal session.

由于一个user logon session使用一个SAP memory,
所以,这6个external session(window)共同使用同一个SAP memory.

同步的Link Program:
(1)对于FM:
当一个FM被调用时,它对应的Function Group被load进当前的这个 internal session,当其处理完了,calling program继续被处理;(该Function Group下的global data可以继续被使用).
(2)对于call transaction或submit and return
当运行到这种情况时,系统会重新运行一个internal session,当called program结束后(也可以是使用leave program),这个internal session会被delete掉,然后calling program继续运行.
(3)对于Submit
当运行到这种情况时,calling program从当前的internal session中被移走,而called program被load进这个internal session.
(4)对于Leave to Transaction
当运行到这种情况时,当前External session中的所有internal session被清掉,而called transaction将会在该external session中新开一个internal session;
另外,该种情况下,该external session所对应的ABAP memory将会被initialize,所以这种情况下,我们不能使用ABAP memory来传递数据,而应该使用SAP Memory.

异步的Link Program:
当遇到这种FM时,将会重新打开一个external session,它并行地、独立于当前的external session.
所以,在同一个external session的Link program我们使用ABAP Memory进行传递数据;而在不同的external session间的Link program我们使用SAP Memory进行数据传递。
另外,对于FM而言,因为它依附于Function Group,所以,一般如果我们使用FM需要数据传递或者共享的话(除了FM自己的import/export/table外),我们是使用Function Group的全局变量;
*
使用SAP Memory

*1SAP Memory语句
*不同于ABAP Memory,可以直接在程序中进行指定;对于SAP Memory,它其实是利用的是我们经常所说的SPA/GPA,也就是set parameterget parameter;所以,这里首先得创建parameter ID;
*创建Parameter,我们一般是使用SE80 object Navigator来进行创建,它最长为20位;Parameter的数据是存于数据库表TPARA
*
*而在一般的应用上,我们很多时候并不是像ABAP Memory那样直接在程序中完成了SetGet方法;相反,一般是将其绑定给某一Data element(并激活着SetGet方法)
*从而任何其他程序使用了该Data element的地方都将会有“default”值,也就是说在一个地方的data element的改变会影响其他地方,从而也就达到了数据传递的效果;
*我们自己在开发Dynpro的程序时,有时候根据实际的需求,也会勾选某些elementSPA/GPA属性(SE51 Screen Painter); 其实,这也是SAP标准所采用的技术.
*
*很简单地一个例子就是, Material Numberdata elementMATNR,它的属性中可以看到:参数ID MAT.
*业务中,比如说,我们第一次使用MM01创建了一个Material,那么当我们再打开另一个Window/External session(MM02)时,Material Number的栏位里就是我们刚创建的material number
*查看MM02屏幕的定义,发现MATNR参数ID”:MAT  “set 参数属性.这样的例子还有很多。


*样例:
*se80创建set/get parameter ID: ZPARA01(可以省略),在表TPARA里可以看到.
*se11创建数据元素: ZTEST001
*程序1
parametersp_spa type ztest001 memory id zpara02.
leave to transaction 'YTEST2'.

*程序2
data ok_code type sy-ucomm.
data p_test  type char20."与屏幕I/O字段对应,设置属性para id,set/get parameter.

abap  sap memory - 2006057145 - 原来为了你
call screen 100.
*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
module status_0100 output.
  
set pf-status 'S_100'.
endmodule.                 " STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
module user_command_0100 input.
  
case ok_code.
    
when '&F02'.
      
leave to screen 0.
    
when 'TOPROG1'.
      
leave to transaction 'YTEST1'.
  
endcase.
endmodule.                 " USER_COMMAND_0100  INPUT
  评论这张
 
阅读(489)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017