- 了解SAP内存:http://t.csdnimg.cn/J7cGz
- 假设一个场景:程序A需要某些特定的数据,但是获取数据的方式太麻烦了,耗时又耗力,恰巧程序B有特定数据的取数逻辑,那么可以在程序A设置调用程序B的程序,在程序B运行结束前把需要的数据存储到ABAP内存中,执行完程序B返回程序A继续执行取出ABAP内存中的所需数据。
- 为什么是ABAP内存,一个GUI窗口在运行程序A又运行程序B(一个外部Session内有两个内部session)
- 流程简化
- 程序A执行过程中调用程序B,在程序B执行完并返回程序A继续执行直到结束。
REPORT z_abap_memorey_02. "调用程序z_abap_memorey_01并返回原程序 SUBMIT z_abap_memorey_01 AND RETURN. ...
- 程序B执行时把向ABAP内存'ID01'存入数据
REPORT z_abap_memorey_01. "向ABAP内存'ID01'存入数据 EXPORT et_data TO MEMORY ID 'ID01'.
- 程序A在程序B执行完后,从ABAP内存'ID01'取出数据
REPORT z_abap_memorey_02. "调用程序z_abap_memorey_01 SUBMIT z_abap_memorey_01 AND RETURN. 从ABAP内存'ID01'取出数据 IMPORT gt_data FROM MEMORY ID 'ID01'.
- 程序A代码
TYPES:BEGIN OF ty_data, name TYPE char10, score TYPE p LENGTH 2 DECIMALS 1, END OF ty_data. DATA gt_data TYPE TABLE OF ty_data. "调用程序z_abap_memorey_01并返回 SUBMIT z_abap_memorey_01 AND RETURN. IMPORT t = gt_data FROM MEMORY ID 'ID01'. LOOP AT gt_data INTO DATA(gw_data). WRITE:gw_data-name,gw_data-score. SKIP. ENDLOOP.
- 程序B代码
TYPES:BEGIN OF ty_data, name TYPE char10, score TYPE p LENGTH 2 DECIMALS 1, END OF ty_data. DATA et_data TYPE TABLE OF ty_data. et_data[] = VALUE #( ( name = 'TOM' score = '58.5') ( name = 'JEERY' score = '98.5') ( name = 'MASTER' score = '68.5') ). EXPORT t = et_data TO MEMORY ID 'ID01'.