lcl_xml: Export typedescriptors when reading data

This commit is contained in:
mrsimpson 2016-02-17 17:52:52 +00:00
parent 70dad99efe
commit da260be298
2 changed files with 34 additions and 34 deletions

View File

@ -1078,6 +1078,7 @@ CLASS lcl_xml DEFINITION FINAL CREATE PUBLIC.
IMPORTING ii_root TYPE REF TO if_ixml_element OPTIONAL IMPORTING ii_root TYPE REF TO if_ixml_element OPTIONAL
iv_name TYPE string OPTIONAL iv_name TYPE string OPTIONAL
EXPORTING ev_success TYPE abap_bool EXPORTING ev_success TYPE abap_bool
eo_elemdescr TYPE REF TO cl_abap_elemdescr
CHANGING cg_element TYPE data CHANGING cg_element TYPE data
RAISING lcx_exception. RAISING lcx_exception.
@ -1091,6 +1092,7 @@ CLASS lcl_xml DEFINITION FINAL CREATE PUBLIC.
IMPORTING ii_root TYPE REF TO if_ixml_element OPTIONAL IMPORTING ii_root TYPE REF TO if_ixml_element OPTIONAL
iv_name TYPE string OPTIONAL iv_name TYPE string OPTIONAL
EXPORTING ev_success TYPE abap_bool EXPORTING ev_success TYPE abap_bool
eo_structdescr TYPE REF TO cl_abap_structdescr
CHANGING cg_structure TYPE data CHANGING cg_structure TYPE data
RAISING lcx_exception. RAISING lcx_exception.
@ -1103,6 +1105,7 @@ CLASS lcl_xml DEFINITION FINAL CREATE PUBLIC.
METHODS table_read METHODS table_read
IMPORTING ii_root TYPE REF TO if_ixml_element OPTIONAL IMPORTING ii_root TYPE REF TO if_ixml_element OPTIONAL
iv_name TYPE string OPTIONAL iv_name TYPE string OPTIONAL
EXPORTING eo_tabledescr TYPE REF TO cl_abap_tabledescr
CHANGING ct_table TYPE STANDARD TABLE CHANGING ct_table TYPE STANDARD TABLE
RAISING lcx_exception. RAISING lcx_exception.
@ -1183,19 +1186,18 @@ CLASS lcl_xml IMPLEMENTATION.
DATA: lv_name TYPE string, DATA: lv_name TYPE string,
li_struct TYPE REF TO if_ixml_element, li_struct TYPE REF TO if_ixml_element,
lo_typedescr TYPE REF TO cl_abap_typedescr, lo_typedescr TYPE REF TO cl_abap_typedescr.
lo_descr_ref TYPE REF TO cl_abap_structdescr.
FIELD-SYMBOLS: <lg_any> TYPE any, FIELD-SYMBOLS: <lg_any> TYPE any,
<ls_comp> LIKE LINE OF lo_descr_ref->components. <ls_comp> LIKE LINE OF eo_structdescr->components.
CLEAR cg_structure. CLEAR cg_structure.
ev_success = abap_true. ev_success = abap_true.
lo_descr_ref ?= cl_abap_typedescr=>describe_by_data( cg_structure ). eo_structdescr ?= cl_abap_typedescr=>describe_by_data( cg_structure ).
IF iv_name IS INITIAL. IF iv_name IS INITIAL.
lv_name = lo_descr_ref->get_relative_name( ). lv_name = eo_structdescr->get_relative_name( ).
IF lv_name IS INITIAL. IF lv_name IS INITIAL.
_raise 'no name, structure read'. _raise 'no name, structure read'.
ENDIF. ENDIF.
@ -1210,7 +1212,7 @@ CLASS lcl_xml IMPLEMENTATION.
RETURN. RETURN.
ENDIF. ENDIF.
LOOP AT lo_descr_ref->components ASSIGNING <ls_comp>. LOOP AT eo_structdescr->components ASSIGNING <ls_comp>.
ASSIGN COMPONENT <ls_comp>-name OF STRUCTURE cg_structure TO <lg_any>. ASSIGN COMPONENT <ls_comp>-name OF STRUCTURE cg_structure TO <lg_any>.
ASSERT sy-subrc = 0. ASSERT sy-subrc = 0.
@ -1247,16 +1249,15 @@ CLASS lcl_xml IMPLEMENTATION.
lv_kind TYPE abap_typecategory, lv_kind TYPE abap_typecategory,
lv_index TYPE i, lv_index TYPE i,
lv_success TYPE abap_bool, lv_success TYPE abap_bool,
lo_data_descr TYPE REF TO cl_abap_datadescr, lo_data_descr TYPE REF TO cl_abap_datadescr.
lo_table_descr TYPE REF TO cl_abap_tabledescr.
FIELD-SYMBOLS: <lg_line> TYPE any. FIELD-SYMBOLS: <lg_line> TYPE any.
CLEAR ct_table[]. CLEAR ct_table[].
lo_table_descr ?= cl_abap_typedescr=>describe_by_data( ct_table ). eo_tabledescr ?= cl_abap_typedescr=>describe_by_data( ct_table ).
lv_name = lo_table_descr->get_relative_name( ). lv_name = eo_tabledescr->get_relative_name( ).
IF lv_name IS INITIAL. IF lv_name IS INITIAL.
lv_name = iv_name. lv_name = iv_name.
@ -1272,7 +1273,7 @@ CLASS lcl_xml IMPLEMENTATION.
RETURN. RETURN.
ENDIF. ENDIF.
lo_data_descr = lo_table_descr->get_table_line_type( ). lo_data_descr = eo_tabledescr->get_table_line_type( ).
lv_kind = lo_data_descr->kind. lv_kind = lo_data_descr->kind.
DO. DO.
@ -1454,17 +1455,16 @@ CLASS lcl_xml IMPLEMENTATION.
METHOD element_read. METHOD element_read.
DATA: lo_descr TYPE REF TO cl_abap_elemdescr, DATA: li_element TYPE REF TO if_ixml_element,
li_element TYPE REF TO if_ixml_element,
lv_name TYPE string. lv_name TYPE string.
ev_success = abap_true. ev_success = abap_true.
lo_descr ?= cl_abap_typedescr=>describe_by_data( cg_element ). eo_elemdescr ?= cl_abap_typedescr=>describe_by_data( cg_element ).
IF iv_name IS INITIAL. IF iv_name IS INITIAL.
lv_name = lo_descr->get_relative_name( ). lv_name = eo_elemdescr->get_relative_name( ).
IF lv_name IS INITIAL. IF lv_name IS INITIAL.
_raise 'no name, element read'. _raise 'no name, element read'.
ENDIF. ENDIF.

View File

@ -6,7 +6,7 @@
<SQLX></SQLX> <SQLX></SQLX>
<EDTX></EDTX> <EDTX></EDTX>
<VARCL>X</VARCL> <VARCL>X</VARCL>
<DBAPL></DBAPL> <DBAPL>S</DBAPL>
<DBNA></DBNA> <DBNA></DBNA>
<CLAS></CLAS> <CLAS></CLAS>
<TYPE></TYPE> <TYPE></TYPE>
@ -22,14 +22,14 @@
<LEVL></LEVL> <LEVL></LEVL>
<RSTAT></RSTAT> <RSTAT></RSTAT>
<RMAND></RMAND> <RMAND></RMAND>
<RLOAD>E</RLOAD> <RLOAD></RLOAD>
<FIXPT>X</FIXPT> <FIXPT>X</FIXPT>
<SSET></SSET> <SSET></SSET>
<SDATE>00000000</SDATE> <SDATE>00000000</SDATE>
<STIME></STIME> <STIME></STIME>
<IDATE>00000000</IDATE> <IDATE>00000000</IDATE>
<ITIME></ITIME> <ITIME></ITIME>
<LDBNAME></LDBNAME> <LDBNAME>D$S</LDBNAME>
<UCCHECK>X</UCCHECK> <UCCHECK>X</UCCHECK>
</PROGDIR> </PROGDIR>
<RSMPE_ADM> <RSMPE_ADM>