:::success 🎈 动态代码示例
🎈 生成json示例 :::

执行效果

image.png

代码

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