diff --git a/abaplint.jsonc b/abaplint.jsonc
index 31024397..e8aded0d 100644
--- a/abaplint.jsonc
+++ b/abaplint.jsonc
@@ -22,7 +22,7 @@
"strict_sql" : true,
"easy_to_find_messages" : true,
"fully_type_itabs" : true,
- "align_parameters": true,
+ "align_parameters": false,
"smim_consistency": true,
"allowed_object_naming": true,
"allowed_object_types": {
@@ -124,7 +124,7 @@
"line_break_multiple_parameters": false,
"line_break_style": true,
"line_length": false,
- "line_only_punc": true,
+ "line_only_punc": false,
"local_class_naming": false,
"local_testclass_consistency": true,
"local_variable_names": false,
diff --git a/src/01/02/01/z2ui5_cl_core_attri_srv.clas.testclasses.abap b/src/01/02/01/z2ui5_cl_core_attri_srv.clas.testclasses.abap
index f659e810..378ad94e 100644
--- a/src/01/02/01/z2ui5_cl_core_attri_srv.clas.testclasses.abap
+++ b/src/01/02/01/z2ui5_cl_core_attri_srv.clas.testclasses.abap
@@ -1,256 +1,108 @@
-*
-*CLASS ltcl_test_dissolve DEFINITION DEFERRED.
-*CLASS z2ui5_cl_core_model_srv DEFINITION LOCAL FRIENDS ltcl_test_dissolve.
-*
-*CLASS ltcl_test_dissolve DEFINITION FINAL FOR TESTING
-* DURATION SHORT
-* RISK LEVEL HARMLESS.
-*
-* PUBLIC SECTION.
-*
-* TYPES:
-* BEGIN OF s_01,
-* input TYPE string,
-* BEGIN OF s_02,
-* input TYPE string,
-* BEGIN OF s_03,
-* input TYPE string,
-* BEGIN OF s_04,
-* input TYPE string,
-* END OF s_04,
-* END OF s_03,
-* END OF s_02,
-* END OF s_01.
-*
-* DATA ms_struc TYPE s_01 ##NEEDED.
-* DATA mv_value TYPE string ##NEEDED.
-* DATA mr_value TYPE REF TO data.
-* DATA mr_struc TYPE REF TO s_01.
-* DATA mo_app TYPE REF TO ltcl_test_dissolve.
-*
-* PRIVATE SECTION.
-* METHODS test_dissolve_init FOR TESTING RAISING cx_static_check.
-* METHODS test_dissolve_struc FOR TESTING RAISING cx_static_check.
-* METHODS test_dissolve_dref FOR TESTING RAISING cx_static_check.
-* METHODS test_dissolve_oref FOR TESTING RAISING cx_static_check.
-* 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_model) = NEW z2ui5_cl_core_model_srv(
-* attri = REF #( lt_attri )
-* app = lo_app ).
-*
-* 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 ) ).
-* cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_attri[ name = `MS_STRUC` ] OPTIONAL ) ).
-* cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_attri[ name = `MV_VALUE` ] OPTIONAL ) ).
-*
-* ENDMETHOD.
-*
-* METHOD test_dissolve_dref.
-*
-* DATA(lo_app) = NEW ltcl_test_dissolve( ).
-* CREATE DATA lo_app->mr_struc.
-* CREATE DATA lo_app->mr_value TYPE string.
-*
-* 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( ).
-* 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 ) ).
-*
-* ENDMETHOD.
-*
-* METHOD test_dissolve_oref.
-*
-* DATA(lo_app) = NEW ltcl_test_dissolve( ).
-* lo_app->mo_app = NEW #( ).
-* DATA(lo_app2) = NEW ltcl_test_dissolve( ).
-* lo_app2->mo_app = lo_app.
-*
-* CREATE DATA lo_app->mo_app->mr_struc.
-* CREATE DATA lo_app->mo_app->mr_value TYPE string.
-*
-* 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_app2 ).
-*
-* 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 ) ).
-* cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_attri[ name = `MO_APP->MR_VALUE` ] OPTIONAL ) ).
-* cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_attri[ name = `MO_APP->MS_STRUC` ] OPTIONAL ) ).
-*
-* ENDMETHOD.
-*
-* METHOD test_dissolve_struc.
-*
-* 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( ).
-* 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 ) ).
-* cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_attri[ name = `MS_STRUC-S_02-S_03-S_04-INPUT` ] OPTIONAL ) ).
-*
-* 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->attri_search_a_dissolve( 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->attri_search_a_dissolve( 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.
+
+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_attri_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
+ o_typedescr = cl_abap_datadescr=>describe_by_data_ref( lr_value )
+ ) ).
+
+ DATA(lo_model) = NEW z2ui5_cl_core_attri_srv(
+ attri = REF #( lt_attri )
+ app = lo_app_client ).
+
+ DATA(lr_attri) = lo_model->attri_search_a_dissolve( 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 )
+ o_typedescr = cl_abap_datadescr=>describe_by_data_ref( lr_value )
+ ) ).
+
+ DATA(lo_model) = NEW z2ui5_cl_core_attri_srv(
+ attri = REF #( lt_attri )
+ app = lo_app_client ).
+
+ DATA(lr_attri) = lo_model->attri_search_a_dissolve( 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.
diff --git a/src/01/02/01/z2ui5_cl_core_dissolve_srv.clas.abap b/src/01/02/01/z2ui5_cl_core_dissolve_srv.clas.abap
index d3bda9b8..fd61847f 100644
--- a/src/01/02/01/z2ui5_cl_core_dissolve_srv.clas.abap
+++ b/src/01/02/01/z2ui5_cl_core_dissolve_srv.clas.abap
@@ -1,17 +1,16 @@
CLASS z2ui5_cl_core_dissolve_srv DEFINITION
PUBLIC
FINAL
- CREATE PUBLIC.
+ CREATE PUBLIC .
PUBLIC SECTION.
METHODS constructor
IMPORTING
- attri TYPE REF TO z2ui5_if_core_types=>ty_t_attri
- app TYPE REF TO object.
-
- METHODS main.
+ !attri TYPE REF TO z2ui5_if_core_types=>ty_t_attri
+ !app TYPE REF TO object.
+ METHODS main .
PROTECTED SECTION.
DATA mt_attri TYPE REF TO z2ui5_if_core_types=>ty_t_attri.
@@ -47,7 +46,7 @@ ENDCLASS.
-CLASS z2ui5_cl_core_dissolve_srv IMPLEMENTATION.
+CLASS Z2UI5_CL_CORE_DISSOLVE_SRV IMPLEMENTATION.
METHOD constructor.
diff --git a/src/01/02/01/z2ui5_cl_core_dissolve_srv.clas.testclasses.abap b/src/01/02/01/z2ui5_cl_core_dissolve_srv.clas.testclasses.abap
new file mode 100644
index 00000000..cd0b8f2e
--- /dev/null
+++ b/src/01/02/01/z2ui5_cl_core_dissolve_srv.clas.testclasses.abap
@@ -0,0 +1,146 @@
+CLASS ltcl_test_dissolve DEFINITION DEFERRED.
+CLASS z2ui5_cl_core_dissolve_srv DEFINITION LOCAL FRIENDS ltcl_test_dissolve.
+
+CLASS ltcl_test_dissolve DEFINITION FINAL FOR TESTING
+ DURATION SHORT
+ RISK LEVEL HARMLESS.
+
+ PUBLIC SECTION.
+
+ TYPES:
+ BEGIN OF s_01,
+ input TYPE string,
+ BEGIN OF s_02,
+ input TYPE string,
+ BEGIN OF s_03,
+ input TYPE string,
+ BEGIN OF s_04,
+ input TYPE string,
+ END OF s_04,
+ END OF s_03,
+ END OF s_02,
+ END OF s_01.
+
+ DATA ms_struc TYPE s_01 ##NEEDED.
+ DATA mv_value TYPE string ##NEEDED.
+ DATA mr_value TYPE REF TO data.
+ DATA mr_struc TYPE REF TO s_01.
+ DATA mo_app TYPE REF TO ltcl_test_dissolve.
+
+ PRIVATE SECTION.
+ METHODS test_dissolve_init FOR TESTING RAISING cx_static_check.
+ METHODS test_dissolve_struc FOR TESTING RAISING cx_static_check.
+ METHODS test_dissolve_dref FOR TESTING RAISING cx_static_check.
+ METHODS test_dissolve_oref FOR TESTING RAISING cx_static_check.
+ 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_dissolve_srv(
+ attri = REF #( lt_attri )
+ app = lo_app ).
+
+ lo_model->main( ).
+
+ 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_model) = NEW z2ui5_cl_core_dissolve_srv(
+ attri = REF #( lt_attri )
+ app = lo_app ).
+
+ lo_model->main( ).
+ lo_model->main( ).
+ lo_model->main( ).
+
+ 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 ) ).
+ cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_attri[ name = `MS_STRUC` ] OPTIONAL ) ).
+ cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_attri[ name = `MV_VALUE` ] OPTIONAL ) ).
+
+ ENDMETHOD.
+
+ METHOD test_dissolve_dref.
+
+ DATA(lo_app) = NEW ltcl_test_dissolve( ).
+ CREATE DATA lo_app->mr_struc.
+ CREATE DATA lo_app->mr_value TYPE string.
+
+ DATA lt_attri TYPE z2ui5_if_core_types=>ty_t_attri.
+ DATA(lo_model) = NEW z2ui5_cl_core_dissolve_srv(
+ attri = REF #( lt_attri )
+ app = lo_app ).
+
+ lo_model->main( ).
+ lo_model->main( ).
+
+ cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_attri[ name = `MR_VALUE->*` ] OPTIONAL ) ).
+
+ ENDMETHOD.
+
+ METHOD test_dissolve_oref.
+
+ DATA(lo_app) = NEW ltcl_test_dissolve( ).
+ lo_app->mo_app = NEW #( ).
+ DATA(lo_app2) = NEW ltcl_test_dissolve( ).
+ lo_app2->mo_app = lo_app.
+
+ CREATE DATA lo_app->mo_app->mr_struc.
+ CREATE DATA lo_app->mo_app->mr_value TYPE string.
+
+ DATA lt_attri TYPE z2ui5_if_core_types=>ty_t_attri.
+ DATA(lo_model) = NEW z2ui5_cl_core_dissolve_srv(
+ attri = REF #( lt_attri )
+ app = lo_app2 ).
+
+ lo_model->main( ).
+ lo_model->main( ).
+ lo_model->main( ).
+
+ 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 ) ).
+ cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_attri[ name = `MO_APP->MR_VALUE` ] OPTIONAL ) ).
+ cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_attri[ name = `MO_APP->MS_STRUC` ] OPTIONAL ) ).
+
+ ENDMETHOD.
+
+ METHOD test_dissolve_struc.
+
+ 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_dissolve_srv(
+ attri = REF #( lt_attri )
+ app = lo_app ).
+
+ lo_model->main( ).
+ lo_model->main( ).
+ lo_model->main( ).
+ lo_model->main( ).
+ lo_model->main( ).
+
+ 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 ) ).
+ cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_attri[ name = `MS_STRUC-S_02-S_03-S_04-INPUT` ] OPTIONAL ) ).
+
+ ENDMETHOD.
+
+ENDCLASS.
diff --git a/src/01/02/01/z2ui5_cl_core_dissolve_srv.clas.xml b/src/01/02/01/z2ui5_cl_core_dissolve_srv.clas.xml
index 6778a860..a9b2619f 100644
--- a/src/01/02/01/z2ui5_cl_core_dissolve_srv.clas.xml
+++ b/src/01/02/01/z2ui5_cl_core_dissolve_srv.clas.xml
@@ -10,6 +10,7 @@
X
X
X
+ X
diff --git a/src/01/02/01/z2ui5_cl_core_draft_srv.clas.abap b/src/01/02/01/z2ui5_cl_core_draft_srv.clas.abap
index cd7ec623..7c9754df 100644
--- a/src/01/02/01/z2ui5_cl_core_draft_srv.clas.abap
+++ b/src/01/02/01/z2ui5_cl_core_draft_srv.clas.abap
@@ -59,6 +59,8 @@ CLASS z2ui5_cl_core_draft_srv IMPLEMENTATION.
METHOD create.
+ ASSERT draft-id IS NOT INITIAL.
+
DATA(ls_db) = VALUE z2ui5_if_core_types=>ty_s_db(
id = draft-id
id_prev = draft-id_prev
diff --git a/src/01/02/01/z2ui5_cl_core_draft_srv.clas.testclasses.abap b/src/01/02/01/z2ui5_cl_core_draft_srv.clas.testclasses.abap
index e14f4aa1..20514f11 100644
--- a/src/01/02/01/z2ui5_cl_core_draft_srv.clas.testclasses.abap
+++ b/src/01/02/01/z2ui5_cl_core_draft_srv.clas.testclasses.abap
@@ -1,21 +1,37 @@
-CLASS ltcl_test_db DEFINITION FINAL FOR TESTING
+CLASS ltcl_test DEFINITION FINAL FOR TESTING
DURATION LONG
- RISK LEVEL DANGEROUS.
+ RISK LEVEL HARMLESS.
PUBLIC SECTION.
- INTERFACES z2ui5_if_app.
- DATA mr_data TYPE REF TO data ##NEEDED.
+ METHODS constructor.
+ METHODS test_create FOR TESTING.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
-CLASS ltcl_test_db IMPLEMENTATION.
+CLASS ltcl_test IMPLEMENTATION.
+ METHOD constructor.
- METHOD z2ui5_if_app~main.
+ ENDMETHOD.
+
+ METHOD test_create.
+
+ DATA(lo_draft) = NEW z2ui5_cl_core_draft_srv( ).
+
+ lo_draft->create(
+ draft = VALUE #( id = `TEST_ID` )
+ model_xml = `my xml`
+ ).
+
+ DATA(ls_db) = lo_draft->read_draft( `TEST_ID` ).
+
+ cl_abap_unit_assert=>assert_equals(
+ act = ls_db-data
+ exp = `my xml` ).
ENDMETHOD.
diff --git a/src/01/02/z2ui5_cl_core_app.clas.testclasses.abap b/src/01/02/z2ui5_cl_core_app.clas.testclasses.abap
index 19046f43..c769a71f 100644
--- a/src/01/02/z2ui5_cl_core_app.clas.testclasses.abap
+++ b/src/01/02/z2ui5_cl_core_app.clas.testclasses.abap
@@ -18,3 +18,52 @@ CLASS ltcl_test IMPLEMENTATION.
ENDMETHOD.
ENDCLASS.
+
+CLASS ltcl_test_db DEFINITION FINAL FOR TESTING
+ DURATION LONG
+ RISK LEVEL HARMLESS.
+
+ PUBLIC SECTION.
+
+ DATA mv_value TYPE string.
+ INTERFACES z2ui5_if_app.
+ METHODS constructor.
+
+ METHODS test_db_save FOR TESTING.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ENDCLASS.
+
+
+CLASS ltcl_test_db IMPLEMENTATION.
+
+ METHOD constructor.
+
+ ENDMETHOD.
+
+ METHOD test_db_save.
+
+ DATA(lo_app_user) = NEW ltcl_test_db( ).
+ lo_app_user->mv_value = `my value`.
+
+ DATA(lo_app) = NEW z2ui5_cl_core_app( ).
+ lo_app->ms_draft-id = `TEST_ID`.
+ lo_app->mo_app = lo_app_user.
+
+ lo_app->db_save( ).
+
+ DATA(lo_app_db) = z2ui5_cl_core_app=>db_load( `TEST_ID` ).
+ DATA(lo_app_user_db) = CAST ltcl_test_db( lo_app_db->mo_app ).
+
+ cl_abap_unit_assert=>assert_equals(
+ act = lo_app_user_db->mv_value
+ exp = lo_app_user->mv_value ).
+
+ ENDMETHOD.
+
+ METHOD z2ui5_if_app~main.
+
+ ENDMETHOD.
+
+ENDCLASS.
diff --git a/src/01/03/z2ui5_cl_core_app_info.clas.abap b/src/01/03/z2ui5_cl_core_app_info.clas.abap
index 68d7d4d9..7916cb05 100644
--- a/src/01/03/z2ui5_cl_core_app_info.clas.abap
+++ b/src/01/03/z2ui5_cl_core_app_info.clas.abap
@@ -22,7 +22,6 @@ CLASS z2ui5_cl_core_app_info DEFINITION
RETURNING
VALUE(result) TYPE REF TO z2ui5_cl_core_app_info.
- METHODS z2ui5_on_init.
METHODS z2ui5_on_event.
METHODS view_display_start.
PROTECTED SECTION.
@@ -121,7 +120,6 @@ CLASS z2ui5_cl_core_app_info IMPLEMENTATION.
IF mv_check_initialized = abap_false.
mv_check_initialized = abap_true.
- z2ui5_on_init( ).
view_display_start( ).
RETURN.
ENDIF.
@@ -132,7 +130,6 @@ CLASS z2ui5_cl_core_app_info IMPLEMENTATION.
ENDIF.
z2ui5_on_event( ).
-* view_display_start( ).
ENDMETHOD.
@@ -150,9 +147,4 @@ CLASS z2ui5_cl_core_app_info IMPLEMENTATION.
ENDMETHOD.
-
- METHOD z2ui5_on_init.
-
- ENDMETHOD.
-
ENDCLASS.
diff --git a/src/01/03/z2ui5_cl_core_app_startup.clas.abap b/src/01/03/z2ui5_cl_core_app_startup.clas.abap
index 8f77ded7..ab977b2c 100644
--- a/src/01/03/z2ui5_cl_core_app_startup.clas.abap
+++ b/src/01/03/z2ui5_cl_core_app_startup.clas.abap
@@ -49,7 +49,6 @@ CLASS z2ui5_cl_core_app_startup IMPLEMENTATION.
DATA li_app_test TYPE REF TO z2ui5_if_app.
TRY.
-
ms_home-classname = z2ui5_cl_util=>c_trim_upper( ms_home-classname ).
CREATE OBJECT li_app_test TYPE (ms_home-classname).
@@ -79,19 +78,12 @@ CLASS z2ui5_cl_core_app_startup IMPLEMENTATION.
DATA(page2) = z2ui5_cl_xml_view=>factory( )->shell( )->page(
shownavbutton = abap_false ).
-
-* 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( `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
diff --git a/src/02/03/z2ui5_cl_popup_to_select.clas.abap b/src/02/03/z2ui5_cl_popup_to_select.clas.abap
index bfd66e2e..aa72f1f2 100644
--- a/src/02/03/z2ui5_cl_popup_to_select.clas.abap
+++ b/src/02/03/z2ui5_cl_popup_to_select.clas.abap
@@ -51,17 +51,14 @@ ENDCLASS.
CLASS z2ui5_cl_popup_to_select IMPLEMENTATION.
METHOD factory.
- FIELD-SYMBOLS TYPE any.
r_result = NEW #( ).
r_result->title = i_title.
r_result->sort_field = i_sort_field.
r_result->descending = i_descending.
- CREATE DATA r_result->mr_tab LIKE i_tab.
- CREATE DATA r_result->ms_result-row LIKE LINE OF i_tab.
- ASSIGN r_result->mr_tab->* TO .
- = i_tab.
+ r_result->mr_tab = z2ui5_cl_util=>conv_copy_ref_data( i_tab ).
+ CREATE DATA r_result->ms_result-row LIKE LINE OF i_tab.
ENDMETHOD.
@@ -181,9 +178,6 @@ CLASS z2ui5_cl_popup_to_select IMPLEMENTATION.
CREATE DATA mr_tab_popup TYPE HANDLE lo_tab_type.
CREATE DATA mr_tab_popup_backup TYPE HANDLE lo_tab_type.
-
-
-
ASSIGN mr_tab_popup->* TO .
ASSIGN mr_tab_popup_backup->* TO .
LOOP AT ASSIGNING .
@@ -223,9 +217,7 @@ CLASS z2ui5_cl_popup_to_select IMPLEMENTATION.
CONTINUE.
ENDIF.
-
ASSIGN ms_result-row->* TO .
-
IF check_table_line = abap_true.
ASSIGN ('-TAB_LINE') TO .
@@ -259,10 +251,7 @@ CLASS z2ui5_cl_popup_to_select IMPLEMENTATION.
= .
- DATA(lo_type) = cl_abap_structdescr=>describe_by_data( ).
- DATA(lo_table) = CAST cl_abap_tabledescr( lo_type ).
- DATA(lo_struct) = CAST cl_abap_structdescr( lo_table->get_table_line_type( ) ).
- DATA(lt_comp) = lo_struct->get_components( ).
+ DATA(lt_comp) = z2ui5_cl_util=>rtti_get_t_attri_by_struc( ).
LOOP AT ASSIGNING .
DATA(lv_check_continue) = abap_false.
LOOP AT lt_comp INTO DATA(ls_comp).