refactoring (#872)

* refactoring

* update

* cell binding fix

* formatting
This commit is contained in:
oblomov 2024-02-07 19:02:41 +01:00 committed by GitHub
parent 064ddaa543
commit 12c68094cc
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
68 changed files with 2817 additions and 2177 deletions

View File

@ -3,7 +3,7 @@
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<DEVC>
<CTEXT>abap2UI5 - utility (util)</CTEXT>
<CTEXT>abap2UI5 - utility</CTEXT>
</DEVC>
</asx:values>
</asx:abap>

View File

@ -0,0 +1,106 @@
CLASS z2ui5_cl_util DEFINITION
PUBLIC
CREATE PUBLIC
INHERITING FROM z2ui5_cl_util_api.
PUBLIC SECTION.
CLASS-METHODS db_save
IMPORTING
uname TYPE clike OPTIONAL
handle TYPE clike OPTIONAL
handle2 TYPE clike OPTIONAL
handle3 TYPE clike OPTIONAL
data TYPE any
check_commit TYPE abap_bool DEFAULT abap_true
RETURNING
VALUE(result) TYPE string.
CLASS-METHODS db_load_by_id
IMPORTING
id TYPE clike OPTIONAL
EXPORTING
VALUE(result) TYPE any.
CLASS-METHODS db_load_by_handle
IMPORTING
uname TYPE clike OPTIONAL
handle TYPE clike OPTIONAL
handle2 TYPE clike OPTIONAL
handle3 TYPE clike OPTIONAL
EXPORTING
VALUE(result) TYPE any.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS z2ui5_cl_util IMPLEMENTATION.
METHOD db_load_by_handle.
DATA lt_db TYPE STANDARD TABLE OF z2ui5_t_fw_02 WITH EMPTY KEY.
SELECT data
FROM z2ui5_t_fw_02
WHERE
uname = @uname
AND handle = @handle
AND handle2 = @handle2
AND handle3 = @handle3
INTO CORRESPONDING FIELDS OF TABLE @lt_db.
DATA(ls_db) = lt_db[ 1 ].
xml_parse(
EXPORTING
xml = ls_db-data
IMPORTING
any = result ).
ENDMETHOD.
METHOD db_load_by_id.
DATA lt_db TYPE STANDARD TABLE OF z2ui5_t_fw_02 WITH EMPTY KEY.
SELECT data
FROM z2ui5_t_fw_02
WHERE id = @id
INTO CORRESPONDING FIELDS OF TABLE @lt_db.
DATA(ls_db) = lt_db[ 1 ].
xml_parse(
EXPORTING
xml = ls_db-data
IMPORTING
any = result ).
ENDMETHOD.
METHOD db_save.
DATA(ls_db) = VALUE z2ui5_t_fw_02(
id = uuid_get_c32( )
uname = uname
handle = handle
handle2 = handle2
handle3 = handle3
data = xml_stringify( data ) ).
MODIFY z2ui5_t_fw_02 FROM @ls_db.
IF check_commit = abap_true.
COMMIT WORK AND WAIT.
ENDIF.
result = ls_db-id.
ENDMETHOD.
ENDCLASS.

View File

@ -3,14 +3,13 @@
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOCLASS>
<CLSNAME>Z2UI5_CL_FW_CLIENT</CLSNAME>
<CLSNAME>Z2UI5_CL_UTIL</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>abap2UI5 - app api</DESCRIPT>
<DESCRIPT>abap2UI5 - specfic functions</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>

View File

@ -99,7 +99,6 @@
*
* METHODS test_trans_json_any_2__w_struc FOR TESTING RAISING cx_static_check.
* METHODS test_trans_json_2_any__w_dref FOR TESTING RAISING cx_static_check.
* METHODS test_trans_ref_tab_2_tab FOR TESTING RAISING cx_static_check.
* METHODS test_trans_xml_any_2__w_obj FOR TESTING RAISING cx_static_check.
* METHODS test_trans_xml_any_2__w_data FOR TESTING RAISING cx_static_check.
* METHODS test_trans_xml_2_any__w_obj FOR TESTING RAISING cx_static_check.
@ -261,39 +260,39 @@
*
* DATA(lv_bool) = xsdbool( 1 = 1 ).
* cl_abap_unit_assert=>assert_equals(
* act = z2ui5_cl_util_func=>boolean_check_by_data( lv_bool )
* act = z2ui5_cl_util=>boolean_check_by_data( lv_bool )
* exp = abap_true ).
*
* lv_bool = xsdbool( 1 = 2 ).
* cl_abap_unit_assert=>assert_equals(
* act = z2ui5_cl_util_func=>boolean_check_by_data( lv_bool )
* act = z2ui5_cl_util=>boolean_check_by_data( lv_bool )
* exp = abap_true ).
*
* cl_abap_unit_assert=>assert_equals(
* act = z2ui5_cl_util_func=>boolean_check_by_data( abap_true )
* act = z2ui5_cl_util=>boolean_check_by_data( abap_true )
* exp = abap_true ).
*
* cl_abap_unit_assert=>assert_equals(
* act = z2ui5_cl_util_func=>boolean_check_by_data( abap_false )
* act = z2ui5_cl_util=>boolean_check_by_data( abap_false )
* exp = abap_true ).
*
* ENDMETHOD.
*
* METHOD test_create.
*
* DATA(lo_test) = NEW z2ui5_cl_util_func( ) ##NEEDED.
* DATA(lo_test) = NEW z2ui5_cl_util( ) ##NEEDED.
*
* ENDMETHOD.
*
* METHOD test_rtti_get_classname_by_ref.
*
* DATA(lo_test) = NEW z2ui5_cl_util_func( ).
* DATA(lv_name) = z2ui5_cl_util_func=>rtti_get_classname_by_ref( lo_test ).
* cl_abap_unit_assert=>assert_equals( exp = `Z2UI5_CL_UTIL_FUNC`
* DATA(lo_test) = NEW z2ui5_cl_util( ).
* DATA(lv_name) = z2ui5_cl_util=>rtti_get_classname_by_ref( lo_test ).
* cl_abap_unit_assert=>assert_equals( exp = `z2ui5_cl_util`
* act = lv_name ).
*
* DATA(lo_test2) = NEW ltcl_test_app( ).
* DATA(lv_name2) = z2ui5_cl_util_func=>rtti_get_classname_by_ref( lo_test2 ).
* DATA(lv_name2) = z2ui5_cl_util=>rtti_get_classname_by_ref( lo_test2 ).
* cl_abap_unit_assert=>assert_equals( exp = `LTCL_TEST_APP`
* act = lv_name2 ).
*
@ -302,9 +301,9 @@
* METHOD test_boolean_abap_2_json.
*
* cl_abap_unit_assert=>assert_equals( exp = `false`
* act = z2ui5_cl_util_func=>boolean_abap_2_json( abap_false ) ).
* act = z2ui5_cl_util=>boolean_abap_2_json( abap_false ) ).
*
* IF `{ABCD}` <> z2ui5_cl_util_func=>boolean_abap_2_json( `{ABCD}` ).
* IF `{ABCD}` <> z2ui5_cl_util=>boolean_abap_2_json( `{ABCD}` ).
* cl_abap_unit_assert=>fail( ).
* ENDIF.
*
@ -312,9 +311,9 @@
*
* METHOD test_time_get_timestampl.
*
* DATA(lv_time) = z2ui5_cl_util_func=>time_get_timestampl( ).
* DATA(lv_time) = z2ui5_cl_util=>time_get_timestampl( ).
*
* DATA(lv_time2) = z2ui5_cl_util_func=>time_substract_seconds(
* DATA(lv_time2) = z2ui5_cl_util=>time_substract_seconds(
* time = lv_time
* seconds = 60 * 60 * 4 ).
*
@ -330,8 +329,8 @@
*
* METHOD test_time_substract_seconds.
*
* DATA(lv_time) = z2ui5_cl_util_func=>time_get_timestampl( ).
* DATA(lv_time2) = z2ui5_cl_util_func=>time_get_timestampl( ).
* DATA(lv_time) = z2ui5_cl_util=>time_get_timestampl( ).
* DATA(lv_time2) = z2ui5_cl_util=>time_get_timestampl( ).
*
* IF lv_time IS INITIAL OR lv_time2 IS INITIAL.
* cl_abap_unit_assert=>fail( ).
@ -345,7 +344,7 @@
*
* METHOD test_c_trim.
*
* IF z2ui5_cl_util_func=>c_trim( ` JsadfHHs ` ) <> `JsadfHHs`.
* IF z2ui5_cl_util=>c_trim( ` JsadfHHs ` ) <> `JsadfHHs`.
* cl_abap_unit_assert=>fail( ).
* ENDIF.
*
@ -353,7 +352,7 @@
*
* METHOD test_c_trim_lower.
*
* IF z2ui5_cl_util_func=>c_trim_lower( ` JsadfHHs ` ) <> `jsadfhhs`.
* IF z2ui5_cl_util=>c_trim_lower( ` JsadfHHs ` ) <> `jsadfhhs`.
* cl_abap_unit_assert=>fail( ).
* ENDIF.
*
@ -361,7 +360,7 @@
*
* METHOD test_c_trim_upper.
*
* IF z2ui5_cl_util_func=>c_trim_upper( ` JsadfHHs ` ) <> `JSADFHHS`.
* IF z2ui5_cl_util=>c_trim_upper( ` JsadfHHs ` ) <> `JSADFHHS`.
* cl_abap_unit_assert=>fail( ).
* ENDIF.
*
@ -369,7 +368,7 @@
*
* METHOD test_func_get_uuid_32.
*
* DATA(lv_uuid) = z2ui5_cl_util_func=>uuid_get_c32( ).
* DATA(lv_uuid) = z2ui5_cl_util=>uuid_get_c32( ).
*
* IF lv_uuid IS INITIAL.
* cl_abap_unit_assert=>fail( ).
@ -383,7 +382,7 @@
*
* METHOD test_func_get_uuid_22.
*
* DATA(lv_uuid) = z2ui5_cl_util_func=>uuid_get_c22( ).
* DATA(lv_uuid) = z2ui5_cl_util=>uuid_get_c22( ).
*
* IF lv_uuid IS INITIAL.
* cl_abap_unit_assert=>fail( ).
@ -397,7 +396,7 @@
*
* METHOD test_func_get_user_tech.
*
* DATA(lv_uname) = z2ui5_cl_util_func=>user_get_tech( ).
* DATA(lv_uname) = z2ui5_cl_util=>user_get_tech( ).
* IF sy-uname <> lv_uname OR lv_uname IS INITIAL.
* cl_abap_unit_assert=>fail( ).
* ENDIF.
@ -407,7 +406,7 @@
* METHOD test_x_raise.
*
* TRY.
* z2ui5_cl_util_func=>x_raise( ).
* z2ui5_cl_util=>x_raise( ).
* cl_abap_unit_assert=>fail( ).
* CATCH cx_root.
* ENDTRY.
@ -417,13 +416,13 @@
* METHOD test_x_check_raise.
*
* TRY.
* z2ui5_cl_util_func=>x_check_raise( xsdbool( 1 = 1 ) ).
* z2ui5_cl_util=>x_check_raise( xsdbool( 1 = 1 ) ).
* cl_abap_unit_assert=>fail( ).
* CATCH cx_root.
* ENDTRY.
*
* TRY.
* z2ui5_cl_util_func=>x_check_raise( xsdbool( 1 = 3 ) ).
* z2ui5_cl_util=>x_check_raise( xsdbool( 1 = 3 ) ).
* CATCH cx_root.
* cl_abap_unit_assert=>fail( ).
* ENDTRY.
@ -459,7 +458,7 @@
* DATA mr_data TYPE REF TO data.
* FIELD-SYMBOLS <any> TYPE any.
*
* z2ui5_cl_util_func=>trans_json_2_any(
* z2ui5_cl_util=>json_parse(
* EXPORTING
* val = lv_test
* CHANGING
@ -490,7 +489,7 @@
* DATA(ls_row) = VALUE ty_row( ).
* ls_row-title = `test`.
*
* DATA(lv_json) = z2ui5_cl_util_func=>trans_json_by_any( ls_row ).
* DATA(lv_json) = z2ui5_cl_util=>json_stringify( ls_row ).
*
* IF lv_json IS INITIAL.
* cl_abap_unit_assert=>fail( ).
@ -498,41 +497,11 @@
*
* ENDMETHOD.
*
* METHOD test_trans_ref_tab_2_tab.
*
* TYPES:
* BEGIN OF ty_row,
* title TYPE string,
* value TYPE string,
* selected TYPE abap_bool,
* END OF ty_row.
* TYPES ty_t_tab TYPE STANDARD TABLE OF ty_row WITH EMPTY KEY.
*
* DATA(lv_result) = `[{"TITLE":"Test","VALUE":"this is a description","SELECTED":true},{"TITLE":"Test2","VALUE":"this is a new descr","SELECTED":false}]`.
*
* DATA lo_data TYPE REF TO data.
* /ui2/cl_json=>deserialize( EXPORTING json = lv_result
* CHANGING data = lo_data ).
*
* DATA(lt_tab2) = VALUE ty_t_tab( ).
* z2ui5_cl_util_func=>trans_ref_tab_2_tab(
* EXPORTING ir_tab_from = lo_data
* IMPORTING t_result = lt_tab2 ).
*
*
* DATA(lt_tab) = VALUE ty_t_tab( ( title = 'Test' value = 'this is a description' selected = abap_true )
* ( title = 'Test2' value = 'this is a new descr' selected = abap_false ) ).
*
* IF lt_tab <> lt_tab2.
* cl_abap_unit_assert=>fail( ).
* ENDIF.
*
* ENDMETHOD.
*
* METHOD test_url_param_create_url.
*
* DATA(lt_param) = z2ui5_cl_util_func=>url_param_get_tab( `https://url.com/rvice_for_ui?sap-client=100&app_start=z2ui5_cl_app_hello_world` ).
* DATA(lv_url) = z2ui5_cl_util_func=>url_param_create_url( lt_param ).
* DATA(lt_param) = z2ui5_cl_util=>url_param_get_tab( `https://url.com/rvice_for_ui?sap-client=100&app_start=z2ui5_cl_app_hello_world` ).
* DATA(lv_url) = z2ui5_cl_util=>url_param_create_url( lt_param ).
*
* IF lv_url <> `sap-client=100&app_start=z2ui5_cl_app_hello_world`.
* cl_abap_unit_assert=>fail( ).
@ -542,7 +511,7 @@
*
* METHOD test_url_param_get.
*
* DATA(lv_param) = z2ui5_cl_util_func=>url_param_get(
* DATA(lv_param) = z2ui5_cl_util=>url_param_get(
* val = `app_start`
* url = `https://url.com/rvice_for_ui?sap-client=100&app_start=z2ui5_cl_app_hello_world` ).
*
@ -554,7 +523,7 @@
*
* METHOD test_url_param_get_tab.
*
* DATA(lt_param) = z2ui5_cl_util_func=>url_param_get_tab( `https://url.com/rvice_for_ui?sap-client=100&app_start=z2ui5_cl_app_hello_world` ).
* DATA(lt_param) = z2ui5_cl_util=>url_param_get_tab( `https://url.com/rvice_for_ui?sap-client=100&app_start=z2ui5_cl_app_hello_world` ).
* IF lt_param[ n = `sap-client` ]-v <> `100`.
* cl_abap_unit_assert=>fail( ).
* ENDIF.
@ -567,7 +536,7 @@
*
* METHOD test_url_param_set.
*
* DATA(lv_param) = z2ui5_cl_util_func=>url_param_set(
* DATA(lv_param) = z2ui5_cl_util=>url_param_set(
* name = `app_start`
* value = `z2ui5_cl_app_hello_world2`
* url = `https://url.com/rvice_for_ui?sap-client=100&app_start=z2ui5_cl_app_hello_world` ).
@ -581,7 +550,7 @@
* METHOD test_x_check_raise_not.
*
* TRY.
* z2ui5_cl_util_func=>x_check_raise( xsdbool( 1 = 2 ) ).
* z2ui5_cl_util=>x_check_raise( xsdbool( 1 = 2 ) ).
*
* CATCH z2ui5_cx_util_error.
* cl_abap_unit_assert=>fail( ).
@ -591,7 +560,7 @@
* METHOD test_rtti_get_type_name.
*
* DATA(lv_xsdbool) = VALUE xsdboolean( ).
* DATA(lv_name) = z2ui5_cl_util_func=>rtti_get_type_name( lv_xsdbool ).
* DATA(lv_name) = z2ui5_cl_util=>rtti_get_type_name( lv_xsdbool ).
* cl_abap_unit_assert=>assert_equals(
* act = lv_name
* exp = `XSDBOOLEAN` ).
@ -602,7 +571,7 @@
*
* DATA(lv_string) = VALUE string( ).
*
* DATA(lv_type_kind) = z2ui5_cl_util_func=>rtti_get_type_kind( lv_string ).
* DATA(lv_type_kind) = z2ui5_cl_util=>rtti_get_type_kind( lv_string ).
* DATA lr_string TYPE REF TO string.
* cl_abap_unit_assert=>assert_equals(
* act = lv_type_kind
@ -610,7 +579,7 @@
*
*
* CREATE DATA lr_string.
* lv_type_kind = z2ui5_cl_util_func=>rtti_get_type_kind( lr_string ).
* lv_type_kind = z2ui5_cl_util=>rtti_get_type_kind( lr_string ).
* cl_abap_unit_assert=>assert_equals(
* act = lv_type_kind
* exp = cl_abap_typedescr=>typekind_dref ).
@ -622,13 +591,13 @@
* DATA(lv_string) = VALUE string( ).
* DATA lr_string TYPE REF TO string.
* cl_abap_unit_assert=>assert_equals(
* act = z2ui5_cl_util_func=>rtti_check_type_kind_dref( lv_string )
* act = z2ui5_cl_util=>rtti_check_type_kind_dref( lv_string )
* exp = abap_false ).
*
*
* CREATE DATA lr_string.
* cl_abap_unit_assert=>assert_equals(
* act = z2ui5_cl_util_func=>rtti_check_type_kind_dref( lr_string )
* act = z2ui5_cl_util=>rtti_check_type_kind_dref( lr_string )
* exp = abap_true ).
*
* ENDMETHOD.
@ -636,7 +605,7 @@
* METHOD test_rtti_get_t_attri_by_obj.
*
* DATA(lo_obj) = NEW ltcl_test_app( ).
* DATA(lt_attri) = z2ui5_cl_util_func=>rtti_get_t_attri_by_object( lo_obj ).
* DATA(lt_attri) = z2ui5_cl_util=>rtti_get_t_attri_by_object( lo_obj ).
*
* IF lines( lt_attri ) <> 7.
* cl_abap_unit_assert=>fail( ).
@ -675,7 +644,7 @@
*
* DATA(ls_row) = VALUE ty_row( ).
*
* DATA(lt_comp) = z2ui5_cl_util_func=>rtti_get_t_comp_by_data( ls_row ).
* DATA(lt_comp) = z2ui5_cl_util=>rtti_get_t_comp_by_data( ls_row ).
*
* IF lines( lt_comp ) <> 7.
* cl_abap_unit_assert=>fail( ).
@ -708,7 +677,7 @@
* METHOD test_trans_xml_any_2__w_obj.
*
* DATA(lo_obj) = NEW ltcl_test_app( ).
* DATA(lv_xml) = z2ui5_cl_util_func=>trans_xml_by_any( lo_obj ).
* DATA(lv_xml) = z2ui5_cl_util=>xml_stringify( lo_obj ).
*
* IF lv_xml IS INITIAL.
* cl_abap_unit_assert=>fail( ).
@ -718,10 +687,10 @@
* METHOD test_trans_xml_2_any__w_obj.
*
* DATA(lo_obj) = NEW ltcl_test_app( ).
* DATA(lv_xml) = z2ui5_cl_util_func=>trans_xml_by_any( lo_obj ).
* DATA(lv_xml) = z2ui5_cl_util=>xml_stringify( lo_obj ).
*
* CLEAR lo_obj.
* z2ui5_cl_util_func=>trans_xml_2_any(
* z2ui5_cl_util=>xml_parse(
* EXPORTING
* xml = lv_xml
* IMPORTING
@ -749,7 +718,7 @@
* DATA(ls_row) = VALUE ty_row( ).
* ls_row-value = `test`.
*
* DATA(lv_xml) = z2ui5_cl_util_func=>trans_xml_by_any( ls_row ).
* DATA(lv_xml) = z2ui5_cl_util=>xml_stringify( ls_row ).
*
* IF lv_xml IS INITIAL.
* cl_abap_unit_assert=>fail( ).
@ -774,9 +743,9 @@
* DATA(ls_row2) = VALUE ty_row( ).
* ls_row-value = `test`.
*
* DATA(lv_xml) = z2ui5_cl_util_func=>trans_xml_by_any( ls_row ).
* DATA(lv_xml) = z2ui5_cl_util=>xml_stringify( ls_row ).
*
* z2ui5_cl_util_func=>trans_xml_2_any(
* z2ui5_cl_util=>xml_parse(
* EXPORTING
* xml = lv_xml
* IMPORTING
@ -790,22 +759,22 @@
*
* METHOD test_c_replace_assign_struc.
*
* DATA(lv_result) = z2ui5_cl_util_func=>c_replace_assign_struc( `MO_APP->MS_STRUC->*`).
* DATA(lv_result) = z2ui5_cl_util=>c_replace_assign_struc( `MO_APP->MS_STRUC->*`).
* cl_abap_unit_assert=>assert_equals(
* act = lv_result
* exp = 'MO_APP->MS_STRUC->' ).
*
* DATA(lv_result2) = z2ui5_cl_util_func=>c_replace_assign_struc( `MO_APP->MS_STRUC-MS_STRUC->*`).
* DATA(lv_result2) = z2ui5_cl_util=>c_replace_assign_struc( `MO_APP->MS_STRUC-MS_STRUC->*`).
* cl_abap_unit_assert=>assert_equals(
* act = lv_result2
* exp = 'MO_APP->MS_STRUC-MS_STRUC->' ).
*
* DATA(lv_result3) = z2ui5_cl_util_func=>c_replace_assign_struc( `*MO_APP->*MS_STRUC->*`).
* DATA(lv_result3) = z2ui5_cl_util=>c_replace_assign_struc( `*MO_APP->*MS_STRUC->*`).
* cl_abap_unit_assert=>assert_equals(
* act = lv_result3
* exp = `*MO_APP->*MS_STRUC->` ).
*
* DATA(lv_result4) = z2ui5_cl_util_func=>c_replace_assign_struc( `*MO_APP->*MS_STRUC`).
* DATA(lv_result4) = z2ui5_cl_util=>c_replace_assign_struc( `*MO_APP->*MS_STRUC`).
* cl_abap_unit_assert=>assert_equals(
* act = lv_result4
* exp = `*MO_APP->*MS_STRUC-` ).
@ -815,7 +784,7 @@
*
* METHOD test_c_trim_horizontal_tab.
*
* IF z2ui5_cl_util_func=>c_trim( |{ cl_abap_char_utilities=>horizontal_tab }|
* IF z2ui5_cl_util=>c_trim( |{ cl_abap_char_utilities=>horizontal_tab }|
* && |JsadfHHs|
* && |{ cl_abap_char_utilities=>horizontal_tab }| ) <> `JsadfHHs`.
* cl_abap_unit_assert=>fail( ).

View File

@ -3,9 +3,9 @@
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOCLASS>
<CLSNAME>Z2UI5_CL_UTIL_FUNC</CLSNAME>
<CLSNAME>Z2UI5_CL_UTIL_API</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>abap2UI5 - utility function</DESCRIPT>
<DESCRIPT>abap2UI5 - simplified abap apis</DESCRIPT>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>

View File

@ -0,0 +1,488 @@
CLASS z2ui5_cl_util_stmpncfctn DEFINITION
PUBLIC
CREATE PUBLIC .
PUBLIC SECTION.
TYPES:
BEGIN OF ty_data_element_texts,
header TYPE string,
short TYPE string,
medium TYPE string,
long TYPE string,
END OF ty_data_element_texts.
CLASS-METHODS method_get_source
IMPORTING
iv_classname TYPE clike
iv_methodname TYPE clike
RETURNING
VALUE(result) TYPE string_table.
CLASS-METHODS uuid_get_c32
RETURNING
VALUE(result) TYPE string.
CLASS-METHODS uuid_get_c22
RETURNING
VALUE(result) TYPE string.
CLASS-METHODS rtti_get_data_element_texts
IMPORTING
i_data_element_name TYPE string
RETURNING
VALUE(result) TYPE ty_data_element_texts.
CLASS-METHODS conv_decode_x_base64
IMPORTING
val TYPE string
RETURNING
VALUE(result) TYPE xstring.
CLASS-METHODS conv_encode_x_base64
IMPORTING
val TYPE xstring
RETURNING
VALUE(result) TYPE string.
CLASS-METHODS conv_get_string_by_xstring
IMPORTING
val TYPE xstring
RETURNING
VALUE(result) TYPE string.
CLASS-METHODS conv_get_xstring_by_string
IMPORTING
val TYPE string
RETURNING
VALUE(result) TYPE xstring.
CLASS-METHODS rtti_get_classes_impl_intf
IMPORTING
!val TYPE clike
RETURNING
VALUE(result) TYPE string_table.
ENDCLASS.
CLASS z2ui5_cl_util_stmpncfctn IMPLEMENTATION.
METHOD rtti_get_data_element_texts.
DATA:
data_element_name TYPE c LENGTH 30,
ddic_ref TYPE REF TO data,
data_element TYPE REF TO object,
content TYPE REF TO object,
BEGIN OF ddic,
reptext TYPE string,
scrtext_s TYPE string,
scrtext_m TYPE string,
scrtext_l TYPE string,
END OF ddic,
exists TYPE abap_bool.
data_element_name = i_data_element_name.
TRY.
cl_abap_typedescr=>describe_by_name( 'T100' ).
DATA(struct_desrc) = CAST cl_abap_structdescr( cl_abap_structdescr=>describe_by_name( 'DFIES' ) ).
CREATE DATA ddic_ref TYPE HANDLE struct_desrc.
ASSIGN ddic_ref->* TO FIELD-SYMBOL(<ddic>).
ASSERT sy-subrc = 0.
DATA(data_descr) = CAST cl_abap_datadescr( cl_abap_elemdescr=>describe_by_name( data_element_name ) ).
CALL METHOD data_descr->('GET_DDIC_FIELD')
RECEIVING
p_flddescr = <ddic>
EXCEPTIONS
not_found = 1
no_ddic_type = 2
OTHERS = 3.
IF sy-subrc <> 0.
RETURN.
ENDIF.
ddic = CORRESPONDING #( <ddic> ).
result-header = ddic-reptext.
result-short = ddic-scrtext_s.
result-medium = ddic-scrtext_m.
result-long = ddic-scrtext_l.
CATCH cx_root.
CALL METHOD ('XCO_CP_ABAP_DICTIONARY')=>('DATA_ELEMENT')
EXPORTING
iv_name = data_element_name
RECEIVING
ro_data_element = data_element.
CALL METHOD data_element->('IF_XCO_AD_DATA_ELEMENT~EXISTS')
RECEIVING
rv_exists = exists.
IF exists = abap_false.
RETURN.
ENDIF.
CALL METHOD data_element->('IF_XCO_AD_DATA_ELEMENT~CONTENT')
RECEIVING
ro_content = content.
CALL METHOD content->('IF_XCO_DTEL_CONTENT~GET_HEADING_FIELD_LABEL')
RECEIVING
rs_heading_field_label = result-header.
CALL METHOD content->('IF_XCO_DTEL_CONTENT~GET_SHORT_FIELD_LABEL')
RECEIVING
rs_short_field_label = result-short.
CALL METHOD content->('IF_XCO_DTEL_CONTENT~GET_MEDIUM_FIELD_LABEL')
RECEIVING
rs_medium_field_label = result-medium.
CALL METHOD content->('IF_XCO_DTEL_CONTENT~GET_LONG_FIELD_LABEL')
RECEIVING
rs_long_field_label = result-long.
ENDTRY.
ENDMETHOD.
METHOD rtti_get_classes_impl_intf.
DATA obj TYPE REF TO object.
FIELD-SYMBOLS <any> TYPE any.
DATA lt_implementation_names TYPE string_table.
TYPES:
BEGIN OF ty_s_impl,
clsname TYPE c LENGTH 30,
refclsname TYPE c LENGTH 30,
END OF ty_s_impl.
DATA lt_impl TYPE STANDARD TABLE OF ty_s_impl WITH DEFAULT KEY.
TYPES: BEGIN OF ty_s_key,
intkey TYPE c LENGTH 30,
END OF ty_s_key.
DATA ls_key TYPE ty_s_key.
TRY.
CALL METHOD ('XCO_CP_ABAP')=>interface
EXPORTING
iv_name = val
RECEIVING
ro_interface = obj.
ASSIGN obj->('IF_XCO_AO_INTERFACE~IMPLEMENTATIONS') TO <any>.
IF sy-subrc <> 0.
RAISE EXCEPTION TYPE cx_sy_dyn_call_illegal_class.
ENDIF.
obj = <any>.
ASSIGN obj->('IF_XCO_INTF_IMPLEMENTATIONS_FC~ALL') TO <any>.
IF sy-subrc <> 0.
RAISE EXCEPTION TYPE cx_sy_dyn_call_illegal_class.
ENDIF.
obj = <any>.
CALL METHOD obj->('IF_XCO_INTF_IMPLEMENTATIONS~GET').
CALL METHOD obj->('IF_XCO_INTF_IMPLEMENTATIONS~GET_NAMES')
RECEIVING
rt_names = lt_implementation_names.
result = lt_implementation_names.
CATCH cx_sy_dyn_call_illegal_class.
ls_key-intkey = val.
DATA(lv_fm) = `SEO_INTERFACE_IMPLEM_GET_ALL`.
CALL FUNCTION lv_fm
EXPORTING
intkey = ls_key
IMPORTING
impkeys = lt_impl
EXCEPTIONS
not_existing = 1
OTHERS = 2.
LOOP AT lt_impl REFERENCE INTO DATA(lr_impl).
INSERT CONV #( lr_impl->clsname ) INTO TABLE result.
ENDLOOP.
ENDTRY.
ENDMETHOD.
METHOD conv_get_string_by_xstring.
DATA conv TYPE REF TO object.
TRY.
CALL METHOD ('CL_ABAP_CONV_CODEPAGE')=>create_in
RECEIVING
instance = conv.
CALL METHOD conv->('IF_ABAP_CONV_IN~CONVERT')
EXPORTING
source = val
RECEIVING
result = result.
CATCH cx_sy_dyn_call_illegal_class.
DATA(conv_in_class) = 'CL_ABAP_CONV_IN_CE'.
CALL METHOD (conv_in_class)=>create
EXPORTING
encoding = 'UTF-8'
RECEIVING
conv = conv.
CALL METHOD conv->('CONVERT')
EXPORTING
input = val
IMPORTING
data = result.
ENDTRY.
ENDMETHOD.
METHOD conv_get_xstring_by_string.
DATA conv TYPE REF TO object.
TRY.
CALL METHOD ('CL_ABAP_CONV_CODEPAGE')=>create_out
RECEIVING
instance = conv.
CALL METHOD conv->('IF_ABAP_CONV_OUT~CONVERT')
EXPORTING
source = val
RECEIVING
result = result.
CATCH cx_sy_dyn_call_illegal_class.
DATA(conv_out_class) = 'CL_ABAP_CONV_OUT_CE'.
CALL METHOD (conv_out_class)=>create
EXPORTING
encoding = 'UTF-8'
RECEIVING
conv = conv.
CALL METHOD conv->('CONVERT')
EXPORTING
data = val
IMPORTING
buffer = result.
ENDTRY.
ENDMETHOD.
METHOD conv_decode_x_base64.
TRY.
CALL METHOD ('CL_WEB_HTTP_UTILITY')=>('DECODE_X_BASE64')
EXPORTING
encoded = val
RECEIVING
decoded = result.
CATCH cx_sy_dyn_call_illegal_class.
DATA(classname) = 'CL_HTTP_UTILITY'.
CALL METHOD (classname)=>('DECODE_X_BASE64')
EXPORTING
encoded = val
RECEIVING
decoded = result.
ENDTRY.
ENDMETHOD.
METHOD conv_encode_x_base64.
TRY.
CALL METHOD ('CL_WEB_HTTP_UTILITY')=>('ENCODE_X_BASE64')
EXPORTING
unencoded = val
RECEIVING
encoded = result.
CATCH cx_sy_dyn_call_illegal_class.
DATA(classname) = 'CL_HTTP_UTILITY'.
CALL METHOD (classname)=>('ENCODE_X_BASE64')
EXPORTING
unencoded = val
RECEIVING
encoded = result.
ENDTRY.
ENDMETHOD.
METHOD uuid_get_c22.
DATA uuid TYPE c LENGTH 22.
TRY.
TRY.
DATA(lv_classname) = `CL_SYSTEM_UUID`.
CALL METHOD (lv_classname)=>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 uuid_get_c32.
DATA uuid TYPE c LENGTH 32.
TRY.
TRY.
DATA(lv_classname) = `CL_SYSTEM_UUID`.
CALL METHOD (lv_classname)=>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 method_get_source.
DATA object TYPE REF TO object.
FIELD-SYMBOLS <any> TYPE any.
DATA lt_source TYPE string_table.
DATA lt_string TYPE string_table.
TRY.
DATA(lv_class) = to_upper( iv_classname ).
DATA(lv_method) = to_upper( iv_methodname ).
CALL METHOD ('XCO_CP_ABAP')=>('CLASS')
EXPORTING
iv_name = lv_class
RECEIVING
ro_class = object.
ASSIGN ('OBJECT->IF_XCO_AO_CLASS~IMPLEMENTATION') TO <any>.
object = <any>.
CALL METHOD object->('IF_XCO_CLAS_IMPLEMENTATION~METHOD')
EXPORTING
iv_name = lv_method
RECEIVING
ro_method = object.
CALL METHOD object->('IF_XCO_CLAS_I_METHOD~CONTENT')
RECEIVING
ro_content = object.
CALL METHOD object->('IF_XCO_CLAS_I_METHOD_CONTENT~GET_SOURCE')
RECEIVING
rt_source = result.
CATCH cx_sy_dyn_call_error.
DATA(lv_name) = 'CL_OO_FACTORY'.
CALL METHOD (lv_name)=>('CREATE_INSTANCE')
RECEIVING
result = object.
CALL METHOD object->('IF_OO_CLIF_SOURCE_FACTORY~CREATE_CLIF_SOURCE')
EXPORTING
clif_name = lv_class
RECEIVING
result = object.
CALL METHOD object->('IF_OO_CLIF_SOURCE~GET_SOURCE')
IMPORTING
source = lt_source.
DATA(lv_check_method) = abap_false.
LOOP AT lt_source INTO DATA(lv_source).
DATA(lv_source_upper) = to_upper( lv_source ).
IF lv_source_upper CS `ENDMETHOD`.
lv_check_method = abap_false.
ENDIF.
IF lv_source_upper CS `METHOD ` && lv_method.
lv_check_method = abap_true.
CONTINUE.
ENDIF.
IF lv_check_method = abap_true.
INSERT lv_source INTO TABLE lt_string.
ENDIF.
ENDLOOP.
ENDTRY.
result = lt_string.
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_STMPNCFCTN</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>abap2UI5 - running everywhere snippets</DESCRIPT>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
</VSEOCLASS>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -40,7 +40,7 @@ CLASS z2ui5_cx_util_error IMPLEMENTATION.
CATCH cx_root.
ms_error-text = val.
ENDTRY.
ms_error-uuid = z2ui5_cl_util_func=>uuid_get_c32( ).
ms_error-uuid = z2ui5_cl_util=>uuid_get_c32( ).
ENDMETHOD.

View File

@ -3,7 +3,7 @@
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<DEVC>
<CTEXT>abap2UI5 - fw helper</CTEXT>
<CTEXT>abap2UI5 - core services</CTEXT>
</DEVC>
</asx:values>
</asx:abap>

View File

@ -1,172 +1,108 @@
CLASS z2ui5_cl_fw_hlp_binder DEFINITION
CLASS z2ui5_cl_core_bind_srv DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
DATA mo_app TYPE REF TO z2ui5_cl_fw_app.
DATA mr_attri TYPE REF TO z2ui5_if_fw_types=>ty_s_attri.
DATA ms_config TYPE z2ui5_if_fw_types=>ty_s_bind_config.
DATA mo_app TYPE REF TO z2ui5_cl_core_app .
DATA mr_attri TYPE REF TO z2ui5_if_core_types=>ty_s_attri .
DATA ms_config TYPE z2ui5_if_core_types=>ty_s_bind_config .
DATA mv_type TYPE string .
METHODS constructor
IMPORTING
app TYPE REF TO z2ui5_cl_fw_app.
!app TYPE REF TO z2ui5_cl_core_app .
METHODS bind_local
METHODS main_local
IMPORTING
val TYPE data
config TYPE z2ui5_if_fw_types=>ty_s_bind_config OPTIONAL
!val TYPE data
!config TYPE z2ui5_if_core_types=>ty_s_bind_config OPTIONAL
RETURNING
VALUE(result) TYPE string .
METHODS bind
METHODS main
IMPORTING
val TYPE data
type TYPE string
config TYPE z2ui5_if_fw_types=>ty_s_bind_config OPTIONAL
!val TYPE data
!type TYPE string
!config TYPE z2ui5_if_core_types=>ty_s_bind_config OPTIONAL
RETURNING
VALUE(result) TYPE string .
METHODS clear_bind
METHODS main_cell
IMPORTING
val TYPE string.
METHODS ui5_set_arg_string
IMPORTING
val TYPE string_table
!val TYPE data
!type TYPE string
!config TYPE z2ui5_if_core_types=>ty_s_bind_config OPTIONAL
RETURNING
VALUE(result) TYPE string .
METHODS ui5_event
METHODS clear
IMPORTING
val TYPE clike OPTIONAL
check_view_destroy TYPE abap_bool DEFAULT abap_false
t_arg TYPE string_table OPTIONAL
PREFERRED PARAMETER val
RETURNING
VALUE(result) TYPE string.
METHODS ui5_event_client
!val TYPE string.
METHODS bind_tab_cell
IMPORTING
val TYPE clike
t_arg TYPE string_table OPTIONAL
!iv_name TYPE string
!i_val TYPE data
RETURNING
VALUE(result) TYPE string.
PROTECTED SECTION.
METHODS update_attri.
METHODS check_raise_existing_binding.
METHODS check_raise_new_binding.
METHODS get_client_name
RETURNING
VALUE(result) TYPE string.
METHODS update_model_attri.
METHODS check_raise_existing.
METHODS check_raise_new.
PRIVATE SECTION.
ENDCLASS.
CLASS z2ui5_cl_fw_hlp_binder IMPLEMENTATION.
METHOD ui5_event.
result = `onEvent( { 'EVENT' : '` && val && `', 'METHOD' : 'UPDATE' , 'CHECK_VIEW_DESTROY' : ` && z2ui5_cl_util_func=>boolean_abap_2_json( check_view_destroy ) && ` }`.
result = result && ui5_set_arg_string( t_arg ).
ENDMETHOD.
CLASS z2ui5_cl_core_bind_srv IMPLEMENTATION.
METHOD ui5_event_client.
METHOD bind_tab_cell.
result = `onEventFrontend( { 'EVENT' : '` && val && `' }` && ui5_set_arg_string( t_arg ).
FIELD-SYMBOLS <ele> TYPE any.
FIELD-SYMBOLS <row> TYPE any.
DATA lr_ref_in TYPE REF TO data.
DATA lr_ref TYPE REF TO data.
ENDMETHOD.
FIELD-SYMBOLS <tab> TYPE STANDARD TABLE.
ASSIGN ms_config-tab->* TO <tab>.
ASSIGN <tab>[ ms_config-tab_index ] TO <row>.
DATA(lt_attri) = z2ui5_cl_util=>rtti_get_t_comp_by_data( <row> ).
METHOD ui5_set_arg_string.
LOOP AT lt_attri ASSIGNING FIELD-SYMBOL(<comp>).
IF val IS NOT INITIAL.
ASSIGN COMPONENT <comp>-name OF STRUCTURE <row> TO <ele>.
lr_ref_in = REF #( <ele> ).
LOOP AT val REFERENCE INTO DATA(lr_arg).
DATA(lv_new) = lr_arg->*.
IF lv_new IS INITIAL.
CONTINUE.
lr_ref = REF #( i_val ).
IF lr_ref = lr_ref_in.
result = iv_name && '/' && shift_right( CONV string( ms_config-tab_index - 1 ) ) && '/' && <comp>-name.
* result = `{` && iv_name && '/' && shift_right( CONV string( ms_config-tab_index - 1 ) ) && '/' && <comp>-name && `}`.
RETURN.
ENDIF.
IF lv_new(1) <> `$` AND lv_new(1) <> `{`.
lv_new = `"` && lv_new && `"`.
ENDIF.
result = result && `, ` && lv_new.
ENDLOOP.
ENDIF.
result = result && `)`.
ENDMETHOD.
METHOD bind.
ms_config = config.
mv_type = type.
mr_attri = mo_app->attri_get_by_data( val ).
IF mr_attri->bind_type IS NOT INITIAL.
check_raise_existing_binding( ).
result = mr_attri->name_client.
ELSE.
check_raise_new_binding( ).
update_attri( ).
result = mr_attri->name_client.
ENDIF.
IF ms_config-path_only = abap_false.
result = `{` && result && `}`.
ENDIF.
RAISE EXCEPTION TYPE z2ui5_cx_util_error
EXPORTING
val = `BINDING_ERROR - No class attribute for binding found - Please check if the binded values are public attributes of your class`.
ENDMETHOD.
METHOD bind_local.
TRY.
IF config-custom_mapper IS BOUND.
DATA(ajson) = CAST z2ui5_if_ajson( z2ui5_cl_ajson=>create_empty( ii_custom_mapping = config-custom_mapper ) ).
ELSE.
ajson = CAST z2ui5_if_ajson( z2ui5_cl_ajson=>create_empty( ii_custom_mapping = z2ui5_cl_ajson_mapping=>create_upper_case( ) ) ).
ENDIF.
ajson->set( iv_path = `/` iv_val = val ).
IF config-custom_filter IS BOUND.
ajson = ajson->filter( config-custom_filter ).
ELSE.
ajson = ajson->filter( z2ui5_cl_ajson_filter_lib=>create_empty_filter( ) ).
ENDIF.
DATA(lv_id) = to_upper( z2ui5_cl_util_func=>uuid_get_c22( ) ).
INSERT VALUE #( name_client = |/{ lv_id }|
name = lv_id
json_bind_local = ajson
bind_type = z2ui5_if_fw_types=>cs_bind_type-one_time )
INTO TABLE mo_app->mt_attri.
result = |/{ lv_id }|.
IF ms_config-path_only = abap_false.
result = `{` && result && `}`.
ENDIF.
CATCH cx_root INTO DATA(x).
ASSERT x IS NOT BOUND.
ENDTRY.
ENDMETHOD.
METHOD check_raise_existing_binding.
METHOD check_raise_existing.
IF mr_attri->bind_type <> mv_type.
RAISE EXCEPTION TYPE z2ui5_cx_util_error
@ -195,7 +131,7 @@ CLASS z2ui5_cl_fw_hlp_binder IMPLEMENTATION.
ENDMETHOD.
METHOD check_raise_new_binding.
METHOD check_raise_new.
IF mr_attri->custom_filter_back IS BOUND.
TRY.
@ -222,7 +158,7 @@ CLASS z2ui5_cl_fw_hlp_binder IMPLEMENTATION.
ENDMETHOD.
METHOD clear_bind.
METHOD clear.
mo_app->mt_attri[ name = val ]-check_dissolved = abap_false.
@ -246,12 +182,107 @@ CLASS z2ui5_cl_fw_hlp_binder IMPLEMENTATION.
result = replace( val = mr_attri->name sub = `-` with = `/` ).
result = replace( val = result sub = `>` with = `*` ).
result = COND #( WHEN mv_type = z2ui5_if_fw_types=>cs_bind_type-two_way THEN `/EDIT` ) && `/` && result.
result = COND #( WHEN mv_type = z2ui5_if_core_types=>cs_bind_type-two_way THEN `/EDIT` ) && `/` && result.
ENDMETHOD.
METHOD update_attri.
METHOD main.
IF config-tab IS BOUND.
FIELD-SYMBOLS <tab> TYPE STANDARD TABLE.
ASSIGN config-tab->* TO <tab>.
IF <tab> IS NOT INITIAL.
result = main_cell(
val = val
type = type
config = config ).
RETURN.
ENDIF.
ENDIF.
ms_config = config.
mv_type = type.
mr_attri = mo_app->attri_get_by_data( val ).
IF mr_attri->bind_type IS NOT INITIAL.
check_raise_existing( ).
result = mr_attri->name_client.
ELSE.
check_raise_new( ).
update_model_attri( ).
result = mr_attri->name_client.
ENDIF.
IF ms_config-path_only = abap_false.
result = `{` && result && `}`.
ENDIF.
ENDMETHOD.
METHOD main_cell.
ms_config = config.
mv_type = type.
FIELD-SYMBOLS <tab> TYPE STANDARD TABLE.
ASSIGN config-tab->* TO <tab>.
DATA(lo_bind) = NEW z2ui5_cl_core_bind_srv( mo_app ).
result = lo_bind->main( val = <tab> type = type config = value #( path_only = abap_true ) ).
result = bind_tab_cell(
iv_name = result
i_val = val ).
IF ms_config-path_only = abap_false.
result = `{` && result && `}`.
ENDIF.
ENDMETHOD.
METHOD main_local.
TRY.
IF config-custom_mapper IS BOUND.
DATA(ajson) = CAST z2ui5_if_ajson( z2ui5_cl_ajson=>create_empty( ii_custom_mapping = config-custom_mapper ) ).
ELSE.
ajson = CAST z2ui5_if_ajson( z2ui5_cl_ajson=>create_empty( ii_custom_mapping = z2ui5_cl_ajson_mapping=>create_upper_case( ) ) ).
ENDIF.
ajson->set( iv_path = `/` iv_val = val ).
IF config-custom_filter IS BOUND.
ajson = ajson->filter( config-custom_filter ).
ELSE.
ajson = ajson->filter( z2ui5_cl_ajson_filter_lib=>create_empty_filter( ) ).
ENDIF.
DATA(lv_id) = to_upper( z2ui5_cl_util=>uuid_get_c22( ) ).
INSERT VALUE #( name_client = |/{ lv_id }|
name = lv_id
json_bind_local = ajson
bind_type = z2ui5_if_core_types=>cs_bind_type-one_time )
INTO TABLE mo_app->mt_attri.
result = |/{ lv_id }|.
IF ms_config-path_only = abap_false.
result = `{` && result && `}`.
ENDIF.
CATCH cx_root INTO DATA(x).
ASSERT x IS NOT BOUND.
ENDTRY.
ENDMETHOD.
METHOD update_model_attri.
mr_attri->bind_type = mv_type.
mr_attri->view = ms_config-view.

View File

@ -6,7 +6,7 @@ CLASS ltcl_test_binder DEFINITION FINAL FOR TESTING
METHODS first_test FOR TESTING RAISING cx_static_check.
ENDCLASS.
CLASS z2ui5_cl_fw_hlp_binder DEFINITION LOCAL FRIENDS ltcl_test_binder.
CLASS z2ui5_cl_core_bind_srv DEFINITION LOCAL FRIENDS ltcl_test_binder.
CLASS ltcl_test_binder IMPLEMENTATION.

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_CORE_BIND_SRV</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>abap2UI5 - frontend data binding</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

@ -1,4 +1,4 @@
CLASS z2ui5_cl_fw_hlp_db DEFINITION
CLASS z2ui5_cl_core_draft_srv DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .
@ -7,18 +7,18 @@ CLASS z2ui5_cl_fw_hlp_db DEFINITION
METHODS create
IMPORTING
draft TYPE z2ui5_if_types=>ty_s_draft
model_xml TYPE clike.
!draft TYPE z2ui5_if_types=>ty_s_draft
!model_xml TYPE clike.
METHODS read_draft
IMPORTING
id TYPE clike
!id TYPE clike
RETURNING
VALUE(result) TYPE z2ui5_if_fw_types=>ty_s_db.
VALUE(result) TYPE z2ui5_if_core_types=>ty_s_db.
METHODS read_info
IMPORTING
id TYPE clike
!id TYPE clike
RETURNING
VALUE(result) TYPE z2ui5_if_types=>ty_s_draft.
@ -31,20 +31,20 @@ CLASS z2ui5_cl_fw_hlp_db DEFINITION
!id TYPE clike
!check_load_app TYPE abap_bool DEFAULT abap_true
RETURNING
VALUE(result) TYPE z2ui5_if_fw_types=>ty_s_db.
VALUE(result) TYPE z2ui5_if_core_types=>ty_s_db.
PRIVATE SECTION.
ENDCLASS.
CLASS z2ui5_cl_fw_hlp_db IMPLEMENTATION.
CLASS z2ui5_cl_core_draft_srv IMPLEMENTATION.
METHOD cleanup.
DATA(lv_four_hours_ago) = z2ui5_cl_util_func=>time_substract_seconds(
time = z2ui5_cl_util_func=>time_get_timestampl( )
DATA(lv_four_hours_ago) = z2ui5_cl_util=>time_substract_seconds(
time = z2ui5_cl_util=>time_get_timestampl( )
seconds = 60 * 60 * 4 ).
DELETE FROM z2ui5_t_fw_01 WHERE timestampl < @lv_four_hours_ago.
@ -60,8 +60,8 @@ CLASS z2ui5_cl_fw_hlp_db IMPLEMENTATION.
id_prev = draft-id_prev
id_prev_app = draft-id_prev_app
id_prev_app_stack = draft-id_prev_app_stack
uname = z2ui5_cl_util_func=>user_get_tech( )
timestampl = z2ui5_cl_util_func=>time_get_timestampl( )
uname = z2ui5_cl_util=>user_get_tech( )
timestampl = z2ui5_cl_util=>time_get_timestampl( )
data = model_xml
).
@ -76,13 +76,6 @@ CLASS z2ui5_cl_fw_hlp_db IMPLEMENTATION.
ENDMETHOD.
METHOD read_draft.
result = read( id ).
ENDMETHOD.
METHOD read.
IF check_load_app = abap_true.
@ -110,14 +103,21 @@ CLASS z2ui5_cl_fw_hlp_db IMPLEMENTATION.
ENDMETHOD.
METHOD read_draft.
result = read( id ).
ENDMETHOD.
METHOD read_info.
data(ls_db) = read(
DATA(ls_db) = read(
id = id
check_load_app = abap_false ).
result = CORRESPONDING #( ls_db ).
ENDMETHOD.
ENDCLASS.

View File

@ -3,9 +3,9 @@
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOCLASS>
<CLSNAME>Z2UI5_CL_FW_HLP_DB</CLSNAME>
<CLSNAME>Z2UI5_CL_CORE_DRAFT_SRV</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>abap2UI5 - db draft</DESCRIPT>
<DESCRIPT>abap2UI5 - backend drafts</DESCRIPT>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>

View File

@ -0,0 +1,75 @@
CLASS z2ui5_cl_core_event_srv DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
METHODS get_event
IMPORTING
!val TYPE clike OPTIONAL
!check_view_destroy TYPE abap_bool DEFAULT abap_false
!t_arg TYPE string_table OPTIONAL
PREFERRED PARAMETER val
RETURNING
VALUE(result) TYPE string.
METHODS get_event_client
IMPORTING
!val TYPE clike
!t_arg TYPE string_table OPTIONAL
RETURNING
VALUE(result) TYPE string.
PROTECTED SECTION.
METHODS get_t_arg
IMPORTING
val TYPE string_table
RETURNING
VALUE(result) TYPE string.
PRIVATE SECTION.
ENDCLASS.
CLASS z2ui5_cl_core_event_srv IMPLEMENTATION.
METHOD get_event.
result = `onEvent( { 'EVENT' : '` && val && `', 'METHOD' : 'UPDATE' , 'CHECK_VIEW_DESTROY' : ` && z2ui5_cl_util=>boolean_abap_2_json( check_view_destroy ) && ` }`.
result = result && get_t_arg( t_arg ).
ENDMETHOD.
METHOD get_event_client.
result = `onEventFrontend( { 'EVENT' : '` && val && `' }` && get_t_arg( t_arg ).
ENDMETHOD.
METHOD get_t_arg.
IF val IS NOT INITIAL.
LOOP AT val REFERENCE INTO DATA(lr_arg).
DATA(lv_new) = lr_arg->*.
IF lv_new IS INITIAL.
CONTINUE.
ENDIF.
IF lv_new(1) <> `$` AND lv_new(1) <> `{`.
lv_new = `"` && lv_new && `"`.
ENDIF.
result = result && `, ` && lv_new.
ENDLOOP.
ENDIF.
result = result && `)`.
ENDMETHOD.
ENDCLASS.

View File

@ -0,0 +1,22 @@
CLASS ltcl_test_db DEFINITION FINAL FOR TESTING
DURATION LONG
RISK LEVEL DANGEROUS.
PUBLIC SECTION.
INTERFACES z2ui5_if_app.
DATA mr_data TYPE REF TO data ##NEEDED.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS ltcl_test_db IMPLEMENTATION.
METHOD z2ui5_if_app~main.
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_CORE_EVENT_SRV</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>abap2UI5 - frontend event</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

@ -1,32 +1,33 @@
CLASS z2ui5_cl_fw_hlp_json_mapper DEFINITION
CLASS z2ui5_cl_core_json_srv DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
INTERFACES z2ui5_if_ajson_filter .
METHODS request_json_to_abap
IMPORTING
val TYPE string
!val TYPE string
RETURNING
VALUE(result) TYPE z2ui5_if_fw_types=>ty_s_http_request_post.
VALUE(result) TYPE z2ui5_if_core_types=>ty_s_http_request_post.
METHODS response_abap_to_json
IMPORTING
val TYPE z2ui5_if_fw_types=>ty_s_http_response_post
!val TYPE z2ui5_if_core_types=>ty_s_http_response_post
RETURNING
VALUE(result) TYPE string.
METHODS model_client_to_server
IMPORTING
view TYPE string
t_attri TYPE REF TO z2ui5_if_fw_types=>ty_t_attri
model TYPE REF TO z2ui5_if_ajson.
!view TYPE string
!t_attri TYPE REF TO z2ui5_if_core_types=>ty_t_attri
!model TYPE REF TO z2ui5_if_ajson.
METHODS model_server_to_client
IMPORTING
t_attri TYPE z2ui5_if_fw_types=>ty_t_attri
!t_attri TYPE z2ui5_if_core_types=>ty_t_attri
RETURNING
VALUE(result) TYPE string.
@ -36,65 +37,13 @@ ENDCLASS.
CLASS z2ui5_cl_fw_hlp_json_mapper IMPLEMENTATION.
METHOD model_server_to_client.
TRY.
DATA(ajson_result) = CAST z2ui5_if_ajson( z2ui5_cl_ajson=>create_empty( ) ).
LOOP AT t_attri REFERENCE INTO DATA(lr_attri) WHERE bind_type <> ``.
"(1) set pretty mode
IF lr_attri->custom_mapper IS BOUND.
DATA(ajson) = CAST z2ui5_if_ajson( z2ui5_cl_ajson=>create_empty( ii_custom_mapping = lr_attri->custom_mapper ) ).
ELSE.
ajson = CAST z2ui5_if_ajson( z2ui5_cl_ajson=>create_empty( ii_custom_mapping = z2ui5_cl_ajson_mapping=>create_upper_case( ) ) ).
ENDIF.
"(2) read attribute of end-user app & write to json
CASE lr_attri->bind_type.
WHEN z2ui5_if_fw_types=>cs_bind_type-one_way
OR z2ui5_if_fw_types=>cs_bind_type-two_way.
ASSIGN lr_attri->r_ref->* TO FIELD-SYMBOL(<attribute>).
ASSERT sy-subrc = 0.
ajson->set( iv_ignore_empty = abap_false iv_path = `/` iv_val = <attribute> ).
WHEN z2ui5_if_fw_types=>cs_bind_type-one_time.
ajson->set( iv_ignore_empty = abap_false iv_path = `/` iv_val = lr_attri->json_bind_local ).
WHEN OTHERS.
ASSERT `` = `ERROR_UNKNOWN_BIND_MODE`.
ENDCASE.
"(4) set compress mode
"todo performance - add and filter in a single loop
IF lr_attri->custom_filter IS BOUND.
ajson = ajson->filter( lr_attri->custom_filter ).
ELSE.
ajson = ajson->filter( z2ui5_cl_ajson_filter_lib=>create_empty_filter( ) ).
ENDIF.
"(5) write into result
"todo performance - write directly into result
ajson_result->set( iv_path = lr_attri->name_client iv_val = ajson ).
ENDLOOP.
result = ajson_result->stringify( ).
result = COND #( WHEN result IS INITIAL THEN `{}` ELSE result ).
CATCH cx_root INTO DATA(x).
ASSERT x IS NOT BOUND.
ENDTRY.
ENDMETHOD.
CLASS z2ui5_cl_core_json_srv IMPLEMENTATION.
METHOD model_client_to_server.
LOOP AT t_attri->* REFERENCE INTO DATA(lr_attri)
WHERE bind_type = z2ui5_if_fw_types=>cs_bind_type-two_way
WHERE bind_type = z2ui5_if_core_types=>cs_bind_type-two_way
AND view = view.
TRY.
@ -124,6 +73,58 @@ CLASS z2ui5_cl_fw_hlp_json_mapper IMPLEMENTATION.
ENDMETHOD.
METHOD model_server_to_client.
TRY.
DATA(ajson_result) = CAST z2ui5_if_ajson( z2ui5_cl_ajson=>create_empty( ) ).
LOOP AT t_attri REFERENCE INTO DATA(lr_attri) WHERE bind_type <> ``.
"(1) set pretty mode
IF lr_attri->custom_mapper IS BOUND.
DATA(ajson) = CAST z2ui5_if_ajson( z2ui5_cl_ajson=>create_empty( ii_custom_mapping = lr_attri->custom_mapper ) ).
ELSE.
ajson = CAST z2ui5_if_ajson( z2ui5_cl_ajson=>create_empty( ii_custom_mapping = z2ui5_cl_ajson_mapping=>create_upper_case( ) ) ).
ENDIF.
"(2) read attribute of end-user app & write to json
CASE lr_attri->bind_type.
WHEN z2ui5_if_core_types=>cs_bind_type-one_way
OR z2ui5_if_core_types=>cs_bind_type-two_way.
ASSIGN lr_attri->r_ref->* TO FIELD-SYMBOL(<attribute>).
ASSERT sy-subrc = 0.
ajson->set( iv_ignore_empty = abap_false iv_path = `/` iv_val = <attribute> ).
WHEN z2ui5_if_core_types=>cs_bind_type-one_time.
ajson->set( iv_ignore_empty = abap_false iv_path = `/` iv_val = lr_attri->json_bind_local ).
WHEN OTHERS.
ASSERT `` = `ERROR_UNKNOWN_BIND_MODE`.
ENDCASE.
"(4) set compress mode
"todo performance - add and filter in a single loop
IF lr_attri->custom_filter IS BOUND.
ajson = ajson->filter( lr_attri->custom_filter ).
ELSE.
ajson = ajson->filter( z2ui5_cl_ajson_filter_lib=>create_empty_filter( ) ).
ENDIF.
"(5) write into result
"todo performance - write directly into result
ajson_result->set( iv_path = lr_attri->name_client iv_val = ajson ).
ENDLOOP.
result = ajson_result->stringify( ).
result = COND #( WHEN result IS INITIAL THEN `{}` ELSE result ).
CATCH cx_root INTO DATA(x).
ASSERT x IS NOT BOUND.
ENDTRY.
ENDMETHOD.
METHOD request_json_to_abap.
TRY.
@ -145,12 +146,12 @@ CLASS z2ui5_cl_fw_hlp_json_mapper IMPLEMENTATION.
IF result-s_frontend-id IS NOT INITIAL.
RETURN.
ENDIF.
result-s_control-app_start = z2ui5_cl_util_func=>c_trim_upper( result-s_frontend-app_start ).
result-s_control-app_start = z2ui5_cl_util=>c_trim_upper( result-s_frontend-app_start ).
IF result-s_control-app_start IS NOT INITIAL.
RETURN.
ENDIF.
result-s_control-app_start = z2ui5_cl_util_func=>c_trim_upper(
z2ui5_cl_util_func=>url_param_get( val = `app_start` url = result-s_frontend-search ) ).
result-s_control-app_start = z2ui5_cl_util=>c_trim_upper(
z2ui5_cl_util=>url_param_get( val = `app_start` url = result-s_frontend-search ) ).
CATCH cx_root INTO DATA(x).
RAISE EXCEPTION TYPE z2ui5_cx_util_error
@ -167,7 +168,7 @@ CLASS z2ui5_cl_fw_hlp_json_mapper IMPLEMENTATION.
ii_custom_mapping = z2ui5_cl_ajson_mapping=>create_upper_case( ) ) ).
ajson_result->set( iv_path = `/` iv_val = val-s_frontend ).
ajson_result = ajson_result->filter( NEW z2ui5_cl_fw_hlp_json_mapper( ) ).
ajson_result = ajson_result->filter( NEW z2ui5_cl_core_json_srv( ) ).
DATA(lv_frontend) = ajson_result->stringify( ).
result = `{` &&

View File

@ -3,9 +3,9 @@
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOCLASS>
<CLSNAME>Z2UI5_CL_FW_HLP_DISSOLVER</CLSNAME>
<CLSNAME>Z2UI5_CL_CORE_JSON_SRV</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>abap2UI5 - attribute dissolver</DESCRIPT>
<DESCRIPT>abap2UI5 - front/back json mapper</DESCRIPT>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>

View File

@ -1,16 +1,16 @@
CLASS z2ui5_cl_fw_hlp_dissolver DEFINITION
CLASS z2ui5_cl_core_model_srv DEFINITION
PUBLIC
FINAL
CREATE PUBLIC.
PUBLIC SECTION.
DATA mt_attri TYPE REF TO z2ui5_if_fw_types=>ty_t_attri.
DATA mt_attri TYPE REF TO z2ui5_if_core_types=>ty_t_attri.
DATA mo_app TYPE REF TO object.
METHODS constructor
IMPORTING
attri TYPE REF TO z2ui5_if_fw_types=>ty_t_attri
attri TYPE REF TO z2ui5_if_core_types=>ty_t_attri
app TYPE REF TO object.
METHODS main.
@ -20,7 +20,7 @@ CLASS z2ui5_cl_fw_hlp_dissolver DEFINITION
METHODS attri_get_val_ref
IMPORTING
ir_bind TYPE REF TO z2ui5_if_fw_types=>ty_s_attri
ir_bind TYPE REF TO z2ui5_if_core_types=>ty_s_attri
RETURNING
VALUE(result) TYPE REF TO data.
@ -28,27 +28,27 @@ CLASS z2ui5_cl_fw_hlp_dissolver DEFINITION
IMPORTING
val TYPE clike
RETURNING
VALUE(result) TYPE z2ui5_if_fw_types=>ty_t_attri.
VALUE(result) TYPE z2ui5_if_core_types=>ty_t_attri.
METHODS get_t_attri_by_struc
IMPORTING
val TYPE clike
RETURNING
VALUE(result) TYPE z2ui5_if_fw_types=>ty_t_attri.
VALUE(result) TYPE z2ui5_if_core_types=>ty_t_attri.
METHODS get_t_attri_by_include
IMPORTING
type TYPE REF TO cl_abap_datadescr
attri TYPE clike
RETURNING
VALUE(result) TYPE z2ui5_if_fw_types=>ty_t_attri.
VALUE(result) TYPE z2ui5_if_core_types=>ty_t_attri.
METHODS get_t_attri_by_oref
IMPORTING
val TYPE clike OPTIONAL
PREFERRED PARAMETER val
RETURNING
VALUE(result) TYPE z2ui5_if_fw_types=>ty_t_attri.
VALUE(result) TYPE z2ui5_if_core_types=>ty_t_attri.
METHODS dissolve_struc.
METHODS dissolve_dref.
@ -59,7 +59,7 @@ ENDCLASS.
CLASS z2ui5_cl_fw_hlp_dissolver IMPLEMENTATION.
CLASS Z2UI5_CL_CORE_MODEL_SRV IMPLEMENTATION.
METHOD attri_get_val_ref.
@ -153,7 +153,7 @@ CLASS z2ui5_cl_fw_hlp_dissolver IMPLEMENTATION.
DATA(lo_descr) = cl_abap_datadescr=>describe_by_data( <data> ).
DATA(ls_new_bind) = VALUE z2ui5_if_fw_types=>ty_s_attri(
DATA(ls_new_bind) = VALUE z2ui5_if_core_types=>ty_s_attri(
name = val && `->*`
type_kind = lo_descr->type_kind
type = lo_descr->get_relative_name( )
@ -173,7 +173,7 @@ CLASS z2ui5_cl_fw_hlp_dissolver IMPLEMENTATION.
DATA(lv_element) = attri && lr_comp->name.
DATA(ls_attri) = VALUE z2ui5_if_fw_types=>ty_s_attri(
DATA(ls_attri) = VALUE z2ui5_if_core_types=>ty_s_attri(
name = lv_element
type_kind = lr_comp->type_kind ).
INSERT ls_attri INTO TABLE result.
@ -192,12 +192,12 @@ CLASS z2ui5_cl_fw_hlp_dissolver IMPLEMENTATION.
RETURN.
ENDIF.
DATA(lt_attri2) = z2ui5_cl_util_func=>rtti_get_t_attri_by_object( <obj> ).
DATA(lt_attri2) = z2ui5_cl_util=>rtti_get_t_attri_by_object( <obj> ).
LOOP AT lt_attri2 INTO DATA(ls_attri2)
WHERE visibility = cl_abap_classdescr=>public
AND is_interface = abap_false.
DATA(ls_attri) = CORRESPONDING z2ui5_if_fw_types=>ty_s_attri( ls_attri2 ).
DATA(ls_attri) = CORRESPONDING z2ui5_if_core_types=>ty_s_attri( ls_attri2 ).
IF val IS NOT INITIAL.
ls_attri-name = val && `->` && ls_attri-name.
ls_attri-check_temp = abap_true.
@ -215,9 +215,9 @@ CLASS z2ui5_cl_fw_hlp_dissolver IMPLEMENTATION.
ASSIGN (lv_name) TO <attribute>.
ASSERT sy-subrc = 0.
DATA(lt_comp) = z2ui5_cl_util_func=>rtti_get_t_comp_by_data( <attribute> ).
DATA(lt_comp) = z2ui5_cl_util=>rtti_get_t_comp_by_data( <attribute> ).
DATA(lv_attri) = z2ui5_cl_util_func=>c_replace_assign_struc( val ).
DATA(lv_attri) = z2ui5_cl_util=>c_replace_assign_struc( val ).
LOOP AT lt_comp REFERENCE INTO DATA(lr_comp).
DATA(lv_element) = lv_attri && lr_comp->name.
@ -237,16 +237,16 @@ CLASS z2ui5_cl_fw_hlp_dissolver IMPLEMENTATION.
ELSE.
DATA(lv_type_name) = substring_after( val = lr_comp->type->absolute_name sub = '\TYPE=').
IF z2ui5_cl_util_func=>boolean_check_by_name( lv_type_name ).
IF z2ui5_cl_util=>boolean_check_by_name( lv_type_name ).
DATA(ls_attri) = VALUE z2ui5_if_fw_types=>ty_s_attri(
DATA(ls_attri) = VALUE z2ui5_if_core_types=>ty_s_attri(
name = lv_element
type = 'ABAP_BOOL'
type_kind = lr_comp->type->type_kind ).
ELSE.
ls_attri = VALUE z2ui5_if_fw_types=>ty_s_attri(
ls_attri = VALUE z2ui5_if_core_types=>ty_s_attri(
name = lv_element
type_kind = lr_comp->type->type_kind ).
@ -290,7 +290,7 @@ CLASS z2ui5_cl_fw_hlp_dissolver IMPLEMENTATION.
LOOP AT mt_attri->* REFERENCE INTO DATA(lr_attri)
WHERE r_ref IS NOT BOUND AND
bind_type <> z2ui5_if_fw_types=>cs_bind_type-one_time.
bind_type <> z2ui5_if_core_types=>cs_bind_type-one_time.
CASE lr_attri->type_kind.
WHEN cl_abap_classdescr=>typekind_iref

View File

@ -0,0 +1,702 @@
*
*CLASS ltcl_test_dissolve DEFINITION DEFERRED.
*CLASS z2ui5_cl_core_model_srv DEFINITION LOCAL FRIENDS ltcl_test_dissolve.
*
*CLASS ltcl_test_dissolve DEFINITION FINAL FOR TESTING
* DURATION SHORT
* RISK LEVEL HARMLESS.
*
* PUBLIC SECTION.
*
* TYPES:
* BEGIN OF s_01,
* input TYPE string,
* BEGIN OF s_02,
* input TYPE string,
* BEGIN OF s_03,
* input TYPE string,
* BEGIN OF s_04,
* input TYPE string,
* END OF s_04,
* END OF s_03,
* END OF s_02,
* END OF s_01.
*
* DATA ms_struc TYPE s_01 ##NEEDED.
* DATA mv_value TYPE string ##NEEDED.
* DATA mr_value TYPE REF TO data.
* DATA mr_struc TYPE REF TO s_01.
* DATA mo_app TYPE REF TO ltcl_test_dissolve.
*
* PRIVATE SECTION.
* METHODS test_dissolve_init FOR TESTING RAISING cx_static_check.
* METHODS test_dissolve_struc FOR TESTING RAISING cx_static_check.
* METHODS test_dissolve_dref FOR TESTING RAISING cx_static_check.
* METHODS test_dissolve_oref FOR TESTING RAISING cx_static_check.
*
*ENDCLASS.
*
*CLASS ltcl_test_dissolve IMPLEMENTATION.
*
* METHOD test_dissolve_init.
*
* DATA(lo_app) = NEW ltcl_test_dissolve( ).
* DATA(lo_bind) = NEW z2ui5_cl_core_model_srv( ).
* lo_bind->mo_app = lo_app.
*
* lo_bind->dissolve_init( ).
* DATA(lt_dissolve) = lo_bind->mt_attri.
*
* cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_dissolve[ name = `MO_APP` ] OPTIONAL ) ).
* cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_dissolve[ name = `MR_STRUC` ] OPTIONAL ) ).
* cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_dissolve[ name = `MR_VALUE` ] OPTIONAL ) ).
* cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_dissolve[ name = `MS_STRUC` ] OPTIONAL ) ).
* cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_dissolve[ name = `MV_VALUE` ] OPTIONAL ) ).
*
* ENDMETHOD.
*
* METHOD test_dissolve_dref.
*
* DATA(lo_app) = NEW ltcl_test_dissolve( ).
* DATA(lo_bind) = NEW z2ui5_cl_fw_binding( ).
* lo_bind->mo_app = lo_app.
*
* CREATE DATA lo_app->mr_struc.
* CREATE DATA lo_app->mr_value TYPE string.
*
* lo_bind->dissolve_init( ).
* lo_bind->dissolve_dref( ).
* DATA(lt_dissolve) = lo_bind->mt_attri.
*
* cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_dissolve[ name = `MO_APP` ] OPTIONAL ) ).
* cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_dissolve[ name = `MR_STRUC->*` ] OPTIONAL ) ).
* cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_dissolve[ name = `MR_VALUE->*` ] OPTIONAL ) ).
* cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_dissolve[ name = `MS_STRUC` ] OPTIONAL ) ).
* cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_dissolve[ name = `MV_VALUE` ] OPTIONAL ) ).
*
* ENDMETHOD.
*
* METHOD test_dissolve_oref.
*
* DATA(lo_app) = NEW ltcl_test_dissolve( ).
* lo_app->mo_app = NEW #( ).
* DATA(lo_bind) = NEW z2ui5_cl_fw_binding( ).
* lo_bind->mo_app = lo_app.
*
* CREATE DATA lo_app->mo_app->mr_struc.
* CREATE DATA lo_app->mo_app->mr_value TYPE string.
*
* lo_bind->dissolve_init( ).
* lo_bind->dissolve_oref( ).
* DATA(lt_dissolve) = lo_bind->mt_attri.
*
* cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_dissolve[ name = `MO_APP->MV_VALUE` ] OPTIONAL ) ).
* cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_dissolve[ name = `MO_APP->MR_STRUC` ] OPTIONAL ) ).
* cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_dissolve[ name = `MO_APP->MR_VALUE` ] OPTIONAL ) ).
* cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_dissolve[ name = `MO_APP->MS_STRUC` ] OPTIONAL ) ).
* cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_dissolve[ name = `MR_STRUC` ] OPTIONAL ) ).
* cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_dissolve[ name = `MR_VALUE` ] OPTIONAL ) ).
* cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_dissolve[ name = `MS_STRUC` ] OPTIONAL ) ).
* cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_dissolve[ name = `MV_VALUE` ] OPTIONAL ) ).
*
* ENDMETHOD.
*
* METHOD test_dissolve_struc.
*
* DATA(lo_app) = NEW ltcl_test_dissolve( ).
* DATA(lo_bind) = NEW z2ui5_cl_fw_binding( ).
* lo_bind->mo_app = lo_app.
*
* lo_bind->dissolve_init( ).
* lo_bind->dissolve_struc( ).
* DATA(lt_dissolve) = lo_bind->mt_attri.
*
* cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_dissolve[ name = `MO_APP` ] OPTIONAL ) ).
* cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_dissolve[ name = `MR_STRUC` ] OPTIONAL ) ).
* cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_dissolve[ name = `MS_STRUC-INPUT` ] OPTIONAL ) ).
* cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_dissolve[ name = `MS_STRUC-S_02-INPUT` ] OPTIONAL ) ).
* cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_dissolve[ name = `MS_STRUC-S_02-S_03-S_04-INPUT` ] OPTIONAL ) ).
* cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_dissolve[ name = `MR_VALUE` ] OPTIONAL ) ).
* cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_dissolve[ name = `MS_STRUC` ] OPTIONAL ) ).
* cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_dissolve[ name = `MV_VALUE` ] OPTIONAL ) ).
*
* ENDMETHOD.
*
*ENDCLASS.
*
*CLASS ltcl_test_bind DEFINITION DEFERRED.
*CLASS z2ui5_cl_fw_binding DEFINITION LOCAL FRIENDS ltcl_test_bind.
*
*CLASS ltcl_test_bind DEFINITION FINAL FOR TESTING
* DURATION MEDIUM
* RISK LEVEL HARMLESS.
*
* PUBLIC SECTION.
*
* TYPES:
* BEGIN OF s_01,
* input TYPE string,
* BEGIN OF s_02,
* input TYPE string,
* BEGIN OF s_03,
* input TYPE string,
* BEGIN OF s_04,
* input TYPE string,
* END OF s_04,
* END OF s_03,
* END OF s_02,
* END OF s_01.
*
* DATA ms_struc TYPE s_01.
* DATA mv_value TYPE string.
* DATA mr_value TYPE REF TO data.
* DATA mr_struc TYPE REF TO s_01.
* DATA mo_app TYPE REF TO ltcl_test_bind.
*
* PRIVATE SECTION.
* METHODS test_value FOR TESTING RAISING cx_static_check.
* METHODS test_struc FOR TESTING RAISING cx_static_check.
* METHODS test_dref_val FOR TESTING RAISING cx_static_check.
* METHODS test_dref_struc FOR TESTING RAISING cx_static_check.
* METHODS test_oref_val FOR TESTING RAISING cx_static_check.
* METHODS test_oref_struc FOR TESTING RAISING cx_static_check.
* METHODS test_oref_dref_val FOR TESTING RAISING cx_static_check.
* METHODS test_local FOR TESTING RAISING cx_static_check.
*
*ENDCLASS.
*
*CLASS ltcl_test_bind IMPLEMENTATION.
*
* METHOD test_value.
*
* DATA(lo_app) = NEW ltcl_test_bind( ).
* DATA(lo_bind) = NEW z2ui5_cl_fw_binding( ).
*
* lo_bind->mo_app = lo_app.
* lo_bind->mr_data = REF #( lo_app->mv_value ).
* lo_bind->mv_type = z2ui5_cl_fw_binding=>cs_bind_type-one_way.
*
* DATA(ls_attri) = VALUE z2ui5_cl_fw_binding=>ty_s_attri( name = `MV_VALUE` ).
* DATA(lv_result) = lo_bind->bind( REF #( ls_attri ) ).
*
* cl_abap_unit_assert=>assert_equals(
* act = lv_result
* exp = `/MV_VALUE` ).
*
* ENDMETHOD.
*
*
* METHOD test_struc.
*
** DATA(lo_app) = NEW ltcl_test_bind( ).
** DATA(lo_bind) = NEW z2ui5_cl_fw_binding( ).
**
** lo_bind->mo_app = lo_app.
** lo_bind->mr_data = REF #( lo_app->ms_struc-s_02-s_03-s_04-input ).
** lo_bind->mv_type = z2ui5_cl_fw_binding=>cs_bind_type-one_way.
**
** DATA(ls_attri) = VALUE z2ui5_cl_fw_binding=>ty_s_attri( name = `MS_STRUC-S_02-S_03-S_04-INPUT` ).
** DATA(lv_result) = lo_bind->bind( REF #( ls_attri ) ).
**
** cl_abap_unit_assert=>assert_equals(
** act = lv_result
** exp = `/MS_STRUC/S_02-S_03-S_04-INPUT` ).
*
* ENDMETHOD.
*
*
* METHOD test_dref_val.
*
* DATA(lo_app) = NEW ltcl_test_bind( ).
* DATA(lo_bind) = NEW z2ui5_cl_fw_binding( ).
*
* FIELD-SYMBOLS <any> TYPE any.
* CREATE DATA lo_app->mr_value TYPE string.
* ASSIGN lo_app->mr_value->* TO <any>.
*
* lo_bind->mo_app = lo_app.
* lo_bind->mr_data = REF #( <any> ).
* lo_bind->mv_type = z2ui5_cl_fw_binding=>cs_bind_type-one_way.
*
* DATA(ls_attri) = VALUE z2ui5_cl_fw_binding=>ty_s_attri( name = `MR_VALUE->*` ).
* DATA(lv_result) = lo_bind->bind( REF #( ls_attri ) ).
*
* cl_abap_unit_assert=>assert_equals(
* act = lv_result
* exp = `/MR_VALUE/*` ).
*
* ENDMETHOD.
*
* METHOD test_dref_struc.
*
* DATA(lo_app) = NEW ltcl_test_bind( ).
* DATA(lo_bind) = NEW z2ui5_cl_fw_binding( ).
*
* FIELD-SYMBOLS <any> TYPE any.
* CREATE DATA lo_app->mr_struc.
* ASSIGN lo_app->mr_struc->input TO <any>.
*
* lo_bind->mo_app = lo_app.
* lo_bind->mr_data = REF #( <any> ).
* lo_bind->mv_type = z2ui5_cl_fw_binding=>cs_bind_type-one_way.
*
* DATA(ls_attri) = VALUE z2ui5_cl_fw_binding=>ty_s_attri( name = `MR_STRUC->INPUT` ).
* DATA(lv_result) = lo_bind->bind( REF #( ls_attri ) ).
*
* cl_abap_unit_assert=>assert_equals(
* act = lv_result
* exp = `/MR_STRUC/INPUT` ).
*
* ENDMETHOD.
*
* METHOD test_oref_val.
*
* DATA(lo_app) = NEW ltcl_test_bind( ).
* lo_app->mo_app = NEW #( ).
* DATA(lo_bind) = NEW z2ui5_cl_fw_binding( ).
*
* lo_bind->mo_app = lo_app.
* lo_bind->mr_data = REF #( lo_app->mo_app->mv_value ).
* lo_bind->mv_type = z2ui5_cl_fw_binding=>cs_bind_type-one_way.
*
* DATA(ls_attri) = VALUE z2ui5_cl_fw_binding=>ty_s_attri( name = `MO_APP->MV_VALUE` ).
* DATA(lv_result) = lo_bind->bind( REF #( ls_attri ) ).
*
* cl_abap_unit_assert=>assert_equals(
* act = lv_result
* exp = `/MO_APP/MV_VALUE` ).
*
* ENDMETHOD.
*
* METHOD test_oref_struc.
*
* DATA(lo_app) = NEW ltcl_test_bind( ).
* lo_app->mo_app = NEW #( ).
* DATA(lo_bind) = NEW z2ui5_cl_fw_binding( ).
*
* lo_bind->mo_app = lo_app.
* lo_bind->mr_data = REF #( lo_app->mo_app->ms_struc-input ).
* lo_bind->mv_type = z2ui5_cl_fw_binding=>cs_bind_type-one_way.
*
* DATA(ls_attri) = VALUE z2ui5_cl_fw_binding=>ty_s_attri( name = `MO_APP->MS_STRUC-INPUT` ).
* DATA(lv_result) = lo_bind->bind( REF #( ls_attri ) ).
*
* cl_abap_unit_assert=>assert_equals(
* act = lv_result
* exp = `/MO_APP/MS_STRUC-INPUT` ).
*
* ENDMETHOD.
*
* METHOD test_oref_dref_val.
*
* DATA(lo_app) = NEW ltcl_test_bind( ).
* FIELD-SYMBOLS <any> TYPE any.
* lo_app->mo_app = NEW #( ).
* DATA(lo_bind) = NEW z2ui5_cl_fw_binding( ).
*
* CREATE DATA lo_app->mo_app->mr_value TYPE string.
* ASSIGN lo_app->mo_app->mr_value->* TO <any>.
*
* lo_bind->mo_app = lo_app.
* lo_bind->mr_data = REF #( <any> ).
* lo_bind->mv_type = z2ui5_cl_fw_binding=>cs_bind_type-one_way.
*
* DATA(ls_attri) = VALUE z2ui5_cl_fw_binding=>ty_s_attri( name = `MO_APP->MR_VALUE->*` ).
* DATA(lv_result) = lo_bind->bind( REF #( ls_attri ) ).
*
* cl_abap_unit_assert=>assert_equals(
* act = lv_result
* exp = `/MO_APP/MR_VALUE->*` ).
*
* ENDMETHOD.
*
* METHOD test_local.
*
* DATA(lo_bind) = NEW z2ui5_cl_fw_binding( ).
* DATA(lv_value) = `test`.
* lo_bind->mr_data = REF #( lv_value ).
* lo_bind->mv_type = z2ui5_cl_fw_binding=>cs_bind_type-one_time.
*
* DATA(lv_result) = lo_bind->bind_local( ).
*
* IF lv_result IS INITIAL.
* cl_abap_unit_assert=>fail( ).
* ENDIF.
*
* ENDMETHOD.
*
*ENDCLASS.
*
*CLASS ltcl_test_main_value DEFINITION FINAL FOR TESTING
* DURATION MEDIUM
* RISK LEVEL HARMLESS.
*
* PUBLIC SECTION.
*
* DATA mv_value TYPE string.
*
* PROTECTED SECTION.
* PRIVATE SECTION.
*
* METHODS test_one_way FOR TESTING RAISING cx_static_check.
* METHODS test_one_way_t_attri FOR TESTING RAISING cx_static_check.
* METHODS test_one_way_multiple FOR TESTING RAISING cx_static_check.
* METHODS test_two_way FOR TESTING RAISING cx_static_check.
* METHODS test_one_way_two_way_error FOR TESTING RAISING cx_static_check.
*
*ENDCLASS.
*
*CLASS ltcl_test_main_value IMPLEMENTATION.
*
* METHOD test_one_way.
*
* DATA(lo_app) = NEW ltcl_test_main_value( ).
* lo_app->mv_value = `my value`.
*
* DATA(lt_attri) = VALUE z2ui5_cl_fw_binding=>ty_t_attri( ).
*
* DATA(lo_bind) = z2ui5_cl_fw_binding=>factory(
* app = lo_app
* attri = lt_attri
* type = z2ui5_cl_fw_binding=>cs_bind_type-one_way
* data = lo_app->mv_value ).
*
* DATA(lv_result) = lo_bind->main( ).
*
* cl_abap_unit_assert=>assert_equals(
* act = lv_result
* exp = `/MV_VALUE` ).
*
* ENDMETHOD.
*
* METHOD test_two_way.
*
* DATA(lo_app) = NEW ltcl_test_main_value( ).
* lo_app->mv_value = `my value`.
*
* DATA(lt_attri) = VALUE z2ui5_cl_fw_binding=>ty_t_attri( ).
*
* DATA(lo_bind) = z2ui5_cl_fw_binding=>factory(
* app = lo_app
* attri = lt_attri
* type = z2ui5_cl_fw_binding=>cs_bind_type-two_way
* data = lo_app->mv_value ).
*
* DATA(lv_result) = lo_bind->main( ).
*
* cl_abap_unit_assert=>assert_equals(
* act = lv_result
* exp = `/EDIT/MV_VALUE` ).
*
* ENDMETHOD.
*
* METHOD test_one_way_t_attri.
*
* DATA(lo_app) = NEW ltcl_test_main_value( ).
* lo_app->mv_value = `my value`.
*
* DATA(lt_attri) = VALUE z2ui5_cl_fw_binding=>ty_t_attri( ).
*
* DATA(lo_bind) = z2ui5_cl_fw_binding=>factory(
* app = lo_app
* attri = lt_attri
* type = z2ui5_cl_fw_binding=>cs_bind_type-one_way
* data = lo_app->mv_value ).
*
* lo_bind->main( ).
*
* DATA(ls_attri) = lo_bind->mt_attri[ name = `MV_VALUE` bind_type = z2ui5_cl_fw_binding=>cs_bind_type-one_way ] ##NEEDED.
*
* ENDMETHOD.
*
* METHOD test_one_way_multiple.
*
* DATA(lo_app) = NEW ltcl_test_main_value( ).
* lo_app->mv_value = `my value`.
*
* DATA(lt_attri) = VALUE z2ui5_cl_fw_binding=>ty_t_attri( ).
*
* DATA(lo_bind) = z2ui5_cl_fw_binding=>factory(
* app = lo_app
* attri = lt_attri
* type = z2ui5_cl_fw_binding=>cs_bind_type-two_way
* data = lo_app->mv_value ).
*
* DATA(lv_result) = lo_bind->main( ).
*
* DATA(lo_bind2) = z2ui5_cl_fw_binding=>factory(
* app = lo_app
* attri = lt_attri
* type = z2ui5_cl_fw_binding=>cs_bind_type-two_way
* data = lo_app->mv_value ).
*
* DATA(lv_result2) = lo_bind2->main( ).
*
* cl_abap_unit_assert=>assert_equals(
* act = lv_result
* exp = lv_result2 ).
*
* ENDMETHOD.
*
* METHOD test_one_way_two_way_error.
*
* DATA(lo_app) = NEW ltcl_test_main_value( ).
* lo_app->mv_value = `my value`.
*
* DATA(lt_attri) = VALUE z2ui5_cl_fw_binding=>ty_t_attri( ).
*
* DATA(lo_bind) = z2ui5_cl_fw_binding=>factory(
* app = lo_app
* attri = lt_attri
* type = z2ui5_cl_fw_binding=>cs_bind_type-one_way
* data = lo_app->mv_value ).
*
* lo_bind->main( ).
*
* DATA(lo_bind2) = z2ui5_cl_fw_binding=>factory(
* app = lo_app
* attri = lo_bind->mt_attri
* type = z2ui5_cl_fw_binding=>cs_bind_type-two_way
* data = lo_app->mv_value ).
*
* TRY.
*
* lo_bind2->main( ).
* cl_abap_unit_assert=>fail( ).
*
* CATCH cx_root.
* ENDTRY.
*
* ENDMETHOD.
*
*ENDCLASS.
*
*CLASS ltcl_test_main_structure DEFINITION FINAL FOR TESTING
* DURATION MEDIUM
* RISK LEVEL HARMLESS.
*
* PUBLIC SECTION.
*
* TYPES:
* BEGIN OF s_01,
* input TYPE string,
* BEGIN OF s_02,
* input TYPE string,
* BEGIN OF s_03,
* input TYPE string,
* BEGIN OF s_04,
* input TYPE string,
* END OF s_04,
* END OF s_03,
* END OF s_02,
* END OF s_01.
*
* DATA ms_struc TYPE s_01.
*
* PRIVATE SECTION.
*
* METHODS test_one_way_lev1 FOR TESTING RAISING cx_static_check.
* METHODS test_one_way_lev2 FOR TESTING RAISING cx_static_check.
* METHODS test_one_way_lev3 FOR TESTING RAISING cx_static_check.
*
* METHODS test_one_way_lev4_long_name FOR TESTING RAISING cx_static_check.
*
*
*ENDCLASS.
*
*CLASS ltcl_test_main_structure IMPLEMENTATION.
*
* METHOD test_one_way_lev1.
*
* DATA(lo_app) = NEW ltcl_test_main_structure( ).
* lo_app->ms_struc-input = `my value`.
*
* DATA(lt_attri) = VALUE z2ui5_cl_fw_binding=>ty_t_attri( ).
*
* DATA(lo_bind) = z2ui5_cl_fw_binding=>factory(
* app = lo_app
* attri = lt_attri
* type = z2ui5_cl_fw_binding=>cs_bind_type-one_way
* data = lo_app->ms_struc-input ).
*
* DATA(lv_result) = lo_bind->main( ).
*
* cl_abap_unit_assert=>assert_equals(
* act = lv_result
* exp = `/MS_STRUC/INPUT` ).
*
* ENDMETHOD.
*
* METHOD test_one_way_lev2.
*
* DATA(lo_app) = NEW ltcl_test_main_structure( ).
* lo_app->ms_struc-s_02-input = `my value`.
*
* DATA(lt_attri) = VALUE z2ui5_cl_fw_binding=>ty_t_attri( ).
*
* DATA(lo_bind) = z2ui5_cl_fw_binding=>factory(
* app = lo_app
* attri = lt_attri
* type = z2ui5_cl_fw_binding=>cs_bind_type-one_way
* data = lo_app->ms_struc-s_02-input ).
*
* DATA(lv_result) = lo_bind->main( ).
*
* cl_abap_unit_assert=>assert_equals(
* act = lv_result
* exp = `/MS_STRUC/S_02-INPUT` ).
*
* ENDMETHOD.
*
* METHOD test_one_way_lev3.
*
* DATA(lo_app) = NEW ltcl_test_main_structure( ).
* lo_app->ms_struc-s_02-s_03-input = `my value`.
*
* DATA(lt_attri) = VALUE z2ui5_cl_fw_binding=>ty_t_attri( ).
*
* DATA(lo_bind) = z2ui5_cl_fw_binding=>factory(
* app = lo_app
* attri = lt_attri
* type = z2ui5_cl_fw_binding=>cs_bind_type-one_way
* data = lo_app->ms_struc-s_02-s_03-input ).
*
* DATA(lv_result) = lo_bind->main( ).
*
* cl_abap_unit_assert=>assert_equals(
* act = lv_result
* exp = `/MS_STRUC/S_02-S_03-INPUT` ).
*
* ENDMETHOD.
*
* METHOD test_one_way_lev4_long_name.
*
* DATA(lo_app) = NEW ltcl_test_main_structure( ).
* lo_app->ms_struc-s_02-s_03-s_04-input = `my value`.
*
* DATA(lt_attri) = VALUE z2ui5_cl_fw_binding=>ty_t_attri( ).
*
* DATA(lo_bind) = z2ui5_cl_fw_binding=>factory(
* app = lo_app
* attri = lt_attri
* type = z2ui5_cl_fw_binding=>cs_bind_type-one_way
* data = lo_app->ms_struc-s_02-s_03-s_04-input ).
*
* DATA(lv_result) = lo_bind->main( ).
*
* cl_abap_unit_assert=>assert_equals(
* act = lv_result
* exp = `/MS_STRUC/S_02-S_03-S_04-INPUT` ).
*
* ENDMETHOD.
*
*ENDCLASS.
*
*CLASS ltcl_test_main_data_ref DEFINITION FINAL FOR TESTING
* DURATION MEDIUM
* RISK LEVEL HARMLESS.
*
* PUBLIC SECTION.
*
*
*
* DATA mr_value TYPE REF TO data ##NEEDED.
* DATA mr_struc TYPE REF TO data ##NEEDED.
*
* PRIVATE SECTION.
*
* METHODS test_one_way_value FOR TESTING RAISING cx_static_check.
* METHODS test_one_way_struc FOR TESTING RAISING cx_static_check.
*
*
*ENDCLASS.
*
*CLASS ltcl_test_main_data_ref IMPLEMENTATION.
*
* METHOD test_one_way_value.
*
*
*
* ENDMETHOD.
*
* METHOD test_one_way_struc.
*
*
*
* ENDMETHOD.
*
*ENDCLASS.
*
*CLASS ltcl_test_main_object DEFINITION FINAL FOR TESTING
* DURATION MEDIUM
* RISK LEVEL HARMLESS.
*
* PUBLIC SECTION.
*
* TYPES:
* BEGIN OF ty_s_01,
* input TYPE string,
* input_02 TYPE string,
* input_03 TYPE string,
* END OF ty_s_01.
*
* DATA mv_value TYPE string.
* DATA ms_struc TYPE ty_s_01.
*
* DATA mo_obj TYPE REF TO ltcl_test_main_object.
*
* PRIVATE SECTION.
*
* METHODS test_one_way_value FOR TESTING RAISING cx_static_check.
* METHODS test_one_way_struc FOR TESTING RAISING cx_static_check.
*
*
*ENDCLASS.
*
*CLASS ltcl_test_main_object IMPLEMENTATION.
*
* METHOD test_one_way_value.
*
* DATA(lo_app) = NEW ltcl_test_main_object( ).
* lo_app->mo_obj = NEW #( ).
* lo_app->mo_obj->mv_value = `my value`.
*
* DATA(lt_attri) = VALUE z2ui5_cl_fw_binding=>ty_t_attri( ).
*
* DATA(lo_bind) = z2ui5_cl_fw_binding=>factory(
* app = lo_app
* attri = lt_attri
* type = z2ui5_cl_fw_binding=>cs_bind_type-one_way
* data = lo_app->mo_obj->mv_value ).
*
* DATA(lv_result) = lo_bind->main( ).
*
* cl_abap_unit_assert=>assert_equals(
* act = lv_result
* exp = `/MO_OBJ/MV_VALUE` ).
*
* ENDMETHOD.
*
* METHOD test_one_way_struc.
*
* DATA(lo_app) = NEW ltcl_test_main_object( ).
* lo_app->mo_obj = NEW #( ).
* lo_app->mo_obj->ms_struc-input = `my value`.
*
* DATA(lt_attri) = VALUE z2ui5_cl_fw_binding=>ty_t_attri( ).
*
* DATA(lo_bind) = z2ui5_cl_fw_binding=>factory(
* app = lo_app
* attri = lt_attri
* type = z2ui5_cl_fw_binding=>cs_bind_type-one_way
* data = lo_app->mo_obj->ms_struc-input ).
*
* DATA(lv_result) = lo_bind->main( ).
*
* cl_abap_unit_assert=>assert_equals(
* act = lv_result
* exp = `/MO_OBJ/MS_STRUC-INPUT` ).
*
* ENDMETHOD.
*
*ENDCLASS.

View File

@ -3,9 +3,9 @@
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOCLASS>
<CLSNAME>Z2UI5_CL_FW_HLP_BINDER</CLSNAME>
<CLSNAME>Z2UI5_CL_CORE_MODEL_SRV</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>abap2UI5 - data binder</DESCRIPT>
<DESCRIPT>abap2UI5 - backend model</DESCRIPT>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>

View File

@ -1,21 +0,0 @@
CLASS ltcl_test_dissolver DEFINITION FINAL FOR TESTING
DURATION LONG
RISK LEVEL DANGEROUS.
PRIVATE SECTION.
METHODS first_test FOR TESTING RAISING cx_static_check.
ENDCLASS.
CLASS z2ui5_cl_fw_hlp_dissolver DEFINITION LOCAL FRIENDS ltcl_test_dissolver.
CLASS ltcl_test_dissolver IMPLEMENTATION.
METHOD first_test.
* DATA(lo_http) = NEW z2ui5_cl_fw_http_post( `` ).
* DATA(lo_app) = NEW z2ui5_cl_fw_controller( lo_http ).
* DATA(lo_client) = NEW z2ui5_cl_fw_client( lo_app ) ##NEEDED.
ENDMETHOD.
ENDCLASS.

View File

@ -3,7 +3,7 @@
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<DEVC>
<CTEXT>abap2UI5 - core (fw)</CTEXT>
<CTEXT>abap2UI5 - core</CTEXT>
</DEVC>
</asx:values>
</asx:abap>

View File

@ -1,45 +1,45 @@
CLASS z2ui5_cl_fw_action DEFINITION
CLASS z2ui5_cl_core_action DEFINITION
PUBLIC
FINAL
CREATE PUBLIC.
PUBLIC SECTION.
DATA mo_http_post TYPE REF TO z2ui5_cl_fw_http_post.
DATA mo_app TYPE REF TO z2ui5_cl_fw_app.
DATA mo_http_post TYPE REF TO z2ui5_cl_core_http_post.
DATA mo_app TYPE REF TO z2ui5_cl_core_app.
DATA ms_actual TYPE z2ui5_if_fw_types=>ty_s_actual.
DATA ms_next TYPE z2ui5_if_fw_types=>ty_s_next.
DATA ms_actual TYPE z2ui5_if_core_types=>ty_s_actual.
DATA ms_next TYPE z2ui5_if_core_types=>ty_s_next.
METHODS factory_system_startup
RETURNING
VALUE(result) TYPE REF TO z2ui5_cl_fw_action.
VALUE(result) TYPE REF TO z2ui5_cl_core_action.
METHODS factory_system_error
IMPORTING
ix TYPE REF TO cx_root
RETURNING
VALUE(result) TYPE REF TO z2ui5_cl_fw_action.
VALUE(result) TYPE REF TO z2ui5_cl_core_action.
METHODS factory_first_start
RETURNING
VALUE(result) TYPE REF TO z2ui5_cl_fw_action.
VALUE(result) TYPE REF TO z2ui5_cl_core_action.
METHODS factory_by_frontend
RETURNING
VALUE(result) TYPE REF TO z2ui5_cl_fw_action.
VALUE(result) TYPE REF TO z2ui5_cl_core_action.
METHODS factory_stack_leave
RETURNING
VALUE(result) TYPE REF TO z2ui5_cl_fw_action.
VALUE(result) TYPE REF TO z2ui5_cl_core_action.
METHODS factory_stack_call
RETURNING
VALUE(result) TYPE REF TO z2ui5_cl_fw_action.
VALUE(result) TYPE REF TO z2ui5_cl_core_action.
METHODS constructor
IMPORTING
val TYPE REF TO z2ui5_cl_fw_http_post.
val TYPE REF TO z2ui5_cl_core_http_post.
PROTECTED SECTION.
PRIVATE SECTION.
@ -47,7 +47,7 @@ ENDCLASS.
CLASS z2ui5_cl_fw_action IMPLEMENTATION.
CLASS z2ui5_cl_core_action IMPLEMENTATION.
METHOD constructor.
@ -61,9 +61,9 @@ CLASS z2ui5_cl_fw_action IMPLEMENTATION.
METHOD factory_by_frontend.
result = NEW #( mo_http_post ).
result->mo_app = z2ui5_cl_fw_app=>db_load( mo_http_post->ms_request-s_frontend-id ).
result->mo_app = z2ui5_cl_core_app=>db_load( mo_http_post->ms_request-s_frontend-id ).
result->mo_app->ms_draft-id = z2ui5_cl_util_func=>uuid_get_c32( ).
result->mo_app->ms_draft-id = z2ui5_cl_util=>uuid_get_c32( ).
result->mo_app->ms_draft-id_prev = mo_http_post->ms_request-s_frontend-id.
result->ms_actual-view = mo_http_post->ms_request-s_frontend-view.
@ -82,7 +82,7 @@ CLASS z2ui5_cl_fw_action IMPLEMENTATION.
TRY.
result = NEW #( mo_http_post ).
result->mo_app->ms_draft-id = z2ui5_cl_util_func=>uuid_get_c32( ).
result->mo_app->ms_draft-id = z2ui5_cl_util=>uuid_get_c32( ).
CREATE OBJECT result->mo_app->mo_app TYPE (mo_http_post->ms_request-s_control-app_start).
@ -103,7 +103,7 @@ CLASS z2ui5_cl_fw_action IMPLEMENTATION.
ms_next-o_app_call->id_draft = COND string(
WHEN ms_next-o_app_call->id_draft IS INITIAL THEN z2ui5_cl_util_func=>uuid_get_c32( )
WHEN ms_next-o_app_call->id_draft IS INITIAL THEN z2ui5_cl_util=>uuid_get_c32( )
ELSE ms_next-o_app_call->id_draft ).
result = NEW #( mo_http_post ).
@ -115,7 +115,7 @@ CLASS z2ui5_cl_fw_action IMPLEMENTATION.
result->ms_next-s_set = ms_next-s_set.
TRY.
DATA(lo_app) = z2ui5_cl_fw_app=>db_load( ms_next-o_app_call->id_draft ).
DATA(lo_app) = z2ui5_cl_core_app=>db_load( ms_next-o_app_call->id_draft ).
result->mo_app->mo_app = lo_app->mo_app.
result->mo_app->mt_attri = lo_app->mt_attri.
@ -131,7 +131,7 @@ CLASS z2ui5_cl_fw_action IMPLEMENTATION.
METHOD factory_stack_leave.
ms_next-o_app_leave->id_draft = COND string(
WHEN ms_next-o_app_leave->id_draft IS INITIAL THEN z2ui5_cl_util_func=>uuid_get_c32( )
WHEN ms_next-o_app_leave->id_draft IS INITIAL THEN z2ui5_cl_util=>uuid_get_c32( )
ELSE ms_next-o_app_leave->id_draft ).
result = NEW #( mo_http_post ).
@ -143,7 +143,7 @@ CLASS z2ui5_cl_fw_action IMPLEMENTATION.
result->ms_next-s_set = ms_next-s_set.
TRY.
DATA(lo_db) = NEW z2ui5_cl_fw_hlp_db( ).
DATA(lo_db) = NEW z2ui5_cl_core_draft_srv( ).
DATA(ls_draft) = lo_db->read_info( result->mo_app->ms_draft-id ).
result->mo_app->ms_draft-id_prev_app_stack = ls_draft-id_prev_app_stack.
@ -160,7 +160,7 @@ CLASS z2ui5_cl_fw_action IMPLEMENTATION.
result = NEW #( mo_http_post ).
result->mo_app->ms_draft-id = z2ui5_cl_util_func=>uuid_get_c32( ).
result->mo_app->ms_draft-id = z2ui5_cl_util=>uuid_get_c32( ).
result->ms_actual-check_on_navigated = abap_true.
result->ms_next-o_app_call = z2ui5_cl_fw_app_error=>factory( ix ).
@ -173,7 +173,7 @@ CLASS z2ui5_cl_fw_action IMPLEMENTATION.
result = NEW #( mo_http_post ).
result->mo_app->ms_draft-id = z2ui5_cl_util_func=>uuid_get_c32( ).
result->mo_app->ms_draft-id = z2ui5_cl_util=>uuid_get_c32( ).
result->ms_actual-check_on_navigated = abap_true.
result->mo_app->mo_app = z2ui5_cl_fw_app_startup=>factory( ).

View File

@ -3,7 +3,7 @@
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOCLASS>
<CLSNAME>Z2UI5_CL_FW_ACTION</CLSNAME>
<CLSNAME>Z2UI5_CL_CORE_ACTION</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>abap2UI5 - action &amp; flow</DESCRIPT>
<STATE>1</STATE>

View File

@ -0,0 +1,210 @@
CLASS z2ui5_cl_core_app DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
INTERFACES if_serializable_object .
DATA mt_attri TYPE z2ui5_if_core_types=>ty_t_attri .
DATA mo_app TYPE REF TO object .
DATA ms_draft TYPE z2ui5_if_types=>ty_s_get-s_draft .
METHODS attri_get_by_data
IMPORTING
!val TYPE data
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_core_types=>ty_s_attri .
METHODS model_json_stringify
RETURNING
VALUE(result) TYPE string .
METHODS model_json_parse
IMPORTING
!view TYPE string
!io_json_model TYPE REF TO z2ui5_if_ajson .
METHODS all_xml_stringify
RETURNING
VALUE(result) TYPE string .
CLASS-METHODS all_xml_parse
IMPORTING
!val TYPE string
RETURNING
VALUE(result) TYPE REF TO z2ui5_cl_core_app .
CLASS-METHODS db_load
IMPORTING
!id TYPE string
RETURNING
VALUE(result) TYPE REF TO z2ui5_cl_core_app .
METHODS db_save.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS z2ui5_cl_core_app IMPLEMENTATION.
METHOD all_xml_parse.
z2ui5_cl_util=>xml_parse(
EXPORTING
xml = val
IMPORTING
any = result ).
LOOP AT result->mt_attri REFERENCE INTO DATA(lr_attri)
WHERE data_rtti IS NOT INITIAL
AND type_kind = cl_abap_classdescr=>typekind_dref.
DATA(lv_assign) = 'RESULT->MO_APP->' && lr_attri->name.
ASSIGN (lv_assign) TO FIELD-SYMBOL(<val>).
IF sy-subrc <> 0.
RAISE EXCEPTION TYPE z2ui5_cx_util_error
EXPORTING
val = `LOAD_DRAFT_FROM_DATABASE_FAILED / ATTRI_NOT_FOUND ` && lr_attri->name.
ENDIF.
z2ui5_cl_util=>xml_srtti_parse(
EXPORTING
rtti_data = lr_attri->data_rtti
IMPORTING
e_data = <val> ).
CLEAR lr_attri->data_rtti.
ENDLOOP.
ENDMETHOD.
METHOD all_xml_stringify.
TRY.
LOOP AT mt_attri REFERENCE INTO DATA(lr_attri).
CLEAR lr_attri->r_ref.
IF lr_attri->bind_type = z2ui5_if_core_types=>cs_bind_type-one_time.
DELETE mt_attri.
ENDIF.
ENDLOOP.
result = z2ui5_cl_util=>xml_stringify( me ).
RETURN.
CATCH cx_xslt_serialization_error INTO DATA(x).
ENDTRY.
TRY.
LOOP AT mt_attri REFERENCE INTO lr_attri
WHERE type_kind = cl_abap_classdescr=>typekind_dref.
DATA(lv_name) = `MO_APP->` && lr_attri->name && `->*`.
DATA(lv_name2) = `MO_APP->` && lr_attri->name.
ASSIGN (lv_name) TO FIELD-SYMBOL(<val>).
ASSIGN (lv_name2) TO FIELD-SYMBOL(<val_ref>).
lr_attri->data_rtti = z2ui5_cl_util=>xml_srtti_stringify( <val> ).
CLEAR <val>.
CLEAR <val_ref>.
ENDLOOP.
LOOP AT mt_attri REFERENCE INTO lr_attri.
CLEAR lr_attri->r_ref.
ENDLOOP.
result = z2ui5_cl_util=>xml_stringify( me ).
CATCH cx_root INTO DATA(x2).
RAISE EXCEPTION TYPE z2ui5_cx_util_error
EXPORTING
val = `<p>` && x->previous->get_text( ) && `<p>` && x2->get_text( ) && `<p> Please check if all generic data references are public attributes of your class`.
ENDTRY.
ENDMETHOD.
METHOD attri_get_by_data.
DATA(lr_data) = REF #( val ).
DO 3 TIMES.
TRY.
result = REF #( mt_attri[ r_ref = lr_data ] ).
RETURN.
CATCH cx_root.
ENDTRY.
DATA(lo_dissolver) = NEW z2ui5_cl_core_model_srv(
attri = REF #( mt_attri )
app = mo_app ).
lo_dissolver->main( ).
ENDDO.
RAISE EXCEPTION TYPE z2ui5_cx_util_error
EXPORTING
val = `BINDING_ERROR - No class attribute for binding found - Please check if the binded values are public attributes of your class or switch to bind_local`.
ENDMETHOD.
METHOD db_load.
DATA(lo_db) = NEW z2ui5_cl_core_draft_srv( ).
DATA(ls_db) = lo_db->read_draft( id ).
result = all_xml_parse( ls_db-data ).
ENDMETHOD.
METHOD db_save.
IF mo_app IS BOUND.
CAST z2ui5_if_app( mo_app )->id_draft = ms_draft-id.
ENDIF.
DATA(lo_db) = NEW z2ui5_cl_core_draft_srv( ).
lo_db->create(
draft = ms_draft
model_xml = all_xml_stringify( ) ).
ENDMETHOD.
METHOD model_json_parse.
DATA(lo_dissolver) = NEW z2ui5_cl_core_model_srv(
attri = REF #( mt_attri )
app = mo_app ).
lo_dissolver->set_attri_ready( ).
DATA(lo_json_mapper) = NEW z2ui5_cl_core_json_srv( ).
lo_json_mapper->model_client_to_server(
view = view
t_attri = REF #( mt_attri )
model = io_json_model ).
ENDMETHOD.
METHOD model_json_stringify.
DATA(lo_json_mapper) = NEW z2ui5_cl_core_json_srv( ).
result = lo_json_mapper->model_server_to_client( mt_attri ).
ENDMETHOD.
ENDCLASS.

View File

@ -3,9 +3,9 @@
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOCLASS>
<CLSNAME>Z2UI5_CL_FW_APP</CLSNAME>
<CLSNAME>Z2UI5_CL_CORE_APP</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>abap2UI5 - fw app</DESCRIPT>
<DESCRIPT>abap2UI5 - app</DESCRIPT>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>

View File

@ -1,4 +1,4 @@
CLASS z2ui5_cl_fw_client DEFINITION
CLASS z2ui5_cl_core_client DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .
@ -7,11 +7,11 @@ CLASS z2ui5_cl_fw_client DEFINITION
INTERFACES z2ui5_if_client .
DATA mo_action TYPE REF TO z2ui5_cl_fw_action.
DATA mo_action TYPE REF TO z2ui5_cl_core_action.
METHODS constructor
IMPORTING
action TYPE REF TO z2ui5_cl_fw_action.
!action TYPE REF TO z2ui5_cl_core_action.
PROTECTED SECTION.
PRIVATE SECTION.
@ -19,7 +19,7 @@ ENDCLASS.
CLASS z2ui5_cl_fw_client IMPLEMENTATION.
CLASS z2ui5_cl_core_client IMPLEMENTATION.
METHOD constructor.
@ -56,7 +56,7 @@ CLASS z2ui5_cl_fw_client IMPLEMENTATION.
METHOD z2ui5_if_client~get_app.
IF id IS NOT INITIAL.
DATA(lo_app) = z2ui5_cl_fw_app=>db_load( id ).
DATA(lo_app) = z2ui5_cl_core_app=>db_load( id ).
result = CAST #( lo_app->mo_app ).
ELSE.
result = CAST #( mo_action->mo_app->mo_app ).
@ -80,20 +80,24 @@ CLASS z2ui5_cl_fw_client IMPLEMENTATION.
METHOD z2ui5_if_client~nav_app_call.
mo_action->ms_next-o_app_call = app.
IF app->id_draft IS INITIAL.
app->id_app = z2ui5_cl_util_func=>uuid_get_c32( ).
ENDIF.
result = app->id_app.
result = COND #( WHEN app->id_draft IS INITIAL
THEN z2ui5_cl_util=>uuid_get_c32( )
ELSE app->id_app ).
ENDMETHOD.
METHOD z2ui5_if_client~nav_app_leave.
mo_action->ms_next-o_app_leave = app.
IF app->id_draft IS INITIAL.
app->id_app = z2ui5_cl_util_func=>uuid_get_c32( ).
ENDIF.
result = app->id_app.
result = COND #( WHEN app->id_draft IS INITIAL
THEN z2ui5_cl_util=>uuid_get_c32( )
ELSE app->id_app ).
ENDMETHOD.
@ -213,87 +217,63 @@ CLASS z2ui5_cl_fw_client IMPLEMENTATION.
METHOD z2ui5_if_client~_bind.
IF tab IS NOT INITIAL.
DATA(lv_name) = z2ui5_if_client~_bind( val = tab path = abap_true ).
result = z2ui5_cl_util_func=>bind_tab_cell(
iv_name = lv_name
i_tab_index = tab_index
i_tab = tab
i_val = val ).
RETURN.
ENDIF.
DATA(lo_bind) = NEW z2ui5_cl_fw_hlp_binder( mo_action->mo_app ).
result = lo_bind->bind(
DATA(lo_bind) = NEW z2ui5_cl_core_bind_srv( mo_action->mo_app ).
result = lo_bind->main(
val = val
type = z2ui5_if_fw_types=>cs_bind_type-one_way
type = z2ui5_if_core_types=>cs_bind_type-one_way
config = VALUE #(
path_only = path
custom_filter = custom_filter
custom_mapper = custom_mapper ) ).
custom_mapper = custom_mapper
tab = REF #( tab )
tab_index = tab_index ) ).
ENDMETHOD.
METHOD z2ui5_if_client~_bind_clear.
DATA(lo_bind) = NEW z2ui5_cl_fw_hlp_binder( mo_action->mo_app ).
lo_bind->clear_bind( val ).
DATA(lo_bind) = NEW z2ui5_cl_core_bind_srv( mo_action->mo_app ).
lo_bind->clear( val ).
ENDMETHOD.
METHOD z2ui5_if_client~_bind_edit.
IF tab IS NOT INITIAL.
DATA(lv_name) = z2ui5_if_client~_bind_edit( val = tab path = abap_true ).
result = z2ui5_cl_util_func=>bind_tab_cell(
iv_name = lv_name
i_tab_index = tab_index
i_tab = tab
i_val = val ).
RETURN.
ENDIF.
DATA(lo_bind) = NEW z2ui5_cl_fw_hlp_binder( mo_action->mo_app ).
result = lo_bind->bind(
DATA(lo_bind) = NEW z2ui5_cl_core_bind_srv( mo_action->mo_app ).
result = lo_bind->main(
val = val
type = z2ui5_if_fw_types=>cs_bind_type-two_way
type = z2ui5_if_core_types=>cs_bind_type-two_way
config = VALUE #(
path_only = path
custom_filter = custom_filter
custom_filter_back = custom_filter_back
custom_mapper = custom_mapper
custom_mapper_back = custom_mapper_back
) ).
tab = REF #( tab )
tab_index = tab_index ) ).
ENDMETHOD.
METHOD z2ui5_if_client~_bind_local.
DATA(lo_bind) = NEW z2ui5_cl_fw_hlp_binder( mo_action->mo_app ).
result = lo_bind->bind_local(
DATA(lo_bind) = NEW z2ui5_cl_core_bind_srv( mo_action->mo_app ).
result = lo_bind->main_local(
val = val
config = VALUE #(
path_only = path
custom_mapper = custom_mapper
custom_filter = custom_filter
) ).
custom_filter = custom_filter ) ).
ENDMETHOD.
METHOD z2ui5_if_client~_event.
DATA(lo_ui5) = NEW z2ui5_cl_fw_hlp_binder( mo_action->mo_app ).
result = lo_ui5->ui5_event(
DATA(lo_ui5) = NEW z2ui5_cl_core_event_srv( ).
result = lo_ui5->get_event(
val = val
check_view_destroy = check_view_destroy
t_arg = t_arg ).
@ -303,8 +283,8 @@ CLASS z2ui5_cl_fw_client IMPLEMENTATION.
METHOD z2ui5_if_client~_event_client.
DATA(lo_ui5) = NEW z2ui5_cl_fw_hlp_binder( mo_action->mo_app ).
result = lo_ui5->ui5_event_client(
DATA(lo_ui5) = NEW z2ui5_cl_core_event_srv( ).
result = lo_ui5->get_event_client(
val = val
t_arg = t_arg ).

View File

@ -6,7 +6,7 @@ CLASS ltcl_test_client DEFINITION FINAL FOR TESTING
METHODS first_test FOR TESTING RAISING cx_static_check.
ENDCLASS.
CLASS z2ui5_cl_fw_client DEFINITION LOCAL FRIENDS ltcl_test_client.
CLASS z2ui5_cl_core_client DEFINITION LOCAL FRIENDS ltcl_test_client.
CLASS ltcl_test_client IMPLEMENTATION.

View File

@ -3,9 +3,9 @@
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOCLASS>
<CLSNAME>Z2UI5_CL_FW_HLP_JSON_MAPPER</CLSNAME>
<CLSNAME>Z2UI5_CL_CORE_CLIENT</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>abap2UI5 - json mapper</DESCRIPT>
<DESCRIPT>abap2UI5 - backend client api</DESCRIPT>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>

View File

@ -1,4 +1,4 @@
CLASS z2ui5_cl_fw_http_get DEFINITION
CLASS z2ui5_cl_core_http_get DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .
@ -30,7 +30,7 @@ ENDCLASS.
CLASS Z2UI5_CL_FW_HTTP_GET IMPLEMENTATION.
CLASS z2ui5_cl_core_http_get IMPLEMENTATION.
METHOD constructor.
@ -579,7 +579,7 @@ CLASS Z2UI5_CL_FW_HTTP_GET IMPLEMENTATION.
`</script>` && |\n| &&
`<abc/></body></html>`.
new z2ui5_cl_fw_hlp_db( )->cleanup( ).
NEW z2ui5_cl_core_draft_srv( )->cleanup( ).
result = mv_response.
ENDMETHOD.

View File

@ -16,13 +16,13 @@ CLASS ltcl_test_http_get DEFINITION FINAL FOR TESTING
METHODS js_no_jquery FOR TESTING RAISING cx_static_check.
ENDCLASS.
CLASS z2ui5_cl_fw_http_get DEFINITION LOCAL FRIENDS ltcl_test_http_get.
CLASS z2ui5_cl_core_http_get DEFINITION LOCAL FRIENDS ltcl_test_http_get.
CLASS ltcl_test_http_get IMPLEMENTATION.
METHOD file_not_initial.
DATA(lo_get) = NEW z2ui5_cl_fw_http_get( ).
DATA(lo_get) = NEW z2ui5_cl_core_http_get( ).
DATA(lv_index_html) = lo_get->main( ).
IF lv_index_html IS INITIAL.
cl_abap_unit_assert=>fail( 'HTTP GET - index html initial' ).
@ -33,7 +33,7 @@ CLASS ltcl_test_http_get IMPLEMENTATION.
METHOD launchpad_compatibility.
DATA(lo_get) = NEW z2ui5_cl_fw_http_get( ).
DATA(lo_get) = NEW z2ui5_cl_core_http_get( ).
DATA(lv_index_html) = lo_get->main( ).
IF lv_index_html CS `&`.
cl_abap_unit_assert=>fail( 'index.html contains the character & -> no launchpad compatibility' ).
@ -44,7 +44,7 @@ CLASS ltcl_test_http_get IMPLEMENTATION.
METHOD path_setup.
DATA(lo_get) = NEW z2ui5_cl_fw_http_get( ).
DATA(lo_get) = NEW z2ui5_cl_core_http_get( ).
DATA(lv_index_html) = to_upper( lo_get->main( ) ).
IF lv_index_html CS `SAP.Z2UI5.PATHNAME || '/SAP/TEST';`.
cl_abap_unit_assert=>fail( 'path static' ).
@ -58,7 +58,7 @@ CLASS ltcl_test_http_get IMPLEMENTATION.
METHOD js_no_debugger.
DATA(lo_get) = NEW z2ui5_cl_fw_http_get( ).
DATA(lo_get) = NEW z2ui5_cl_core_http_get( ).
DATA(lv_index_html) = to_upper( lo_get->main( ) ).
IF lv_index_html CS `DEBUGGER`.
cl_abap_unit_assert=>fail( 'debugger command not allowed' ).
@ -68,7 +68,7 @@ CLASS ltcl_test_http_get IMPLEMENTATION.
METHOD js_no_sap_ui_get_core.
DATA(lo_get) = NEW z2ui5_cl_fw_http_get( ).
DATA(lo_get) = NEW z2ui5_cl_core_http_get( ).
DATA(lv_index_html) = to_upper( lo_get->main( ) ) ##NEEDED.
* IF lv_index_html CS `SAP.UI.GETCORE`.
* cl_abap_unit_assert=>fail( 'sap.ui.get.core not allowed' ).
@ -78,7 +78,7 @@ CLASS ltcl_test_http_get IMPLEMENTATION.
METHOD js_no_jquery.
DATA(lo_get) = NEW z2ui5_cl_fw_http_get( ).
DATA(lo_get) = NEW z2ui5_cl_core_http_get( ).
DATA(lv_index_html) = to_upper( lo_get->main( ) ).
IF lv_index_html CS `JQUERY`.
cl_abap_unit_assert=>fail( 'use of jquery not allowed' ).
@ -88,7 +88,7 @@ CLASS ltcl_test_http_get IMPLEMENTATION.
METHOD js_no_window.
DATA(lo_get) = NEW z2ui5_cl_fw_http_get( ).
DATA(lo_get) = NEW z2ui5_cl_core_http_get( ).
DATA(lv_index_html) = to_upper( lo_get->main( ) ) ##NEEDED.
* IF lv_index_html CS `WINDOW.`.
* cl_abap_unit_assert=>fail( 'use of window not allowed' ).
@ -98,7 +98,7 @@ CLASS ltcl_test_http_get IMPLEMENTATION.
METHOD js_no_document.
DATA(lo_get) = NEW z2ui5_cl_fw_http_get( ).
DATA(lo_get) = NEW z2ui5_cl_core_http_get( ).
DATA(lv_index_html) = to_upper( lo_get->main( ) ) ##NEEDED.
* IF lv_index_html CS `DOCUMENT.`.
* cl_abap_unit_assert=>fail( 'use of document not allowed' ).

View File

@ -3,7 +3,7 @@
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOCLASS>
<CLSNAME>Z2UI5_CL_FW_HTTP_GET</CLSNAME>
<CLSNAME>Z2UI5_CL_CORE_HTTP_GET</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>abap2UI5 - http get handler</DESCRIPT>
<STATE>1</STATE>

View File

@ -1,14 +1,14 @@
CLASS z2ui5_cl_fw_http_post DEFINITION
CLASS z2ui5_cl_core_http_post DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
DATA mo_action TYPE REF TO z2ui5_cl_fw_action.
DATA mo_action TYPE REF TO z2ui5_cl_core_action.
DATA mv_request_json TYPE string.
DATA ms_request TYPE z2ui5_if_fw_types=>ty_s_http_request_post.
DATA ms_response TYPE z2ui5_if_fw_types=>ty_s_http_response_post.
DATA ms_request TYPE z2ui5_if_core_types=>ty_s_http_request_post.
DATA ms_response TYPE z2ui5_if_core_types=>ty_s_http_response_post.
METHODS constructor
IMPORTING
@ -35,13 +35,13 @@ ENDCLASS.
CLASS z2ui5_cl_fw_http_post IMPLEMENTATION.
CLASS z2ui5_cl_core_http_post IMPLEMENTATION.
METHOD constructor.
mv_request_json = val.
mo_action = NEW z2ui5_cl_fw_action( me ).
mo_action = NEW z2ui5_cl_core_action( me ).
ENDMETHOD.
@ -62,7 +62,7 @@ CLASS z2ui5_cl_fw_http_post IMPLEMENTATION.
METHOD main_begin.
TRY.
DATA(lo_json_mapper) = NEW z2ui5_cl_fw_hlp_json_mapper( ).
DATA(lo_json_mapper) = NEW z2ui5_cl_core_json_srv( ).
ms_request = lo_json_mapper->request_json_to_abap( mv_request_json ).
IF ms_request-s_frontend-id IS NOT INITIAL.
@ -89,7 +89,7 @@ CLASS z2ui5_cl_fw_http_post IMPLEMENTATION.
s_frontend-id = mo_action->mo_app->ms_draft-id
model = mo_action->mo_app->model_json_stringify( ) ).
DATA(lo_json_mapper) = NEW z2ui5_cl_fw_hlp_json_mapper( ).
DATA(lo_json_mapper) = NEW z2ui5_cl_core_json_srv( ).
result = lo_json_mapper->response_abap_to_json( ms_response ).
CLEAR mo_action->ms_next.
@ -104,7 +104,7 @@ CLASS z2ui5_cl_fw_http_post IMPLEMENTATION.
METHOD main_process.
TRY.
DATA(li_client) = NEW z2ui5_cl_fw_client( mo_action ).
DATA(li_client) = NEW z2ui5_cl_core_client( mo_action ).
DATA(li_app) = CAST z2ui5_if_app( mo_action->mo_app->mo_app ).
ROLLBACK WORK.

View File

@ -8,7 +8,7 @@ CLASS ltcl_test_handler_post DEFINITION FINAL FOR TESTING
load_startup_app FOR TESTING RAISING cx_static_check.
ENDCLASS.
CLASS z2ui5_cl_fw_http_post DEFINITION LOCAL FRIENDS ltcl_test_handler_post.
CLASS z2ui5_cl_core_http_post DEFINITION LOCAL FRIENDS ltcl_test_handler_post.
CLASS ltcl_test_handler_post IMPLEMENTATION.

View File

@ -3,7 +3,7 @@
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOCLASS>
<CLSNAME>Z2UI5_CL_FW_HTTP_POST</CLSNAME>
<CLSNAME>Z2UI5_CL_CORE_HTTP_POST</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>abap2UI5 - http post handler</DESCRIPT>
<STATE>1</STATE>

View File

@ -1,297 +0,0 @@
CLASS z2ui5_cl_fw_app DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
INTERFACES if_serializable_object.
DATA mt_attri TYPE z2ui5_if_fw_types=>ty_t_attri.
DATA mo_app TYPE REF TO object.
DATA ms_draft TYPE z2ui5_if_types=>ty_s_get-s_draft.
METHODS attri_get_by_data
IMPORTING
val TYPE data
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_fw_types=>ty_s_attri.
METHODS model_json_stringify
RETURNING
VALUE(result) TYPE string.
METHODS model_json_parse
IMPORTING
view TYPE string
io_json_model TYPE REF TO z2ui5_if_ajson.
METHODS all_xml_stringify
RETURNING
VALUE(result) TYPE string.
CLASS-METHODS all_xml_parse
IMPORTING
val TYPE string
RETURNING
VALUE(result) TYPE REF TO z2ui5_cl_fw_app.
CLASS-METHODS db_load
IMPORTING
id TYPE string
RETURNING
VALUE(result) TYPE REF TO z2ui5_cl_fw_app.
METHODS db_save.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS z2ui5_cl_fw_app IMPLEMENTATION.
METHOD attri_get_by_data.
DATA(lr_data) = REF #( val ).
DO 3 TIMES.
TRY.
result = REF #( mt_attri[ r_ref = lr_data ] ).
RETURN.
CATCH cx_root.
ENDTRY.
DATA(lo_dissolver) = NEW z2ui5_cl_fw_hlp_dissolver(
attri = REF #( mt_attri )
app = mo_app ).
lo_dissolver->main( ).
ENDDO.
RAISE EXCEPTION TYPE z2ui5_cx_util_error
EXPORTING
val = `BINDING_ERROR - No class attribute for binding found - Please check if the binded values are public attributes of your class or switch to bind_local`.
ENDMETHOD.
METHOD db_load.
DATA(lo_db) = NEW z2ui5_cl_fw_hlp_db( ).
DATA(ls_db) = lo_db->read_draft( id ).
result = all_xml_parse( ls_db-data ).
ENDMETHOD.
METHOD db_save.
IF mo_app IS BOUND.
CAST z2ui5_if_app( mo_app )->id_draft = ms_draft-id.
ENDIF.
DATA(lo_db) = NEW z2ui5_cl_fw_hlp_db( ).
lo_db->create(
draft = ms_draft
model_xml = all_xml_stringify( ) ).
ENDMETHOD.
METHOD model_json_parse.
DATA(lo_dissolver) = NEW z2ui5_cl_fw_hlp_dissolver(
attri = REF #( mt_attri )
app = mo_app ).
lo_dissolver->set_attri_ready( ).
DATA(lo_json_mapper) = NEW z2ui5_cl_fw_hlp_json_mapper( ).
lo_json_mapper->model_client_to_server(
view = view
t_attri = REF #( mt_attri )
model = io_json_model ).
ENDMETHOD.
METHOD model_json_stringify.
DATA(lo_json_mapper) = NEW z2ui5_cl_fw_hlp_json_mapper( ).
result = lo_json_mapper->model_server_to_client( mt_attri ).
ENDMETHOD.
METHOD all_xml_parse.
z2ui5_cl_util_func=>trans_xml_2_any(
EXPORTING
xml = val
IMPORTING
any = result ).
* DATA(lo_dissolver) = NEW z2ui5_cl_fw_hlp_dissolver(
* attri = REF #( result->mt_attri )
* app = result->mo_app ).
* lo_dissolver->main( ).
LOOP AT result->mt_attri REFERENCE INTO DATA(lr_attri)
WHERE data_rtti IS NOT INITIAL
AND type_kind = cl_abap_classdescr=>typekind_dref.
DATA(lv_assign) = 'RESULT->MO_APP->' && lr_attri->name.
ASSIGN (lv_assign) TO FIELD-SYMBOL(<val>).
IF sy-subrc <> 0.
RAISE EXCEPTION TYPE z2ui5_cx_util_error
EXPORTING
val = `LOAD_DRAFT_FROM_DATABASE_FAILED / ATTRI_NOT_FOUND ` && lr_attri->name.
ENDIF.
z2ui5_cl_util_func=>trans_srtti_xml_2_data(
EXPORTING
rtti_data = lr_attri->data_rtti
IMPORTING
e_data = <val> ).
CLEAR lr_attri->data_rtti.
ENDLOOP.
* DATA(lo_app) = CAST object( result-app ) ##NEEDED.
* LOOP AT result-t_attri REFERENCE INTO DATA(lr_attri)
* WHERE data_rtti IS NOT INITIAL
* AND type_kind = cl_abap_classdescr=>typekind_dref.
*
* DATA(lv_assign) = 'LO_APP->' && lr_attri->name.
* ASSIGN (lv_assign) TO <ref>.
* IF sy-subrc <> 0.
* RAISE EXCEPTION TYPE z2ui5_cx_util_error
* EXPORTING
* val = `LOAD_DRAFT_FROM_DATABASE_FAILED / ATTRI_NOT_FOUND ` && lr_attri->name.
* ENDIF.
*
* z2ui5_cl_util_func=>trans_srtti_xml_2_data(
* EXPORTING
* rtti_data = lr_attri->data_rtti
* IMPORTING
* e_data = <ref> ).
*
* CLEAR lr_attri->data_rtti.
* ENDLOOP.
ENDMETHOD.
METHOD all_xml_stringify.
TRY.
LOOP AT mt_attri REFERENCE INTO DATA(lr_attri).
CLEAR lr_attri->r_ref.
IF lr_attri->bind_type = z2ui5_if_fw_types=>cs_bind_type-one_time.
DELETE mt_attri.
ENDIF.
ENDLOOP.
result = z2ui5_cl_util_func=>trans_xml_by_any( me ).
RETURN.
CATCH cx_xslt_serialization_error INTO DATA(x).
ENDTRY.
TRY.
* IF NOT line_exists( mt_attri[ type_kind = cl_abap_classdescr=>typekind_dref ] ).
* DATA(lo_dissolver) = NEW z2ui5_cl_fw_hlp_dissolver(
* attri = REF #( mt_attri )
* app = mo_app ).
* lo_dissolver->main( ).
* ENDIF.
LOOP AT mt_attri REFERENCE INTO lr_attri
WHERE type_kind = cl_abap_classdescr=>typekind_dref.
DATA(lv_name) = `MO_APP->` && lr_attri->name && `->*`.
DATA(lv_name2) = `MO_APP->` && lr_attri->name.
ASSIGN (lv_name) TO FIELD-SYMBOL(<val>).
ASSIGN (lv_name2) TO FIELD-SYMBOL(<val_ref>).
* ASSIGN lr_attri->r_ref->* TO FIELD-SYMBOL(<data>).
* ASSIGN <data>->* TO FIELD-SYMBOL(<data2>).
* CHECK sy-subrc = 0.
lr_attri->data_rtti = z2ui5_cl_util_func=>trans_srtti_xml_by_data( <val> ).
CLEAR <val>.
CLEAR <val_ref>.
ENDLOOP.
LOOP AT mt_attri REFERENCE INTO lr_attri.
CLEAR lr_attri->r_ref.
ENDLOOP.
result = z2ui5_cl_util_func=>trans_xml_by_any( me ).
CATCH cx_root INTO DATA(x2).
RAISE EXCEPTION TYPE z2ui5_cx_util_error
EXPORTING
val = `<p>` && x->previous->get_text( ) && `<p>` && x2->get_text( ) && `<p> Please check if all generic data references are public attributes of your class`.
ENDTRY.
* CATCH cx_xslt_serialization_error INTO DATA(x).
* TRY.
* FIELD-SYMBOLS <attri> TYPE any.
* FIELD-SYMBOLS <deref_attri> TYPE any.
*
* DATA(ls_db) = db.
* DATA(lo_app) = CAST object( ls_db-app ).
*
* IF NOT line_exists( ls_db-t_attri[ type_kind = cl_abap_classdescr=>typekind_dref ] ).
*
* ASSERT 1 = 0.
* ls_db-t_attri = z2ui5_cl_fw_binding=>update_attri(
* t_attri = ls_db-t_attri
* app = ls_db-app ).
*
* ENDIF.
*
* lo_app = CAST object( ls_db-app ).
* LOOP AT ls_db-t_attri REFERENCE INTO DATA(lr_attri) WHERE type_kind = cl_abap_classdescr=>typekind_dref.
*
* DATA(lv_assign) = 'LO_APP->' && lr_attri->name.
*
* UNASSIGN <deref_attri>.
* UNASSIGN <attri>.
* ASSIGN (lv_assign) TO <attri>.
* ASSIGN <attri>->* TO <deref_attri>.
* IF sy-subrc <> 0.
* CONTINUE.
* ENDIF.
*
* lr_attri->data_rtti = z2ui5_cl_util_func=>trans_srtti_xml_by_data( <deref_attri> ).
*
* CLEAR <deref_attri>.
* CLEAR <attri>.
* ENDLOOP.
*
* result = z2ui5_cl_util_func=>trans_xml_by_any( ls_db ).
*
* CATCH z2ui5_cx_util_error INTO DATA(x_util).
* RAISE EXCEPTION x_util.
*
* CATCH cx_root INTO DATA(x2).
*
* RAISE EXCEPTION TYPE z2ui5_cx_util_error
* EXPORTING
* val = `<p>` && x->previous->get_text( ) && `<p>` && x2->get_text( ) && `<p> Please check if all generic data references are public attributes of your class`.
*
* ENDTRY.
* ENDTRY.
ENDMETHOD.
ENDCLASS.

View File

@ -1,4 +1,4 @@
INTERFACE z2ui5_if_fw_types
INTERFACE z2ui5_if_core_types
PUBLIC.
CONSTANTS:

View File

@ -3,7 +3,7 @@
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOINTERF>
<CLSNAME>Z2UI5_IF_FW_TYPES</CLSNAME>
<CLSNAME>Z2UI5_IF_CORE_TYPES</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>abap2UI5 - fw types</DESCRIPT>
<EXPOSURE>2</EXPOSURE>

View File

@ -3,7 +3,7 @@
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<DEVC>
<CTEXT>abap2UI5 - apps (fw)</CTEXT>
<CTEXT>abap2UI5 - apps</CTEXT>
</DEVC>
</asx:values>
</asx:abap>

View File

@ -52,7 +52,7 @@ CLASS Z2UI5_CL_FW_APP_STARTUP IMPLEMENTATION.
TRY.
ms_home-classname = z2ui5_cl_util_func=>c_trim_upper( ms_home-classname ).
ms_home-classname = z2ui5_cl_util=>c_trim_upper( ms_home-classname ).
CREATE OBJECT li_app_test TYPE (ms_home-classname).
client->message_toast_display( `App is ready to start!` ).
@ -74,7 +74,7 @@ CLASS Z2UI5_CL_FW_APP_STARTUP IMPLEMENTATION.
METHOD view_display_start.
DATA(lv_url) = z2ui5_cl_util_func=>app_get_url(
DATA(lv_url) = z2ui5_cl_util=>app_get_url(
client = client
classname = ms_home-classname ).
@ -120,7 +120,7 @@ CLASS Z2UI5_CL_FW_APP_STARTUP IMPLEMENTATION.
IF ms_home-class_editable = abap_true.
simple_form2->input( placeholder = `fill in the class name and press 'check'`
editable = z2ui5_cl_util_func=>boolean_abap_2_json( ms_home-class_editable )
editable = z2ui5_cl_util=>boolean_abap_2_json( ms_home-class_editable )
value = client->_bind_edit( ms_home-classname )
submit = client->_event( ms_home-btn_event_id )
valuehelprequest = client->_event( 'VALUE_HELP' )
@ -139,7 +139,7 @@ CLASS Z2UI5_CL_FW_APP_STARTUP IMPLEMENTATION.
)->link( text = `Link to the Application`
target = `_blank`
href = lv_url
enabled = z2ui5_cl_util_func=>boolean_abap_2_json( xsdbool( ms_home-class_editable = abap_false ) ) ).
enabled = z2ui5_cl_util=>boolean_abap_2_json( xsdbool( ms_home-class_editable = abap_false ) ) ).
simple_form2->toolbar( )->title( `System Information` ).
@ -149,11 +149,11 @@ CLASS Z2UI5_CL_FW_APP_STARTUP IMPLEMENTATION.
simple_form2->label( `UI5 Version`).
simple_form2->text( client->_bind( mv_ui5_version ) ).
simple_form2->label( `ABAP for Cloud` ).
simple_form2->checkbox( enabled = abap_false selected = z2ui5_cl_util_func=>rtti_check_lang_version_cloud( ) ).
simple_form2->checkbox( enabled = abap_false selected = z2ui5_cl_util=>rtti_check_lang_version_cloud( ) ).
simple_form2->label( `Launchpad active` ).
simple_form2->checkbox( enabled = abap_false selected = client->get( )-check_launchpad_active ).
DATA(lv_url_samples2) = z2ui5_cl_util_func=>app_get_url(
DATA(lv_url_samples2) = z2ui5_cl_util=>app_get_url(
client = client
classname = 'z2ui5_cl_demo_app_000' ).
@ -252,7 +252,7 @@ CLASS Z2UI5_CL_FW_APP_STARTUP IMPLEMENTATION.
on_event_check( ).
WHEN 'VALUE_HELP'.
mt_classes = z2ui5_cl_util_func=>rtti_get_classes_impl_intf( `Z2UI5_IF_APP` ).
mt_classes = z2ui5_cl_util=>rtti_get_classes_impl_intf( `Z2UI5_IF_APP` ).
client->nav_app_call( z2ui5_cl_popup_to_select=>factory( mt_classes ) ).
WHEN `DEMOS`.

View File

@ -3,7 +3,7 @@
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<DEVC>
<CTEXT>abap2UI5 - cc startup (cc)</CTEXT>
<CTEXT>abap2UI5 - cc startup</CTEXT>
</DEVC>
</asx:values>
</asx:abap>

View File

@ -3,7 +3,7 @@
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<DEVC>
<CTEXT>abap2UI5 - cc addons (cc)</CTEXT>
<CTEXT>abap2UI5 - cc addons</CTEXT>
</DEVC>
</asx:values>
</asx:abap>

View File

@ -3,7 +3,7 @@
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<DEVC>
<CTEXT>abap2UI5 - test (test)</CTEXT>
<CTEXT>abap2UI5 - test</CTEXT>
</DEVC>
</asx:values>
</asx:abap>

View File

@ -1,23 +0,0 @@
CLASS z2ui5_cl_test_no_github_action DEFINITION
PUBLIC
FINAL
CREATE PUBLIC FOR TESTING RISK LEVEL HARMLESS.
PUBLIC SECTION.
METHODS test_trans_json_any_2__w_tab FOR TESTING RAISING cx_static_check.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS z2ui5_cl_test_no_github_action IMPLEMENTATION.
METHOD test_trans_json_any_2__w_tab.
ENDMETHOD.
ENDCLASS.

View File

@ -1,18 +0,0 @@
<?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_TEST_NO_GITHUB_ACTION</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>tests abap standard only</DESCRIPT>
<CATEGORY>05</CATEGORY>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
<RISK_LEVEL>11</RISK_LEVEL>
</VSEOCLASS>
</asx:values>
</asx:abap>
</abapGit>

File diff suppressed because it is too large Load Diff

View File

@ -213,7 +213,7 @@ CLASS Z2UI5_CL_XML_VIEW_CC IMPLEMENTATION.
( n = `value` v = value )
( n = `press` v = press )
( n = `OnPhoto` v = onphoto )
( n = `autoplay` v = z2ui5_cl_util_func=>boolean_abap_2_json( autoplay ) )
( n = `autoplay` v = z2ui5_cl_util=>boolean_abap_2_json( autoplay ) )
) ).
ENDMETHOD.
@ -274,12 +274,12 @@ CLASS Z2UI5_CL_XML_VIEW_CC IMPLEMENTATION.
( n = `upload` v = upload )
( n = `path` v = path )
( n = `value` v = value )
( n = `iconOnly` v = z2ui5_cl_util_func=>boolean_abap_2_json( icononly ) )
( n = `buttonOnly` v = z2ui5_cl_util_func=>boolean_abap_2_json( buttononly ) )
( n = `iconOnly` v = z2ui5_cl_util=>boolean_abap_2_json( icononly ) )
( n = `buttonOnly` v = z2ui5_cl_util=>boolean_abap_2_json( buttononly ) )
( n = `buttonText` v = buttontext )
( n = `uploadButtonText` v = uploadbuttontext )
( n = `fileType` v = filetype )
( n = `checkDirectUpload` v = z2ui5_cl_util_func=>boolean_abap_2_json( checkdirectupload ) ) ) ).
( n = `checkDirectUpload` v = z2ui5_cl_util=>boolean_abap_2_json( checkdirectupload ) ) ) ).
ENDMETHOD.
@ -314,7 +314,7 @@ CLASS Z2UI5_CL_XML_VIEW_CC IMPLEMENTATION.
( n = `altitudeAccuracy` v = altitudeaccuracy )
( n = `speed` v = speed )
( n = `heading` v = heading )
( n = `enableHighAccuracy` v = z2ui5_cl_util_func=>boolean_abap_2_json( enablehighaccuracy ) )
( n = `enableHighAccuracy` v = z2ui5_cl_util=>boolean_abap_2_json( enablehighaccuracy ) )
( n = `timeout` v = timeout )
) ).
@ -365,9 +365,9 @@ CLASS Z2UI5_CL_XML_VIEW_CC IMPLEMENTATION.
mo_view->_generic( name = `MultiInput`
ns = `z2ui5`
t_prop = VALUE #( ( n = `tokens` v = tokens )
( n = `showClearIcon` v = z2ui5_cl_util_func=>boolean_abap_2_json( showclearicon ) )
( n = `showValueHelp` v = z2ui5_cl_util_func=>boolean_abap_2_json( showvaluehelp ) )
( n = `enabled` v = z2ui5_cl_util_func=>boolean_abap_2_json( enabled ) )
( n = `showClearIcon` v = z2ui5_cl_util=>boolean_abap_2_json( showclearicon ) )
( n = `showValueHelp` v = z2ui5_cl_util=>boolean_abap_2_json( showvaluehelp ) )
( n = `enabled` v = z2ui5_cl_util=>boolean_abap_2_json( enabled ) )
( n = `suggestionItems` v = suggestionitems )
( n = `tokenUpdate` v = tokenupdate )
( n = `submit` v = submit )
@ -429,8 +429,8 @@ CLASS Z2UI5_CL_XML_VIEW_CC IMPLEMENTATION.
ns = `z2ui5`
t_prop = VALUE #( ( n = `delayMS` v = delayms )
( n = `finished` v = finished )
( n = `checkActive` v = z2ui5_cl_util_func=>boolean_abap_2_json( checkactive ) )
( n = `checkRepeat` v = z2ui5_cl_util_func=>boolean_abap_2_json( checkrepeat ) )
( n = `checkActive` v = z2ui5_cl_util=>boolean_abap_2_json( checkactive ) )
( n = `checkRepeat` v = z2ui5_cl_util=>boolean_abap_2_json( checkrepeat ) )
) ).
ENDMETHOD.

View File

@ -87,7 +87,7 @@ CLASS z2ui5_cl_ui5 IMPLEMENTATION.
ENDMETHOD.
METHOD _2bool.
result = z2ui5_cl_util_func=>boolean_abap_2_json( val ).
result = z2ui5_cl_util=>boolean_abap_2_json( val ).
ENDMETHOD.
METHOD _2xml.

View File

@ -266,9 +266,9 @@ CLASS z2ui5_cl_ui5_m IMPLEMENTATION.
result = _add( n = `Panel`
ns = `sap.m`
t_p = VALUE #( ( n = `expandable` v = z2ui5_cl_util_func=>boolean_abap_2_json( expandable ) )
( n = `expanded` v = z2ui5_cl_util_func=>boolean_abap_2_json( expanded ) )
( n = `stickyHeader` v = z2ui5_cl_util_func=>boolean_abap_2_json( stickyheader ) )
t_p = VALUE #( ( n = `expandable` v = z2ui5_cl_util=>boolean_abap_2_json( expandable ) )
( n = `expanded` v = z2ui5_cl_util=>boolean_abap_2_json( expanded ) )
( n = `stickyHeader` v = z2ui5_cl_util=>boolean_abap_2_json( stickyheader ) )
( n = `height` v = height )
( n = `headerText` v = headertext ) ) )->_ns_m( ).
@ -286,7 +286,7 @@ CLASS z2ui5_cl_ui5_m IMPLEMENTATION.
n = `IllustratedMessage`
t_p = VALUE #( ( n = `enableVerticalResponsiveness` v = enableverticalresponsiveness )
( n = `illustrationType` v = illustrationtype )
( n = `enableFormattedText` v = z2ui5_cl_util_func=>boolean_abap_2_json( enableformattedtext ) )
( n = `enableFormattedText` v = z2ui5_cl_util=>boolean_abap_2_json( enableformattedtext ) )
( n = `illustrationSize` v = illustrationsize )
( n = `description` v = description )
( n = `title` v = title )
@ -311,7 +311,7 @@ CLASS z2ui5_cl_ui5_m IMPLEMENTATION.
ns = `sap.m`
t_p = VALUE #( ( n = `press` v = press )
( n = `text` v = text )
( n = `enabled` v = z2ui5_cl_util_func=>boolean_abap_2_json( enabled ) )
( n = `enabled` v = z2ui5_cl_util=>boolean_abap_2_json( enabled ) )
( n = `icon` v = icon )
( n = `type` v = type )
( n = `tooltip` v = tooltip ) ) ).
@ -323,7 +323,7 @@ CLASS z2ui5_cl_ui5_m IMPLEMENTATION.
t_p = VALUE #( ( n = `buttonMode` v = buttonmode )
( n = `defaultAction` v = defaultaction )
( n = `text` v = text )
( n = `enabled` v = z2ui5_cl_util_func=>boolean_abap_2_json( enabled ) )
( n = `enabled` v = z2ui5_cl_util=>boolean_abap_2_json( enabled ) )
( n = `icon` v = icon )
( n = `type` v = type )
( n = `tooltip` v = tooltip ) ) )->_ns_m( ).
@ -335,7 +335,7 @@ CLASS z2ui5_cl_ui5_m IMPLEMENTATION.
ns = `sap.m`
t_p = VALUE #( ( n = `press` v = press )
( n = `text` v = text )
( n = `enabled` v = z2ui5_cl_util_func=>boolean_abap_2_json( enabled ) )
( n = `enabled` v = z2ui5_cl_util=>boolean_abap_2_json( enabled ) )
( n = `icon` v = icon )
( n = `type` v = type )
( n = `tooltip` v = tooltip ) ) ).
@ -364,13 +364,13 @@ CLASS z2ui5_cl_ui5_m IMPLEMENTATION.
( n = `width` v = width )
( n = `height` v = height )
( n = `alignItems` v = alignitems )
( n = `fitContainer` v = z2ui5_cl_util_func=>boolean_abap_2_json( fitcontainer ) )
( n = `fitContainer` v = z2ui5_cl_util=>boolean_abap_2_json( fitcontainer ) )
( n = `justifyContent` v = justifycontent )
( n = `wrap` v = wrap )
( n = `direction` v = direction )
( n = `alignContent` v = aligncontent )
( n = `backgroundDesign` v = backgrounddesign )
( n = `displayInline` v = z2ui5_cl_util_func=>boolean_abap_2_json( displayinline ) )
( n = `displayInline` v = z2ui5_cl_util=>boolean_abap_2_json( displayinline ) )
( n = `visible` v = visible ) ) )->_ns_m( ).
ENDMETHOD.
@ -380,7 +380,7 @@ CLASS z2ui5_cl_ui5_m IMPLEMENTATION.
ns = `sap.m`
t_p = VALUE #( ( n = `text` v = text )
( n = `type` v = type )
( n = `showIcon` v = z2ui5_cl_util_func=>boolean_abap_2_json( showicon ) )
( n = `showIcon` v = z2ui5_cl_util=>boolean_abap_2_json( showicon ) )
( n = `class` v = class ) ) ).
ENDMETHOD.
@ -396,7 +396,7 @@ CLASS z2ui5_cl_ui5_m IMPLEMENTATION.
( n = `textDirection` v = textdirection )
( n = `width` v = width )
( n = `id` v = id )
( n = `wrapping` v = z2ui5_cl_util_func=>boolean_abap_2_json( wrapping ) )
( n = `wrapping` v = z2ui5_cl_util=>boolean_abap_2_json( wrapping ) )
( n = `wrappingType` v = wrappingtype )
( n = `class` v = class ) ) ).
ENDMETHOD.

View File

@ -48,7 +48,7 @@ CLASS z2ui5_cl_ui5_suite IMPLEMENTATION.
result = _add( n = `InteractiveDonutChart`
ns = `sap.suite.ui.microchart`
t_p = VALUE #( ( n = `selectionChanged` v = selectionchanged )
( n = `showError` v = z2ui5_cl_util_func=>boolean_abap_2_json( showerror ) )
( n = `showError` v = z2ui5_cl_util=>boolean_abap_2_json( showerror ) )
( n = `errorMessageTitle` v = errormessagetitle )
( n = `errorMessage` v = errormessage )
( n = `displayedSegments` v = displayedsegments )

View File

@ -54,14 +54,14 @@ CLASS z2ui5_cl_app_search_apps IMPLEMENTATION.
IF check_initialized = abap_false.
check_initialized = abap_true.
z2ui5_cl_util_func=>db_load_by_handle(
z2ui5_cl_util=>db_load_by_handle(
EXPORTING
uname = sy-uname
handle = 'z2ui5_cl_app_search_apps'
IMPORTING
result = mt_favs ).
mt_apps = VALUE #( FOR row IN z2ui5_cl_util_func=>rtti_get_classes_impl_intf( `Z2UI5_IF_APP` )
mt_apps = VALUE #( FOR row IN z2ui5_cl_util=>rtti_get_classes_impl_intf( `Z2UI5_IF_APP` )
( name = row ) ).
search( ).
view_display( client ).
@ -84,7 +84,7 @@ CLASS z2ui5_cl_app_search_apps IMPLEMENTATION.
INSERT VALUE #( name = lv_app ) INTO TABLE mt_favs.
z2ui5_cl_util_func=>db_save(
z2ui5_cl_util=>db_save(
uname = sy-uname
handle = 'z2ui5_cl_app_search_apps'
data = mt_favs ).

View File

@ -95,7 +95,7 @@ CLASS lcl_github IMPLEMENTATION.
LOOP AT lr_repo->t_app REFERENCE INTO DATA(lr_app).
IF z2ui5_cl_util_func=>rtti_check_class_exists( lr_app->classname ).
IF z2ui5_cl_util=>rtti_check_class_exists( lr_app->classname ).
lr_repo->check_installed = abap_true.
ENDIF.
EXIT.

View File

@ -20,10 +20,7 @@ CLASS z2ui5_cl_popup_file_download DEFINITION
DATA mv_name TYPE string.
DATA mv_type TYPE string VALUE `data:text/csv;base64,`.
DATA mv_size TYPE string.
DATA mv_value TYPE string.
DATA mv_check_download TYPE abap_bool.
METHODS result
@ -78,7 +75,7 @@ CLASS Z2UI5_CL_POPUP_FILE_DOWNLOAD IMPLEMENTATION.
)->content( ).
IF mv_check_download = abap_true.
DATA(lv_base64) = z2ui5_cl_util_func=>conv_decode_x_base64( mv_value ).
DATA(lv_base64) = z2ui5_cl_util=>conv_decode_x_base64( mv_value ).
popup->_generic( ns = `html`
name = `iframe`
t_prop = VALUE #( ( n = `src` v = mv_type && lv_base64 ) ( n = `hidden` v = `hidden` ) ) ).

View File

@ -116,8 +116,8 @@ CLASS z2ui5_cl_popup_file_upload IMPLEMENTATION.
SPLIT mv_value AT `;` INTO DATA(lv_dummy) DATA(lv_data).
SPLIT lv_data AT `,` INTO lv_dummy lv_data.
DATA(lv_data2) = z2ui5_cl_util_func=>conv_decode_x_base64( lv_data ).
ms_result-value = z2ui5_cl_util_func=>conv_get_string_by_xstring( lv_data2 ).
DATA(lv_data2) = z2ui5_cl_util=>conv_decode_x_base64( lv_data ).
ms_result-value = z2ui5_cl_util=>conv_get_string_by_xstring( lv_data2 ).
check_confirm_enabled = abap_true.

View File

@ -18,13 +18,13 @@ CLASS z2ui5_cl_popup_get_range DEFINITION
CLASS-METHODS factory
IMPORTING
t_range TYPE z2ui5_cl_util_func=>ty_t_range OPTIONAL
t_range TYPE z2ui5_cl_util=>ty_t_range OPTIONAL
RETURNING
VALUE(r_result) TYPE REF TO z2ui5_cl_popup_get_range.
TYPES:
BEGIN OF ty_s_result,
t_range TYPE z2ui5_cl_util_func=>ty_t_range,
t_range TYPE z2ui5_cl_util=>ty_t_range,
check_confirmed TYPE abap_bool,
END OF ty_s_result.
DATA ms_result TYPE ty_s_result.
@ -85,7 +85,7 @@ CLASS z2ui5_cl_popup_get_range IMPLEMENTATION.
grid->combobox(
selectedkey = `{OPTION}`
items = client->_bind_local( z2ui5_cl_util_func=>filter_get_token_range_mapping( ) )
items = client->_bind_local( z2ui5_cl_util=>filter_get_token_range_mapping( ) )
)->item(
key = '{N}'
text = '{N}'
@ -134,7 +134,7 @@ CLASS z2ui5_cl_popup_get_range IMPLEMENTATION.
low = lr_product->low
high = lr_product->high
option = lr_product->option
key = z2ui5_cl_util_func=>uuid_get_c32( )
key = z2ui5_cl_util=>uuid_get_c32( )
) INTO TABLE mt_filter.
ENDLOOP.
@ -167,7 +167,7 @@ CLASS z2ui5_cl_popup_get_range IMPLEMENTATION.
client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ).
WHEN `POPUP_ADD`.
INSERT VALUE #( key = z2ui5_cl_util_func=>uuid_get_c32( ) ) INTO TABLE mt_filter.
INSERT VALUE #( key = z2ui5_cl_util=>uuid_get_c32( ) ) INTO TABLE mt_filter.
client->popup_model_update( ).
WHEN `POPUP_DELETE`.

View File

@ -7,13 +7,13 @@ CLASS z2ui5_cl_popup_get_range_multi DEFINITION
CLASS-METHODS factory
IMPORTING
val TYPE z2ui5_cl_util_func=>ty_t_filter_multi
val TYPE z2ui5_cl_util=>ty_t_filter_multi
RETURNING
VALUE(r_result) TYPE REF TO z2ui5_cl_popup_get_range_multi.
TYPES:
BEGIN OF ty_s_result,
t_sql TYPE z2ui5_cl_util_func=>ty_t_filter_multi,
t_sql TYPE z2ui5_cl_util=>ty_t_filter_multi,
check_confirmed TYPE abap_bool,
END OF ty_s_result.
@ -111,7 +111,7 @@ CLASS z2ui5_cl_popup_get_range_multi IMPLEMENTATION.
IF lo_popup->result( )-check_confirmed = abap_true.
ASSIGN ms_result-t_sql[ name = mv_popup_name ] TO FIELD-SYMBOL(<tab>).
<tab>-t_range = lo_popup->result( )-t_range.
<tab>-t_token = z2ui5_cl_util_func=>filter_get_token_t_by_range_t( <tab>-t_range ).
<tab>-t_token = z2ui5_cl_util=>filter_get_token_t_by_range_t( <tab>-t_range ).
ENDIF.
popup_display( ).

View File

@ -45,7 +45,7 @@ CLASS z2ui5_cl_popup_itab_json_dl IMPLEMENTATION.
METHOD factory.
r_result = NEW #( ).
r_result->mr_itab = z2ui5_cl_util_func=>conv_copy_ref_data( itab ).
r_result->mr_itab = z2ui5_cl_util=>conv_copy_ref_data( itab ).
r_result->title = i_title.
r_result->icon = i_icon.
@ -70,7 +70,7 @@ CLASS z2ui5_cl_popup_itab_json_dl IMPLEMENTATION.
TRY.
IF z2ui5_cl_util_func=>rtti_check_class_exists( `z2ui5_dbt_cl_app_03` ) = abap_false.
IF z2ui5_cl_util=>rtti_check_class_exists( `z2ui5_dbt_cl_app_03` ) = abap_false.
DATA(lv_link) = `https://github.com/oblomov-dev/a2UI5-db_table_loader`.
DATA(lv_text) = `<p>Please install the open-source project a2UI5-db_table_loader and try again: <a href="` &&

View File

@ -59,7 +59,7 @@ CLASS Z2UI5_CL_POPUP_LAYOUT IMPLEMENTATION.
DATA(tab) = popup->table(
items = client->_bind_edit( ms_result-t_layout ) ).
DATA(lt_comp) = z2ui5_cl_util_func=>rtti_get_t_comp_by_data( ms_result-t_layout ).
DATA(lt_comp) = z2ui5_cl_util=>rtti_get_t_comp_by_data( ms_result-t_layout ).
DATA(list) = tab->column_list_item( valign = `Top` ).
DATA(cells) = list->cells( ).
@ -97,7 +97,7 @@ CLASS Z2UI5_CL_POPUP_LAYOUT IMPLEMENTATION.
IF t_layout IS INITIAL.
DATA(lt_comp) = z2ui5_cl_util_func=>rtti_get_t_comp_by_data( i_tab ).
DATA(lt_comp) = z2ui5_cl_util=>rtti_get_t_comp_by_data( i_tab ).
LOOP AT lt_comp REFERENCE INTO DATA(lr_comp).
INSERT VALUE #( name = lr_comp->name visible = abap_true mergeduplicates = abap_false )
INTO TABLE r_result->ms_result-t_layout.

View File

@ -61,7 +61,7 @@ CLASS z2ui5_cl_popup_table IMPLEMENTATION.
* )->button( text = `Display Popup` press = client->_event( `BUTTON_START` ) type = `Emphasized`
* )->get_parent( )->get_parent( ).
DATA(lt_comp) = z2ui5_cl_util_func=>rtti_get_t_comp_by_data( <tab_out> ).
DATA(lt_comp) = z2ui5_cl_util=>rtti_get_t_comp_by_data( <tab_out> ).
DATA(list) = tab->column_list_item( valign = `Top` ).
DATA(cells) = list->cells( ).

View File

@ -75,7 +75,7 @@ CLASS z2ui5_cl_popup_to_select IMPLEMENTATION.
items = `{path:'`
&& client->_bind_edit( val = <tab_out> path = abap_true )
&& `', sorter : { path : '` && to_upper( sort_field ) && `', descending : `
&& z2ui5_cl_util_func=>boolean_abap_2_json( me->descending )
&& z2ui5_cl_util=>boolean_abap_2_json( me->descending )
&& ` } }`
cancel = client->_event( 'CANCEL' )
search = client->_event( val = 'SEARCH' t_arg = VALUE #( ( `${$parameters>/value}` ) ( `${$parameters>/clearButtonPressed}` ) ) )
@ -84,7 +84,7 @@ CLASS z2ui5_cl_popup_to_select IMPLEMENTATION.
title = title
).
DATA(lt_comp) = z2ui5_cl_util_func=>rtti_get_t_comp_by_data( <tab_out> ).
DATA(lt_comp) = z2ui5_cl_util=>rtti_get_t_comp_by_data( <tab_out> ).
DELETE lt_comp WHERE name = 'ZZSELKZ'.
DATA(list) = tab->column_list_item( valign = `Top`
@ -99,7 +99,7 @@ CLASS z2ui5_cl_popup_to_select IMPLEMENTATION.
LOOP AT lt_comp INTO ls_comp.
DATA(text) = COND #(
LET data_element_name = substring_after( val = CAST cl_abap_elemdescr( ls_comp-type )->absolute_name sub = '\TYPE=' )
medium_label = z2ui5_cl_util_func=>rtti_get_data_element_texts( data_element_name )-medium IN
medium_label = z2ui5_cl_util=>rtti_get_data_element_texts( data_element_name )-medium IN
WHEN medium_label IS NOT INITIAL
THEN medium_label
ELSE ls_comp-name ).

View File

@ -27,7 +27,7 @@ CLASS z2ui5_cl_http_handler IMPLEMENTATION.
METHOD http_get.
DATA(lo_get) = NEW z2ui5_cl_fw_http_get( val ).
DATA(lo_get) = NEW z2ui5_cl_core_http_get( val ).
result = lo_get->main( ).
ENDMETHOD.
@ -35,7 +35,7 @@ CLASS z2ui5_cl_http_handler IMPLEMENTATION.
METHOD http_post.
DATA(lo_post) = NEW z2ui5_cl_fw_http_post( val ).
DATA(lo_post) = NEW z2ui5_cl_core_http_post( val ).
result = lo_post->main( ).
ENDMETHOD.