动态生成内表/ui2/cl_jsonsjson2htmlcl_abap_structdescrcl_abap_tabledescr

    1. TYPES:BEGIN OF ty_data,
    2. carrid TYPE sflight-carrid,
    3. connid TYPE sflight-connid,
    4. fldate TYPE sflight-fldate,
    5. END OF ty_data.
    6. DATA:lt_data TYPE TABLE OF ty_data.
    7. TYPES:BEGIN OF ty_request,
    8. data LIKE lt_data,
    9. END OF ty_request.
    10. DATA ls_request TYPE ty_request.
    11. FIELD-SYMBOLS:<dyn_table> TYPE table,
    12. <dyn_wa> TYPE any,
    13. <dyn_field> TYPE any.
    14. DATA: dy_table TYPE REF TO data,
    15. dy_line TYPE REF TO data,
    16. it_structure TYPE lvc_t_fcat,
    17. wa_structure TYPE lvc_s_fcat.
    18. DATA: lt_req_comp TYPE cl_abap_structdescr=>component_table,
    19. ls_req_comp LIKE LINE OF lt_req_comp.
    20. DATA: lo_req_tab TYPE REF TO data,
    21. lo_req_data TYPE REF TO data.
    22. FIELD-SYMBOLS: <lt_req_data> TYPE STANDARD TABLE.
    23. FIELD-SYMBOLS: <ls_req_data> TYPE any.
    24. CLEAR:wa_structure.
    25. wa_structure-fieldname = 'CARRID'.
    26. wa_structure-col_pos = 1.
    27. wa_structure-ref_table = 'SFLIGHT'.
    28. wa_structure-ref_field = 'CARRID'.
    29. APPEND wa_structure TO it_structure.
    30. CLEAR:wa_structure.
    31. wa_structure-fieldname = 'CONNID'.
    32. wa_structure-col_pos = 1.
    33. wa_structure-ref_table = 'SFLIGHT'.
    34. wa_structure-ref_field = 'CONNID'.
    35. APPEND wa_structure TO it_structure.
    36. CLEAR:wa_structure.
    37. wa_structure-fieldname = 'FLDATE'.
    38. wa_structure-col_pos = 1.
    39. wa_structure-ref_table = 'SFLIGHT'.
    40. wa_structure-ref_field = 'FLDATE'.
    41. APPEND wa_structure TO it_structure.
    42. CALL METHOD cl_alv_table_create=>create_dynamic_table
    43. EXPORTING
    44. it_fieldcatalog = it_structure
    45. IMPORTING
    46. ep_table = dy_table.
    47. ASSIGN dy_table->* TO <dyn_table>.
    48. CREATE DATA dy_line LIKE LINE OF <dyn_table>.
    49. ASSIGN dy_line->* TO <dyn_wa>.
    50. " --> 导出结构
    51. CLEAR ls_req_comp.
    52. ls_req_comp-name = 'CARRID'.
    53. ls_req_comp-type ?= cl_abap_tabledescr=>describe_by_name( 'S_CARR_ID' ).
    54. APPEND ls_req_comp TO lt_req_comp.
    55. CLEAR ls_req_comp.
    56. ls_req_comp-name = 'CONNID'.
    57. ls_req_comp-type ?= cl_abap_tabledescr=>describe_by_name( 'S_CONN_ID' ).
    58. APPEND ls_req_comp TO lt_req_comp.
    59. CLEAR ls_req_comp.
    60. ls_req_comp-name = 'TABLE'.
    61. ls_req_comp-type ?= cl_abap_tabledescr=>describe_by_data( <dyn_table> ).
    62. APPEND ls_req_comp TO lt_req_comp.
    63. " 生成对象
    64. DATA(lo_req_type) = cl_abap_structdescr=>create( lt_req_comp ).
    65. DATA(lo_req_tabdesc) = cl_abap_tabledescr=>create(
    66. p_line_type = lo_req_type
    67. p_table_kind = cl_abap_tabledescr=>tablekind_std
    68. p_unique = abap_false ).
    69. CREATE DATA lo_req_tab TYPE HANDLE lo_req_tabdesc.
    70. ASSIGN lo_req_tab->* TO <lt_req_data>.
    71. CREATE DATA lo_req_data LIKE LINE OF <lt_req_data>.
    72. ASSIGN lo_req_data->* TO <ls_req_data>.
    73. " <--
    74. " --> 动态查数
    75. DATA: lv_sql TYPE string,
    76. lv_tab TYPE string.
    77. lv_sql = 'CARRID FLDATE'.
    78. lv_tab = 'SFLIGHT'.
    79. SELECT (lv_sql) FROM (lv_tab) INTO CORRESPONDING FIELDS OF TABLE <dyn_table> .
    80. " <--
    81. " --> 结构赋值
    82. ASSIGN COMPONENT 'CARRID' OF STRUCTURE <ls_req_data> TO FIELD-SYMBOL(<lv_carrid>).
    83. IF sy-subrc = 0.
    84. <lv_carrid> = '123'.
    85. ENDIF.
    86. ASSIGN COMPONENT 'TABLE' OF STRUCTURE <ls_req_data> TO FIELD-SYMBOL(<lt_table>).
    87. IF sy-subrc = 0.
    88. MOVE-CORRESPONDING <dyn_table> TO <lt_table>.
    89. ENDIF.
    90. " <--
    91. " --> 基于数据 生成 json
    92. DATA: lv_req_json TYPE string.
    93. lv_req_json = /ui2/cl_json=>serialize( data = lo_req_data
    94. pretty_name = '' ).
    95. " <--
    96. " --> 显示
    97. DATA: lr_xml TYPE REF TO cl_xml_document.
    98. *CREATE OBJECT lr_xml.
    99. CALL TRANSFORMATION sjson2html SOURCE XML lv_req_json RESULT XML DATA(lv_html).
    100. DATA(lv_convert) = cl_abap_codepage=>convert_from( lv_html ).
    101. cl_abap_browser=>show_html( html_string = lv_convert ).
    102. *CALL METHOD lr_xml->parse_string
    103. * EXPORTING
    104. * stream = lv_convert.
    105. *
    106. *CALL METHOD lr_xml->display.
    107. " <--