mirror of
https://github.com/abap2UI5/abap2UI5.git
synced 2025-04-30 16:38:23 +08:00

* busy indicator extension * Update README.md * Update README.md * update binding * Update README.md * update binding * update * Update package.json * Update package-lock.json
634 lines
15 KiB
ABAP
634 lines
15 KiB
ABAP
CLASS z2ui5_cl_fw_utility DEFINITION PUBLIC
|
|
CREATE PUBLIC.
|
|
|
|
PUBLIC SECTION.
|
|
|
|
CLASS-METHODS url_param_get
|
|
IMPORTING
|
|
val TYPE string
|
|
url TYPE string
|
|
RETURNING
|
|
VALUE(result) TYPE string.
|
|
|
|
CLASS-METHODS url_param_create_url
|
|
IMPORTING
|
|
t_params TYPE z2ui5_if_client=>ty_t_name_value
|
|
RETURNING
|
|
VALUE(result) TYPE string.
|
|
|
|
CLASS-METHODS url_param_set
|
|
IMPORTING
|
|
url TYPE string
|
|
name TYPE string
|
|
value TYPE string
|
|
RETURNING
|
|
VALUE(result) TYPE string.
|
|
|
|
CLASS-METHODS rtti_get_classname_by_ref
|
|
IMPORTING
|
|
in TYPE REF TO object
|
|
RETURNING
|
|
VALUE(result) TYPE string.
|
|
|
|
CLASS-METHODS x_check_raise
|
|
IMPORTING
|
|
v TYPE clike DEFAULT `CX_SY_SUBRC`
|
|
when TYPE abap_bool.
|
|
|
|
CLASS-METHODS x_raise
|
|
IMPORTING
|
|
v TYPE clike DEFAULT `CX_SY_SUBRC`
|
|
PREFERRED PARAMETER v.
|
|
|
|
CLASS-METHODS func_get_uuid_32
|
|
RETURNING
|
|
VALUE(result) TYPE string.
|
|
|
|
CLASS-METHODS func_get_uuid_22
|
|
RETURNING
|
|
VALUE(result) TYPE string.
|
|
|
|
CLASS-METHODS func_get_user_tech
|
|
RETURNING
|
|
VALUE(result) TYPE string.
|
|
|
|
CLASS-METHODS trans_json_any_2
|
|
IMPORTING
|
|
any TYPE any
|
|
pretty_name type clike default /ui2/cl_json=>pretty_mode-none
|
|
RETURNING
|
|
VALUE(result) TYPE string.
|
|
|
|
CLASS-METHODS trans_xml_2_any
|
|
IMPORTING
|
|
xml TYPE clike
|
|
EXPORTING
|
|
any TYPE any.
|
|
|
|
CLASS-METHODS trans_xml_any_2
|
|
IMPORTING
|
|
any TYPE any
|
|
RETURNING
|
|
VALUE(result) TYPE string
|
|
RAISING
|
|
cx_xslt_serialization_error.
|
|
|
|
CLASS-METHODS boolean_check
|
|
IMPORTING
|
|
val TYPE any
|
|
RETURNING
|
|
VALUE(result) TYPE abap_bool.
|
|
|
|
CLASS-METHODS boolean_abap_2_json
|
|
IMPORTING
|
|
val TYPE any
|
|
RETURNING
|
|
VALUE(result) TYPE string.
|
|
|
|
CLASS-METHODS c_replace_assign_struc
|
|
IMPORTING
|
|
iv_attri TYPE clike
|
|
RETURNING
|
|
VALUE(rv_attri) TYPE string.
|
|
|
|
CLASS-METHODS trans_json_2_any
|
|
IMPORTING
|
|
val TYPE any
|
|
CHANGING
|
|
data TYPE any.
|
|
|
|
CLASS-METHODS trans_ref_tab_2_tab
|
|
IMPORTING
|
|
ir_tab_from TYPE REF TO data
|
|
EXPORTING
|
|
t_result TYPE STANDARD TABLE.
|
|
|
|
CLASS-METHODS c_trim_upper
|
|
IMPORTING
|
|
val TYPE clike
|
|
RETURNING
|
|
VALUE(result) TYPE string.
|
|
|
|
CLASS-METHODS rtti_xml_get_by_data
|
|
IMPORTING
|
|
data TYPE any
|
|
RETURNING
|
|
VALUE(result) TYPE string.
|
|
|
|
CLASS-METHODS rtti_xml_set_to_data
|
|
IMPORTING
|
|
rtti_data TYPE clike
|
|
EXPORTING
|
|
e_data TYPE REF TO data.
|
|
|
|
CLASS-METHODS time_get_timestampl
|
|
RETURNING
|
|
VALUE(result) TYPE timestampl.
|
|
|
|
CLASS-METHODS time_substract_seconds
|
|
IMPORTING
|
|
time TYPE timestampl
|
|
seconds TYPE i
|
|
RETURNING
|
|
VALUE(result) TYPE timestampl.
|
|
|
|
CLASS-METHODS c_trim
|
|
IMPORTING
|
|
val TYPE clike
|
|
RETURNING
|
|
VALUE(result) TYPE string.
|
|
|
|
CLASS-METHODS c_trim_lower
|
|
IMPORTING
|
|
val TYPE clike
|
|
RETURNING
|
|
VALUE(result) TYPE string.
|
|
|
|
CLASS-METHODS url_param_get_tab
|
|
IMPORTING
|
|
i_val TYPE clike
|
|
RETURNING
|
|
VALUE(rt_params) TYPE z2ui5_if_client=>ty_t_name_value.
|
|
|
|
CLASS-METHODS rtti_get_t_attri_by_object
|
|
IMPORTING
|
|
val TYPE REF TO object
|
|
RETURNING
|
|
VALUE(result) TYPE abap_attrdescr_tab.
|
|
|
|
CLASS-METHODS rtti_get_t_comp_by_struc
|
|
IMPORTING
|
|
val TYPE any
|
|
RETURNING
|
|
VALUE(result) TYPE cl_abap_structdescr=>component_table.
|
|
|
|
CLASS-METHODS rtti_get_type_name
|
|
IMPORTING
|
|
val TYPE any
|
|
RETURNING
|
|
VALUE(result) TYPE string.
|
|
|
|
CLASS-METHODS rtti_check_type_kind_dref
|
|
IMPORTING
|
|
val TYPE any
|
|
RETURNING
|
|
VALUE(result) TYPE abap_bool.
|
|
|
|
CLASS-METHODS rtti_get_type_kind
|
|
IMPORTING
|
|
val TYPE any
|
|
RETURNING
|
|
VALUE(result) TYPE string.
|
|
|
|
PROTECTED SECTION.
|
|
PRIVATE SECTION.
|
|
|
|
ENDCLASS.
|
|
|
|
|
|
|
|
CLASS z2ui5_cl_fw_utility IMPLEMENTATION.
|
|
|
|
|
|
METHOD boolean_abap_2_json.
|
|
|
|
IF boolean_check( val ).
|
|
result = COND #( WHEN val = abap_true THEN `true` ELSE `false` ).
|
|
ELSE.
|
|
result = val.
|
|
ENDIF.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD boolean_check.
|
|
|
|
TRY.
|
|
DATA(lv_type_name) = rtti_get_type_name( val ).
|
|
CASE lv_type_name.
|
|
WHEN `ABAP_BOOL` OR `XSDBOOLEAN`.
|
|
result = abap_true.
|
|
ENDCASE.
|
|
CATCH cx_root.
|
|
ENDTRY.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD c_trim.
|
|
|
|
result = shift_left( shift_right( CONV string( val ) ) ).
|
|
result = shift_right( val = result sub = cl_abap_char_utilities=>horizontal_tab ).
|
|
result = shift_left( val = result sub = cl_abap_char_utilities=>horizontal_tab ).
|
|
result = shift_left( shift_right( CONV string( val ) ) ).
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD c_trim_lower.
|
|
|
|
result = to_lower( c_trim( CONV string( val ) ) ).
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD c_trim_upper.
|
|
|
|
result = to_upper( c_trim( CONV string( val ) ) ).
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD time_get_timestampl.
|
|
GET TIME STAMP FIELD result.
|
|
ENDMETHOD.
|
|
|
|
METHOD time_substract_seconds.
|
|
result = cl_abap_tstmp=>subtractsecs( tstmp = time secs = seconds ).
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD func_get_user_tech.
|
|
result = sy-uname.
|
|
ENDMETHOD.
|
|
|
|
METHOD func_get_uuid_32.
|
|
|
|
TRY.
|
|
DATA uuid TYPE c LENGTH 32.
|
|
|
|
TRY.
|
|
CALL METHOD (`CL_SYSTEM_UUID`)=>if_system_uuid_static~create_uuid_c32
|
|
RECEIVING
|
|
uuid = uuid.
|
|
|
|
CATCH cx_sy_dyn_call_illegal_class.
|
|
|
|
DATA(lv_fm) = `GUID_CREATE`.
|
|
CALL FUNCTION lv_fm
|
|
IMPORTING
|
|
ev_guid_32 = uuid.
|
|
|
|
ENDTRY.
|
|
|
|
result = uuid.
|
|
|
|
CATCH cx_root.
|
|
ASSERT 1 = 0.
|
|
ENDTRY.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD func_get_uuid_22.
|
|
|
|
TRY.
|
|
DATA uuid TYPE c LENGTH 22.
|
|
|
|
TRY.
|
|
CALL METHOD (`CL_SYSTEM_UUID`)=>if_system_uuid_static~create_uuid_c22
|
|
RECEIVING
|
|
uuid = uuid.
|
|
|
|
CATCH cx_sy_dyn_call_illegal_class.
|
|
|
|
DATA(lv_fm) = `GUID_CREATE`.
|
|
CALL FUNCTION lv_fm
|
|
IMPORTING
|
|
ev_guid_22 = uuid.
|
|
|
|
ENDTRY.
|
|
|
|
result = uuid.
|
|
|
|
CATCH cx_root.
|
|
ASSERT 1 = 0.
|
|
ENDTRY.
|
|
|
|
result = replace( val = result sub = `}` with = `0` occ = 0 ).
|
|
result = replace( val = result sub = `{` with = `0` occ = 0 ).
|
|
result = replace( val = result sub = `"` with = `0` occ = 0 ).
|
|
result = replace( val = result sub = `'` with = `0` occ = 0 ).
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD rtti_get_classname_by_ref.
|
|
|
|
DATA(lv_classname) = cl_abap_classdescr=>get_class_name( in ).
|
|
result = substring_after( val = lv_classname
|
|
sub = `\CLASS=` ).
|
|
|
|
ENDMETHOD.
|
|
|
|
METHOD rtti_get_type_kind.
|
|
|
|
result = cl_abap_datadescr=>get_data_type_kind( val ).
|
|
|
|
ENDMETHOD.
|
|
|
|
METHOD rtti_check_type_kind_dref.
|
|
|
|
DATA(lv_type_kind) = cl_abap_datadescr=>get_data_type_kind( val ).
|
|
result = xsdbool( lv_type_kind = cl_abap_typedescr=>typekind_dref ).
|
|
|
|
ENDMETHOD.
|
|
|
|
METHOD rtti_get_type_name.
|
|
|
|
DATA(lo_descr) = cl_abap_elemdescr=>describe_by_data( val ).
|
|
DATA(lo_ele) = CAST cl_abap_elemdescr( lo_descr ).
|
|
result = lo_ele->get_relative_name( ).
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD rtti_get_t_attri_by_object.
|
|
|
|
DATA(lo_obj_ref) = cl_abap_objectdescr=>describe_by_object_ref( val ).
|
|
result = CAST cl_abap_classdescr( lo_obj_ref )->attributes.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD rtti_get_t_comp_by_struc.
|
|
|
|
DATA(lo_type) = cl_abap_structdescr=>describe_by_data( val ).
|
|
DATA(lo_struct) = CAST cl_abap_structdescr( lo_type ).
|
|
result = lo_struct->get_components( ).
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD rtti_xml_get_by_data.
|
|
|
|
TRY.
|
|
|
|
DATA srtti TYPE REF TO object.
|
|
|
|
CALL METHOD ('ZCL_SRTTI_TYPEDESCR')=>('CREATE_BY_DATA_OBJECT')
|
|
EXPORTING
|
|
data_object = data
|
|
RECEIVING
|
|
srtti = srtti.
|
|
|
|
CALL TRANSFORMATION id SOURCE srtti = srtti dobj = data RESULT XML result.
|
|
|
|
CATCH cx_root.
|
|
DATA(lv_link) = `https://github.com/sandraros/S-RTTI`.
|
|
DATA(lv_text) = `<p>Please install the open-source project S-RTTI by sandraros and try again: <a href="` &&
|
|
lv_link && `" style="color:blue; font-weight:600;">(link)</a></p>`.
|
|
|
|
RAISE EXCEPTION TYPE z2ui5_cx_fw_error
|
|
EXPORTING
|
|
val = lv_text.
|
|
|
|
ENDTRY.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD rtti_xml_set_to_data.
|
|
|
|
TRY.
|
|
DATA srtti TYPE REF TO object.
|
|
CALL TRANSFORMATION id SOURCE XML rtti_data RESULT srtti = srtti.
|
|
|
|
DATA rtti_type TYPE REF TO cl_abap_typedescr.
|
|
CALL METHOD srtti->('GET_RTTI')
|
|
RECEIVING
|
|
rtti = rtti_type.
|
|
|
|
DATA lo_datadescr TYPE REF TO cl_abap_datadescr.
|
|
lo_datadescr ?= rtti_type.
|
|
|
|
CREATE DATA e_data TYPE HANDLE lo_datadescr.
|
|
ASSIGN e_data->* TO FIELD-SYMBOL(<variable>).
|
|
CALL TRANSFORMATION id SOURCE XML rtti_data RESULT dobj = <variable>.
|
|
|
|
CATCH cx_root.
|
|
|
|
DATA(lv_link) = `https://github.com/sandraros/S-RTTI`.
|
|
DATA(lv_text) = `<p>Please install the open-source project S-RTTI by sandraros and try again: <a href="` && lv_link && `" style="color:blue; font-weight:600;">(link)</a></p>`.
|
|
|
|
RAISE EXCEPTION TYPE z2ui5_cx_fw_error
|
|
EXPORTING
|
|
val = lv_text.
|
|
|
|
ENDTRY.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD trans_json_any_2.
|
|
|
|
result = /ui2/cl_json=>serialize( data = any pretty_name = conv #( pretty_name ) ).
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD trans_xml_any_2.
|
|
|
|
CALL TRANSFORMATION id
|
|
SOURCE data = any
|
|
RESULT XML result
|
|
OPTIONS data_refs = `heap-or-create`.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD c_replace_assign_struc.
|
|
|
|
rv_attri = iv_attri.
|
|
DATA(lv_length) = strlen( rv_attri ) - 2.
|
|
DATA(lv_attri_end) = rv_attri+lv_length.
|
|
|
|
IF lv_attri_end = `>*`.
|
|
lv_attri_end = `>`.
|
|
lv_length = lv_length.
|
|
ELSE.
|
|
lv_attri_end = `-`.
|
|
lv_length = lv_length + 2.
|
|
ENDIF.
|
|
rv_attri = rv_attri(lv_length) && lv_attri_end.
|
|
|
|
ENDMETHOD.
|
|
|
|
METHOD trans_json_2_any.
|
|
|
|
/ui2/cl_json=>deserialize(
|
|
EXPORTING
|
|
json = CONV string( val )
|
|
assoc_arrays = abap_true
|
|
CHANGING
|
|
data = data ).
|
|
|
|
ENDMETHOD.
|
|
|
|
METHOD trans_ref_tab_2_tab.
|
|
|
|
TYPES ty_t_ref TYPE STANDARD TABLE OF REF TO data.
|
|
FIELD-SYMBOLS <lt_from> TYPE ty_t_ref.
|
|
|
|
ASSIGN ir_tab_from->* TO <lt_from>.
|
|
x_check_raise( xsdbool( sy-subrc <> 0 ) ).
|
|
CLEAR t_result.
|
|
|
|
DATA(lo_tab) = CAST cl_abap_tabledescr( cl_abap_datadescr=>describe_by_data( t_result ) ).
|
|
DATA(lo_struc) = CAST cl_abap_structdescr( lo_tab->get_table_line_type( ) ).
|
|
DATA(lt_components) = lo_struc->get_components( ).
|
|
|
|
LOOP AT <lt_from> INTO DATA(lr_from).
|
|
|
|
DATA lr_row TYPE REF TO data.
|
|
CREATE DATA lr_row TYPE HANDLE lo_struc.
|
|
ASSIGN lr_row->* TO FIELD-SYMBOL(<row>).
|
|
|
|
IF sy-subrc <> 0.
|
|
EXIT.
|
|
ENDIF.
|
|
|
|
ASSIGN lr_from->* TO FIELD-SYMBOL(<row_ui5>).
|
|
x_check_raise( when = xsdbool( sy-subrc <> 0 ) ).
|
|
|
|
DATA(lt_components_dissolved) = lt_components.
|
|
CLEAR lt_components_dissolved.
|
|
|
|
LOOP AT lt_components INTO DATA(ls_comp).
|
|
|
|
IF ls_comp-as_include = abap_false.
|
|
APPEND ls_comp TO lt_components_dissolved.
|
|
ELSE.
|
|
DATA(struct) = CAST cl_abap_structdescr( ls_comp-type ).
|
|
APPEND LINES OF struct->get_components( ) TO lt_components_dissolved.
|
|
|
|
ENDIF.
|
|
ENDLOOP.
|
|
|
|
LOOP AT lt_components_dissolved INTO ls_comp.
|
|
TRY.
|
|
|
|
FIELD-SYMBOLS <comp> TYPE data.
|
|
ASSIGN COMPONENT ls_comp-name OF STRUCTURE <row> TO <comp>.
|
|
|
|
IF sy-subrc <> 0.
|
|
CONTINUE.
|
|
ENDIF.
|
|
|
|
FIELD-SYMBOLS <comp_ui5> TYPE data.
|
|
ASSIGN COMPONENT ls_comp-name OF STRUCTURE <row_ui5> TO <comp_ui5>.
|
|
|
|
IF sy-subrc <> 0.
|
|
CONTINUE.
|
|
ENDIF.
|
|
|
|
ASSIGN <comp_ui5>->* TO FIELD-SYMBOL(<ls_data_ui5>).
|
|
|
|
IF sy-subrc = 0.
|
|
CASE ls_comp-type->kind.
|
|
WHEN cl_abap_typedescr=>kind_table.
|
|
trans_ref_tab_2_tab( EXPORTING ir_tab_from = <comp_ui5>
|
|
IMPORTING t_result = <comp> ).
|
|
WHEN OTHERS.
|
|
<comp> = <ls_data_ui5>.
|
|
ENDCASE.
|
|
ENDIF.
|
|
|
|
CATCH cx_root.
|
|
ENDTRY.
|
|
ENDLOOP.
|
|
|
|
INSERT <row> INTO TABLE t_result.
|
|
ENDLOOP.
|
|
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD trans_xml_2_any.
|
|
|
|
CALL TRANSFORMATION id
|
|
SOURCE XML xml
|
|
RESULT data = any.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD url_param_create_url.
|
|
|
|
LOOP AT t_params INTO DATA(ls_param).
|
|
result = result && ls_param-n && `=` && ls_param-v && `&`.
|
|
ENDLOOP.
|
|
result = shift_right( val = result sub = `&` ).
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD url_param_get.
|
|
|
|
DATA(lt_params) = url_param_get_tab( url ).
|
|
DATA(lv_val) = c_trim_lower( val ).
|
|
result = VALUE #( lt_params[ n = lv_val ]-v OPTIONAL ).
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD url_param_get_tab.
|
|
|
|
DATA(lv_search) = replace( val = i_val sub = `%3D` with = '=' occ = 0 ).
|
|
lv_search = shift_left( val = lv_search sub = `?` ).
|
|
lv_search = c_trim_lower( lv_search ).
|
|
|
|
DATA(lv_search2) = substring_after( val = lv_search
|
|
sub = `&sap-startup-params=` ).
|
|
lv_search = COND #( WHEN lv_search2 IS NOT INITIAL THEN lv_search2 ELSE lv_search ).
|
|
|
|
lv_search2 = substring_after( val = c_trim_lower( lv_search ) sub = `?` ).
|
|
IF lv_search2 IS NOT INITIAL.
|
|
lv_search = lv_search2.
|
|
ENDIF.
|
|
|
|
SPLIT lv_search AT `&` INTO TABLE DATA(lt_param).
|
|
|
|
LOOP AT lt_param REFERENCE INTO DATA(lr_param).
|
|
SPLIT lr_param->* AT `=` INTO DATA(lv_name) DATA(lv_value).
|
|
INSERT VALUE #( n = c_trim_lower( lv_name ) v = c_trim_lower( lv_value ) ) INTO TABLE rt_params.
|
|
ENDLOOP.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD url_param_set.
|
|
|
|
DATA(lt_params) = url_param_get_tab( url ).
|
|
DATA(lv_n) = c_trim_lower( name ).
|
|
|
|
LOOP AT lt_params REFERENCE INTO DATA(lr_params)
|
|
WHERE n = lv_n.
|
|
lr_params->v = c_trim_lower( value ).
|
|
ENDLOOP.
|
|
IF sy-subrc <> 0.
|
|
INSERT VALUE #( n = lv_n v = c_trim_lower( value ) ) INTO TABLE lt_params.
|
|
ENDIF.
|
|
|
|
result = url_param_create_url( lt_params ).
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD x_check_raise.
|
|
|
|
IF when = abap_true.
|
|
RAISE EXCEPTION TYPE z2ui5_cx_fw_error EXPORTING val = v.
|
|
ENDIF.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD x_raise.
|
|
|
|
RAISE EXCEPTION TYPE z2ui5_cx_fw_error EXPORTING val = v.
|
|
|
|
ENDMETHOD.
|
|
ENDCLASS.
|