SAP ABAP - Submit a program and get data from ALV
Updated: Aug 29, 2022
"" Here is an example function module for getting data from submitted program
FUNCTION zbpksdf_004_get_data_alv01.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" REFERENCE(IS_PARAMS) TYPE ZBPKSD_S_004_PARAMS
*" REFERENCE(IS_SELOPT) TYPE ZBPKSD_S_004_SELOPT
*" EXPORTING
*" REFERENCE(ET_LIST) TYPE ZBPKSD_TT_004_ARCMTR_ALV01
*" EXCEPTIONS
*" ALV_NOT_REACHED
*" NO_DATA
*"----------------------------------------------------------------------
*
""" Serkan Durdağ Begin 30.06.2018 12:12:33
DATA : t_sscren TYPE TABLE OF rsparams,
gt_data TYPE TABLE OF zsd_s_arcmtr.
DATA: lo_struct_param TYPE REF TO cl_abap_structdescr,
lt_comp_param TYPE abap_component_tab,
ls_comp_param TYPE abap_componentdescr.
DATA: lo_struct_selop TYPE REF TO cl_abap_structdescr,
lt_comp_selop TYPE abap_component_tab,
ls_comp_selop TYPE abap_componentdescr.
lo_struct_param ?= cl_abap_typedescr=>describe_by_data( is_params ).
lt_comp_param = lo_struct_param->get_components( ).
lo_struct_selop ?= cl_abap_typedescr=>describe_by_data( is_selopt ).
lt_comp_selop = lo_struct_selop->get_components( ).
LOOP AT lt_comp_param REFERENCE INTO DATA(lr_comp).
ASSIGN COMPONENT lr_comp->name OF STRUCTURE is_params
TO FIELD-SYMBOL(<lv_param_val>).
IF <lv_param_val> IS ASSIGNED.
APPEND INITIAL LINE TO t_sscren REFERENCE INTO DATA(lr_sel_screen).
lr_sel_screen->selname = lr_comp->name.
lr_sel_screen->kind = 'P'.
lr_sel_screen->low = <lv_param_val>.
ENDIF.
ENDLOOP.
FIELD-SYMBOLS : <lt_selop_tab> TYPE STANDARD TABLE.
LOOP AT lt_comp_selop REFERENCE INTO lr_comp.
ASSIGN COMPONENT lr_comp->name OF STRUCTURE is_selopt TO <lt_selop_tab>.
IF <lv_param_val> IS ASSIGNED.
LOOP AT <lt_selop_tab> ASSIGNING FIELD-SYMBOL(<ls_selop_tab>).
ASSIGN COMPONENT 'SIGN' OF STRUCTURE <ls_selop_tab>
TO FIELD-SYMBOL(<lv_sign>).
ASSIGN COMPONENT 'OPTION' OF STRUCTURE <ls_selop_tab>
TO FIELD-SYMBOL(<lv_option>).
ASSIGN COMPONENT 'LOW' OF STRUCTURE <ls_selop_tab>
TO FIELD-SYMBOL(<lv_low>).
ASSIGN COMPONENT 'HIGH' OF STRUCTURE <ls_selop_tab>
TO FIELD-SYMBOL(<lv_high>).
APPEND INITIAL LINE TO t_sscren REFERENCE INTO lr_sel_screen.
lr_sel_screen->selname = lr_comp->name.
lr_sel_screen->kind = 'S'.
lr_sel_screen->sign = <lv_sign>.
lr_sel_screen->option = <lv_option>.
lr_sel_screen->low = <lv_low>.
lr_sel_screen->high = <lv_high>.
ENDLOOP.
ENDIF.
ENDLOOP.
cl_salv_bs_runtime_info=>set( EXPORTING display = abap_false
metadata = abap_false
data = abap_true ).
SUBMIT zsd_r_arcmtr WITH SELECTION-TABLE t_sscren AND RETURN.
TRY.
FIELD-SYMBOLS : <lt_pay_data> TYPE ANY TABLE .
DATA lr_pay_data TYPE REF TO data.
cl_salv_bs_runtime_info=>get_data_ref( IMPORTING r_data = lr_pay_data ).
ASSIGN lr_pay_data->* TO <lt_pay_data>.
CATCH cx_salv_bs_sc_runtime_info.
RAISE alv_not_reached.
ENDTRY.
cl_salv_bs_runtime_info=>clear_all( ).
LOOP AT <lt_pay_data> ASSIGNING FIELD-SYMBOL(<ls_pay_data>).
APPEND INITIAL LINE TO et_list REFERENCE INTO DATA(lr_list).
MOVE-CORRESPONDING <ls_pay_data> TO lr_list->*.
ENDLOOP.
""" Serkan Durdağ End 30.06.2018 12:12:33
ENDFUNCTION.