1.SAP内存分类
1.1 SAP内存
- 主会话之件数据共享
- 通过set/get parameter语句共享不同ABAP内存领域之间的内存
SET /GET PARAMETER ID XXX FIELD XXX
SET是给 FIELD 后的字段设置PARAMETER ID ;GET是获取FIELD后的字段 到PARAMETER ID 指定的内存块中。
1.2 ABAP内存
- 同一个外部窗口 里:内部会话之件共享的内存
- 基本语句:
- 写入内存:EXPORT xxx TO MEMORY ID xxx.
- 读取内存:IMPORT xxx TO MEMORY ID xxx.
- 删除内存: FREE MEMORY ID [key] 不加 key则会删除整个MEMORY ID 内存.
使用 call transaction /submit/call dialog 等命令调用其他程序时,会生成内部会话并共享ABAP内存中的数据
2.内部会话中程序之间的调用(跟SAP以及ABAP内存无关,仅仅讲述内部会话之间调用的两种方式)
1.SUBMIT 调用程序
SUBMIT program
WITH p_1 = val_1
WITH s_1 in s_1
VIA SELECTION SCREEN
AND RETRURN.
2.直接调用事务码
CALL TRANSACTION 'TCODE' AND SKIP FIRST SCREEN.
AND SKIP FIRST SCREEN 跳过初始界面
TPARA SAP 标准参数的数据库 SM30维护条目
1.ALV双击事件中调用事务码并实现窗口与SAP内存之件的读写访问
实现双击功能:双击执行事务码,并跳转到相应界面,通过PARAMETER ID 带一个参数过来
FORM user_command USING p_ucomm LIKE sy-ucomm
p_selfield TYPE slis_selfield.
DATA: lv_grid TYPE REF TO cl_gui_alv_grid.
* alv数据发生改变设置刷新
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = lv_grid.
CALL METHOD lv_grid->check_changed_data.
p_selfield-refresh = 'X'. "自动刷新
CASE p_ucomm.
WHEN '&IC1'.
IF p_selfield-fieldname = 'AUFNR'.
READ TABLE gt_result INDEX p_selfield-tabindex.
IF sy-subrc = 0.
IF p_selfield-value IS NOT INITIAL.
SET PARAMETER ID 'BR1' FIELD gt_result-aufnr.
CALL TRANSACTION 'COR2' AND SKIP FIRST SCREEN .
ENDIF.
ENDIF.
ENDIF.
ENDCASE.
ENDFORM.
双击事件的实现:
注释掉的部分实际上实现的相同的操作:含义是: IF p_selfield-sel_tab_field = ‘1-AUFNR’. 如果你点击的是ALV单元格中的’AUFNR’这列,执行以下操作,连接0到p_selfield-value中,读p_selfield-value的值到SAP内存中PARAMETER ID 为 BR1 的部分。
行: p_selfield-tabindex
列名:p_selfield-fieldname
单元格的值:p_field-value