Z_06PM_UTILS_STRU_2_JSON
Z_06PM_ABAP_TO_JSON
Z_06PM_UTILS_ABAP_TO_JSON
REPORT ZGRAMMER.
DATA lv_strname TYPE strukname.
DATA: lt_excel TYPE TABLE OF alsmex_tabline WITH HEADER LINE.
DATA: l_data TYPE REF TO data.
DATA: e_json TYPE string,
e_json_t TYPE string.
FIELD-SYMBOLS: <fs_data> TYPE any.
DATA lv_filename TYPE string.
PARAMETERS:p_file1 TYPE rlgrap-filename.
PARAMETERS:p_file2 TYPE rlgrap-filename.
TYPES:BEGIN OF ty_str,
tdline TYPE string,
END OF ty_str.
DATA lt_str TYPE TABLE OF ty_str WITH HEADER LINE.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file1 .
PERFORM frm_screen_file_value_req USING p_file1."导入路径
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file2 .
PERFORM frm_screen_file_value_req2 USING p_file2."导入路径
START-OF-SELECTION.
CALL FUNCTION ‘ALSM_EXCEL_TO_INTERNAL_TABLE’
EXPORTING
filename = p_file1
i_begin_col = 1
i_begin_row = 2
i_end_col = 14
i_end_row = 9999
TABLES
intern = lt_excel
EXCEPTIONS
inconsistent_parameters = 1
upload_ole = 2
OTHERS = 3.
IF sy-subrc <> 0.
ENDIF.
LOOP AT lt_excel.
CLEAR lv_strname.
lv_strname = lt_excel-value.
CONDENSE lv_strname NO-GAPS.
TRANSLATE lv_strname TO UPPER CASE.
CALL FUNCTION ‘Z_06PM_UTILS_STRU_2_JSON’
EXPORTING
strname = lv_strname
CHANGING
data = l_data.
ASSIGN l_data->* TO <fs_data>.
CALL FUNCTION ‘Z_06PM_ABAP_TO_JSON’
EXPORTING
i_data = <fs_data>
IMPORTING
e_json = e_json.
lt_str-tdline = e_json.
APPEND lt_str.
CONCATENATE p_file2 ‘’ lv_strname ‘.TXT’ INTO lv_filename.
CALL FUNCTION ‘GUI_DOWNLOAD’
EXPORTING
filename = lv_filename
TABLES
data_tab = lt_str.
IF sy-subrc <> 0.
-
Implement suitable error handling here
ENDIF.REFRESH lt_str.
CALL FUNCTION ‘Z_06PM_UTILS_ABAP_TO_JSON’
EXPORTING
i_data = <fs_data>
IMPORTING
e_json = e_json_t.UNASSIGN <fs_data>.
lt_str-tdline = e_json_t.
APPEND lt_str.CONCATENATE p_file2 ‘’ lv_strname ‘_T’ ‘.TXT’ INTO lv_filename.
CALL FUNCTION ‘GUI_DOWNLOAD’
EXPORTING
filename = lv_filename
TABLES
data_tab = lt_str.
IF sy-subrc <> 0. -
Implement suitable error handling here
ENDIF.REFRESH lt_str.
ENDLOOP.
&---------------------------------------------------------------------
*& Form frm_screen_file_value_req
&---------------------------------------------------------------------
-
text
----------------------------------------------------------------------
-
-->FNAME text
----------------------------------------------------------------------
FORM frm_screen_file_value_req USING fname TYPE rlgrap-filename.
DATA: lt_filetable TYPE filetable,
lv_rc TYPE i.
CALL METHOD cl_gui_frontend_services=>file_open_dialog
EXPORTING
window_title = ‘选择’
default_extension = ‘.XLSX|.XLS’
file_filter = ‘XLSX (.XLSX)|.XLSX|XLS (.XLS)|.XLS’
CHANGING
file_table = lt_filetable
rc = lv_rc
EXCEPTIONS
file_open_dialog_failed = 1
cntl_error = 2
error_no_gui = 3
not_supported_by_gui = 4
OTHERS = 5.
IF sy-subrc NE 0.
MESSAGE ‘请重新选择文件!’ TYPE’E’.
RETURN.
ENDIF.
READ TABLE lt_filetable INTO fname INDEX 1.
ENDFORM. "frm_screen_file_value_req
&---------------------------------------------------------------------
*& Form frm_screen_file_value_req2
&---------------------------------------------------------------------
-
text
----------------------------------------------------------------------
-
-->FNAME text
----------------------------------------------------------------------
FORM frm_screen_file_value_req2 USING fname TYPE rlgrap-filename.
DATA: lv_path TYPE string.
CALL METHOD cl_gui_frontend_services=>directory_browse
EXPORTING
window_title = ‘选择’
initial_folder = ‘C:’
CHANGING
selected_folder = lv_path.
IF sy-subrc NE 0.
MESSAGE ‘请重新选择文件夹!’ TYPE’E’.
RETURN.
ENDIF.
fname = lv_path.
ENDFORM. "frm_screen_file_value_req2
Z_06PM_UTILS_STRU_2_JSON
FUNCTION z_06pm_utils_stru_2_json. *"---------------------------------------------------------------------- *"*"Local interface: *" IMPORTING *" VALUE(STRNAME) TYPE STRUKNAME *" CHANGING *" VALUE(DATA) TYPE ANY OPTIONAL *"---------------------------------------------------------------------- DATA: lo_structdescr TYPE REF TO cl_abap_structdescr, lo_structdescr2 TYPE REF TO cl_abap_structdescr, lt_ddic TYPE ddfields, ls_ddic TYPE dfies. DATA: data_1 TYPE REF TO data, data_2 TYPE REF TO data. FIELD-SYMBOLS: TYPE any, TYPE any, TYPE any, TYPE STANDARD TABLE, TYPE any. DATA: lo_tabledescr TYPE REF TO cl_abap_tabledescr. DATA: l_header TYPE x030l.CREATE DATA data TYPE (strname).
ASSIGN data->* TO <fs_data>.
lo_structdescr ?= cl_abap_typedescr=>describe_by_name( strname ).
lt_ddic = lo_structdescr->get_ddic_field_list( ).
LOOP AT lt_ddic INTO ls_ddic.
CASE ls_ddic-inttype.
WHEN cl_abap_typedescr=>typekind_struct1.
** do nothing
WHEN cl_abap_typedescr=>typekind_struct2.
CALL FUNCTION ‘Z_06PM_UTILS_STRU_2_JSON’
EXPORTING
strname = ls_ddic-rollname
CHANGING
data = data_1.
ASSIGN COMPONENT ls_ddic-fieldname OF STRUCTURE <fs_data> TO <comp_1>.
ASSIGN data_1->* TO .
<comp_1> = .
UNASSIGN: <comp_1>, .
WHEN cl_abap_typedescr=>typekind_table.
ASSIGN COMPONENT ls_ddic-fieldname OF STRUCTURE <fs_data> TO <comp_2>.
lo_tabledescr ?= cl_abap_tabledescr=>describe_by_data( <comp_2> ).
l_header = lo_tabledescr->get_ddic_header( ).
CALL FUNCTION ‘Z_06PM_UTILS_STRU_2_JSON’
EXPORTING
strname = l_header-refname
CHANGING
data = data_2.
ASSIGN data_2->* TO <comp_3>.
APPEND <comp_3> TO <comp_2>.
UNASSIGN: <comp_3>, <comp_2>.
WHEN OTHERS.
** do nothing
ENDCASE.
ENDLOOP.
UNASSIGN: <fs_data>.
ENDFUNCTION.
Z_06PM_ABAP_TO_JSON
FUNCTION z_06pm_abap_to_json. *"---------------------------------------------------------------------- *"*"Local interface: *" IMPORTING *" VALUE(I_DATA) TYPE DATA *" EXPORTING *" VALUE(E_JSON) TYPE STRING *" VALUE(E_FLAG) TYPE Z06PMEDSTAT *"---------------------------------------------------------------------- DATA:cl_serializer TYPE REF TO zcl_trex_json_serializer.CREATE OBJECT cl_serializer
EXPORTING
data = i_data.
cl_serializer->serialize( ).
e_json = cl_serializer->get_data( ).
ENDFUNCTION.
Z_06PM_UTILS_ABAP_TO_JSON
FUNCTION z_06pm_utils_abap_to_json. *"-------------------------------------------------------------------- *"*"本地接口: *" IMPORTING *" VALUE(I_DATA) TYPE DATA *" EXPORTING *" VALUE(E_JSON) TYPE STRING *" VALUE(E_FLAG) TYPE Z06PMEDSTAT *"-------------------------------------------------------------------- DATA:cl_serializer TYPE REF TO zcl_06pm_trex_json_serializer.CREATE OBJECT cl_serializer
EXPORTING
data = i_data.
cl_serializer->serialize( ).
e_json = cl_serializer->get_data( ).
ENDFUNCTION.