动态生成内表/ui2/cl_jsonsjson2htmlcl_abap_structdescrcl_abap_tabledescr
TYPES:BEGIN OF ty_data,
carrid TYPE sflight-carrid,
connid TYPE sflight-connid,
fldate TYPE sflight-fldate,
END OF ty_data.
DATA:lt_data TYPE TABLE OF ty_data.
TYPES:BEGIN OF ty_request,
data LIKE lt_data,
END OF ty_request.
DATA ls_request TYPE ty_request.
FIELD-SYMBOLS:<dyn_table> TYPE table,
<dyn_wa> TYPE any,
<dyn_field> TYPE any.
DATA: dy_table TYPE REF TO data,
dy_line TYPE REF TO data,
it_structure TYPE lvc_t_fcat,
wa_structure TYPE lvc_s_fcat.
DATA: lt_req_comp TYPE cl_abap_structdescr=>component_table,
ls_req_comp LIKE LINE OF lt_req_comp.
DATA: lo_req_tab TYPE REF TO data,
lo_req_data TYPE REF TO data.
FIELD-SYMBOLS: <lt_req_data> TYPE STANDARD TABLE.
FIELD-SYMBOLS: <ls_req_data> TYPE any.
CLEAR:wa_structure.
wa_structure-fieldname = 'CARRID'.
wa_structure-col_pos = 1.
wa_structure-ref_table = 'SFLIGHT'.
wa_structure-ref_field = 'CARRID'.
APPEND wa_structure TO it_structure.
CLEAR:wa_structure.
wa_structure-fieldname = 'CONNID'.
wa_structure-col_pos = 1.
wa_structure-ref_table = 'SFLIGHT'.
wa_structure-ref_field = 'CONNID'.
APPEND wa_structure TO it_structure.
CLEAR:wa_structure.
wa_structure-fieldname = 'FLDATE'.
wa_structure-col_pos = 1.
wa_structure-ref_table = 'SFLIGHT'.
wa_structure-ref_field = 'FLDATE'.
APPEND wa_structure TO it_structure.
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = it_structure
IMPORTING
ep_table = dy_table.
ASSIGN dy_table->* TO <dyn_table>.
CREATE DATA dy_line LIKE LINE OF <dyn_table>.
ASSIGN dy_line->* TO <dyn_wa>.
" --> 导出结构
CLEAR ls_req_comp.
ls_req_comp-name = 'CARRID'.
ls_req_comp-type ?= cl_abap_tabledescr=>describe_by_name( 'S_CARR_ID' ).
APPEND ls_req_comp TO lt_req_comp.
CLEAR ls_req_comp.
ls_req_comp-name = 'CONNID'.
ls_req_comp-type ?= cl_abap_tabledescr=>describe_by_name( 'S_CONN_ID' ).
APPEND ls_req_comp TO lt_req_comp.
CLEAR ls_req_comp.
ls_req_comp-name = 'TABLE'.
ls_req_comp-type ?= cl_abap_tabledescr=>describe_by_data( <dyn_table> ).
APPEND ls_req_comp TO lt_req_comp.
" 生成对象
DATA(lo_req_type) = cl_abap_structdescr=>create( lt_req_comp ).
DATA(lo_req_tabdesc) = cl_abap_tabledescr=>create(
p_line_type = lo_req_type
p_table_kind = cl_abap_tabledescr=>tablekind_std
p_unique = abap_false ).
CREATE DATA lo_req_tab TYPE HANDLE lo_req_tabdesc.
ASSIGN lo_req_tab->* TO <lt_req_data>.
CREATE DATA lo_req_data LIKE LINE OF <lt_req_data>.
ASSIGN lo_req_data->* TO <ls_req_data>.
" <--
" --> 动态查数
DATA: lv_sql TYPE string,
lv_tab TYPE string.
lv_sql = 'CARRID FLDATE'.
lv_tab = 'SFLIGHT'.
SELECT (lv_sql) FROM (lv_tab) INTO CORRESPONDING FIELDS OF TABLE <dyn_table> .
" <--
" --> 结构赋值
ASSIGN COMPONENT 'CARRID' OF STRUCTURE <ls_req_data> TO FIELD-SYMBOL(<lv_carrid>).
IF sy-subrc = 0.
<lv_carrid> = '123'.
ENDIF.
ASSIGN COMPONENT 'TABLE' OF STRUCTURE <ls_req_data> TO FIELD-SYMBOL(<lt_table>).
IF sy-subrc = 0.
MOVE-CORRESPONDING <dyn_table> TO <lt_table>.
ENDIF.
" <--
" --> 基于数据 生成 json
DATA: lv_req_json TYPE string.
lv_req_json = /ui2/cl_json=>serialize( data = lo_req_data
pretty_name = '' ).
" <--
" --> 显示
DATA: lr_xml TYPE REF TO cl_xml_document.
*CREATE OBJECT lr_xml.
CALL TRANSFORMATION sjson2html SOURCE XML lv_req_json RESULT XML DATA(lv_html).
DATA(lv_convert) = cl_abap_codepage=>convert_from( lv_html ).
cl_abap_browser=>show_html( html_string = lv_convert ).
*CALL METHOD lr_xml->parse_string
* EXPORTING
* stream = lv_convert.
*
*CALL METHOD lr_xml->display.
" <--