Refactoring (#884)

* npm version

* update npm

* refactoring

* Update abaplint.jsonc

* update

* update

* update

* update

* update

* update

* update

* update

* update

* update

* update

* update

* update

* update

* update

* update

* update

* update

* update

* update

* refactoring and unit tests

* reafactoring load_by_app

* update

* update

* update

* update

* update

* update

* update

* update

* update

* update

* update

* update

* update

* update
This commit is contained in:
oblomov 2024-02-14 08:59:10 +01:00 committed by GitHub
parent 0b54da3a3f
commit ee36617e24
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
20 changed files with 1595 additions and 1427 deletions

58
package-lock.json generated
View File

@ -9,16 +9,16 @@
"version": "1.0.0",
"license": "MIT",
"devDependencies": {
"@abaplint/cli": "^2.105.15",
"@abaplint/cli": "^2.105.16",
"@abaplint/database-sqlite": "^2.7.144",
"@abaplint/runtime": "^2.7.154",
"@abaplint/transpiler-cli": "^2.7.154"
"@abaplint/runtime": "^2.7.156",
"@abaplint/transpiler-cli": "^2.7.156"
}
},
"node_modules/@abaplint/cli": {
"version": "2.105.15",
"resolved": "https://registry.npmjs.org/@abaplint/cli/-/cli-2.105.15.tgz",
"integrity": "sha512-HTGiHC/jJHhHpv3GX8DC2lmm6xCYYNP5jPAhSEcmgulZx5v4nrn8TEX+qyPUJa9nc+8C3q+vAPFah0SeKyP2AA==",
"version": "2.105.16",
"resolved": "https://registry.npmjs.org/@abaplint/cli/-/cli-2.105.16.tgz",
"integrity": "sha512-EalQp5oL71AOe2gkX2l7ekvI2aaoVl6XgfVHtbYBWy5xGaDc7CICH48uPkRv7EU6BMO79+BioECBEwLl9wXWqQ==",
"dev": true,
"bin": {
"abaplint": "abaplint"
@ -40,21 +40,21 @@
}
},
"node_modules/@abaplint/runtime": {
"version": "2.7.154",
"resolved": "https://registry.npmjs.org/@abaplint/runtime/-/runtime-2.7.154.tgz",
"integrity": "sha512-/oiTLcCkZOCQIez9X8I42OPsCQiP/FXGwnyS/paUfAr32m5f3YTcwZW0X0YMPlc4q5JvtjEtd8cCgJ8olV6sxA==",
"version": "2.7.156",
"resolved": "https://registry.npmjs.org/@abaplint/runtime/-/runtime-2.7.156.tgz",
"integrity": "sha512-VfqLkHJ2DZ+ShuVqCxu2UeSnBBtCRwS54kVnyVHTDEmcbA7CGYhmHVoO04778IqONlqwjvfL/ZW1G9+eNMaqSA==",
"dev": true,
"dependencies": {
"temporal-polyfill": "^0.2.0"
"temporal-polyfill": "^0.2.1"
},
"funding": {
"url": "https://github.com/sponsors/larshp"
}
},
"node_modules/@abaplint/transpiler-cli": {
"version": "2.7.154",
"resolved": "https://registry.npmjs.org/@abaplint/transpiler-cli/-/transpiler-cli-2.7.154.tgz",
"integrity": "sha512-GqqdmjtWd6yM7pFBbxFzj48kel91aO5pogTTGxb1FAtJVeczL4xOddUVo+2YCvXQFMC5xyu52DVP6KP/9HCXeA==",
"version": "2.7.156",
"resolved": "https://registry.npmjs.org/@abaplint/transpiler-cli/-/transpiler-cli-2.7.156.tgz",
"integrity": "sha512-QTNFiZNU6fCY9UOuVOHo9mHBWC+oN+QuHj/u+Re9XchbnvPRspP/q7CPKyh7uM0cxNkaKIOruFJV2haDRVqAbg==",
"dev": true,
"bin": {
"abap_transpile": "abap_transpile"
@ -70,9 +70,9 @@
"dev": true
},
"node_modules/temporal-polyfill": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/temporal-polyfill/-/temporal-polyfill-0.2.0.tgz",
"integrity": "sha512-ra5tfISsVwUlDk9fhvEiIuvfBshV7jDtHYxmC8ACLIVV91MYoVlOBE1RpIrDjqGTYkCrZf0mWhgAW9XSOVPuGw==",
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/temporal-polyfill/-/temporal-polyfill-0.2.1.tgz",
"integrity": "sha512-JaCnPrUY0NkisdARpjbYIZ1P1Nt/Bhe7gRxEcboKJZnMkjtjLnmpDjQ8jM6mtpm/KUt4B3ijkkphlX2wKybX1g==",
"dev": true,
"dependencies": {
"temporal-spec": "^0.2.0"
@ -87,9 +87,9 @@
},
"dependencies": {
"@abaplint/cli": {
"version": "2.105.15",
"resolved": "https://registry.npmjs.org/@abaplint/cli/-/cli-2.105.15.tgz",
"integrity": "sha512-HTGiHC/jJHhHpv3GX8DC2lmm6xCYYNP5jPAhSEcmgulZx5v4nrn8TEX+qyPUJa9nc+8C3q+vAPFah0SeKyP2AA==",
"version": "2.105.16",
"resolved": "https://registry.npmjs.org/@abaplint/cli/-/cli-2.105.16.tgz",
"integrity": "sha512-EalQp5oL71AOe2gkX2l7ekvI2aaoVl6XgfVHtbYBWy5xGaDc7CICH48uPkRv7EU6BMO79+BioECBEwLl9wXWqQ==",
"dev": true
},
"@abaplint/database-sqlite": {
@ -102,18 +102,18 @@
}
},
"@abaplint/runtime": {
"version": "2.7.154",
"resolved": "https://registry.npmjs.org/@abaplint/runtime/-/runtime-2.7.154.tgz",
"integrity": "sha512-/oiTLcCkZOCQIez9X8I42OPsCQiP/FXGwnyS/paUfAr32m5f3YTcwZW0X0YMPlc4q5JvtjEtd8cCgJ8olV6sxA==",
"version": "2.7.156",
"resolved": "https://registry.npmjs.org/@abaplint/runtime/-/runtime-2.7.156.tgz",
"integrity": "sha512-VfqLkHJ2DZ+ShuVqCxu2UeSnBBtCRwS54kVnyVHTDEmcbA7CGYhmHVoO04778IqONlqwjvfL/ZW1G9+eNMaqSA==",
"dev": true,
"requires": {
"temporal-polyfill": "^0.2.0"
"temporal-polyfill": "^0.2.1"
}
},
"@abaplint/transpiler-cli": {
"version": "2.7.154",
"resolved": "https://registry.npmjs.org/@abaplint/transpiler-cli/-/transpiler-cli-2.7.154.tgz",
"integrity": "sha512-GqqdmjtWd6yM7pFBbxFzj48kel91aO5pogTTGxb1FAtJVeczL4xOddUVo+2YCvXQFMC5xyu52DVP6KP/9HCXeA==",
"version": "2.7.156",
"resolved": "https://registry.npmjs.org/@abaplint/transpiler-cli/-/transpiler-cli-2.7.156.tgz",
"integrity": "sha512-QTNFiZNU6fCY9UOuVOHo9mHBWC+oN+QuHj/u+Re9XchbnvPRspP/q7CPKyh7uM0cxNkaKIOruFJV2haDRVqAbg==",
"dev": true
},
"sql.js": {
@ -123,9 +123,9 @@
"dev": true
},
"temporal-polyfill": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/temporal-polyfill/-/temporal-polyfill-0.2.0.tgz",
"integrity": "sha512-ra5tfISsVwUlDk9fhvEiIuvfBshV7jDtHYxmC8ACLIVV91MYoVlOBE1RpIrDjqGTYkCrZf0mWhgAW9XSOVPuGw==",
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/temporal-polyfill/-/temporal-polyfill-0.2.1.tgz",
"integrity": "sha512-JaCnPrUY0NkisdARpjbYIZ1P1Nt/Bhe7gRxEcboKJZnMkjtjLnmpDjQ8jM6mtpm/KUt4B3ijkkphlX2wKybX1g==",
"dev": true,
"requires": {
"temporal-spec": "^0.2.0"

View File

@ -19,9 +19,9 @@
},
"homepage": "https://github.com/abap2UI5/abap2UI5#readme",
"devDependencies": {
"@abaplint/cli": "^2.105.15",
"@abaplint/cli": "^2.105.16",
"@abaplint/database-sqlite": "^2.7.144",
"@abaplint/runtime": "^2.7.154",
"@abaplint/transpiler-cli": "^2.7.154"
"@abaplint/runtime": "^2.7.156",
"@abaplint/transpiler-cli": "^2.7.156"
}
}

View File

@ -67,7 +67,7 @@ CLASS z2ui5_cl_util_api DEFINITION
IMPORTING
val TYPE any
RETURNING
VALUE(result) TYPE REF TO object.
VALUE(result) TYPE REF TO data.
CLASS-METHODS conv_get_as_data_ref
IMPORTING
@ -432,7 +432,6 @@ CLASS z2ui5_cl_util_api IMPLEMENTATION.
ENDMETHOD.
METHOD conv_copy_ref_data.
FIELD-SYMBOLS <from> TYPE data.
@ -731,10 +730,12 @@ CLASS z2ui5_cl_util_api IMPLEMENTATION.
METHOD rtti_check_ref_data.
TRY.
cl_abap_typedescr=>describe_by_data_ref( val ).
DATA(lo_typdescr) = cl_abap_typedescr=>describe_by_data( val ).
DATA(lo_ref) = CAST cl_abap_refdescr( lo_typdescr ) ##NEEDED.
result = abap_true.
CATCH cx_root.
ENDTRY.
ENDMETHOD.

File diff suppressed because it is too large Load Diff

View File

@ -197,7 +197,12 @@ CLASS z2ui5_cl_core_bind_srv IMPLEMENTATION.
ms_config = config.
mv_type = type.
mr_attri = mo_app->attri_get_by_data( val ).
DATA(lo_model) = NEW z2ui5_cl_core_model_srv(
attri = REF #( mo_app->mt_attri )
app = mo_app->mo_app ).
mr_attri = lo_model->search_a_dissolve_attribute( val ).
IF mr_attri->bind_type IS NOT INITIAL.
check_raise_existing( ).
@ -244,24 +249,25 @@ CLASS z2ui5_cl_core_bind_srv IMPLEMENTATION.
METHOD main_local.
TRY.
DATA(lo_json) = CAST z2ui5_if_ajson( z2ui5_cl_ajson=>new( ) ).
lo_json->set( iv_path = `/` iv_val = val ).
IF config-custom_mapper IS BOUND.
DATA(ajson) = CAST z2ui5_if_ajson( z2ui5_cl_ajson=>create_empty( ii_custom_mapping = config-custom_mapper ) ).
lo_json = lo_json->map( config-custom_mapper ).
ELSE.
ajson = CAST z2ui5_if_ajson( z2ui5_cl_ajson=>create_empty( ii_custom_mapping = z2ui5_cl_ajson_mapping=>create_upper_case( ) ) ).
lo_json = lo_json->map( 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 ).
lo_json = lo_json->filter( config-custom_filter ).
ELSE.
ajson = ajson->filter( z2ui5_cl_ajson_filter_lib=>create_empty_filter( ) ).
lo_json = lo_json->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
json_bind_local = lo_json
bind_type = z2ui5_if_core_types=>cs_bind_type-one_time )
INTO TABLE mo_app->mt_attri.

View File

@ -1,327 +1,374 @@
*
*CLASS ltcl_test_bind DEFINITION DEFERRED.
*CLASS z2ui5_cl_core_bind_srv DEFINITION LOCAL FRIENDS ltcl_test_bind.
*
*CLASS ltcl_test_app 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 ##NEEDED.
* DATA mv_value TYPE string ##NEEDED.
* DATA mr_value TYPE REF TO data ##NEEDED.
* DATA mr_struc TYPE REF TO s_01 ##NEEDED.
* DATA mo_app TYPE REF TO ltcl_test_bind ##NEEDED.
*
* DATA xx TYPE string.
*ENDCLASS.
*
*CLASS ltcl_test_bind DEFINITION FINAL FOR TESTING
* DURATION MEDIUM
* RISK LEVEL HARMLESS.
*
* PUBLIC SECTION.
* PROTECTED SECTION.
* PRIVATE SECTION.
* METHODS test_one_way FOR TESTING RAISING cx_static_check.
* METHODS test_one_way_w_x_error FOR TESTING RAISING cx_static_check.
* METHODS test_error_diff FOR TESTING RAISING cx_static_check.
* METHODS test_two_way FOR TESTING RAISING cx_static_check.
*
*ENDCLASS.
*
*CLASS ltcl_test_bind IMPLEMENTATION.
*
* METHOD test_one_way_w_x_error.
*
* DATA(lo_app_client) = NEW ltcl_test_app( ).
* DATA(lo_app) = NEW z2ui5_cl_core_app( ).
* lo_app->mo_app = lo_app_client.
*
* DATA(lo_bind) = NEW z2ui5_cl_core_bind_srv( lo_app ).
*
* TRY.
* lo_bind->main(
* val = REF #( lo_app_client->xx )
* type = z2ui5_if_core_types=>cs_bind_type-one_way ).
*
* cl_abap_unit_assert=>abort( ).
*
* CATCH cx_root.
* ENDTRY.
*
* ENDMETHOD.
*
* METHOD test_one_way.
*
* DATA(lo_app_client) = NEW ltcl_test_app( ).
* DATA(lo_app) = NEW z2ui5_cl_core_app( ).
* lo_app->mo_app = lo_app_client.
*
* DATA(lo_bind) = NEW z2ui5_cl_core_bind_srv( lo_app ).
*
* DATA(lv_bind) = lo_bind->main(
* val = REF #( lo_app_client->mv_value )
* type = z2ui5_if_core_types=>cs_bind_type-one_way ).
*
* cl_abap_unit_assert=>assert_equals(
* act = lv_bind
* exp = `{/MV_VALUE}` ).
*
* cl_abap_unit_assert=>assert_not_initial( lv_bind ).
*
* ENDMETHOD.
*
* METHOD test_error_diff.
*
* DATA(lo_app_client) = NEW ltcl_test_app( ).
* DATA(lo_app) = NEW z2ui5_cl_core_app( ).
* lo_app->mo_app = lo_app_client.
*
* DATA(lo_bind) = NEW z2ui5_cl_core_bind_srv( lo_app ).
*
* lo_bind->main(
* val = REF #( lo_app_client->mv_value )
* type = z2ui5_if_core_types=>cs_bind_type-one_way ).
*
* TRY.
* lo_bind->main(
* val = REF #( lo_app_client->mv_value )
* type = z2ui5_if_core_types=>cs_bind_type-two_way ).
*
* cl_abap_unit_assert=>abort( ).
*
* CATCH cx_root.
* ENDTRY.
*
* ENDMETHOD.
*
*
* METHOD test_two_way.
*
* DATA(lo_app_client) = NEW ltcl_test_app( ).
* DATA(lo_app) = NEW z2ui5_cl_core_app( ).
* lo_app->mo_app = lo_app_client.
*
* DATA(lo_bind) = NEW z2ui5_cl_core_bind_srv( lo_app ).
*
* DATA(lv_bind) = lo_bind->main(
* val = REF #( lo_app_client->mv_value )
* type = z2ui5_if_core_types=>cs_bind_type-two_way ).
*
* DATA(lv_bind2) = lo_bind->main(
* val = REF #( lo_app_client->mv_value )
* type = z2ui5_if_core_types=>cs_bind_type-two_way ).
*
* cl_abap_unit_assert=>assert_equals(
* act = lv_bind
* exp = lv_bind2 ).
*
* cl_abap_unit_assert=>assert_not_initial( lv_bind ).
*
* 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_test_app) = NEW ltcl_test_main_structure( ).
* DATA(lo_app) = NEW z2ui5_cl_core_app( ).
* lo_app->mo_app = lo_test_app.
*
* DATA(lo_bind) = NEW z2ui5_cl_core_bind_srv( lo_app ).
* DATA(lv_result) = lo_bind->main(
* val = REF #( lo_test_app->ms_struc-input )
* type = z2ui5_if_core_types=>cs_bind_type-one_way ).
*
* cl_abap_unit_assert=>assert_equals(
* act = lv_result
* exp = `{/MS_STRUC/INPUT}` ).
*
* lv_result = lo_bind->main(
* val = REF #( lo_test_app->ms_struc-input )
* config = VALUE #( path_only = abap_true )
* type = z2ui5_if_core_types=>cs_bind_type-one_way ).
*
* cl_abap_unit_assert=>assert_equals(
* act = lv_result
* exp = `/MS_STRUC/INPUT` ).
*
* ENDMETHOD.
*
* METHOD test_one_way_lev2.
*
* DATA(lo_test_app) = NEW ltcl_test_main_structure( ).
* DATA(lo_app) = NEW z2ui5_cl_core_app( ).
* lo_app->mo_app = lo_test_app.
*
* DATA(lo_bind) = NEW z2ui5_cl_core_bind_srv( lo_app ).
* DATA(lv_result) = lo_bind->main(
* val = REF #( lo_test_app->ms_struc-s_02-input )
* type = z2ui5_if_core_types=>cs_bind_type-one_way ).
*
* cl_abap_unit_assert=>assert_equals(
* act = lv_result
* exp = `{/MS_STRUC/S_02-INPUT}` ).
*
* ENDMETHOD.
*
* METHOD test_one_way_lev3.
*
* DATA(lo_test_app) = NEW ltcl_test_main_structure( ).
* DATA(lo_app) = NEW z2ui5_cl_core_app( ).
* lo_app->mo_app = lo_test_app.
*
* DATA(lo_bind) = NEW z2ui5_cl_core_bind_srv( lo_app ).
* DATA(lv_result) = lo_bind->main(
* val = REF #( lo_test_app->ms_struc-s_02-s_03-input )
* type = z2ui5_if_core_types=>cs_bind_type-one_way ).
*
* 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_test_app) = NEW ltcl_test_main_structure( ).
* DATA(lo_app) = NEW z2ui5_cl_core_app( ).
* lo_app->mo_app = lo_test_app.
*
* DATA(lo_bind) = NEW z2ui5_cl_core_bind_srv( lo_app ).
* DATA(lv_result) = lo_bind->main(
* val = REF #( lo_test_app->ms_struc-s_02-s_03-s_04-input )
* type = z2ui5_if_core_types=>cs_bind_type-one_way ).
*
* 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_object DEFINITION FINAL FOR TESTING
* DURATION MEDIUM
* RISK LEVEL HARMLESS.
*
* PUBLIC SECTION.
*
* DATA mo_obj TYPE REF TO ltcl_test_main_object.
* DATA mv_value TYPE string.
*
* 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_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_test_app) = NEW ltcl_test_main_object( ).
* lo_test_app->mo_obj = NEW #( ).
* lo_test_app->mo_obj->mv_value = `test`.
* DATA(lo_app) = NEW z2ui5_cl_core_app( ).
* lo_app->mo_app = lo_test_app.
*
* DATA(lo_bind) = NEW z2ui5_cl_core_bind_srv( lo_app ).
* DATA(lv_result) = lo_bind->main(
* val = REF #( lo_test_app->mo_obj->mv_value )
* type = z2ui5_if_core_types=>cs_bind_type-one_way ).
*
* cl_abap_unit_assert=>assert_equals(
* act = lv_result
* exp = `{/MO_OBJ/MV_VALUE}` ).
*
* ENDMETHOD.
*
* METHOD test_one_way_struc.
*
* DATA(lo_test_app) = NEW ltcl_test_main_object( ).
* lo_test_app->mo_obj = NEW #( ).
* DATA(lo_app) = NEW z2ui5_cl_core_app( ).
* lo_app->mo_app = lo_test_app.
*
* DATA(lo_bind) = NEW z2ui5_cl_core_bind_srv( lo_app ).
* DATA(lv_result) = lo_bind->main(
* val = REF #( lo_test_app->mo_obj->ms_struc-input )
* type = z2ui5_if_core_types=>cs_bind_type-one_way ).
*
* cl_abap_unit_assert=>assert_equals(
* act = lv_result
* exp = `{/MO_OBJ/MS_STRUC-INPUT}` ).
*
* ENDMETHOD.
*
*ENDCLASS.
CLASS ltcl_test_bind DEFINITION DEFERRED.
CLASS z2ui5_cl_core_bind_srv DEFINITION LOCAL FRIENDS ltcl_test_bind.
CLASS ltcl_test_app 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 ##NEEDED.
DATA mv_value TYPE string ##NEEDED.
DATA mr_value TYPE REF TO data ##NEEDED.
DATA mr_struc TYPE REF TO s_01 ##NEEDED.
DATA mo_app TYPE REF TO ltcl_test_bind ##NEEDED.
DATA xx TYPE string ##NEEDED.
METHODS constructor.
ENDCLASS.
CLASS ltcl_test_app IMPLEMENTATION.
METHOD constructor.
ENDMETHOD.
ENDCLASS.
CLASS ltcl_test_bind DEFINITION FINAL FOR TESTING
DURATION MEDIUM
RISK LEVEL HARMLESS.
PUBLIC SECTION.
PROTECTED SECTION.
PRIVATE SECTION.
METHODS test_one_way FOR TESTING RAISING cx_static_check.
METHODS test_one_way_w_x_error FOR TESTING RAISING cx_static_check.
METHODS test_error_diff FOR TESTING RAISING cx_static_check.
METHODS test_two_way FOR TESTING RAISING cx_static_check.
ENDCLASS.
CLASS ltcl_test_bind IMPLEMENTATION.
METHOD test_one_way_w_x_error.
IF sy-sysid = 'ABC'.
RETURN.
ENDIF.
DATA(lo_app_client) = NEW ltcl_test_app( ).
DATA(lo_app) = NEW z2ui5_cl_core_app( ).
lo_app->mo_app = lo_app_client.
DATA(lo_bind) = NEW z2ui5_cl_core_bind_srv( lo_app ).
TRY.
lo_bind->main(
val = REF #( lo_app_client->xx )
type = z2ui5_if_core_types=>cs_bind_type-one_way ).
cl_abap_unit_assert=>abort( ).
CATCH cx_root.
ENDTRY.
ENDMETHOD.
METHOD test_one_way.
IF sy-sysid = 'ABC'.
RETURN.
ENDIF.
DATA(lo_app_client) = NEW ltcl_test_app( ).
DATA(lo_app) = NEW z2ui5_cl_core_app( ).
lo_app->mo_app = lo_app_client.
DATA(lo_bind) = NEW z2ui5_cl_core_bind_srv( lo_app ).
DATA(lv_bind) = lo_bind->main(
val = REF #( lo_app_client->mv_value )
type = z2ui5_if_core_types=>cs_bind_type-one_way ).
cl_abap_unit_assert=>assert_equals(
act = lv_bind
exp = `{/MV_VALUE}` ).
ENDMETHOD.
METHOD test_error_diff.
IF sy-sysid = 'ABC'.
RETURN.
ENDIF.
DATA(lo_app_client) = NEW ltcl_test_app( ).
DATA(lo_app) = NEW z2ui5_cl_core_app( ).
lo_app->mo_app = lo_app_client.
DATA(lo_bind) = NEW z2ui5_cl_core_bind_srv( lo_app ).
lo_bind->main(
val = REF #( lo_app_client->mv_value )
type = z2ui5_if_core_types=>cs_bind_type-one_way ).
TRY.
lo_bind->main(
val = REF #( lo_app_client->mv_value )
type = z2ui5_if_core_types=>cs_bind_type-two_way ).
cl_abap_unit_assert=>abort( ).
CATCH cx_root.
ENDTRY.
ENDMETHOD.
METHOD test_two_way.
IF sy-sysid = 'ABC'.
RETURN.
ENDIF.
DATA(lo_app_client) = NEW ltcl_test_app( ).
DATA(lo_app) = NEW z2ui5_cl_core_app( ).
lo_app->mo_app = lo_app_client.
DATA(lo_bind) = NEW z2ui5_cl_core_bind_srv( lo_app ).
DATA(lv_bind) = lo_bind->main(
val = REF #( lo_app_client->mv_value )
type = z2ui5_if_core_types=>cs_bind_type-two_way ).
DATA(lv_bind2) = lo_bind->main(
val = REF #( lo_app_client->mv_value )
type = z2ui5_if_core_types=>cs_bind_type-two_way ).
cl_abap_unit_assert=>assert_equals(
act = lv_bind
exp = lv_bind2 ).
cl_abap_unit_assert=>assert_not_initial( lv_bind ).
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.
IF sy-sysid = 'ABC'.
RETURN.
ENDIF.
DATA(lo_test_app) = NEW ltcl_test_main_structure( ).
DATA(lo_app) = NEW z2ui5_cl_core_app( ).
lo_app->mo_app = lo_test_app.
DATA(lo_bind) = NEW z2ui5_cl_core_bind_srv( lo_app ).
DATA(lv_result) = lo_bind->main(
val = REF #( lo_test_app->ms_struc-input )
type = z2ui5_if_core_types=>cs_bind_type-one_way ).
cl_abap_unit_assert=>assert_equals(
act = lv_result
exp = `{/MS_STRUC/INPUT}` ).
lv_result = lo_bind->main(
val = REF #( lo_test_app->ms_struc-input )
config = VALUE #( path_only = abap_true )
type = z2ui5_if_core_types=>cs_bind_type-one_way ).
cl_abap_unit_assert=>assert_equals(
act = lv_result
exp = `/MS_STRUC/INPUT` ).
ENDMETHOD.
METHOD test_one_way_lev2.
IF sy-sysid = 'ABC'.
RETURN.
ENDIF.
DATA(lo_test_app) = NEW ltcl_test_main_structure( ).
DATA(lo_app) = NEW z2ui5_cl_core_app( ).
lo_app->mo_app = lo_test_app.
DATA(lo_bind) = NEW z2ui5_cl_core_bind_srv( lo_app ).
DATA(lv_result) = lo_bind->main(
val = REF #( lo_test_app->ms_struc-s_02-input )
type = z2ui5_if_core_types=>cs_bind_type-one_way ).
cl_abap_unit_assert=>assert_equals(
act = lv_result
exp = `{/MS_STRUC/S_02-INPUT}` ).
ENDMETHOD.
METHOD test_one_way_lev3.
IF sy-sysid = 'ABC'.
RETURN.
ENDIF.
DATA(lo_test_app) = NEW ltcl_test_main_structure( ).
DATA(lo_app) = NEW z2ui5_cl_core_app( ).
lo_app->mo_app = lo_test_app.
DATA(lo_bind) = NEW z2ui5_cl_core_bind_srv( lo_app ).
DATA(lv_result) = lo_bind->main(
val = REF #( lo_test_app->ms_struc-s_02-s_03-input )
type = z2ui5_if_core_types=>cs_bind_type-one_way ).
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.
IF sy-sysid = 'ABC'.
RETURN.
ENDIF.
DATA(lo_test_app) = NEW ltcl_test_main_structure( ).
DATA(lo_app) = NEW z2ui5_cl_core_app( ).
lo_app->mo_app = lo_test_app.
DATA(lo_bind) = NEW z2ui5_cl_core_bind_srv( lo_app ).
DATA(lv_result) = lo_bind->main(
val = REF #( lo_test_app->ms_struc-s_02-s_03-s_04-input )
type = z2ui5_if_core_types=>cs_bind_type-one_way ).
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_object DEFINITION FINAL FOR TESTING
DURATION MEDIUM
RISK LEVEL HARMLESS.
PUBLIC SECTION.
DATA mo_obj TYPE REF TO ltcl_test_main_object.
DATA mv_value TYPE string.
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_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.
IF sy-sysid = 'ABC'.
RETURN.
ENDIF.
DATA(lo_test_app) = NEW ltcl_test_main_object( ).
lo_test_app->mo_obj = NEW #( ).
lo_test_app->mo_obj->mv_value = `test`.
DATA(lo_app) = NEW z2ui5_cl_core_app( ).
lo_app->mo_app = lo_test_app.
DATA(lo_bind) = NEW z2ui5_cl_core_bind_srv( lo_app ).
DATA(lv_result) = lo_bind->main(
val = REF #( lo_test_app->mo_obj->mv_value )
type = z2ui5_if_core_types=>cs_bind_type-one_way ).
cl_abap_unit_assert=>assert_equals(
act = lv_result
exp = `{/MO_OBJ/MV_VALUE}` ).
ENDMETHOD.
METHOD test_one_way_struc.
IF sy-sysid = 'ABC'.
RETURN.
ENDIF.
DATA(lo_test_app) = NEW ltcl_test_main_object( ).
lo_test_app->mo_obj = NEW #( ).
DATA(lo_app) = NEW z2ui5_cl_core_app( ).
lo_app->mo_app = lo_test_app.
DATA(lo_bind) = NEW z2ui5_cl_core_bind_srv( lo_app ).
DATA(lv_result) = lo_bind->main(
val = REF #( lo_test_app->mo_obj->ms_struc-input )
type = z2ui5_if_core_types=>cs_bind_type-one_way ).
cl_abap_unit_assert=>assert_equals(
act = lv_result
exp = `{/MO_OBJ/MS_STRUC-INPUT}` ).
ENDMETHOD.
ENDCLASS.

View File

@ -4,7 +4,6 @@ CLASS ltcl_test DEFINITION FINAL FOR TESTING
PRIVATE SECTION.
METHODS request_json_to_abap FOR TESTING RAISING cx_static_check.
METHODS model_front_to_back FOR TESTING RAISING cx_static_check.
ENDCLASS.
@ -13,46 +12,35 @@ CLASS ltcl_test IMPLEMENTATION.
METHOD request_json_to_abap.
* DATA(lv_payload) = `{"EDIT":{"NAME":"test"},"ARGUMENTS":[],"S_FRONTEND":{"ID":"ID_NR","EDIT":{"NAME":"test"},"ORIGIN":"ORIGIN","PATHNAME":"PATHNAME","SEARCH":"SEARCH"` &&
* `,"VIEW":"MAIN","EVENT":"BUTTON_POST","T_EVENT_ARG":[]}}`.
*
* DATA(lo_mapper) = NEW z2ui5_cl_core_json_srv( ).
* DATA(ls_result) = lo_mapper->request_json_to_abap( lv_payload ).
*
* DATA(ls_exp) = VALUE z2ui5_if_core_types=>ty_s_http_request_post(
* s_frontend = VALUE #(
* id = `ID_NR`
* view = `MAIN`
* origin = `ORIGIN`
* pathname = `PATHNAME`
* search = `SEARCH`
* event = `BUTTON_POST`
* ) ).
*
* cl_abap_unit_assert=>assert_equals(
* act = ls_result-s_frontend
* exp = ls_exp-s_frontend ).
*
* DATA lt_tree TYPE z2ui5_if_ajson_types=>ty_nodes_ts.
* lt_tree = ls_result-o_model->mt_json_tree.
*
* cl_abap_unit_assert=>assert_equals(
* act = lt_tree[ name = `NAME` ]-value
* exp = `test` ).
*
* cl_abap_unit_assert=>assert_equals(
* act = lines( lt_tree )
* exp = 2 ).
DATA(lv_payload) = `{"XX":{"NAME":"test"},"S_FRONT":{"ID":"ID_NR","EDIT":{"NAME":"test"},"ORIGIN":"ORIGIN","PATHNAME":"PATHNAME","SEARCH":"SEARCH"` &&
`,"VIEW":"MAIN","EVENT":"BUTTON_POST","T_EVENT_ARG":[]}}`.
ENDMETHOD.
DATA(lo_mapper) = NEW z2ui5_cl_core_json_srv( ).
DATA(ls_result) = lo_mapper->request_json_to_abap( lv_payload ).
METHOD model_front_to_back.
DATA(ls_exp) = VALUE z2ui5_if_core_types=>ty_s_http_request_post(
s_front = VALUE #(
id = `ID_NR`
view = `MAIN`
origin = `ORIGIN`
pathname = `PATHNAME`
search = `SEARCH`
event = `BUTTON_POST` ) ).
* NEW z2ui5_cl_core_json_srv( )->model_front_to_back(
* viewname = `MAIN`
* app = lo_ap
* t_attri = lt_attri
* model = lo_ajson ).
cl_abap_unit_assert=>assert_equals(
act = ls_result-s_front
exp = ls_exp-s_front ).
DATA lt_tree TYPE z2ui5_if_ajson_types=>ty_nodes_ts.
lt_tree = ls_result-o_model->mt_json_tree.
cl_abap_unit_assert=>assert_equals(
act = lt_tree[ name = `NAME` ]-value
exp = `test` ).
cl_abap_unit_assert=>assert_equals(
act = lines( lt_tree )
exp = 3 ).
ENDMETHOD.

View File

@ -1,6 +1,5 @@
CLASS z2ui5_cl_core_model_srv DEFINITION
PUBLIC
FINAL
PUBLIC FINAL
CREATE PUBLIC.
PUBLIC SECTION.
@ -13,14 +12,22 @@ CLASS z2ui5_cl_core_model_srv DEFINITION
attri TYPE REF TO z2ui5_if_core_types=>ty_t_attri
app TYPE REF TO object.
METHODS dissolve.
METHODS attri_refs_update.
METHODS attri_before_save.
METHODS attri_after_load.
METHODS search_a_dissolve_attribute
IMPORTING
val TYPE REF TO data
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_core_types=>ty_s_attri.
PROTECTED SECTION.
METHODS dissolve.
METHODS dissolve_main.
METHODS dissolve_init.
METHODS attri_get_val_ref
IMPORTING
iv_path TYPE clike
@ -40,24 +47,26 @@ CLASS z2ui5_cl_core_model_srv DEFINITION
VALUE(result) TYPE z2ui5_if_core_types=>ty_t_attri.
METHODS diss_oref
IMPORTING ir_attri TYPE REF TO z2ui5_if_core_types=>ty_s_attri
RETURNING VALUE(result) TYPE z2ui5_if_core_types=>ty_t_attri.
METHODS search_attribute
IMPORTING
ir_attri TYPE REF TO z2ui5_if_core_types=>ty_s_attri
val TYPE REF TO data
RETURNING
VALUE(result) TYPE z2ui5_if_core_types=>ty_t_attri.
VALUE(result) TYPE REF TO z2ui5_if_core_types=>ty_s_attri.
METHODS dissolve_main.
METHODS dissolve_init.
PRIVATE SECTION.
METHODS get_new_attri
IMPORTING
name TYPE string
RETURNING
VALUE(result) TYPE z2ui5_if_core_types=>ty_s_attri.
ENDCLASS.
CLASS z2ui5_cl_core_model_srv IMPLEMENTATION.
METHOD attri_after_load.
LOOP AT mt_attri->* REFERENCE INTO DATA(lr_attri)
@ -65,8 +74,8 @@ CLASS z2ui5_cl_core_model_srv IMPLEMENTATION.
AND type_kind = cl_abap_classdescr=>typekind_dref.
lr_attri->r_ref = attri_get_val_ref( lr_attri->name ).
ASSIGN lr_attri->r_ref->* TO FIELD-SYMBOL(<val>).
z2ui5_cl_util=>xml_srtti_parse(
EXPORTING
rtti_data = lr_attri->data_rtti
@ -80,7 +89,6 @@ CLASS z2ui5_cl_core_model_srv IMPLEMENTATION.
ENDMETHOD.
METHOD attri_before_save.
LOOP AT mt_attri->* REFERENCE INTO DATA(lr_attri).
@ -103,15 +111,36 @@ CLASS z2ui5_cl_core_model_srv IMPLEMENTATION.
CLEAR <val>.
CLEAR <val_ref>.
CLEAR lr_attri->r_ref.
ENDLOOP.
ENDMETHOD.
METHOD search_a_dissolve_attribute.
result = search_attribute( val ).
IF result IS BOUND.
RETURN.
ENDIF.
DO 5 TIMES.
dissolve( ).
result = search_attribute( val ).
IF result IS BOUND.
RETURN.
ENDIF.
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 attri_get_val_ref.
FIELD-SYMBOLS <attri> TYPE any.
ASSIGN mo_app->(iv_path) TO <attri>.
ASSIGN mo_app->(iv_path) TO FIELD-SYMBOL(<attri>).
IF sy-subrc <> 0.
RAISE EXCEPTION TYPE z2ui5_cx_util_error
EXPORTING
@ -125,37 +154,39 @@ CLASS z2ui5_cl_core_model_srv IMPLEMENTATION.
ENDMETHOD.
METHOD attri_refs_update.
LOOP AT mt_attri->* REFERENCE INTO DATA(lr_attri)
WHERE bind_type <> z2ui5_if_core_types=>cs_bind_type-one_time.
lr_attri->r_ref = attri_get_val_ref( lr_attri->name ).
ENDLOOP.
ENDMETHOD.
METHOD constructor.
me->mt_attri = attri.
me->mo_app = app.
mt_attri = attri.
mo_app = app.
ENDMETHOD.
METHOD dissolve.
IF mt_attri->* IS INITIAL.
dissolve_init( ).
RETURN.
ENDIF.
dissolve_main( ).
ENDMETHOD.
METHOD dissolve_init.
DATA(ls_attri) = VALUE z2ui5_if_core_types=>ty_s_attri( r_ref = REF #( mo_app ) ).
DATA(lt_init) = diss_oref( REF #( ls_attri ) ).
INSERT LINES OF lt_init INTO TABLE mt_attri->*.
ENDMETHOD.
METHOD dissolve_main.
@ -186,52 +217,49 @@ CLASS z2ui5_cl_core_model_srv IMPLEMENTATION.
ENDCASE.
ENDLOOP.
INSERT LINES OF lt_attri_new INTO TABLE mt_attri->*.
ENDMETHOD.
METHOD diss_dref.
FIELD-SYMBOLS <deref> TYPE any.
ASSIGN ir_attri->r_ref->* TO <deref>.
IF <deref> IS INITIAL.
DATA(lr_ref) = z2ui5_cl_util=>unassign_data( ir_attri->r_ref ).
IF lr_ref IS INITIAL.
RETURN.
ENDIF.
DATA(ls_attri2) = VALUE z2ui5_if_core_types=>ty_s_attri( ).
ls_attri2-o_typedescr = cl_abap_datadescr=>describe_by_data_ref( <deref> ).
ls_attri2-o_typedescr = cl_abap_datadescr=>describe_by_data_ref( lr_ref ).
ls_attri2-type_kind = z2ui5_cl_util=>rtti_get_type_kind_by_descr( ls_attri2-o_typedescr ).
CASE ls_attri2-o_typedescr->type_kind.
WHEN cl_abap_datadescr=>typekind_struct1 OR
cl_abap_datadescr=>typekind_struct2.
WHEN cl_abap_datadescr=>typekind_struct1
OR cl_abap_datadescr=>typekind_struct2.
DATA(lt_attri) = diss_struc( ir_attri ).
INSERT LINES OF lt_attri INTO TABLE result.
WHEN OTHERS.
ls_attri2-name = ir_attri->name && `->*`.
ls_attri2-r_ref = attri_get_val_ref( ls_attri2-name ).
INSERT ls_attri2 INTO TABLE result.
ENDCASE.
ENDMETHOD.
METHOD diss_oref.
IF z2ui5_cl_util=>check_unassign_inital( ir_attri->r_ref ).
RETURN.
ENDIF.
DATA(lt_attri) = z2ui5_cl_util=>rtti_get_t_attri_by_oref(
z2ui5_cl_util=>unassign_object( ir_attri->r_ref ) ).
DATA(lv_name) = COND #( WHEN ir_attri->name IS NOT INITIAL THEN ir_attri->name && `->` ).
DATA(lr_ref) = z2ui5_cl_util=>unassign_object( ir_attri->r_ref ).
DATA(lt_attri) = z2ui5_cl_util=>rtti_get_t_attri_by_oref( lr_ref ).
LOOP AT lt_attri REFERENCE INTO DATA(lr_attri)
WHERE visibility = cl_abap_objectdescr=>public
@ -239,14 +267,8 @@ CLASS z2ui5_cl_core_model_srv IMPLEMENTATION.
AND is_constant = abap_false.
TRY.
DATA(lv_name) = COND #( WHEN ir_attri->name IS NOT INITIAL THEN ir_attri->name && `->` ).
lv_name = lv_name && lr_attri->name.
DATA(ls_attri2) = VALUE z2ui5_if_core_types=>ty_s_attri( ).
ls_attri2-name = lv_name.
ls_attri2-r_ref = attri_get_val_ref( ls_attri2-name ).
ls_attri2-o_typedescr = cl_abap_datadescr=>describe_by_data_ref( ls_attri2-r_ref ).
ls_attri2-type_kind = z2ui5_cl_util=>rtti_get_type_kind_by_descr( ls_attri2-o_typedescr ).
INSERT ls_attri2 INTO TABLE result.
DATA(ls_new) = get_new_attri( lv_name && lr_attri->name ).
INSERT ls_new INTO TABLE result.
CATCH cx_root.
ENDTRY.
@ -254,43 +276,51 @@ CLASS z2ui5_cl_core_model_srv IMPLEMENTATION.
ENDMETHOD.
METHOD diss_struc.
FIELD-SYMBOLS <any> TYPE any.
CASE ir_attri->type_kind.
WHEN cl_abap_typedescr=>typekind_struct1
OR cl_abap_typedescr=>typekind_struct2.
DATA(lv_name) = ir_attri->name && `-`.
ASSIGN ir_attri->r_ref TO <any>.
WHEN cl_abap_typedescr=>typekind_dref.
lv_name = ir_attri->name && `->`.
ASSIGN ir_attri->r_ref->* TO <any>.
ENDCASE.
IF ir_attri->type_kind = cl_abap_typedescr=>typekind_dref.
DATA(lv_name) = ir_attri->name && `->`.
DATA(lr_ref) = z2ui5_cl_util=>unassign_data( ir_attri->r_ref ).
ELSE.
lv_name = ir_attri->name && `-`.
lr_ref = ir_attri->r_ref.
ENDIF.
DATA(lt_attri) = z2ui5_cl_util=>rtti_get_t_attri_by_struc( <any> ).
DATA(lt_attri) = z2ui5_cl_util=>rtti_get_t_attri_by_struc( lr_ref ).
LOOP AT lt_attri INTO DATA(ls_attri).
DATA(ls_attri2) = VALUE z2ui5_if_core_types=>ty_s_attri( ).
ls_attri2-name = lv_name && ls_attri-name.
ls_attri2-r_ref = attri_get_val_ref( lv_name && ls_attri-name ).
ls_attri2-o_typedescr = cl_abap_datadescr=>describe_by_data_ref( ls_attri2-r_ref ).
ls_attri2-type_kind = z2ui5_cl_util=>rtti_get_type_kind_by_descr( ls_attri2-o_typedescr ).
INSERT ls_attri2 INTO TABLE result.
DATA(ls_new) = get_new_attri( lv_name && ls_attri-name ).
INSERT ls_new INTO TABLE result.
ENDLOOP.
ENDMETHOD.
METHOD dissolve_init.
METHOD search_attribute.
DATA(ls_attri) = VALUE z2ui5_if_core_types=>ty_s_attri( r_ref = REF #( mo_app ) ).
DATA(lt_init) = diss_oref( REF #( ls_attri ) ).
INSERT LINES OF lt_init INTO TABLE mt_attri->*.
* result = REF #( mt_attri->*[ r_ref = val ] OPTIONAL ).
LOOP AT mt_attri->* REFERENCE INTO DATA(lr_attri)
WHERE type_kind <> cl_abap_typedescr=>typekind_dref
AND type_kind <> cl_abap_typedescr=>typekind_oref.
IF lr_attri->r_ref = val.
result = lr_attri.
RETURN.
ENDIF.
ENDLOOP.
ENDMETHOD.
METHOD get_new_attri.
result = VALUE z2ui5_if_core_types=>ty_s_attri( ).
result-name = name.
result-r_ref = attri_get_val_ref( name ).
result-o_typedescr = cl_abap_datadescr=>describe_by_data_ref( result-r_ref ).
result-type_kind = z2ui5_cl_util=>rtti_get_type_kind_by_descr( result-o_typedescr ).
ENDMETHOD.
ENDCLASS.

View File

@ -34,25 +34,46 @@ CLASS ltcl_test_dissolve DEFINITION FINAL FOR TESTING
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.
METHODS test_ref FOR TESTING RAISING cx_static_check.
ENDCLASS.
CLASS ltcl_test_dissolve IMPLEMENTATION.
METHOD test_ref.
DATA(lo_app) = NEW ltcl_test_dissolve( ).
DATA lt_attri TYPE z2ui5_if_core_types=>ty_t_attri.
DATA(lo_model) = NEW z2ui5_cl_core_model_srv(
attri = REF #( lt_attri )
app = lo_app ).
lo_model->dissolve( ).
DATA(ls_attri) = lt_attri[ name = `MV_VALUE` ].
GET REFERENCE OF lo_app->mv_value INTO DATA(lr_ref).
IF ls_attri-r_ref <> lr_ref.
cl_abap_unit_assert=>abort( ).
ENDIF.
ENDMETHOD.
METHOD test_dissolve_init.
DATA(lo_app) = NEW ltcl_test_dissolve( ).
DATA lt_attri TYPE z2ui5_if_core_types=>ty_t_attri.
DATA(lo_bind) = NEW z2ui5_cl_core_model_srv(
DATA(lo_model) = NEW z2ui5_cl_core_model_srv(
attri = REF #( lt_attri )
app = lo_app ).
lo_bind->dissolve( ).
lo_bind->dissolve( ).
lo_bind->dissolve( ).
lo_bind->dissolve( ).
lo_model->dissolve( ).
lo_model->dissolve( ).
lo_model->dissolve( ).
lo_model->dissolve( ).
cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_attri[ name = `MR_STRUC` ] OPTIONAL ) ).
cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_attri[ name = `MR_VALUE` ] OPTIONAL ) ).
@ -68,15 +89,15 @@ CLASS ltcl_test_dissolve IMPLEMENTATION.
CREATE DATA lo_app->mr_value TYPE string.
DATA lt_attri TYPE z2ui5_if_core_types=>ty_t_attri.
DATA(lo_bind) = NEW z2ui5_cl_core_model_srv(
DATA(lo_model) = NEW z2ui5_cl_core_model_srv(
attri = REF #( lt_attri )
app = lo_app ).
lo_bind->dissolve( ).
lo_bind->dissolve( ).
lo_bind->dissolve( ).
lo_bind->dissolve( ).
lo_bind->dissolve( ).
lo_model->dissolve( ).
lo_model->dissolve( ).
lo_model->dissolve( ).
lo_model->dissolve( ).
lo_model->dissolve( ).
cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_attri[ name = `MR_VALUE->*` ] OPTIONAL ) ).
@ -93,14 +114,14 @@ CLASS ltcl_test_dissolve IMPLEMENTATION.
CREATE DATA lo_app->mo_app->mr_value TYPE string.
DATA lt_attri TYPE z2ui5_if_core_types=>ty_t_attri.
DATA(lo_bind) = NEW z2ui5_cl_core_model_srv(
DATA(lo_model) = NEW z2ui5_cl_core_model_srv(
attri = REF #( lt_attri )
app = lo_app2 ).
lo_bind->dissolve( ).
lo_bind->dissolve( ).
lo_bind->dissolve( ).
lo_bind->dissolve( ).
lo_model->dissolve( ).
lo_model->dissolve( ).
lo_model->dissolve( ).
lo_model->dissolve( ).
cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_attri[ name = `MO_APP->MV_VALUE` ] OPTIONAL ) ).
cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_attri[ name = `MO_APP->MR_STRUC` ] OPTIONAL ) ).
@ -113,15 +134,15 @@ CLASS ltcl_test_dissolve IMPLEMENTATION.
DATA(lo_app) = NEW ltcl_test_dissolve( ).
DATA lt_attri TYPE z2ui5_if_core_types=>ty_t_attri.
DATA(lo_bind) = NEW z2ui5_cl_core_model_srv(
DATA(lo_model) = NEW z2ui5_cl_core_model_srv(
attri = REF #( lt_attri )
app = lo_app ).
lo_bind->dissolve( ).
lo_bind->dissolve( ).
lo_bind->dissolve( ).
lo_bind->dissolve( ).
lo_bind->dissolve( ).
lo_model->dissolve( ).
lo_model->dissolve( ).
lo_model->dissolve( ).
lo_model->dissolve( ).
lo_model->dissolve( ).
cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_attri[ name = `MS_STRUC-INPUT` ] OPTIONAL ) ).
cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_attri[ name = `MS_STRUC-S_02-INPUT` ] OPTIONAL ) ).
@ -130,3 +151,107 @@ CLASS ltcl_test_dissolve IMPLEMENTATION.
ENDMETHOD.
ENDCLASS.
CLASS ltcl_test_app2 DEFINITION FINAL FOR TESTING
DURATION MEDIUM
RISK LEVEL HARMLESS.
PUBLIC SECTION.
DATA mv_value TYPE string ##NEEDED.
DATA mr_value TYPE REF TO data.
DATA mr_value2 TYPE REF TO data.
DATA mo_app TYPE REF TO ltcl_test_app2.
DATA xx TYPE string ##NEEDED.
METHODS constructor.
ENDCLASS.
CLASS ltcl_test_app2 IMPLEMENTATION.
METHOD constructor.
ENDMETHOD.
ENDCLASS.
CLASS ltcl_test_search_attri DEFINITION FINAL FOR TESTING
DURATION SHORT
RISK LEVEL HARMLESS.
PRIVATE SECTION.
METHODS first_test FOR TESTING RAISING cx_static_check.
METHODS second_test FOR TESTING RAISING cx_static_check.
METHODS third_test FOR TESTING RAISING cx_static_check.
ENDCLASS.
CLASS z2ui5_cl_core_model_srv DEFINITION LOCAL FRIENDS ltcl_test_search_attri.
CLASS ltcl_test_search_attri IMPLEMENTATION.
METHOD first_test.
DATA(lo_app_client) = NEW ltcl_test_app2( ).
DATA lr_value TYPE REF TO data.
GET REFERENCE OF lo_app_client->mv_value INTO lr_value.
DATA(lt_attri) = VALUE z2ui5_if_core_types=>ty_t_attri( ( r_ref = lr_value ) ).
DATA(lo_model) = NEW z2ui5_cl_core_model_srv(
attri = REF #( lt_attri )
app = lo_app_client ).
DATA(lr_attri) = lo_model->search_a_dissolve_attribute( REF #( lo_app_client->mv_value ) ).
IF lr_attri->r_ref <> lr_value.
cl_abap_unit_assert=>abort( ).
ENDIF.
ENDMETHOD.
METHOD second_test.
DATA(lo_app_client) = NEW ltcl_test_app2( ).
DATA lr_value TYPE REF TO data.
GET REFERENCE OF lo_app_client->mv_value INTO lr_value.
DATA(lt_attri) = VALUE z2ui5_if_core_types=>ty_t_attri( ( r_ref = REF #( lo_app_client->mv_value ) ) ).
DATA(lo_model) = NEW z2ui5_cl_core_model_srv(
attri = REF #( lt_attri )
app = lo_app_client ).
DATA(lr_attri) = lo_model->search_a_dissolve_attribute( REF #( lo_app_client->mv_value ) ).
IF lr_attri->r_ref <> lr_value.
cl_abap_unit_assert=>abort( ).
ENDIF.
ENDMETHOD.
METHOD third_test.
DATA(lo_app_client) = NEW ltcl_test_app2( ).
DATA lr_value TYPE REF TO data.
GET REFERENCE OF lo_app_client->mv_value INTO lr_value.
lo_app_client->mo_app = NEW #( ).
DATA(lt_attri) = VALUE z2ui5_if_core_types=>ty_t_attri(
( name = `1` r_ref = REF #( lo_app_client->mr_value ) )
( name = `4` r_ref = REF #( lo_app_client->mr_value2 ) )
( name = `2` r_ref = REF #( lo_app_client->mo_app ) )
( name = `3` r_ref = REF #( lo_app_client->mv_value ) )
).
DATA(lr_attri) = REF #( lt_attri[ r_ref = lr_value ] ).
IF lr_attri->r_ref <> lr_value.
cl_abap_unit_assert=>abort( ).
ENDIF.
ENDMETHOD.
ENDCLASS.

View File

@ -42,6 +42,11 @@ CLASS z2ui5_cl_core_action DEFINITION
val TYPE REF TO z2ui5_cl_core_http_post.
PROTECTED SECTION.
METHODS prepare_app_stack
IMPORTING
val TYPE z2ui5_if_core_types=>ty_s_next-o_app_leave
RETURNING
VALUE(result) TYPE REF TO z2ui5_cl_core_action.
PRIVATE SECTION.
ENDCLASS.
@ -68,8 +73,8 @@ CLASS z2ui5_cl_core_action IMPLEMENTATION.
result->ms_actual-view = mo_http_post->ms_request-s_front-view.
result->mo_app->model_json_parse(
view = mo_http_post->ms_request-s_front-view
io_json_model = mo_http_post->ms_request-o_model ).
iv_view = mo_http_post->ms_request-s_front-view
io_model = mo_http_post->ms_request-o_model ).
result->ms_actual-event = mo_http_post->ms_request-s_front-event.
result->ms_actual-t_event_arg = mo_http_post->ms_request-s_front-t_event_arg.
@ -103,27 +108,7 @@ CLASS z2ui5_cl_core_action IMPLEMENTATION.
METHOD factory_stack_call.
mo_app->db_save( ).
ms_next-o_app_call->id_draft = COND string(
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 ).
result->mo_app->mo_app = ms_next-o_app_call.
result->mo_app->ms_draft-id = ms_next-o_app_call->id_draft.
result->mo_app->ms_draft-id_prev = mo_app->ms_draft-id.
result->mo_app->ms_draft-id_prev_app = mo_app->ms_draft-id.
result->ms_actual-check_on_navigated = abap_true.
result->ms_next-s_set = ms_next-s_set.
TRY.
DATA(lo_app) = z2ui5_cl_core_app=>db_load( ms_next-o_app_call->id_draft ).
result->mo_app = lo_app.
result->mo_app->mo_app = ms_next-o_app_leave.
CATCH cx_root.
ENDTRY.
result = prepare_app_stack( ms_next-o_app_call ).
result->mo_app->ms_draft-id_prev_app_stack = mo_app->ms_draft-id.
ENDMETHOD.
@ -131,35 +116,7 @@ CLASS z2ui5_cl_core_action IMPLEMENTATION.
METHOD factory_stack_leave.
mo_app->db_save( ).
ms_next-o_app_leave->id_draft = COND string(
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 ).
result->mo_app->mo_app = ms_next-o_app_leave.
TRY.
DATA(lo_app) = z2ui5_cl_core_app=>db_load( ms_next-o_app_leave->id_draft ).
result->mo_app = lo_app.
result->mo_app->mo_app = ms_next-o_app_leave.
DATA(lo_model) = NEW z2ui5_cl_core_model_srv(
attri = REF #( result->mo_app->mt_attri )
app = result->mo_app->mo_app ).
lo_model->attri_refs_update( ).
CATCH cx_root.
ENDTRY.
result->mo_app->ms_draft-id = ms_next-o_app_leave->id_draft.
result->mo_app->ms_draft-id_prev = mo_app->ms_draft-id.
result->mo_app->ms_draft-id_prev_app = mo_app->ms_draft-id.
result->ms_actual-check_on_navigated = abap_true.
result->ms_next-s_set = ms_next-s_set.
result = prepare_app_stack( ms_next-o_app_leave ).
ENDMETHOD.
@ -189,4 +146,28 @@ CLASS z2ui5_cl_core_action IMPLEMENTATION.
li_app->id_draft = result->mo_app->ms_draft-id.
ENDMETHOD.
METHOD prepare_app_stack.
mo_app->db_save( ).
val->id_draft = COND string( WHEN val->id_draft IS INITIAL
THEN z2ui5_cl_util=>uuid_get_c32( )
ELSE ms_next-o_app_leave->id_draft ).
result = NEW #( mo_http_post ).
TRY.
result->mo_app = z2ui5_cl_core_app=>db_load_by_app( val ).
CATCH cx_root.
result->mo_app->mo_app = val.
ENDTRY.
result->mo_app->ms_draft-id = val->id_draft.
result->mo_app->ms_draft-id_prev = mo_app->ms_draft-id.
result->mo_app->ms_draft-id_prev_app = mo_app->ms_draft-id.
result->ms_actual-check_on_navigated = abap_true.
result->ms_next-s_set = ms_next-s_set.
ENDMETHOD.
ENDCLASS.

View File

@ -7,6 +7,7 @@ CLASS ltcl_test DEFINITION FINAL FOR TESTING
first_test FOR TESTING RAISING cx_static_check.
ENDCLASS.
CLASS z2ui5_cl_core_action DEFINITION LOCAL FRIENDS ltcl_test.
CLASS ltcl_test IMPLEMENTATION.

View File

@ -11,20 +11,14 @@ CLASS z2ui5_cl_core_app DEFINITION
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 REF TO 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 .
!iv_view TYPE string
!io_model TYPE REF TO z2ui5_if_ajson.
METHODS all_xml_stringify
RETURNING
@ -32,7 +26,7 @@ CLASS z2ui5_cl_core_app DEFINITION
CLASS-METHODS all_xml_parse
IMPORTING
!val TYPE string
!xml TYPE string
RETURNING
VALUE(result) TYPE REF TO z2ui5_cl_core_app.
@ -42,6 +36,12 @@ CLASS z2ui5_cl_core_app DEFINITION
RETURNING
VALUE(result) TYPE REF TO z2ui5_cl_core_app.
CLASS-METHODS db_load_by_app
IMPORTING
app TYPE REF TO z2ui5_if_app
RETURNING
VALUE(result) TYPE REF TO z2ui5_cl_core_app.
METHODS db_save.
PROTECTED SECTION.
@ -57,16 +57,10 @@ CLASS z2ui5_cl_core_app IMPLEMENTATION.
z2ui5_cl_util=>xml_parse(
EXPORTING
xml = val
xml = xml
IMPORTING
any = result ).
DATA(lo_model) = NEW z2ui5_cl_core_model_srv(
attri = REF #( result->mt_attri )
app = result->mo_app ).
lo_model->attri_after_load( ).
ENDMETHOD.
@ -76,7 +70,7 @@ CLASS z2ui5_cl_core_app IMPLEMENTATION.
DATA(lo_model) = NEW z2ui5_cl_core_model_srv(
attri = REF #( mt_attri )
app = me->mo_app ).
app = mo_app ).
lo_model->attri_before_save( ).
result = z2ui5_cl_util=>xml_stringify( me ).
@ -92,49 +86,40 @@ CLASS z2ui5_cl_core_app IMPLEMENTATION.
ENDMETHOD.
METHOD attri_get_by_data.
TRY.
result = REF #( mt_attri[ r_ref = val ] ).
RETURN.
CATCH cx_root.
ENDTRY.
DATA(lo_model) = NEW z2ui5_cl_core_model_srv(
attri = REF #( mt_attri )
app = mo_app ).
DO 5 TIMES.
lo_model->dissolve( ).
TRY.
result = REF #( mt_attri[ r_ref = val ] ).
RETURN.
CATCH cx_root.
ENDTRY.
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 ).
DATA(lo_model) = NEW z2ui5_cl_core_model_srv(
attri = REF #( result->mt_attri )
app = result->mo_app ).
lo_model->attri_after_load( ).
ENDMETHOD.
METHOD db_load_by_app.
DATA(lo_db) = NEW z2ui5_cl_core_draft_srv( ).
DATA(ls_db) = lo_db->read_draft( app->id_draft ).
result = all_xml_parse( ls_db-data ).
result->mo_app = app.
DATA(lo_model) = NEW z2ui5_cl_core_model_srv(
attri = REF #( result->mt_attri )
app = result->mo_app ).
lo_model->attri_refs_update( ).
ENDMETHOD.
METHOD db_save.
IF mo_app IS BOUND.
CAST z2ui5_if_app( mo_app )->id_draft = ms_draft-id.
ENDIF.
@ -151,9 +136,9 @@ CLASS z2ui5_cl_core_app IMPLEMENTATION.
DATA(lo_json_mapper) = NEW z2ui5_cl_core_json_srv( ).
lo_json_mapper->model_client_to_server(
view = view
view = iv_view
t_attri = REF #( mt_attri )
model = io_json_model ).
model = io_model ).
ENDMETHOD.

View File

@ -0,0 +1,20 @@
CLASS ltcl_test DEFINITION FINAL FOR TESTING
DURATION SHORT
RISK LEVEL HARMLESS.
PRIVATE SECTION.
METHODS:
first_test FOR TESTING RAISING cx_static_check.
ENDCLASS.
CLASS z2ui5_cl_core_app DEFINITION LOCAL FRIENDS ltcl_test.
CLASS ltcl_test IMPLEMENTATION.
METHOD first_test.
DATA(lo_action) = NEW z2ui5_cl_core_app( ) ##NEEDED.
ENDMETHOD.
ENDCLASS.

View File

@ -10,6 +10,7 @@
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
<WITH_UNIT_TESTS>X</WITH_UNIT_TESTS>
</VSEOCLASS>
</asx:values>
</asx:abap>

View File

@ -299,7 +299,9 @@ CLASS z2ui5_cl_core_http_get IMPLEMENTATION.
` return;` && |\n| &&
` }` && |\n| &&
` BusyIndicator.show();` && |\n| &&
` let appStart = sap.z2ui5.oBody.APP_START;` && |\n| &&
` sap.z2ui5.oBody = {};` && |\n| &&
` sap.z2ui5.oBody.APP_START = appStart;` && |\n| &&
` if ( sap.z2ui5.oController == this ) {` && |\n| &&
` sap.z2ui5.oBody.XX = sap.z2ui5.oView.getModel().getData().XX;` && |\n| &&
` sap.z2ui5.oBody.VIEWNAME = 'MAIN';` && |\n| &&
@ -405,6 +407,7 @@ CLASS z2ui5_cl_core_http_get IMPLEMENTATION.
` } else {` && |\n| &&
` const responseData = await response.json();` && |\n| &&
` sap.z2ui5.responseData = responseData;` && |\n| &&
` if( !sap.z2ui5.oBody.APP_START ) { sap.z2ui5.oBody.APP_START = sap.z2ui5.responseData.S_FRONT.APP; }` && |\n| &&
` sap.z2ui5.oController.responseSuccess({` && |\n| &&
` ID : responseData.S_FRONT.ID,` && |\n| &&
` PARAMS : responseData.S_FRONT.PARAMS,` && |\n| &&

View File

@ -33,75 +33,3 @@ CLASS ltcl_test_handler_post IMPLEMENTATION.
ENDMETHOD.
ENDCLASS.
*CLASS ltcl_unit_test DEFINITION FINAL FOR TESTING
* DURATION LONG
* RISK LEVEL HARMLESS.
*
* PRIVATE SECTION.
* METHODS test_req_begin_fw_start FOR TESTING RAISING cx_static_check.
* METHODS test_req_begin_app_start FOR TESTING RAISING cx_static_check.
* METHODS test_req_end FOR TESTING RAISING cx_static_check.
*
*ENDCLASS.
*
*CLASS z2ui5_cl_fw_controller DEFINITION LOCAL FRIENDS ltcl_unit_test.
*
*CLASS ltcl_unit_test IMPLEMENTATION.
*
* METHOD test_req_begin_fw_start.
*
* DATA(lv_body) = `{"OLOCATION":{"ORIGIN":"https:/url.abap-web.us10.hana.ondemand.com","PATHNAME":"/sap/bc/http/sap/z_http_service_for_ui","SEARCH":"?sap-client=100","VERSION":"com.sap.ui5.dist:sapui5-sdk-dist:1.115.0:war"}}`.
*
* DATA(lo_handler) = z2ui5_cl_fw_controller=>request_begin( lv_body ).
*
* cl_abap_unit_assert=>assert_bound( lo_handler->ms_db-app ).
*
* DATA(lo_app_fw) = CAST z2ui5_cl_fw_app_startup( lo_handler->ms_db-app ) ##NEEDED.
*
* ENDMETHOD.
*
* METHOD test_req_begin_app_start.
*
* DATA(lv_body) = `{"OLOCATION":{"ORIGIN":"https://url.abap-web.us10.hana.ondemand.com","PATHNAME":"/sap/bc/http/sap/z_http_service_for_ui","SEARCH":"?sap-client=100&app_start=z2ui5_cl_app_hello_world","VERSION":"c` &&
* `om.sap.ui5.dist:sapui5-sdk-dist:1.115.0:war"}}`.
*
* DATA(lo_handler) = z2ui5_cl_fw_controller=>request_begin( lv_body ).
*
* cl_abap_unit_assert=>assert_bound( lo_handler->ms_db-app ).
*
* DATA(lo_app_fw) = CAST z2ui5_cl_app_hello_world( lo_handler->ms_db-app ) ##NEEDED.
*
* ENDMETHOD.
*
*
* METHOD test_req_end.
*
* DATA(lv_body) = `{"OLOCATION":{"ORIGIN":"https://url.abap-web.us10.hana.ondemand.com","PATHNAME":"/sap/bc/http/sap/z_http_service_for_ui","SEARCH":"?sap-client=100&app_start=z2ui5_cl_app_hello_world","VERSION":"c` &&
* `om.sap.ui5.dist:sapui5-sdk-dist:1.115.0:war"}}`.
*
* DATA(lo_handler) = z2ui5_cl_fw_controller=>request_begin( lv_body ).
*
* CAST z2ui5_if_app( lo_handler->ms_db-app )->main( NEW z2ui5_cl_fw_client( lo_handler ) ).
*
* DATA(lv_resp) = lo_handler->request_end( ).
*
* IF lv_resp NS `NAME`.
* cl_abap_unit_assert=>fail( ).
* ENDIF.
*
* IF lv_resp NS `EDIT`.
* cl_abap_unit_assert=>fail( ).
* ENDIF.
*
* IF lv_resp NS `ID`.
* cl_abap_unit_assert=>fail( ).
* ENDIF.
*
* IF lv_resp NS `mvc:View`.
* cl_abap_unit_assert=>fail( ).
* ENDIF.
*
* ENDMETHOD.
*
*ENDCLASS.

View File

@ -32,15 +32,10 @@ INTERFACE z2ui5_if_core_types
name TYPE string,
name_client TYPE string,
type_kind TYPE string,
type TYPE string,
bind_type TYPE string,
data_stringify TYPE string,
data_rtti TYPE string,
check_ready TYPE abap_bool,
check_dissolved TYPE abap_bool,
check_temp TYPE abap_bool,
view TYPE string,
depth TYPE i,
json_bind_local TYPE REF TO z2ui5_if_ajson,
custom_filter TYPE REF TO z2ui5_if_ajson_filter,
custom_filter_back TYPE REF TO z2ui5_if_ajson_filter,
@ -48,7 +43,6 @@ INTERFACE z2ui5_if_core_types
custom_mapper_back TYPE REF TO z2ui5_if_ajson_mapping,
r_ref TYPE REF TO data,
o_typedescr type ref to cl_abap_typedescr,
s_rtti_descr type abap_componentdescr,
END OF ty_s_attri.
TYPES ty_t_attri TYPE SORTED TABLE OF ty_s_attri WITH UNIQUE KEY name.

View File

@ -43,10 +43,14 @@ CLASS z2ui5_cl_core_app_info IMPLEMENTATION.
METHOD view_display_start.
DATA(page2) = z2ui5_cl_xml_view=>factory( )->shell( )->page(
shownavbutton = abap_false ).
DATA(page2) = z2ui5_cl_xml_view=>factory_popup(
)->dialog(
stretch = abap_true
title = `abap2UI5 - System Information`
afterclose = client->_event( `CLOSE` )
).
page2->header_content( )->text( )->title( `abap2UI5 - System Information` )->toolbar_spacer( ).
* page2->header_content( )->text( )->title( `abap2UI5 - System Information` )->toolbar_spacer( ).
page2->_z2ui5( )->info_frontend(
* device_browser = client->_bind( mv_device_browser )
@ -93,14 +97,21 @@ CLASS z2ui5_cl_core_app_info IMPLEMENTATION.
simple_form2->label( `ABAP for Cloud` ).
simple_form2->checkbox( enabled = abap_false selected = z2ui5_cl_util=>rtti_check_lang_version_cloud( ) ).
data(lv_count) = conv string( new z2ui5_cl_core_draft_srv( )->count( ) ).
DATA(lv_count) = CONV string( NEW z2ui5_cl_core_draft_srv( )->count( ) ).
simple_form2->toolbar( )->title( `abap2UI5` ).
simple_form2->label( `Version ` ).
simple_form2->text( z2ui5_if_app=>version ).
simple_form2->label( `Draft Entries ` ).
simple_form2->text( lv_count ).
client->view_display( page2->stringify( ) ).
page2->footer( )->overflow_toolbar(
)->toolbar_spacer(
)->button(
text = 'close'
press = client->_event( 'CLOSE' )
type = 'Emphasized' ).
client->popup_display( page2->stringify( ) ).
ENDMETHOD.
@ -122,13 +133,20 @@ CLASS z2ui5_cl_core_app_info IMPLEMENTATION.
ENDIF.
z2ui5_on_event( ).
view_display_start( ).
* view_display_start( ).
ENDMETHOD.
METHOD z2ui5_on_event.
CASE client->get( )-event.
WHEN `CLOSE`.
client->popup_destroy( ).
client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ).
ENDCASE.
ENDMETHOD.

View File

@ -80,17 +80,18 @@ CLASS z2ui5_cl_core_app_startup IMPLEMENTATION.
shownavbutton = abap_false ).
DATA(lv_url_info) = z2ui5_cl_util=>app_get_url(
client = client
classname = 'z2ui5_cl_core_app_info' ).
* DATA(lv_url_info) = z2ui5_cl_util=>app_get_url(
* client = client
* classname = 'z2ui5_cl_core_app_info' ).
page2->header_content(
)->text(
)->title( `abap2UI5 - Developing UI5 Apps Purely in ABAP`
)->toolbar_spacer(
)->button( text = `System` icon = `sap-icon://information`
press = client->_event_client( val = client->cs_event-open_new_tab
t_arg = VALUE #( ( lv_url_info ) ) ) ).
press = client->_event( `OPEN_INFO` ) ).
* press = client->_event_client( val = client->cs_event-open_new_tab
* t_arg = VALUE #( ( lv_url_info ) ) ) ).
DATA(simple_form2) = page2->simple_form(
editable = abap_true
@ -238,6 +239,10 @@ CLASS z2ui5_cl_core_app_startup IMPLEMENTATION.
CASE client->get( )-event.
WHEN `OPEN_INFO`.
client->nav_app_call( z2ui5_cl_core_app_info=>factory( ) ).
RETURN.
WHEN `BUTTON_CHECK`.
IF ms_home-class_editable = abap_false.
ms_home-btn_text = `check`.

View File

@ -54,7 +54,7 @@ CLASS Z2UI5_CL_POPUP_FILE_DOWNLOAD IMPLEMENTATION.
r_result->button_text_confirm = i_button_text_confirm.
r_result->button_text_cancel = i_button_text_cancel.
r_result->mv_value = i_file.
r_result->mv_size = CONV i( strlen( i_file ) / 1000 ).
r_result->mv_size = strlen( i_file ) / 1000.
ENDMETHOD.