mirror of
https://github.com/abap2UI5/abap2UI5.git
synced 2025-04-29 02:58:20 +08:00
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:
parent
0b54da3a3f
commit
ee36617e24
58
package-lock.json
generated
58
package-lock.json
generated
|
@ -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"
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
@ -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.
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
20
src/01/02/z2ui5_cl_core_app.clas.testclasses.abap
Normal file
20
src/01/02/z2ui5_cl_core_app.clas.testclasses.abap
Normal 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.
|
|
@ -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>
|
||||
|
|
|
@ -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| &&
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
|
@ -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`.
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user