项目部分批导逻辑和函数本身功能类似,所以新建的本程序
执行效果
程序代码
*&---------------------------------------------------------------------** 程序名 : ZBATCH_FUNCIN* 程序类型 : 批导程序* 描述 : 基于函数的批导* 修正 :*&---------------------------------------------------------------------** 000 2022/02/28 - - 新增* 版本 修改日期 修改人员 修改请求号 修改原因*&---------------------------------------------------------------------*REPORT zbatch_funcin.* 通过调用之前实现的接口逻辑 批导相关数据* 由于报错消息问题 通过单条处理*&----------------------------------------------------------------------* Variables*&----------------------------------------------------------------------DATA: gs_layout TYPE lvc_s_layo,gt_fieldcat TYPE lvc_t_fcat.DATA: gv_column_num TYPE i.DATA: gv_struct TYPE rsfbpara-structure.FIELD-SYMBOLS: <gt_display> TYPE STANDARD TABLE.DATA: gv_str TYPE string.DATA: p_noalv TYPE c.*&----------------------------------------------------------------------* Select Screen*&----------------------------------------------------------------------SELECTION-SCREEN BEGIN OF BLOCK blck1 WITH FRAME.PARAMETERS: p_func TYPE rs38l_fnam AS LISTBOX VISIBLE LENGTH 20 MODIF ID fuc USER-COMMAND fuc. " 方法函数SELECTION-SCREEN SKIP." 特殊:非所有字段可通过本函数处理PARAMETERS: p_spcil TYPE c AS CHECKBOX." 自动映射列PARAMETERS: p_auto TYPE c AS CHECKBOX USER-COMMAND aut DEFAULT 'X'.SELECTION-SCREEN SKIP 2." 备注:SELECTION-SCREEN COMMENT 1(40) TEXT-001.SELECTION-SCREEN SKIP." 通过接口处理,第一行需为接口字段名(非中文描述)SELECTION-SCREEN COMMENT 5(40) TEXT-002 MODIF ID aut.SELECTION-SCREEN SKIP." 顶格开始处理,第三行开始读数SELECTION-SCREEN COMMENT 5(40) TEXT-003.SELECTION-SCREEN END OF BLOCK blck1.*&----------------------------------------------------------------------* Initialization*&----------------------------------------------------------------------INITIALIZATION.PERFORM frm_init_funclist.*&----------------------------------------------------------------------* At Selection-Screen Output*&----------------------------------------------------------------------AT SELECTION-SCREEN OUTPUT.LOOP AT SCREEN.IF screen-name = 'P_SPCIL'.screen-input = 0.MODIFY SCREEN.ENDIF.IF screen-group1 = 'AUT'.IF p_auto = ''.screen-output = 0.ELSE.screen-output = 1.ENDIF.MODIFY SCREEN.ENDIF.IF screen-name = 'P_FUNC'.screen-required = 2.MODIFY SCREEN.ENDIF.ENDLOOP.*&----------------------------------------------------------------------* Start-Of-Selection*&----------------------------------------------------------------------AT SELECTION-SCREEN.IF p_func = 'ZFMPS_201'.p_spcil = ''.ELSE.p_spcil = 'X'.ENDIF.*&----------------------------------------------------------------------* Start-Of-Selection*&----------------------------------------------------------------------START-OF-SELECTION.IF p_func IS INITIAL.MESSAGE s055(00) DISPLAY LIKE 'E'.STOP.ENDIF.PERFORM frm_check_func.PERFORM frm_init_column. " 初始化列 及 内表PERFORM frm_upload_field. " 上载数据PERFORM frm_set_layout.PERFORM frm_alv_display.*&---------------------------------------------------------------------**& Form frm_init_funclist*&---------------------------------------------------------------------**& 初始化 函数列表*&---------------------------------------------------------------------*FORM frm_init_funclist .DATA: lv_name TYPE vrm_id,lt_list TYPE vrm_values,ls_value LIKE LINE OF lt_list.ls_value-key = 'ZFMSD_201'.ls_value-text = '客户创建'.APPEND ls_value TO lt_list.CLEAR ls_value.ls_value-key = 'ZFMPS_201'.ls_value-text = '项目创建'.APPEND ls_value TO lt_list.CLEAR ls_value.lv_name = 'P_FUNC'.CALL FUNCTION 'VRM_SET_VALUES'EXPORTINGid = lv_namevalues = lt_list.ENDFORM.*&---------------------------------------------------------------------**& Form frm_init_column*&---------------------------------------------------------------------**& 初始化列*&---------------------------------------------------------------------*FORM frm_init_column .DATA: lcl_comps_struct TYPE REF TO cl_abap_structdescr.DATA: lv_structure TYPE rsfbpara-structure." 结构DATA: lt_comps_struct TYPE abap_component_tab.DATA: lo_req_tab TYPE REF TO data.DATA: lt_dfies TYPE ddfields.DATA: lv_inside TYPE i." 此部分仅按结构处理CASE p_func.WHEN 'ZFMSD_201'.lv_structure = 'ZSSD201'.lv_inside = 6.WHEN 'ZFMPS_201'.lv_structure = 'ZSPS201'.WHEN OTHERS.MESSAGE '未编写相关逻辑' TYPE 'S' DISPLAY LIKE 'E'.STOP.ENDCASE.gv_struct = lv_structure." 获取结构字段lcl_comps_struct ?= cl_abap_typedescr=>describe_by_name( lv_structure ).lt_comps_struct = lcl_comps_struct->get_components( )." 总列数gv_column_num = lines( lt_comps_struct ) + lv_inside." 新增用于显示的字段INSERT VALUE #( name = 'MSG' type = cl_abap_elemdescr=>get_c( '50' ) ) INTO lt_comps_struct INDEX 1.INSERT VALUE #( name = 'ICON' type = cl_abap_elemdescr=>get_c( '4' ) ) INTO lt_comps_struct INDEX 1." 创建 显示内表DATA(lo_req_type) = cl_abap_structdescr=>create( lt_comps_struct ).DATA(lo_req_tabdesc) = cl_abap_tabledescr=>create(p_line_type = lo_req_typep_table_kind = cl_abap_tabledescr=>tablekind_stdp_unique = abap_false ).CREATE DATA lo_req_tab TYPE HANDLE lo_req_tabdesc.ASSIGN lo_req_tab->* TO <gt_display>." 生成 fieldcatlt_dfies = cl_salv_data_descr=>read_structdescr( lo_req_type ).MOVE-CORRESPONDING lt_dfies TO gt_fieldcat.LOOP AT gt_fieldcat ASSIGNING FIELD-SYMBOL(<ls_fieldcat>).CASE <ls_fieldcat>-fieldname.WHEN 'ICON'.<ls_fieldcat>-seltext = 'icon'.<ls_fieldcat>-coltext = 'icon'.WHEN 'MSG'.<ls_fieldcat>-seltext = 'message'.<ls_fieldcat>-coltext = 'message'.WHEN OTHERS.ENDCASE.ENDLOOP.ENDFORM.*&---------------------------------------------------------------------**& Form frm_upload_field*&---------------------------------------------------------------------**& 上载数据*&---------------------------------------------------------------------*FORM frm_upload_field .DATA: lt_upload LIKE TABLE OF zalsmex_tabline1.DATA: lv_path TYPE rlgrap-filename.DATA: lt_fieldcat LIKE gt_fieldcat.DATA: lr_export TYPE REF TO data,lr_line TYPE REF TO data.DATA: lt_fieldnames TYPE TABLE OF lvc_fname.FIELD-SYMBOLS: <lt_import> TYPE STANDARD TABLE.MOVE-CORRESPONDING gt_fieldcat TO lt_fieldcat.DELETE lt_fieldcat WHERE fieldname = 'ICON'.DELETE lt_fieldcat WHERE fieldname = 'MSG'.LOOP AT lt_fieldcat ASSIGNING FIELD-SYMBOL(<ls_fieldcat>).CLEAR <ls_fieldcat>-tabname.<ls_fieldcat>-datatype = 'CHAR'.<ls_fieldcat>-inttype = 'C'.<ls_fieldcat>-intlen = '255'.<ls_fieldcat>-domname = 'CHAR255'.CLEAR <ls_fieldcat>-ref_table.ENDLOOP." 创建内表CALL METHOD cl_alv_table_create=>create_dynamic_tableEXPORTINGit_fieldcatalog = lt_fieldcatIMPORTINGep_table = lr_exportEXCEPTIONSgenerate_subpool_dir_full = 1OTHERS = 2.IF sy-subrc <> 0.MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgnoWITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.ENDIF.ASSIGN lr_export->* TO <lt_import>.CREATE DATA lr_line LIKE LINE OF <lt_import>.ASSIGN lr_line->* TO FIELD-SYMBOL(<ls_import>).CALL FUNCTION 'WS_FILENAME_GET'EXPORTINGdef_path = 'C'mode = 'O'title = '打开文件'IMPORTINGfilename = lv_pathEXCEPTIONSinv_winsys = 1no_batch = 2selection_cancel = 3selection_error = 4OTHERS = 5.IF sy-subrc <> 0.MESSAGE '用户已取消' TYPE 'S' DISPLAY LIKE 'E'.STOP.ENDIF.CALL FUNCTION 'ZALSM_EXCEL_TO_INTERNAL_TABLE'EXPORTINGfilename = lv_pathi_begin_col = 1i_begin_row = 1i_end_col = gv_column_numi_end_row = 50000TABLESintern = lt_uploadEXCEPTIONSinconsistent_parameters = 1upload_ole = 2OTHERS = 3.IF sy-subrc <> 0.MESSAGE e001(00) WITH 'EXCELL:' lv_path '打开失败!' .ENDIF.LOOP AT lt_upload INTO DATA(ls_upload)." --> 特殊逻辑" CONTINUE 之后 不会执行 后续所有语句(包含AT END)" 第一行作为内表IF ls_upload-row = 1 AND p_auto = 'X'.APPEND ls_upload-value TO lt_fieldnames.CONTINUE.ENDIF." 第二行跳过CHECK ls_upload-row <> 2.IF p_auto = ''.ASSIGN COMPONENT ls_upload-col OF STRUCTURE <ls_import> TO FIELD-SYMBOL(<lv_value>).IF sy-subrc = 0 AND <lv_value> IS ASSIGNED.<lv_value> = ls_upload-value.ENDIF.ELSE.READ TABLE lt_fieldnames INTO DATA(lv_fieldname) INDEX ls_upload-col.IF sy-subrc = 0.ASSIGN COMPONENT lv_fieldname OF STRUCTURE <ls_import> TO FIELD-SYMBOL(<lv_auto>).IF sy-subrc = 0 AND <lv_auto> IS ASSIGNED.<lv_auto> = ls_upload-value.ENDIF.ENDIF.ENDIF." <--AT END OF row.APPEND <ls_import> TO <lt_import>.CLEAR <ls_import>.ENDAT.ENDLOOP.MOVE-CORRESPONDING <lt_import> TO <gt_display>.ENDFORM.*&---------------------------------------------------------------------**& Form FRM_SET_LAYOUT*&---------------------------------------------------------------------**& 设置 layout*&---------------------------------------------------------------------*FORM frm_set_layout .gs_layout = VALUE #(zebra = 'X'cwidth_opt = 'X').ENDFORM.*&---------------------------------------------------------------------**& Form FRM_ALV_DISPLAY*&---------------------------------------------------------------------**& alv 展示*&---------------------------------------------------------------------*FORM frm_alv_display .DATA: lt_events TYPE slis_t_event,ls_events TYPE slis_alv_event.DATA: lv_lines TYPE i.lv_lines = lines( <gt_display> ).IF lv_lines <> 0.MESSAGE s004(zpp01) WITH lv_lines. " 查到 & 条数据ENDIF.CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'EXPORTINGi_callback_program = sy-repidis_layout_lvc = gs_layoutit_fieldcat_lvc = gt_fieldcati_callback_pf_status_set = 'FRM_PF_STATUS'i_callback_user_command = 'FRM_USER_COMMAND'it_events = lt_events[]TABLESt_outtab = <gt_display>EXCEPTIONSprogram_error = 1OTHERS = 2.IF sy-subrc <> 0.MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgnoWITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.ENDIF.ENDFORM.*&---------------------------------------------------------------------**& Form FRM_PF_STATUS*&---------------------------------------------------------------------** toolbar 设置*----------------------------------------------------------------------*FORM frm_pf_status USING p_extab TYPE slis_t_extab.DATA: lt_extab TYPE slis_t_extab.MOVE-CORRESPONDING p_extab TO lt_extab.SET PF-STATUS 'STANDARD' EXCLUDING lt_extab.ENDFORM.*&---------------------------------------------------------------------**& Form FRM_USER_COMMAND*&---------------------------------------------------------------------** 点击事件处理*----------------------------------------------------------------------*FORM frm_user_command USING p_ucomm LIKE sy-ucommp_ls_selfield TYPE slis_selfield.DATA: lr_grid TYPE REF TO cl_gui_alv_grid.DATA: lt_rows TYPE lvc_t_row,ls_row TYPE lvc_s_row.DATA: lv_subrc TYPE i.CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'IMPORTINGe_grid = lr_grid.lr_grid->check_changed_data( ).CASE p_ucomm.WHEN 'CAL_FUNC'.PERFORM frm_call_function.WHEN OTHERS.ENDCASE.lr_grid->check_changed_data( ).p_ls_selfield-refresh = 'X'.p_ls_selfield-col_stable = 'X' .p_ls_selfield-row_stable = 'X' .ENDFORM.*&---------------------------------------------------------------------**& Form frm_call_function*&---------------------------------------------------------------------**& 调用函数*&---------------------------------------------------------------------*FORM frm_call_function .DATA: ls_zssd201 TYPE zssd201.DATA: ls_zsps201 TYPE zsps201,lt_zttps201 TYPE zttps201.DATA: ls_result TYPE zsxx001,lv_kunnr TYPE kunnr.CASE p_func.WHEN 'ZFMSD_201'.LOOP AT <gt_display> ASSIGNING FIELD-SYMBOL(<ls_display>).MOVE-CORRESPONDING <ls_display> TO ls_zssd201.MOVE-CORRESPONDING <ls_display> TO ls_zssd201-sale.CALL FUNCTION 'ZFMSD_201'EXPORTINGi_bphead = ls_zssd201IMPORTINGresult = ls_resultkunnr = lv_kunnr.ASSIGN COMPONENT 'ICON' OF STRUCTURE <ls_display> TO FIELD-SYMBOL(<lv_icon>).IF sy-subrc = 0.IF ls_result-type = 'S'.<lv_icon> = icon_led_green.ELSE.<lv_icon> = icon_led_red.ENDIF.ENDIF.ASSIGN COMPONENT 'MSG' OF STRUCTURE <ls_display> TO FIELD-SYMBOL(<lv_msg>).IF sy-subrc = 0.IF ls_result-type = 'S'.<lv_msg> = lv_kunnr.ELSE.<lv_msg> = ls_result-message.ENDIF.ENDIF.CLEAR: ls_zssd201, ls_result, lv_kunnr.ENDLOOP.WHEN 'ZFMPS_201'.LOOP AT <gt_display> ASSIGNING FIELD-SYMBOL(<ls_ps201>).MOVE-CORRESPONDING <ls_ps201> TO ls_zsps201.APPEND ls_zsps201 TO lt_zttps201.CALL FUNCTION 'ZFMPS_201'EXPORTINGinput = lt_zttps201IMPORTINGresult = ls_result.ASSIGN COMPONENT 'ICON' OF STRUCTURE <ls_ps201> TO <lv_icon>.IF sy-subrc = 0.IF ls_result-type = 'S'.<lv_icon> = icon_led_green.ELSE.<lv_icon> = icon_led_red.ENDIF.ENDIF.ASSIGN COMPONENT 'MSG' OF STRUCTURE <ls_ps201> TO <lv_msg>.IF sy-subrc = 0.IF ls_result-type = 'S'.<lv_msg> = lv_kunnr.ELSE.<lv_msg> = ls_result-message.ENDIF.ENDIF.CLEAR: ls_zsps201, lt_zttps201, ls_result.ENDLOOP.WHEN OTHERS.MESSAGE '未编写相关逻辑' TYPE 'S' DISPLAY LIKE 'E'.STOP.ENDCASE.ENDFORM.*&---------------------------------------------------------------------**& Form FRM_CHECK_FUNC*&---------------------------------------------------------------------**& 检查函数是否存在*&---------------------------------------------------------------------*FORM frm_check_func .CALL FUNCTION 'FUNCTION_EXISTS'EXPORTINGfuncname = p_funcEXCEPTIONSfunction_not_exist = 1OTHERS = 2.IF sy-subrc <> 0.MESSAGE '未找到对应的函数' TYPE 'S' DISPLAY LIKE 'E'.STOP.ENDIF.ENDFORM.*&---------------------------------------------------------------------**& Form FRM_CALL_FUNC_DIRECT*&---------------------------------------------------------------------**& 使用接口的方式调用函数*&---------------------------------------------------------------------*FORM frm_call_func_direct .DATA: ls_header TYPE header_fb,lt_tables TYPE rsfb_para,lt_import TYPE rsfb_para,lt_export TYPE rsfb_para,lt_change TYPE rsfb_para.DATA: lt_parameter TYPE rsfb_para.DATA: lt_ptab TYPE abap_func_parmbind_tab,ls_ptab TYPE abap_func_parmbind,lt_ptab_temp TYPE abap_func_parmbind_tab,lt_etab TYPE abap_func_excpbind_tab.DATA: lv_kind TYPE i .DATA: lo_table TYPE REF TO data.FIELD-SYMBOLS: <fs_table> TYPE ANY TABLE.DATA: lt_dyn_comp TYPE cl_abap_structdescr=>component_table,ls_dyn_comp LIKE LINE OF lt_dyn_comp.DATA: lo_req_tab TYPE REF TO data,lo_req_data TYPE REF TO data,lo_res_tab TYPE REF TO data,lo_res_data TYPE REF TO data.DATA: lv_exception TYPE char01 .FIELD-SYMBOLS: <fs_req_tab> TYPE ANY TABLE.FIELD-SYMBOLS: <fs_res_tab> TYPE ANY TABLE.FIELD-SYMBOLS: <ls_req_data> TYPE any.FIELD-SYMBOLS: <ls_res_data> TYPE any.DATA: lv_str TYPE string.DATA: lr_xml TYPE REF TO cl_xml_document.SELECT SINGLE*INTO @DATA(ls_in_conf)FROM ztapi_in_confWHERE func_name EQ @p_func.IF sy-subrc <> 0.MESSAGE '未找到对应配置' TYPE 'S' DISPLAY LIKE 'E'.STOP.ENDIF." 回找配置文件SELECT SINGLE json_mode FROM ztapi_main_confINTO @DATA(lv_json_mode)WHERE api_no = @ls_in_conf-api_no." 函数参数结构读取ls_header-name = ls_in_conf-func_name.ls_header-state = 'A' .CALL METHOD cl_fb_parameter_db=>readIMPORTINGtables = lt_tablesimport = lt_importexport = lt_exportchange = lt_changeCHANGINGheader = ls_header.APPEND LINES OF lt_import TO lt_parameter.APPEND LINES OF lt_export TO lt_parameter.APPEND LINES OF lt_change TO lt_parameter.APPEND LINES OF lt_tables TO lt_parameter.LOOP AT lt_parameter INTO DATA(ls_parameter).IF ls_parameter-parameter = 'COMMON_INFO_REQ' ORls_parameter-parameter = 'COMMON_INFO_RES'.CONTINUE.ENDIF.IF ls_parameter-typefield = 'LIKE'.CREATE DATA lo_table TYPE STANDARD TABLE OF (ls_parameter-structure).ASSIGN lo_table->* TO <fs_table>.CLEAR ls_dyn_comp.ls_dyn_comp-name = ls_parameter-parameter.ls_dyn_comp-type ?= cl_abap_tabledescr=>describe_by_data( <fs_table> ).APPEND ls_dyn_comp TO lt_dyn_comp.ELSEIF ls_parameter-typefield = 'TYPE'.CLEAR ls_dyn_comp.ls_dyn_comp-name = ls_parameter-parameter.ls_dyn_comp-type ?= cl_abap_tabledescr=>describe_by_name( ls_parameter-structure ).APPEND ls_dyn_comp TO lt_dyn_comp.ENDIF.ENDLOOP.DATA(lo_req_type) = cl_abap_structdescr=>create( lt_dyn_comp ).DATA(lo_req_tabdesc) = cl_abap_tabledescr=>create(p_line_type = lo_req_typep_table_kind = cl_abap_tabledescr=>tablekind_stdp_unique = abap_false ).CREATE DATA lo_req_tab TYPE HANDLE lo_req_tabdesc.ASSIGN lo_req_tab->* TO <fs_req_tab>.CREATE DATA lo_req_data LIKE LINE OF <fs_req_tab>.ASSIGN lo_req_data->* TO <ls_req_data>./ui2/cl_json=>deserialize(EXPORTINGjson = gv_strpretty_name = lv_json_modeCHANGINGdata = <ls_req_data> ).LOOP AT lt_parameter INTO ls_parameter.CLEAR lt_ptab_temp .CASE ls_parameter-paramtype.WHEN 'I'.lv_kind = abap_func_exporting .WHEN 'E'.lv_kind = abap_func_importing.WHEN 'T'.lv_kind = abap_func_tables.WHEN 'C'.lv_kind = abap_func_changing.WHEN OTHERS.ENDCASE.ASSIGN COMPONENT ls_parameter-parameter OF STRUCTURE <ls_req_data>TO FIELD-SYMBOL(<fs_para_data>).CLEAR ls_ptab.ls_ptab-name = ls_parameter-parameter.ls_ptab-kind = lv_kind.GET REFERENCE OF <fs_para_data> INTO ls_ptab-value.INSERT ls_ptab INTO TABLE lt_ptab.ENDLOOP.lt_etab = VALUE #( ( name = 'OTHERS' value = 10 ) ) .TRY .CALL FUNCTION ls_in_conf-func_namePARAMETER-TABLE lt_ptabEXCEPTION-TABLE lt_etab.CATCH cx_root INTO DATA(lr_root) .lv_exception = 'X' .ENDTRY .IF lv_exception = 'X'.MESSAGE 'ERP端API调用异常' TYPE 'S' DISPLAY LIKE 'E'.STOP.ENDIF.DATA(lt_res_comp) = lt_dyn_comp.LOOP AT lt_parameter INTO ls_parameter.IF ls_parameter-paramtype = 'I'.READ TABLE lt_res_comp TRANSPORTING NO FIELDSWITH KEY name = ls_parameter-parameter.IF sy-subrc = 0.DELETE lt_res_comp INDEX sy-tabix.ENDIF.ENDIF.ENDLOOP.DATA(lo_res_type) = cl_abap_structdescr=>create( lt_res_comp ).DATA(lo_res_tabdesc) = cl_abap_tabledescr=>create(p_line_type = lo_res_typep_table_kind = cl_abap_tabledescr=>tablekind_stdp_unique = abap_false ).CREATE DATA lo_res_tab TYPE HANDLE lo_res_tabdesc.ASSIGN lo_res_tab->* TO <fs_res_tab>.CREATE DATA lo_res_data LIKE LINE OF <fs_res_tab>.ASSIGN lo_res_data->* TO <ls_res_data>.LOOP AT lt_ptab INTO ls_ptab.ASSIGN COMPONENT ls_ptab-name OF STRUCTURE <ls_res_data>TO FIELD-SYMBOL(<fs_comp>).IF sy-subrc = 0.ASSIGN ls_ptab-value->* TO <fs_para_data>.<fs_comp> = <fs_para_data>.ENDIF.ENDLOOP./ui2/cl_json=>serialize(EXPORTINGdata = <ls_res_data>pretty_name = lv_json_modeRECEIVINGr_json = lv_str ) ." JSON 展示TRY.CALL TRANSFORMATION sjson2html SOURCE XML lv_strRESULT XML DATA(lv_html).CATCH cx_xslt_runtime_error INTO DATA(lo_err).DATA(lv_err_text) = lo_err->get_text( ).MESSAGE lv_err_text TYPE 'S' DISPLAY LIKE 'E'.STOP .ENDTRY.DATA(lv_convert) = cl_abap_codepage=>convert_from( lv_html ).lr_xml = NEW cl_xml_document( ).IF lr_xml->parse_string( stream = lv_convert ).lr_xml->display( ).ELSE.MESSAGE '展示失败' TYPE 'S' DISPLAY LIKE 'E'.cl_demo_output=>display( <ls_res_data> ).ENDIF.ENDFORM.
