abap_struc->json

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.

猜你喜欢

转载自blog.csdn.net/qq_32587243/article/details/84949962