文章目录
1.SAP内存分类
2.内部会话中程序之间的调用
3.ALV双击事件中调用事务码并实现窗口与SAP内存之件的读写访问
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 //这里一般传的是PARAMWTER 中拿到的数据
WITH s_1 in s_1 //这里一般传参数传的是SELECTION-OPTIONS 中拿到的数据 ,当然也可以从RANGES 内表中拿,SELECT-OPTIONS和RANGES 都是带有表头行的内表
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-sel_tab_field = '1-AUFNR'.
IF p_selfield-fieldname = 'AUFNR'.
READ TABLE gt_result INDEX p_selfield-tabindex.
IF sy-subrc = 0.
IF p_selfield-value IS NOT INITIAL.
// CONCATENATE '00' p_selfield-value INTO p_selfield-value.
// CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
// EXPORTING
// input = p_selfield-value
// IMPORTING
// OUTPUT = p_selfield-value.
SET PARAMETER ID 'BR1' FIELD gt_result-aufnr.
// p_selfield-value.
CALL TRANSACTION 'COR2' AND SKIP FIRST SCREEN .
ENDIF.
ENDIF.
ENDIF.
// ENDIF.
ENDCASE.
ENDFORM.
双击事件的实现:
- List item在ALV按钮部分功能 中加入 WHEN '&IC1’这个选项,它既可以指代单击,也可以指代双击。
- 单击时一般要设置热点
(1)可以在相应列的Fieldcat中打上X
WA_FIELDCAT-HOTSPOT = ‘X’.其中 WA_FIELDCAT TYPE LINE OF SLIS_T_FIELDCAT_ALV,
(2)也可以在 layout 中的key-hotspot打上X. - SE41中拷贝标准GUI状态
- 程序中给出的代码含义:先确定双击后所在列。双击所在的列名为AUFNR情况下,才会根据双击的单元格行读展示ALV展示用表,这个时候已经根据行列确定了唯一的一个单元格。如果p_selfield-value单元格内容不空,读gt_result-aufnr 到SAP内存中PARAMETER ID 为 BR1 的部分。
注释掉的部分实际上实现的相同的操作:含义是: 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