调用程序(该程序只是负责取数)
REPORT ztest_pillar.*----------------------------------------------------------------------** define internal tables* 定义内表**----------------------------------------------------------------------*DATA : BEGIN OF W_DATA, sel_box type c, FID1 TYPE STRING, NUM1 TYPE I , NUM2 TYPE I ,END OF W_DATA.DATA : T_OUT LIKE W_DATA OCCURS 0 WITH HEADER LINE .*----------------------------------------------------------------------** assign value to internal tables* 给内表赋值**----------------------------------------------------------------------*DO 10 TIMES .IF SY-INDEX < 4 .T_OUT-FID1 = 'A' .T_OUT-NUM1 = SY-INDEX .T_OUT-NUM2 = SY-INDEX + 1 .ELSEIF SY-INDEX < 7 .T_OUT-FID1 = 'B' .T_OUT-NUM1 = SY-INDEX + 1 .T_OUT-NUM2 = SY-INDEX + 2 .ELSE .T_OUT-FID1 = 'C' .T_OUT-NUM1 = SY-INDEX .T_OUT-NUM2 = SY-INDEX - 1 .ENDIF .APPEND T_OUT.ENDDO .*-----------------------------------------------------------------------** call extenral program* 调用外部程序**-----------------------------------------------------------------------**** 使用ABAP内存进行数据传递EXPORT T_OUT TO MEMORY ID 'T_OUT' .*** 以下两种情况是调用程序被结束,被调用程序开始执行* SUBMIT ZWRITE_DATA.*** 如果使用这种情况程序之间的数据访问就不能ABAP内存访问了* LEAVE TO TRANSACTION 'ZGET_DATA'.*** 以下两种情况是调用程序被打断,当被调用程序执行完毕之后,调用程序继续执行* 插入一个新的INTERNAL SESSION,被调用程序运行完删除SESSION,继续执行调用程序SUBMIT Zwrite_data AND RETURN .
被调用程序(负责显示和打印)
REPORT zwrite_data.TYPE-POOLS: slis.tables sflight.*----------------------------------------------------------------------** define internal tables* 定义内表**----------------------------------------------------------------------*DATA : BEGIN OF w_data, "这里定义一个跟调用程序一样的内表结构sel_box TYPE c,fid1 TYPE string,num1 TYPE i ,num2 TYPE i ,END OF w_data.DATA : t_out LIKE w_data OCCURS 0 WITH HEADER LINE .*alv parametersDATA gt_fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE.DATA layout TYPE slis_layout_alv.*parameters text type sflight-connid.*----------------------------------------------------------------------** get data from sap memory and write out* 从SAP内存读取数据然后打印输出**----------------------------------------------------------------------*START-OF-SELECTION.REFRESH t_out.IMPORT t_out FROM MEMORY ID 'T_OUT' .*t_out-fid1 = 'a'.*t_out-num1 = '1'.*t_out-num2 = '2'.*APPEND t_out.IF t_out[] IS INITIAL. MESSAGE '内表数据为空' TYPE 'I'. stop.ENDIF.FREE MEMORY ID 'T_OUT'.PERFORM f_build_catlog.PERFORM f_display.END-OF-SELECTION.*write 'love'.FORM f_build_catlog .DATA l_count TYPE i VALUE 0.DEFINE build_catlog. add 1 to l_count. gt_fieldcat-col_pos = l_count. gt_fieldcat-fieldname = &1. gt_fieldcat-seltext_m = &2. append gt_fieldcat.END-OF-DEFINITION.build_catlog 'FID1' '变量1'.build_catlog 'NUM1' '变量2'.build_catlog 'NUM2' '变量3'.layout-box_fieldname = 'SEL_BOX'.ENDFORM. " F_BUILD_CATLOGFORM f_display .CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_callback_program = sy-repid i_callback_pf_status_set = 'F_STATUS_SET' i_callback_user_command = 'F_USER_COMMAND' is_layout = layout it_fieldcat = gt_fieldcat[] TABLES t_outtab = t_out EXCEPTIONS program_error = 1 OTHERS = 2. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF.ENDFORM. " F_DISPLAYFORM f_status_set USING rt_extab TYPE slis_t_extab. SET PF-STATUS 'STATUS001' EXCLUDING rt_extab.ENDFORM. "SET_PF_STATUSFORM f_user_command USING r_comm LIKE sy-ucomm rs_selfield TYPE slis_selfield. CASE r_comm. WHEN 'BACK'. LEAVE TO LIST-PROCESSING. WHEN 'CANCEL'. LEAVE TO TRANSACTION 'SE80'. WHEN 'PRINT'. PERFORM f_print. WHEN OTHERS. ENDCASE.ENDFORM. "USER_COMMANDFORM f_print .CALL FUNCTION '/1BCDWB/SF00000413'.ENDFORM. " F_PRINT