refactoring utility and raise exceptions directly (#1749)
Some checks failed
build_downport_branch / build_downpor_branch (push) Has been cancelled
build_frontend_classic / build_frontend_classic (push) Has been cancelled
build_frontend_cloud / build_frontend_cloud (push) Has been cancelled
build_frontend_http / build_frontend_http (push) Has been cancelled
ui5lint / test (push) Has been cancelled
ajson mirror / pr_ajson_changes (push) Has been cancelled

* refactoring utility and raise exceptions directly

* update

* update
This commit is contained in:
oblomov-dev 2025-02-15 16:01:29 -03:00 committed by GitHub
parent 3901853880
commit 3cbd06e952
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
15 changed files with 304 additions and 276 deletions

View File

@ -1398,10 +1398,7 @@ CLASS z2ui5_cl_util IMPLEMENTATION.
LOOP AT val INTO DATA(ls_filter).
" TODO: variable is assigned but never used (ABAP cleaner)
DATA lo_range TYPE REF TO lcl_range_to_sql.
lo_range = NEW #( iv_fieldname = ls_filter-name
DATA(lo_range) = NEW z2ui5_cl_util_range( iv_fieldname = ls_filter-name
ir_range = REF #( ls_filter-t_range ) ).
ENDLOOP.
@ -1410,7 +1407,7 @@ CLASS z2ui5_cl_util IMPLEMENTATION.
METHOD msg_get.
result = lcl_msp_mapper=>msg_get( val ).
result = z2ui5_cl_util_msg=>msg_get( val ).
ENDMETHOD.

View File

@ -769,128 +769,3 @@ CLASS ltcl_unit_test IMPLEMENTATION.
ENDMETHOD.
ENDCLASS.
CLASS ltcl_unit_test_msg_mapper DEFINITION FINAL
FOR TESTING RISK LEVEL HARMLESS DURATION SHORT.
PRIVATE SECTION.
METHODS test_bal FOR TESTING RAISING cx_static_check.
METHODS test_cx FOR TESTING RAISING cx_static_check.
METHODS test_bapiret FOR TESTING RAISING cx_static_check.
METHODS test_bapirettab FOR TESTING RAISING cx_static_check.
METHODS test_sy FOR TESTING RAISING cx_static_check.
ENDCLASS.
CLASS ltcl_unit_test_msg_mapper IMPLEMENTATION.
METHOD test_sy.
IF sy-sysid = 'ABC'.
RETURN.
ENDIF.
MESSAGE ID 'NET' TYPE 'I' NUMBER '001' INTO DATA(lv_dummy).
DATA(lt_result) = lcl_msp_mapper=>msg_get( sy ).
cl_abap_unit_assert=>assert_equals( exp = `NET`
act = lt_result[ 1 ]-id ).
cl_abap_unit_assert=>assert_equals( exp = `001`
act = lt_result[ 1 ]-no ).
cl_abap_unit_assert=>assert_equals( exp = `I`
act = lt_result[ 1 ]-type ).
ENDMETHOD.
METHOD test_bapiret.
IF sy-sysid = 'ABC'.
RETURN.
ENDIF.
DATA(lt_msg) = VALUE bapirettab(
( type = 'E' id = 'MSG1' number = '001' message = 'An empty Report field causes an empty XML Message to be sent' )
).
DATA(lt_result) = lcl_msp_mapper=>msg_get( lt_msg[ 1 ] ).
cl_abap_unit_assert=>assert_equals( exp = `MSG1`
act = lt_result[ 1 ]-id ).
cl_abap_unit_assert=>assert_equals( exp = `001`
act = lt_result[ 1 ]-no ).
cl_abap_unit_assert=>assert_equals( exp = `E`
act = lt_result[ 1 ]-type ).
ENDMETHOD.
METHOD test_bapirettab.
IF sy-sysid = 'ABC'.
RETURN.
ENDIF.
DATA(lt_msg) = VALUE bapirettab(
( type = 'E' id = 'MSG1' number = '001' message = 'An empty Report field causes an empty XML Message to be sent' )
( type = 'I' id = 'MSG2' number = '002' message = 'Product already in use' ) ).
DATA(lt_result) = lcl_msp_mapper=>msg_get( lt_msg ).
cl_abap_unit_assert=>assert_equals( exp = `MSG1`
act = lt_result[ 1 ]-id ).
cl_abap_unit_assert=>assert_equals( exp = `001`
act = lt_result[ 1 ]-no ).
cl_abap_unit_assert=>assert_equals( exp = `E`
act = lt_result[ 1 ]-type ).
ENDMETHOD.
METHOD test_cx.
TRY.
DATA(lv_val) = 1 / 0.
CATCH cx_root INTO DATA(lx).
DATA(lt_result) = lcl_msp_mapper=>msg_get( lx ).
ENDTRY.
cl_abap_unit_assert=>assert_equals( exp = `E`
act = lt_result[ 1 ]-type ).
ENDMETHOD.
method test_bal.
TYPES: BEGIN OF ty_log_entry,
msgnumber TYPE n LENGTH 6, " Application Log: Internal Message Serial Number
msgty TYPE c LENGTH 1, " Message Type
msgid TYPE c LENGTH 20, " Message Class
msgno TYPE n LENGTH 3, " Message Number
msgv1 TYPE c LENGTH 50, " Message Variable
msgv2 TYPE c LENGTH 50, " Message Variable
msgv3 TYPE c LENGTH 50, " Message Variable
msgv4 TYPE c LENGTH 50, " Message Variable
msgv1_src TYPE c LENGTH 15, " Origin of a Message Variable
msgv2_src TYPE c LENGTH 15, " Origin of a Message Variable
msgv3_src TYPE c LENGTH 15, " Origin of a Message Variable
msgv4_src TYPE c LENGTH 15, " Origin of a Message Variable
detlevel TYPE c LENGTH 1, " Level of Detail
probclass TYPE c LENGTH 1, " Problem Class
alsort TYPE c LENGTH 3, " Sort Criterion/Grouping
time_stmp TYPE p LENGTH 8 DECIMALS 7, " Message Time Stamp
msg_count TYPE i, " Cumulated Message Count
context TYPE c LENGTH 255, " Context (Generic Placeholder)
params TYPE c LENGTH 255, " Parameters (Generic Placeholder)
msg_txt TYPE string, " Message Text
END OF ty_log_entry.
endmethod.
ENDCLASS.

View File

@ -5,7 +5,7 @@
<VSEOCLASS>
<CLSNAME>Z2UI5_CL_UTIL</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>abap toolkit</DESCRIPT>
<DESCRIPT>util</DESCRIPT>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>

View File

@ -4,12 +4,6 @@ CLASS z2ui5_cl_util_abap DEFINITION
PUBLIC SECTION.
" abap-api - Serving a Release & Version Independent ABAP Layer
" version: '0.0.1'.
" origin: https://github.com/oblomov-dev/abap-api
" author: https://github.com/oblomov-dev
" license: MIT.
TYPES:
BEGIN OF ty_s_fix_val,
low TYPE string,

View File

@ -5,7 +5,7 @@
<VSEOCLASS>
<CLSNAME>Z2UI5_CL_UTIL_ABAP</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>abap api</DESCRIPT>
<DESCRIPT>util - api</DESCRIPT>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>

View File

@ -5,7 +5,7 @@
<VSEOCLASS>
<CLSNAME>Z2UI5_CL_UTIL_ABAP_HTTP</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>abap api</DESCRIPT>
<DESCRIPT>util - api http</DESCRIPT>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>

View File

@ -1,125 +1,5 @@
CLASS lcl_range_to_sql DEFINITION
CLASS z2ui5_cl_util_msg DEFINITION PUBLIC
FINAL CREATE PUBLIC.
PUBLIC SECTION.
CONSTANTS: BEGIN OF signs,
including TYPE string VALUE 'I',
excluding TYPE string VALUE 'E',
END OF signs.
CONSTANTS: BEGIN OF options,
equal TYPE string VALUE 'EQ',
not_equal TYPE string VALUE 'NE',
between TYPE string VALUE 'BT',
not_between TYPE string VALUE 'NB',
contains_pattern TYPE string VALUE 'CP',
not_contains_pattern TYPE string VALUE 'NP',
greater_than TYPE string VALUE 'GT',
greater_equal TYPE string VALUE 'GE',
less_equal TYPE string VALUE 'LE',
less_than TYPE string VALUE 'LT',
END OF options.
METHODS constructor
IMPORTING
iv_fieldname TYPE clike
ir_range TYPE REF TO data.
METHODS get_sql
RETURNING
VALUE(result) TYPE string.
PROTECTED SECTION.
DATA mv_fieldname TYPE string.
DATA mr_range TYPE REF TO data.
CLASS-METHODS quote
IMPORTING
val TYPE clike
RETURNING
VALUE(out) TYPE string.
ENDCLASS.
CLASS lcl_range_to_sql IMPLEMENTATION.
METHOD constructor.
mr_range = ir_range.
mv_fieldname = |{ to_upper( iv_fieldname ) }|.
ENDMETHOD.
METHOD get_sql.
FIELD-SYMBOLS <lt_range> TYPE STANDARD TABLE.
ASSIGN me->mr_range->* TO <lt_range>.
IF xsdbool( <lt_range> IS INITIAL ) = abap_true.
RETURN.
ENDIF.
result = `(`.
LOOP AT <lt_range> ASSIGNING FIELD-SYMBOL(<ls_range_item>).
ASSIGN COMPONENT 'SIGN' OF STRUCTURE <ls_range_item> TO FIELD-SYMBOL(<lv_sign>).
ASSIGN COMPONENT 'OPTION' OF STRUCTURE <ls_range_item> TO FIELD-SYMBOL(<lv_option>).
ASSIGN COMPONENT 'LOW' OF STRUCTURE <ls_range_item> TO FIELD-SYMBOL(<lv_low>).
ASSIGN COMPONENT 'HIGH' OF STRUCTURE <ls_range_item> TO FIELD-SYMBOL(<lv_high>).
IF sy-tabix <> 1.
result = |{ result } OR|.
ENDIF.
IF <lv_sign> = signs-excluding.
result = |{ result } NOT|.
ENDIF.
result = |{ result } { me->mv_fieldname }|.
CASE <lv_option>.
WHEN options-equal OR
options-not_equal OR
options-greater_than OR
options-greater_equal OR
options-less_equal OR
options-less_than.
result = |{ result } { <lv_option> } { quote( <lv_low> ) }|.
WHEN options-between.
result = |{ result } BETWEEN { quote( <lv_low> ) } AND { quote( <lv_high> ) }|.
WHEN options-not_between.
result = |{ result } NOT BETWEEN { quote( <lv_low> ) } AND { quote( <lv_high> ) }|.
WHEN options-contains_pattern.
TRANSLATE <lv_low> USING '*%'.
result = |{ result } LIKE { quote( <lv_low> ) }|.
WHEN options-not_contains_pattern.
TRANSLATE <lv_low> USING '*%'.
result = |{ result } NOT LIKE { quote( <lv_low> ) }|.
ENDCASE.
ENDLOOP.
result = |{ result } )|.
ENDMETHOD.
METHOD quote.
out = |'{ replace( val = val
sub = `'`
with = `''`
occ = 0 ) }'|.
ENDMETHOD.
ENDCLASS.
CLASS lcl_msp_mapper DEFINITION
FINAL CREATE PUBLIC.
PUBLIC SECTION.
CLASS-METHODS msg_map
IMPORTING
@ -128,19 +8,17 @@ CLASS lcl_msp_mapper DEFINITION
is_msg TYPE z2ui5_cl_util=>ty_s_msg
RETURNING
VALUE(result) TYPE z2ui5_cl_util=>ty_s_msg.
CLASS-METHODS msg_get
IMPORTING
val TYPE any
RETURNING
VALUE(result) TYPE z2ui5_cl_util=>ty_t_msg.
ENDCLASS.
CLASS lcl_msp_mapper IMPLEMENTATION.
CLASS z2ui5_cl_util_msg IMPLEMENTATION.
METHOD msg_get.
DATA(lv_kind) = z2ui5_cl_util=>rtti_get_type_kind( val ).
CASE lv_kind.
@ -250,10 +128,11 @@ CLASS lcl_msp_mapper IMPLEMENTATION.
ENDIF.
ENDCASE.
ENDMETHOD.
ENDMETHOD.
METHOD msg_map.
result = is_msg.
CASE name.
WHEN 'ID' OR 'MSGID'.
@ -276,6 +155,6 @@ CLASS lcl_msp_mapper IMPLEMENTATION.
result-timestampl = val.
ENDCASE.
ENDMETHOD.
ENDMETHOD.
ENDCLASS.

View File

@ -0,0 +1,125 @@
CLASS ltcl_unit_test_msg_mapper DEFINITION FINAL
FOR TESTING RISK LEVEL HARMLESS DURATION SHORT.
PRIVATE SECTION.
METHODS test_bal FOR TESTING RAISING cx_static_check.
METHODS test_cx FOR TESTING RAISING cx_static_check.
METHODS test_bapiret FOR TESTING RAISING cx_static_check.
METHODS test_bapirettab FOR TESTING RAISING cx_static_check.
METHODS test_sy FOR TESTING RAISING cx_static_check.
ENDCLASS.
CLASS ltcl_unit_test_msg_mapper IMPLEMENTATION.
METHOD test_sy.
IF sy-sysid = 'ABC'.
RETURN.
ENDIF.
MESSAGE ID 'NET' TYPE 'I' NUMBER '001' INTO DATA(lv_dummy).
DATA(lt_result) = z2ui5_cl_util_msg=>msg_get( sy ).
cl_abap_unit_assert=>assert_equals( exp = `NET`
act = lt_result[ 1 ]-id ).
cl_abap_unit_assert=>assert_equals( exp = `001`
act = lt_result[ 1 ]-no ).
cl_abap_unit_assert=>assert_equals( exp = `I`
act = lt_result[ 1 ]-type ).
ENDMETHOD.
METHOD test_bapiret.
IF sy-sysid = 'ABC'.
RETURN.
ENDIF.
DATA(lt_msg) = VALUE bapirettab(
( type = 'E' id = 'MSG1' number = '001' message = 'An empty Report field causes an empty XML Message to be sent' )
).
DATA(lt_result) = z2ui5_cl_util_msg=>msg_get( lt_msg[ 1 ] ).
cl_abap_unit_assert=>assert_equals( exp = `MSG1`
act = lt_result[ 1 ]-id ).
cl_abap_unit_assert=>assert_equals( exp = `001`
act = lt_result[ 1 ]-no ).
cl_abap_unit_assert=>assert_equals( exp = `E`
act = lt_result[ 1 ]-type ).
ENDMETHOD.
METHOD test_bapirettab.
IF sy-sysid = 'ABC'.
RETURN.
ENDIF.
DATA(lt_msg) = VALUE bapirettab(
( type = 'E' id = 'MSG1' number = '001' message = 'An empty Report field causes an empty XML Message to be sent' )
( type = 'I' id = 'MSG2' number = '002' message = 'Product already in use' ) ).
DATA(lt_result) = z2ui5_cl_util_msg=>msg_get( lt_msg ).
cl_abap_unit_assert=>assert_equals( exp = `MSG1`
act = lt_result[ 1 ]-id ).
cl_abap_unit_assert=>assert_equals( exp = `001`
act = lt_result[ 1 ]-no ).
cl_abap_unit_assert=>assert_equals( exp = `E`
act = lt_result[ 1 ]-type ).
ENDMETHOD.
METHOD test_cx.
TRY.
DATA(lv_val) = 1 / 0.
CATCH cx_root INTO DATA(lx).
DATA(lt_result) = z2ui5_cl_util_msg=>msg_get( lx ).
ENDTRY.
cl_abap_unit_assert=>assert_equals( exp = `E`
act = lt_result[ 1 ]-type ).
ENDMETHOD.
method test_bal.
TYPES: BEGIN OF ty_log_entry,
msgnumber TYPE n LENGTH 6, " Application Log: Internal Message Serial Number
msgty TYPE c LENGTH 1, " Message Type
msgid TYPE c LENGTH 20, " Message Class
msgno TYPE n LENGTH 3, " Message Number
msgv1 TYPE c LENGTH 50, " Message Variable
msgv2 TYPE c LENGTH 50, " Message Variable
msgv3 TYPE c LENGTH 50, " Message Variable
msgv4 TYPE c LENGTH 50, " Message Variable
msgv1_src TYPE c LENGTH 15, " Origin of a Message Variable
msgv2_src TYPE c LENGTH 15, " Origin of a Message Variable
msgv3_src TYPE c LENGTH 15, " Origin of a Message Variable
msgv4_src TYPE c LENGTH 15, " Origin of a Message Variable
detlevel TYPE c LENGTH 1, " Level of Detail
probclass TYPE c LENGTH 1, " Problem Class
alsort TYPE c LENGTH 3, " Sort Criterion/Grouping
time_stmp TYPE p LENGTH 8 DECIMALS 7, " Message Time Stamp
msg_count TYPE i, " Cumulated Message Count
context TYPE c LENGTH 255, " Context (Generic Placeholder)
params TYPE c LENGTH 255, " Parameters (Generic Placeholder)
msg_txt TYPE string, " Message Text
END OF ty_log_entry.
endmethod.
ENDCLASS.

View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOCLASS>
<CLSNAME>Z2UI5_CL_UTIL_MSG</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>util - messages</DESCRIPT>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
<WITH_UNIT_TESTS>X</WITH_UNIT_TESTS>
</VSEOCLASS>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -0,0 +1,117 @@
CLASS z2ui5_cl_util_range DEFINITION PUBLIC
FINAL CREATE PUBLIC.
PUBLIC SECTION.
CONSTANTS: BEGIN OF signs,
including TYPE string VALUE 'I',
excluding TYPE string VALUE 'E',
END OF signs.
CONSTANTS: BEGIN OF options,
equal TYPE string VALUE 'EQ',
not_equal TYPE string VALUE 'NE',
between TYPE string VALUE 'BT',
not_between TYPE string VALUE 'NB',
contains_pattern TYPE string VALUE 'CP',
not_contains_pattern TYPE string VALUE 'NP',
greater_than TYPE string VALUE 'GT',
greater_equal TYPE string VALUE 'GE',
less_equal TYPE string VALUE 'LE',
less_than TYPE string VALUE 'LT',
END OF options.
METHODS constructor
IMPORTING
iv_fieldname TYPE clike
ir_range TYPE REF TO data.
METHODS get_sql
RETURNING
VALUE(result) TYPE string.
PROTECTED SECTION.
DATA mv_fieldname TYPE string.
DATA mr_range TYPE REF TO data.
CLASS-METHODS quote
IMPORTING
val TYPE clike
RETURNING
VALUE(out) TYPE string.
ENDCLASS.
CLASS z2ui5_cl_util_range IMPLEMENTATION.
METHOD constructor.
mr_range = ir_range.
mv_fieldname = |{ to_upper( iv_fieldname ) }|.
mr_range = ir_range.
mv_fieldname = |{ to_upper( iv_fieldname ) }|.
ENDMETHOD.
METHOD get_sql.
FIELD-SYMBOLS <lt_range> TYPE STANDARD TABLE.
ASSIGN me->mr_range->* TO <lt_range>.
IF xsdbool( <lt_range> IS INITIAL ) = abap_true.
RETURN.
ENDIF.
result = `(`.
LOOP AT <lt_range> ASSIGNING FIELD-SYMBOL(<ls_range_item>).
ASSIGN COMPONENT 'SIGN' OF STRUCTURE <ls_range_item> TO FIELD-SYMBOL(<lv_sign>).
ASSIGN COMPONENT 'OPTION' OF STRUCTURE <ls_range_item> TO FIELD-SYMBOL(<lv_option>).
ASSIGN COMPONENT 'LOW' OF STRUCTURE <ls_range_item> TO FIELD-SYMBOL(<lv_low>).
ASSIGN COMPONENT 'HIGH' OF STRUCTURE <ls_range_item> TO FIELD-SYMBOL(<lv_high>).
IF sy-tabix <> 1.
result = |{ result } OR|.
ENDIF.
IF <lv_sign> = signs-excluding.
result = |{ result } NOT|.
ENDIF.
result = |{ result } { me->mv_fieldname }|.
CASE <lv_option>.
WHEN options-equal OR
options-not_equal OR
options-greater_than OR
options-greater_equal OR
options-less_equal OR
options-less_than.
result = |{ result } { <lv_option> } { quote( <lv_low> ) }|.
WHEN options-between.
result = |{ result } BETWEEN { quote( <lv_low> ) } AND { quote( <lv_high> ) }|.
WHEN options-not_between.
result = |{ result } NOT BETWEEN { quote( <lv_low> ) } AND { quote( <lv_high> ) }|.
WHEN options-contains_pattern.
TRANSLATE <lv_low> USING '*%'.
result = |{ result } LIKE { quote( <lv_low> ) }|.
WHEN options-not_contains_pattern.
TRANSLATE <lv_low> USING '*%'.
result = |{ result } NOT LIKE { quote( <lv_low> ) }|.
ENDCASE.
ENDLOOP.
result = |{ result } )|.
ENDMETHOD.
METHOD quote.
out = |'{ replace( val = val
sub = `'`
with = `''`
occ = 0 ) }'|.
ENDMETHOD.
ENDCLASS.

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOCLASS>
<CLSNAME>Z2UI5_CL_UTIL_RANGE</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>util - ranges</DESCRIPT>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
</VSEOCLASS>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -5,7 +5,7 @@
<VSEOCLASS>
<CLSNAME>Z2UI5_CX_UTIL_ERROR</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>abap toolkit exception</DESCRIPT>
<DESCRIPT>util - exception</DESCRIPT>
<CATEGORY>40</CATEGORY>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>

View File

@ -172,7 +172,9 @@ CLASS z2ui5_cl_core_client IMPLEMENTATION.
METHOD z2ui5_if_client~nav_app_call.
IF app IS NOT BOUND.
z2ui5_cl_util=>x_raise( `NAV_APP_LEAVE_TO_INITIAL_APP_ERROR` ).
RAISE EXCEPTION TYPE z2ui5_cx_util_error
EXPORTING
val = `NAV_APP_LEAVE_TO_INITIAL_APP_ERROR`.
ENDIF.
mo_action->ms_next-o_app_call = app.
@ -190,7 +192,9 @@ CLASS z2ui5_cl_core_client IMPLEMENTATION.
ENDIF.
IF app IS NOT BOUND.
z2ui5_cl_util=>x_raise( `NAV_APP_LEAVE_TO_INITIAL_APP_ERROR` ).
RAISE EXCEPTION TYPE z2ui5_cx_util_error
EXPORTING
val = `NAV_APP_LEAVE_TO_INITIAL_APP_ERROR`.
ENDIF.
mo_action->ms_next-o_app_leave = app.

View File

@ -74,7 +74,9 @@ CLASS z2ui5_cl_core_srv_json IMPLEMENTATION.
lo_val_front->to_abap( IMPORTING ev_container = <val> ).
CATCH cx_root INTO DATA(x).
z2ui5_cl_util=>x_raise( |JSON_PARSING_ERROR: { x->get_text( ) } | ).
RAISE EXCEPTION TYPE z2ui5_cx_util_error
EXPORTING
val = |JSON_PARSING_ERROR: { x->get_text( ) } |.
ENDTRY.
ENDLOOP.

View File

@ -219,11 +219,11 @@ CLASS z2ui5_cl_xml_view DEFINITION
IMPORTING
ns TYPE clike OPTIONAL
link TYPE clike OPTIONAL
ID type CLIKE optional
CLASS type CLIKE optional
CURRENTLOCATIONTEXT type CLIKE optional
SEPARATORSTYLE type CLIKE optional
VISIBLE type CLIKE optional
id TYPE clike OPTIONAL
class TYPE clike OPTIONAL
currentlocationtext TYPE clike OPTIONAL
separatorstyle TYPE clike OPTIONAL
visible TYPE clike OPTIONAL
RETURNING
VALUE(result) TYPE REF TO z2ui5_cl_xml_view.
@ -10617,7 +10617,9 @@ CLASS z2ui5_cl_xml_view IMPLEMENTATION.
INSERT VALUE #( n = |xmlns:{ ls_prop-n }|
v = ls_prop-v ) INTO TABLE mt_prop.
CATCH cx_root.
z2ui5_cl_util=>x_raise( |XML_VIEW_ERROR_NO_NAMESPACE_FOUND_FOR: { lr_ns->* }| ).
RAISE EXCEPTION TYPE z2ui5_cx_util_error
EXPORTING
val = |XML_VIEW_ERROR_NO_NAMESPACE_FOUND_FOR: { lr_ns->* }|.
ENDTRY.
ENDLOOP.