:::success
🎈 动态代码示例
🎈 生成json示例
:::
执行效果
代码
REPORT zdym_json.
FIELD-SYMBOLS:<lt_lines> TYPE table,
<ls_line> TYPE any.
DATA: lr_table TYPE REF TO data,
lr_line TYPE REF TO data,
lt_structure TYPE lvc_t_fcat,
ls_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: ls_structure.
ls_structure-fieldname = 'CARRID'.
ls_structure-col_pos = 1.
ls_structure-ref_table = 'SFLIGHT'.
ls_structure-ref_field = 'CARRID'.
APPEND ls_structure TO lt_structure.
CLEAR: ls_structure.
ls_structure-fieldname = 'CONNID'.
ls_structure-col_pos = 1.
ls_structure-ref_table = 'SFLIGHT'.
ls_structure-ref_field = 'CONNID'.
APPEND ls_structure TO lt_structure.
CLEAR: ls_structure.
ls_structure-fieldname = 'FLDATE'.
ls_structure-col_pos = 1.
ls_structure-ref_table = 'SFLIGHT'.
ls_structure-ref_field = 'FLDATE'.
APPEND ls_structure TO lt_structure.
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = lt_structure
IMPORTING
ep_table = lr_table.
ASSIGN lr_table->* TO <lt_lines>.
CREATE DATA lr_line LIKE LINE OF <lt_lines>.
ASSIGN lr_line->* TO <ls_line>.
" --> 导出结构
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( <lt_lines> ).
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 <lt_lines> .
" <--
" --> 结构赋值
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 <lt_lines> 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.
" <--