Refactoring (#886)

* refactoring

* Update README.md

* Update abaplint.jsonc

* Update abaplint.jsonc

* Update abaplint.jsonc

* Update abaplint.jsonc

* Update abaplint.jsonc

* Update abaplint.jsonc

* lint fixes

* lint fixes

* Update abaplint.jsonc

* Update abaplint.jsonc

* Update abaplint.jsonc

* Update abaplint.jsonc

* update

* update abaplint

* update

* update

* Update abaplint.jsonc

* Update abaplint.jsonc

* update

* Update abaplint.jsonc

* Update abaplint.jsonc

* Update abaplint.jsonc

* Update abaplint.jsonc

* Update abaplint.jsonc

* Update abaplint.jsonc

* update lint

* update

* Update abaplint.jsonc

* Update abaplint.jsonc

* update

* update

* update

* Update abaplint.jsonc

* fixes

* update

* update
This commit is contained in:
oblomov 2024-02-14 20:15:31 +01:00 committed by GitHub
parent ee36617e24
commit fd321c91df
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
58 changed files with 1509 additions and 1497 deletions

View File

@ -51,8 +51,8 @@
#### Extensions & Apps #### Extensions & Apps
* Integrate your apps to SAP Fiori On-Premise Launchpad [(ext-fiori_launchpad)](https://github.com/abap2UI5/ext-service_integration) * Integrate your apps to SAP Fiori On-Premise Launchpad [(ext-fiori_launchpad)](https://github.com/abap2UI5/ext-service_integration)
* Connect with the SAP Business Technology Platform [(ext-btp)](https://github.com/abap2UI5/ext-business_technology_platform) * Connect with SAP BTP & SAP Mobile Start [(ext-btp)](https://github.com/abap2UI5/ext-business_technology_platform)
* Enhance functionality with Custom Controls & External Libraries [(custom controls)](https://github.com/abap2UI5/abap2UI5-documentation/blob/main/docs/custom_controls.md) * Pimp up your apps with custom controls and external libraries [(ext-cc)](https://github.com/abap2UI5/abap2UI5-documentation/blob/main/docs/custom_controls.md)
* Discover other projects using abap2UI5 [(abap2UI5/links)](https://github.com/abap2UI5/abap2UI5-documentation/blob/main/docs/links.md) * Discover other projects using abap2UI5 [(abap2UI5/links)](https://github.com/abap2UI5/abap2UI5-documentation/blob/main/docs/links.md)
#### More #### More
@ -220,7 +220,7 @@ ENDCLASS.
</details> </details>
#### Credits #### Credits
* These [**Contributors**](https://github.com/abap2UI5/abap2UI5/graphs/contributors) help to continously evolve this project * These [**Contributors**](https://github.com/abap2UI5/abap2UI5/graphs/contributors) continuously drive the evolution of this project forward
* Code versioning & distribution are managed via [**abapGit**](https://abapgit.org/) [(authors)](https://abapgit.org/sponsor.html) * Code versioning & distribution are managed via [**abapGit**](https://abapgit.org/) [(authors)](https://abapgit.org/sponsor.html)
* Static code analysis and quality assurance are performed via [**abaplint**](https://abaplint.org/) and [**open-abap**](https://github.com/open-abap) [(larshp)](https://github.com/larshp) * Static code analysis and quality assurance are performed via [**abaplint**](https://abaplint.org/) and [**open-abap**](https://github.com/open-abap) [(larshp)](https://github.com/larshp)
* JSON parsing for frontend-backend communication is implemented with [**ajson**](https://github.com/sbcgua/ajson) [(sbcgua)](https://github.com/sbcgua) * JSON parsing for frontend-backend communication is implemented with [**ajson**](https://github.com/sbcgua/ajson) [(sbcgua)](https://github.com/sbcgua)

View File

@ -15,14 +15,14 @@
"errorNamespace": "." "errorNamespace": "."
}, },
"rules": { "rules": {
"7bit_ascii": false, "7bit_ascii": true,
"abapdoc": false, "abapdoc": false,
"sql_value_conversion" : true, "sql_value_conversion" : true,
"select_single_full_key" : true, "select_single_full_key" : true,
"strict_sql" : true, "strict_sql" : true,
"easy_to_find_messages" : true, "easy_to_find_messages" : true,
"fully_type_itabs" : false, "fully_type_itabs" : true,
"align_parameters": false, "align_parameters": true,
"smim_consistency": true, "smim_consistency": true,
"allowed_object_naming": true, "allowed_object_naming": true,
"allowed_object_types": { "allowed_object_types": {
@ -34,7 +34,7 @@
] ]
}, },
"ambiguous_statement": true, "ambiguous_statement": true,
"avoid_use": false, "avoid_use": true,
"begin_end_names": true, "begin_end_names": true,
"begin_single_include": true, "begin_single_include": true,
"call_transaction_authority_check": true, "call_transaction_authority_check": true,
@ -42,16 +42,12 @@
"cds_legacy_view": true, "cds_legacy_view": true,
"cds_parser_error": true, "cds_parser_error": true,
"chain_mainly_declarations": true, "chain_mainly_declarations": true,
"change_if_to_case": { "change_if_to_case": true,
"exclude": [],
"severity": "Error",
"skipNames": []
},
"check_abstract": true, "check_abstract": true,
"check_comments": false, "check_comments": true,
"check_ddic": true, "check_ddic": true,
"check_include": true, "check_include": true,
"check_subrc": false, "check_subrc": true,
"check_syntax": true, "check_syntax": true,
"check_text_elements": true, "check_text_elements": true,
"check_transformation_exists": true, "check_transformation_exists": true,
@ -60,11 +56,7 @@
"cloud_types": true, "cloud_types": true,
"colon_missing_space": true, "colon_missing_space": true,
"commented_code": false, "commented_code": false,
"constant_classes": { "constant_classes": true,
"exclude": [],
"severity": "Error",
"mapping": []
},
"constructor_visibility_public": true, "constructor_visibility_public": true,
"contains_tab": { "contains_tab": {
"exclude": [], "exclude": [],
@ -75,7 +67,7 @@
"cyclomatic_complexity": { "cyclomatic_complexity": {
"exclude": [], "exclude": [],
"severity": "Error", "severity": "Error",
"max": 25 "max": 10
}, },
"dangerous_statement": true, "dangerous_statement": true,
"db_operation_in_loop": true, "db_operation_in_loop": true,
@ -118,7 +110,7 @@
}, },
"global_class": true, "global_class": true,
"identical_conditions": true, "identical_conditions": true,
"identical_contents": false, "identical_contents": true,
"identical_descriptions": true, "identical_descriptions": true,
"identical_form_names": true, "identical_form_names": true,
"if_in_if": true, "if_in_if": true,
@ -128,11 +120,11 @@
"inline_data_old_versions": true, "inline_data_old_versions": true,
"intf_referencing_clas": false, "intf_referencing_clas": false,
"keep_single_parameter_on_one_line": false, "keep_single_parameter_on_one_line": false,
"keyword_case": false, "keyword_case": true,
"line_break_multiple_parameters": false, "line_break_multiple_parameters": false,
"line_break_style": true, "line_break_style": true,
"line_length": false, "line_length": false,
"line_only_punc": false, "line_only_punc": true,
"local_class_naming": false, "local_class_naming": false,
"local_testclass_consistency": true, "local_testclass_consistency": true,
"local_variable_names": false, "local_variable_names": false,
@ -143,7 +135,7 @@
"message_exists": true, "message_exists": true,
"method_implemented_twice": true, "method_implemented_twice": true,
"method_length": false, "method_length": false,
"method_overwrites_builtin": false, "method_overwrites_builtin": true,
"method_parameter_names": false, "method_parameter_names": false,
"mix_returning": true, "mix_returning": true,
"modify_only_own_db_tables": { "modify_only_own_db_tables": {
@ -153,15 +145,15 @@
"msag_consistency": true, "msag_consistency": true,
"names_no_dash": true, "names_no_dash": true,
"nesting": { "nesting": {
"depth": 7 "depth": 5
}, },
"newline_between_methods": false, "newline_between_methods": true,
"no_aliases": true, "no_aliases": true,
"no_chained_assignment": true, "no_chained_assignment": true,
"no_external_form_calls": true, "no_external_form_calls": true,
"no_inline_in_optional_branches": false, "no_inline_in_optional_branches": false,
"no_public_attributes": false, "no_public_attributes": false,
"no_yoda_conditions": false, "no_yoda_conditions": true,
"nrob_consistency": true, "nrob_consistency": true,
"object_naming": { "object_naming": {
"exclude": [], "exclude": [],
@ -189,19 +181,19 @@
"shlp": "^Z" "shlp": "^Z"
}, },
"obsolete_statement": true, "obsolete_statement": true,
"omit_parameter_name": false, "omit_parameter_name": true,
"omit_preceding_zeros": true, "omit_preceding_zeros": true,
"omit_receiving": true, "omit_receiving": true,
"parser_702_chaining": true, "parser_702_chaining": true,
"parser_error": true, "parser_error": true,
"parser_missing_space": false, "parser_missing_space": true,
"pragma_style": true, "pragma_style": true,
"prefer_corresponding": true, "prefer_corresponding": true,
"prefer_inline": false, "prefer_inline": false,
"prefer_is_not": false, "prefer_is_not": true,
"prefer_raise_exception_new": true, "prefer_raise_exception_new": true,
"prefer_returning_to_exporting": false, "prefer_returning_to_exporting": true,
"prefer_xsdbool": false, "prefer_xsdbool": true,
"preferred_compare_operator": true, "preferred_compare_operator": true,
"prefix_is_current_class": { "prefix_is_current_class": {
"severity": "Warning" "severity": "Warning"
@ -221,44 +213,41 @@
"sequential_blank": { "sequential_blank": {
"severity": "Warning" "severity": "Warning"
}, },
"short_case": false, "short_case": true,
"sicf_consistency": true, "sicf_consistency": true,
"slow_parameter_passing": true, "slow_parameter_passing": true,
"space_before_colon": true, "space_before_colon": true,
"space_before_dot": true, "space_before_dot": true,
"sql_escape_host_variables": true, "sql_escape_host_variables": true,
"start_at_tab": false, "start_at_tab": true,
"static_call_via_instance": { "static_call_via_instance": {
"allowInTestclassIncludes": false "allowInTestclassIncludes": false
}, },
"superclass_final": true, "superclass_final": true,
"superfluous_value": true, "superfluous_value": true,
"sy_modification": false, "sy_modification": true,
"tabl_enhancement_category": true, "tabl_enhancement_category": true,
"try_without_catch": true, "try_without_catch": true,
"type_form_parameters": true, "type_form_parameters": true,
"types_naming": false, "types_naming": false,
"uncaught_exception": true, "uncaught_exception": true,
"unknown_types": true, "unknown_types": true,
"unnecessary_chaining": false, "unnecessary_chaining": true,
"unnecessary_pragma": true, "unnecessary_pragma": true,
"unnecessary_return": true, "unnecessary_return": true,
"unreachable_code": { "unreachable_code": true,
"exclude": ["z2ui5_cl_fw_utility.clas.testclasses.abap"]
},
"unsecure_fae": true, "unsecure_fae": true,
"unused_ddic": true, "unused_ddic": true,
"unused_methods": true, "unused_methods": true,
"unused_types": true, "unused_types": true,
"unused_variables": { "unused_variables": {
"severity": "Error", "severity": "Error",
"exclude": ["z2ui5_cl_fw_utility.clas.testclasses.abap"], "skipNames": ["lv_dummy"]
"skipNames": ["lv_dummy", "i_mv_editor"]
}, },
"use_bool_expression": true, "use_bool_expression": true,
"use_class_based_exceptions": true, "use_class_based_exceptions": true,
"use_line_exists": false, "use_line_exists": true,
"use_new": false, "use_new": true,
"when_others_last": true, "when_others_last": true,
"whitespace_end": true, "whitespace_end": true,
"xml_consistency": true, "xml_consistency": true,

View File

@ -89,6 +89,7 @@ CLASS z2ui5_cl_util IMPLEMENTATION.
AND handle2 = @handle2 AND handle2 = @handle2
AND handle3 = @handle3 AND handle3 = @handle3
INTO CORRESPONDING FIELDS OF TABLE @lt_db. INTO CORRESPONDING FIELDS OF TABLE @lt_db.
ASSERT sy-subrc = 0.
DATA(ls_db) = lt_db[ 1 ]. DATA(ls_db) = lt_db[ 1 ].
@ -109,6 +110,7 @@ CLASS z2ui5_cl_util IMPLEMENTATION.
FROM z2ui5_t_fw_02 FROM z2ui5_t_fw_02
WHERE id = @id WHERE id = @id
INTO CORRESPONDING FIELDS OF TABLE @lt_db. INTO CORRESPONDING FIELDS OF TABLE @lt_db.
ASSERT sy-subrc = 0.
DATA(ls_db) = lt_db[ 1 ]. DATA(ls_db) = lt_db[ 1 ].
@ -132,6 +134,7 @@ CLASS z2ui5_cl_util IMPLEMENTATION.
data = xml_stringify( data ) ). data = xml_stringify( data ) ).
MODIFY z2ui5_t_fw_02 FROM @ls_db. MODIFY z2ui5_t_fw_02 FROM @ls_db.
ASSERT sy-subrc = 0.
IF check_commit = abap_true. IF check_commit = abap_true.
COMMIT WORK AND WAIT. COMMIT WORK AND WAIT.

View File

@ -3,7 +3,7 @@ CLASS ltcl_test DEFINITION FINAL FOR TESTING
RISK LEVEL HARMLESS. RISK LEVEL HARMLESS.
PRIVATE SECTION. PRIVATE SECTION.
METHODS: METHODS
first_test FOR TESTING RAISING cx_static_check. first_test FOR TESTING RAISING cx_static_check.
ENDCLASS. ENDCLASS.
@ -20,17 +20,17 @@ CLASS ltcl_test IMPLEMENTATION.
END OF ty_row. END OF ty_row.
DATA(ls_row) = VALUE ty_row( DATA(ls_row) = VALUE ty_row(
title = `test` title = `test`
value = `val` value = `val`
selected = abap_true ). selected = abap_true ).
DATA(ls_row_result) = VALUE ty_row( ). DATA(ls_row_result) = VALUE ty_row( ).
DATA(lv_id) = z2ui5_cl_util=>db_save( DATA(lv_id) = z2ui5_cl_util=>db_save(
uname = `name` uname = `name`
handle = `handle1` handle = `handle1`
handle2 = `handle2` handle2 = `handle2`
handle3 = `handle3` handle3 = `handle3`
data = ls_row ). data = ls_row ).
z2ui5_cl_util=>db_load_by_id( z2ui5_cl_util=>db_load_by_id(
EXPORTING EXPORTING
@ -45,10 +45,10 @@ CLASS ltcl_test IMPLEMENTATION.
CLEAR ls_row_result. CLEAR ls_row_result.
z2ui5_cl_util=>db_load_by_handle( z2ui5_cl_util=>db_load_by_handle(
EXPORTING EXPORTING
uname = `name` uname = `name`
handle = `handle1` handle = `handle1`
handle2 = `handle2` handle2 = `handle2`
handle3 = `handle3` handle3 = `handle3`
IMPORTING IMPORTING
result = ls_row_result ). result = ls_row_result ).

View File

@ -1,4 +1,4 @@
CLASS z2ui5_cl_util_api DEFINITION CLASS z2ui5_cl_util_api DEFINITION
PUBLIC PUBLIC
CREATE PUBLIC CREATE PUBLIC
INHERITING FROM z2ui5_cl_util_stmpncfctn. INHERITING FROM z2ui5_cl_util_stmpncfctn.
@ -198,9 +198,9 @@ CLASS z2ui5_cl_util_api DEFINITION
CLASS-METHODS xml_srtti_parse CLASS-METHODS xml_srtti_parse
IMPORTING IMPORTING
!rtti_data TYPE clike !rtti_data TYPE clike
EXPORTING RETURNING
!e_data TYPE REF TO data. VALUE(result) TYPE REF TO data.
CLASS-METHODS time_get_timestampl CLASS-METHODS time_get_timestampl
RETURNING RETURNING
@ -265,12 +265,6 @@ CLASS z2ui5_cl_util_api DEFINITION
RETURNING RETURNING
VALUE(result) TYPE abap_bool. VALUE(result) TYPE abap_bool.
CLASS-METHODS rtti_get_type_kind_by_descr
IMPORTING
!val TYPE REF TO cl_abap_typedescr
RETURNING
VALUE(result) TYPE string.
CLASS-METHODS rtti_get_type_kind CLASS-METHODS rtti_get_type_kind
IMPORTING IMPORTING
!val TYPE any !val TYPE any
@ -354,18 +348,7 @@ CLASS z2ui5_cl_util_api IMPLEMENTATION.
LOOP AT sdescr->components REFERENCE INTO DATA(lr_comp). LOOP AT sdescr->components REFERENCE INTO DATA(lr_comp).
DATA(lv_element) = attri && lr_comp->name. DATA(ls_attri) = VALUE abap_componentdescr( name = attri && lr_comp->name ).
* DATA(ls_attri) = VALUE z2ui5_if_core_types=>ty_s_attri(
* name = lv_element
* type_kind = lr_comp->type_kind ).
*
DATA(ls_attri) = VALUE abap_componentdescr(
name = lv_element
* type_kind = lr_comp->type_kind
).
"todo type of field
INSERT ls_attri INTO TABLE result. INSERT ls_attri INTO TABLE result.
ENDLOOP. ENDLOOP.
@ -667,6 +650,7 @@ CLASS z2ui5_cl_util_api IMPLEMENTATION.
LOOP AT lt_cols REFERENCE INTO lr_col. LOOP AT lt_cols REFERENCE INTO lr_col.
ASSIGN lr_row->* TO FIELD-SYMBOL(<row>). ASSIGN lr_row->* TO FIELD-SYMBOL(<row>).
ASSIGN COMPONENT sy-tabix OF STRUCTURE <row> TO FIELD-SYMBOL(<field>). ASSIGN COMPONENT sy-tabix OF STRUCTURE <row> TO FIELD-SYMBOL(<field>).
ASSERT sy-subrc = 0.
<field> = lr_col->*. <field> = lr_col->*.
ENDLOOP. ENDLOOP.
@ -692,7 +676,7 @@ CLASS z2ui5_cl_util_api IMPLEMENTATION.
METHOD json_stringify. METHOD json_stringify.
TRY. TRY.
DATA(li_ajson) = CAST z2ui5_if_ajson( z2ui5_cl_ajson=>create_empty( ) ). DATA(li_ajson) = CAST z2ui5_if_ajson( z2ui5_cl_ajson=>create_empty( ) ).
result = li_ajson->set( iv_path = `/` iv_val = any )->stringify( ). result = li_ajson->set( iv_path = `/` iv_val = any )->stringify( ).
CATCH z2ui5_cx_ajson_error INTO DATA(x). CATCH z2ui5_cx_ajson_error INTO DATA(x).
@ -805,8 +789,8 @@ CLASS z2ui5_cl_util_api IMPLEMENTATION.
LOOP AT result REFERENCE INTO DATA(lr_comp) LOOP AT result REFERENCE INTO DATA(lr_comp)
WHERE as_include = abap_true. WHERE as_include = abap_true.
DATA(lt_attri) = rtti_get_t_attri_by_include( type = lr_comp->type DATA(lt_attri) = rtti_get_t_attri_by_include( type = lr_comp->type
attri = lr_comp->name ). attri = lr_comp->name ).
DELETE result. DELETE result.
INSERT LINES OF lt_attri INTO TABLE result. INSERT LINES OF lt_attri INTO TABLE result.
@ -831,12 +815,11 @@ CLASS z2ui5_cl_util_api IMPLEMENTATION.
METHOD source_get_method. METHOD source_get_method.
DATA(lt_source) = method_get_source( DATA(lt_source) = method_get_source(
iv_classname = iv_classname iv_classname = iv_classname
iv_methodname = iv_methodname iv_methodname = iv_methodname ).
).
result = source_method_to_file( it_source = lt_source ). result = source_method_to_file( lt_source ).
ENDMETHOD. ENDMETHOD.
@ -1000,8 +983,8 @@ CLASS z2ui5_cl_util_api IMPLEMENTATION.
lo_datadescr ?= rtti_type. lo_datadescr ?= rtti_type.
CREATE DATA e_data TYPE HANDLE lo_datadescr. CREATE DATA result TYPE HANDLE lo_datadescr.
ASSIGN e_data->* TO FIELD-SYMBOL(<variable>). ASSIGN result->* TO FIELD-SYMBOL(<variable>).
CALL TRANSFORMATION id SOURCE XML rtti_data RESULT dobj = <variable>. CALL TRANSFORMATION id SOURCE XML rtti_data RESULT dobj = <variable>.
ENDMETHOD. ENDMETHOD.
@ -1059,36 +1042,11 @@ CLASS z2ui5_cl_util_api IMPLEMENTATION.
ENDMETHOD. ENDMETHOD.
METHOD rtti_get_type_kind_by_descr.
TRY.
DATA(lo_test) = CAST cl_abap_structdescr( val ).
result = lo_test->type_kind.
RETURN.
CATCH cx_sy_move_cast_error.
ENDTRY.
TRY.
DATA(lo_test2) = CAST cl_abap_objectdescr( val ).
result = lo_test2->type_kind.
RETURN.
CATCH cx_sy_move_cast_error.
ENDTRY.
TRY.
DATA(lo_test3) = CAST cl_abap_refdescr( val ).
result = lo_test3->type_kind.
RETURN.
CATCH cx_sy_move_cast_error.
ENDTRY.
ENDMETHOD.
METHOD unassign_object. METHOD unassign_object.
FIELD-SYMBOLS <unassign> TYPE any. FIELD-SYMBOLS <unassign> TYPE any.
ASSIGN val->* TO <unassign>. ASSIGN val->* TO <unassign>.
result = <unassign>. result = <unassign>.
ENDMETHOD. ENDMETHOD.
@ -1096,7 +1054,7 @@ CLASS z2ui5_cl_util_api IMPLEMENTATION.
FIELD-SYMBOLS <unassign> TYPE any. FIELD-SYMBOLS <unassign> TYPE any.
ASSIGN val->* TO <unassign>. ASSIGN val->* TO <unassign>.
result = <unassign>. result = <unassign>.
ENDMETHOD. ENDMETHOD.

View File

@ -126,6 +126,7 @@ CLASS ltcl_unit_test_abap_api IMPLEMENTATION.
DATA(lv_assign) = `LO_APP->` && 'MV_VAL'. DATA(lv_assign) = `LO_APP->` && 'MV_VAL'.
ASSIGN (lv_assign) TO <any>. ASSIGN (lv_assign) TO <any>.
ASSERT sy-subrc = 0.
cl_abap_unit_assert=>assert_equals( cl_abap_unit_assert=>assert_equals(
act = <any> act = <any>
@ -329,12 +330,12 @@ CLASS ltcl_unit_test IMPLEMENTATION.
GET REFERENCE OF lv_test INTO lr_data. GET REFERENCE OF lv_test INTO lr_data.
cl_abap_unit_assert=>assert_equals( cl_abap_unit_assert=>assert_equals(
act = z2ui5_cl_util_api=>rtti_check_ref_data( lr_data ) act = z2ui5_cl_util_api=>rtti_check_ref_data( lr_data )
exp = abap_true ). exp = abap_true ).
cl_abap_unit_assert=>assert_equals( cl_abap_unit_assert=>assert_equals(
act = z2ui5_cl_util_api=>rtti_check_ref_data( lv_test ) act = z2ui5_cl_util_api=>rtti_check_ref_data( lv_test )
exp = abap_false ). exp = abap_false ).
ENDMETHOD. ENDMETHOD.
@ -359,7 +360,7 @@ CLASS ltcl_unit_test IMPLEMENTATION.
cl_abap_unit_assert=>assert_equals( cl_abap_unit_assert=>assert_equals(
act = z2ui5_cl_util=>boolean_abap_2_json( `{ABCD}` ) act = z2ui5_cl_util=>boolean_abap_2_json( `{ABCD}` )
exp = `{ABCD}`). exp = `{ABCD}` ).
ENDMETHOD. ENDMETHOD.
@ -423,8 +424,8 @@ CLASS ltcl_unit_test IMPLEMENTATION.
METHOD test_func_get_user_tech. METHOD test_func_get_user_tech.
cl_abap_unit_assert=>assert_equals( cl_abap_unit_assert=>assert_equals(
act = sy-uname act = sy-uname
exp = z2ui5_cl_util=>user_get_tech( ) ). exp = z2ui5_cl_util=>user_get_tech( ) ).
cl_abap_unit_assert=>assert_not_initial( z2ui5_cl_util=>user_get_tech( ) ). cl_abap_unit_assert=>assert_not_initial( z2ui5_cl_util=>user_get_tech( ) ).
@ -507,7 +508,7 @@ CLASS ltcl_unit_test IMPLEMENTATION.
exp = `100` ). exp = `100` ).
cl_abap_unit_assert=>assert_equals( cl_abap_unit_assert=>assert_equals(
act = lt_param[ n = `app_start` ]-v act = lt_param[ n = `app_start` ]-v
exp = `z2ui5_cl_app_hello_world` ). exp = `z2ui5_cl_app_hello_world` ).
ENDMETHOD. ENDMETHOD.

View File

@ -205,6 +205,7 @@ CLASS z2ui5_cl_util_stmpncfctn IMPLEMENTATION.
ro_class = object. ro_class = object.
ASSIGN ('OBJECT->IF_XCO_AO_CLASS~IMPLEMENTATION') TO <any>. ASSIGN ('OBJECT->IF_XCO_AO_CLASS~IMPLEMENTATION') TO <any>.
ASSERT sy-subrc = 0.
object = <any>. object = <any>.
CALL METHOD object->('IF_XCO_CLAS_IMPLEMENTATION~METHOD') CALL METHOD object->('IF_XCO_CLAS_IMPLEMENTATION~METHOD')
@ -275,7 +276,7 @@ CLASS z2ui5_cl_util_stmpncfctn IMPLEMENTATION.
clsname TYPE c LENGTH 30, clsname TYPE c LENGTH 30,
refclsname TYPE c LENGTH 30, refclsname TYPE c LENGTH 30,
END OF ty_s_impl. END OF ty_s_impl.
DATA lt_impl TYPE STANDARD TABLE OF ty_s_impl WITH DEFAULT KEY. DATA lt_impl TYPE STANDARD TABLE OF ty_s_impl WITH EMPTY KEY.
TYPES: BEGIN OF ty_s_key, TYPES: BEGIN OF ty_s_key,
intkey TYPE c LENGTH 30, intkey TYPE c LENGTH 30,
END OF ty_s_key. END OF ty_s_key.
@ -336,10 +337,9 @@ CLASS z2ui5_cl_util_stmpncfctn IMPLEMENTATION.
METHOD rtti_get_data_element_texts. METHOD rtti_get_data_element_texts.
DATA: DATA:
data_element_name TYPE c LENGTH 30, ddic_ref TYPE REF TO data,
ddic_ref TYPE REF TO data, data_element TYPE REF TO object,
data_element TYPE REF TO object, content TYPE REF TO object,
content TYPE REF TO object,
BEGIN OF ddic, BEGIN OF ddic,
reptext TYPE string, reptext TYPE string,
scrtext_s TYPE string, scrtext_s TYPE string,
@ -348,7 +348,7 @@ CLASS z2ui5_cl_util_stmpncfctn IMPLEMENTATION.
END OF ddic, END OF ddic,
exists TYPE abap_bool. exists TYPE abap_bool.
data_element_name = i_data_element_name. DATA(data_element_name) = i_data_element_name.
TRY. TRY.
cl_abap_typedescr=>describe_by_name( 'T100' ). cl_abap_typedescr=>describe_by_name( 'T100' ).
@ -361,11 +361,11 @@ CLASS z2ui5_cl_util_stmpncfctn IMPLEMENTATION.
cl_abap_elemdescr=>describe_by_name( cl_abap_elemdescr=>describe_by_name(
EXPORTING EXPORTING
p_name = data_element_name p_name = data_element_name
RECEIVING RECEIVING
p_descr_ref = DATA(lo_typedescr) p_descr_ref = DATA(lo_typedescr)
EXCEPTIONS EXCEPTIONS
OTHERS = 1 ). OTHERS = 1 ).
IF sy-subrc <> 0. IF sy-subrc <> 0.
RETURN. RETURN.
ENDIF. ENDIF.

View File

@ -42,8 +42,8 @@ CLASS ltcl_test IMPLEMENTATION.
DATA(lv_string3) = z2ui5_cl_util_stmpncfctn=>conv_get_string_by_xstring( lv_xstring2 ). DATA(lv_string3) = z2ui5_cl_util_stmpncfctn=>conv_get_string_by_xstring( lv_xstring2 ).
cl_abap_unit_assert=>assert_equals( cl_abap_unit_assert=>assert_equals(
act = lv_string3 act = lv_string3
exp = lv_string ). exp = lv_string ).
ENDMETHOD. ENDMETHOD.

View File

@ -0,0 +1,164 @@
CLASS z2ui5_cl_core_attri_srv DEFINITION
PUBLIC FINAL
CREATE PUBLIC.
PUBLIC SECTION.
METHODS constructor
IMPORTING
attri TYPE REF TO z2ui5_if_core_types=>ty_t_attri
app TYPE REF TO object.
METHODS attri_refs_update.
METHODS attri_before_save.
METHODS attri_after_load.
METHODS attri_get_val_ref
IMPORTING
iv_path TYPE clike
RETURNING
VALUE(result) TYPE REF TO data.
METHODS attri_search_a_dissolve
IMPORTING
val TYPE REF TO data
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_core_types=>ty_s_attri.
PROTECTED SECTION.
DATA mt_attri TYPE REF TO z2ui5_if_core_types=>ty_t_attri.
DATA mo_app TYPE REF TO object.
METHODS attri_search
IMPORTING
val TYPE REF TO data
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_core_types=>ty_s_attri.
PRIVATE SECTION.
ENDCLASS.
CLASS z2ui5_cl_core_attri_srv IMPLEMENTATION.
METHOD attri_after_load.
LOOP AT mt_attri->* REFERENCE INTO DATA(lr_attri).
lr_attri->r_ref = attri_get_val_ref( lr_attri->name ).
lr_attri->o_typedescr = cl_abap_datadescr=>describe_by_data_ref( lr_attri->r_ref ).
IF lr_attri->srtti_data IS NOT INITIAL.
ASSIGN lr_attri->r_ref->* TO FIELD-SYMBOL(<val>).
<val> = z2ui5_cl_util=>xml_srtti_parse( lr_attri->srtti_data ).
CLEAR lr_attri->srtti_data.
ENDIF.
ENDLOOP.
ENDMETHOD.
METHOD attri_before_save.
LOOP AT mt_attri->* REFERENCE INTO DATA(lr_attri).
IF lr_attri->bind_type = z2ui5_if_core_types=>cs_bind_type-one_time.
DELETE mt_attri->*.
CONTINUE.
ENDIF.
IF lr_attri->o_typedescr->type_kind <> cl_abap_classdescr=>typekind_dref.
CLEAR lr_attri->r_ref.
CONTINUE.
ENDIF.
ASSIGN lr_attri->r_ref->* TO FIELD-SYMBOL(<val_ref>).
ASSIGN <val_ref>->* TO FIELD-SYMBOL(<val>).
lr_attri->srtti_data = z2ui5_cl_util=>xml_srtti_stringify( <val> ).
CLEAR <val>.
CLEAR <val_ref>.
CLEAR lr_attri->r_ref.
ENDLOOP.
ENDMETHOD.
METHOD attri_search_a_dissolve.
result = attri_search( val ).
IF result IS BOUND.
RETURN.
ENDIF.
DO 5 TIMES.
DATA(lo_dissolve) = NEW z2ui5_cl_core_dissolve_srv(
attri = mt_attri
app = mo_app ).
lo_dissolve->main( ).
result = attri_search( 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.
ASSIGN mo_app->(iv_path) TO FIELD-SYMBOL(<attri>).
IF sy-subrc <> 0.
RAISE EXCEPTION TYPE z2ui5_cx_util_error
EXPORTING
val = `DEREF_FAILED_TARGET_INITIAL`.
ENDIF.
GET REFERENCE OF <attri> INTO result.
IF sy-subrc <> 0.
ASSERT 1 = 0.
ENDIF.
ENDMETHOD.
METHOD attri_refs_update.
LOOP AT mt_attri->* REFERENCE INTO DATA(lr_attri).
lr_attri->r_ref = attri_get_val_ref( lr_attri->name ).
lr_attri->o_typedescr = cl_abap_datadescr=>describe_by_data_ref( lr_attri->r_ref ).
ENDLOOP.
ENDMETHOD.
METHOD constructor.
mt_attri = attri.
mo_app = app.
ENDMETHOD.
METHOD attri_search.
LOOP AT mt_attri->* REFERENCE INTO DATA(lr_attri)
WHERE o_typedescr->kind = cl_abap_typedescr=>kind_elem
OR o_typedescr->kind = cl_abap_typedescr=>kind_struct
OR o_typedescr->kind = cl_abap_typedescr=>kind_table.
IF lr_attri->r_ref = val.
result = lr_attri.
RETURN.
ENDIF.
ENDLOOP.
ENDMETHOD.
ENDCLASS.

View File

@ -0,0 +1,256 @@
*
*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.

View File

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

View File

@ -80,6 +80,7 @@ CLASS z2ui5_cl_core_bind_srv IMPLEMENTATION.
LOOP AT lt_attri ASSIGNING FIELD-SYMBOL(<comp>). LOOP AT lt_attri ASSIGNING FIELD-SYMBOL(<comp>).
ASSIGN COMPONENT <comp>-name OF STRUCTURE <row> TO <ele>. ASSIGN COMPONENT <comp>-name OF STRUCTURE <row> TO <ele>.
ASSERT sy-subrc = 0.
lr_ref_in = REF #( <ele> ). lr_ref_in = REF #( <ele> ).
IF i_val = lr_ref_in. IF i_val = lr_ref_in.
@ -178,7 +179,7 @@ CLASS z2ui5_cl_core_bind_srv IMPLEMENTATION.
result = replace( val = result sub = `>` with = `` ). result = replace( val = result sub = `>` with = `` ).
result = COND #( WHEN mv_type = z2ui5_if_core_types=>cs_bind_type-two_way result = COND #( WHEN mv_type = z2ui5_if_core_types=>cs_bind_type-two_way
THEN `/` && z2ui5_if_core_types=>cs_ui5-two_way_model ) THEN `/` && z2ui5_if_core_types=>cs_ui5-two_way_model )
&& `/` && result. && `/` && result.
ENDMETHOD. ENDMETHOD.
@ -198,22 +199,21 @@ CLASS z2ui5_cl_core_bind_srv IMPLEMENTATION.
ms_config = config. ms_config = config.
mv_type = type. mv_type = type.
DATA(lo_model) = NEW z2ui5_cl_core_model_srv( DATA(lo_model) = NEW z2ui5_cl_core_attri_srv(
attri = REF #( mo_app->mt_attri ) attri = REF #( mo_app->mt_attri )
app = mo_app->mo_app ). app = mo_app->mo_app ).
mr_attri = lo_model->search_a_dissolve_attribute( val ). mr_attri = lo_model->attri_search_a_dissolve( val ).
IF mr_attri->bind_type IS NOT INITIAL. IF mr_attri->bind_type IS NOT INITIAL.
check_raise_existing( ). check_raise_existing( ).
result = mr_attri->name_client.
ELSE. ELSE.
check_raise_new( ). check_raise_new( ).
update_model_attri( ). update_model_attri( ).
result = mr_attri->name_client.
ENDIF. ENDIF.
result = mr_attri->name_client.
IF result = `/` && z2ui5_if_core_types=>cs_ui5-two_way_model. IF `/` && z2ui5_if_core_types=>cs_ui5-two_way_model = result.
RAISE EXCEPTION TYPE z2ui5_cx_util_error RAISE EXCEPTION TYPE z2ui5_cx_util_error
EXPORTING EXPORTING
val = `<p>Name of variable not allowed - x is reserved word - use anoter name for your attribute`. val = `<p>Name of variable not allowed - x is reserved word - use anoter name for your attribute`.
@ -236,8 +236,8 @@ CLASS z2ui5_cl_core_bind_srv IMPLEMENTATION.
result = lo_bind->main( val = config-tab type = type config = VALUE #( path_only = abap_true ) ). result = lo_bind->main( val = config-tab type = type config = VALUE #( path_only = abap_true ) ).
result = bind_tab_cell( result = bind_tab_cell(
iv_name = result iv_name = result
i_val = val ). i_val = val ).
IF ms_config-path_only = abap_false. IF ms_config-path_only = abap_false.
result = `{` && result && `}`. result = `{` && result && `}`.
@ -249,7 +249,7 @@ CLASS z2ui5_cl_core_bind_srv IMPLEMENTATION.
METHOD main_local. METHOD main_local.
TRY. TRY.
DATA(lo_json) = CAST z2ui5_if_ajson( z2ui5_cl_ajson=>new( ) ). DATA(lo_json) = CAST z2ui5_if_ajson( z2ui5_cl_ajson=>new( ) ).
lo_json->set( iv_path = `/` iv_val = val ). lo_json->set( iv_path = `/` iv_val = val ).
IF config-custom_mapper IS BOUND. IF config-custom_mapper IS BOUND.
@ -268,8 +268,8 @@ CLASS z2ui5_cl_core_bind_srv IMPLEMENTATION.
INSERT VALUE #( name_client = |/{ lv_id }| INSERT VALUE #( name_client = |/{ lv_id }|
name = lv_id name = lv_id
json_bind_local = lo_json json_bind_local = lo_json
bind_type = z2ui5_if_core_types=>cs_bind_type-one_time ) bind_type = z2ui5_if_core_types=>cs_bind_type-one_time )
INTO TABLE mo_app->mt_attri. INTO TABLE mo_app->mt_attri.
result = |/{ lv_id }|. result = |/{ lv_id }|.
@ -291,8 +291,9 @@ CLASS z2ui5_cl_core_bind_srv IMPLEMENTATION.
mr_attri->custom_filter_back = ms_config-custom_filter_back. mr_attri->custom_filter_back = ms_config-custom_filter_back.
mr_attri->custom_mapper = ms_config-custom_mapper. mr_attri->custom_mapper = ms_config-custom_mapper.
mr_attri->custom_mapper_back = ms_config-custom_mapper_back. mr_attri->custom_mapper_back = ms_config-custom_mapper_back.
mr_attri->view = COND #( WHEN ms_config-view IS INITIAL THEN z2ui5_if_client=>cs_view-main ELSE ms_config-view ). mr_attri->view = COND #( WHEN ms_config-view IS INITIAL THEN z2ui5_if_client=>cs_view-main ELSE ms_config-view ).
mr_attri->name_client = get_client_name( ). mr_attri->name_client = get_client_name( ).
ENDMETHOD. ENDMETHOD.
ENDCLASS. ENDCLASS.

View File

@ -70,8 +70,8 @@ CLASS ltcl_test_bind IMPLEMENTATION.
TRY. TRY.
lo_bind->main( lo_bind->main(
val = REF #( lo_app_client->xx ) val = REF #( lo_app_client->xx )
type = z2ui5_if_core_types=>cs_bind_type-one_way ). type = z2ui5_if_core_types=>cs_bind_type-one_way ).
cl_abap_unit_assert=>abort( ). cl_abap_unit_assert=>abort( ).
@ -93,8 +93,8 @@ CLASS ltcl_test_bind IMPLEMENTATION.
DATA(lo_bind) = NEW z2ui5_cl_core_bind_srv( lo_app ). DATA(lo_bind) = NEW z2ui5_cl_core_bind_srv( lo_app ).
DATA(lv_bind) = lo_bind->main( DATA(lv_bind) = lo_bind->main(
val = REF #( lo_app_client->mv_value ) val = REF #( lo_app_client->mv_value )
type = z2ui5_if_core_types=>cs_bind_type-one_way ). type = z2ui5_if_core_types=>cs_bind_type-one_way ).
cl_abap_unit_assert=>assert_equals( cl_abap_unit_assert=>assert_equals(
act = lv_bind act = lv_bind
@ -115,13 +115,13 @@ CLASS ltcl_test_bind IMPLEMENTATION.
DATA(lo_bind) = NEW z2ui5_cl_core_bind_srv( lo_app ). DATA(lo_bind) = NEW z2ui5_cl_core_bind_srv( lo_app ).
lo_bind->main( lo_bind->main(
val = REF #( lo_app_client->mv_value ) val = REF #( lo_app_client->mv_value )
type = z2ui5_if_core_types=>cs_bind_type-one_way ). type = z2ui5_if_core_types=>cs_bind_type-one_way ).
TRY. TRY.
lo_bind->main( lo_bind->main(
val = REF #( lo_app_client->mv_value ) val = REF #( lo_app_client->mv_value )
type = z2ui5_if_core_types=>cs_bind_type-two_way ). type = z2ui5_if_core_types=>cs_bind_type-two_way ).
cl_abap_unit_assert=>abort( ). cl_abap_unit_assert=>abort( ).
@ -144,12 +144,12 @@ CLASS ltcl_test_bind IMPLEMENTATION.
DATA(lo_bind) = NEW z2ui5_cl_core_bind_srv( lo_app ). DATA(lo_bind) = NEW z2ui5_cl_core_bind_srv( lo_app ).
DATA(lv_bind) = lo_bind->main( DATA(lv_bind) = lo_bind->main(
val = REF #( lo_app_client->mv_value ) val = REF #( lo_app_client->mv_value )
type = z2ui5_if_core_types=>cs_bind_type-two_way ). type = z2ui5_if_core_types=>cs_bind_type-two_way ).
DATA(lv_bind2) = lo_bind->main( DATA(lv_bind2) = lo_bind->main(
val = REF #( lo_app_client->mv_value ) val = REF #( lo_app_client->mv_value )
type = z2ui5_if_core_types=>cs_bind_type-two_way ). type = z2ui5_if_core_types=>cs_bind_type-two_way ).
cl_abap_unit_assert=>assert_equals( cl_abap_unit_assert=>assert_equals(
act = lv_bind act = lv_bind
@ -201,14 +201,14 @@ CLASS ltcl_test_main_structure IMPLEMENTATION.
RETURN. RETURN.
ENDIF. ENDIF.
DATA(lo_test_app) = NEW ltcl_test_main_structure( ). DATA(lo_test_app) = NEW ltcl_test_main_structure( ).
DATA(lo_app) = NEW z2ui5_cl_core_app( ). DATA(lo_app) = NEW z2ui5_cl_core_app( ).
lo_app->mo_app = lo_test_app. lo_app->mo_app = lo_test_app.
DATA(lo_bind) = NEW z2ui5_cl_core_bind_srv( lo_app ). DATA(lo_bind) = NEW z2ui5_cl_core_bind_srv( lo_app ).
DATA(lv_result) = lo_bind->main( DATA(lv_result) = lo_bind->main(
val = REF #( lo_test_app->ms_struc-input ) val = REF #( lo_test_app->ms_struc-input )
type = z2ui5_if_core_types=>cs_bind_type-one_way ). type = z2ui5_if_core_types=>cs_bind_type-one_way ).
cl_abap_unit_assert=>assert_equals( cl_abap_unit_assert=>assert_equals(
act = lv_result act = lv_result
@ -217,7 +217,7 @@ CLASS ltcl_test_main_structure IMPLEMENTATION.
lv_result = lo_bind->main( lv_result = lo_bind->main(
val = REF #( lo_test_app->ms_struc-input ) val = REF #( lo_test_app->ms_struc-input )
config = VALUE #( path_only = abap_true ) config = VALUE #( path_only = abap_true )
type = z2ui5_if_core_types=>cs_bind_type-one_way ). type = z2ui5_if_core_types=>cs_bind_type-one_way ).
cl_abap_unit_assert=>assert_equals( cl_abap_unit_assert=>assert_equals(
act = lv_result act = lv_result
@ -231,14 +231,14 @@ CLASS ltcl_test_main_structure IMPLEMENTATION.
RETURN. RETURN.
ENDIF. ENDIF.
DATA(lo_test_app) = NEW ltcl_test_main_structure( ). DATA(lo_test_app) = NEW ltcl_test_main_structure( ).
DATA(lo_app) = NEW z2ui5_cl_core_app( ). DATA(lo_app) = NEW z2ui5_cl_core_app( ).
lo_app->mo_app = lo_test_app. lo_app->mo_app = lo_test_app.
DATA(lo_bind) = NEW z2ui5_cl_core_bind_srv( lo_app ). DATA(lo_bind) = NEW z2ui5_cl_core_bind_srv( lo_app ).
DATA(lv_result) = lo_bind->main( DATA(lv_result) = lo_bind->main(
val = REF #( lo_test_app->ms_struc-s_02-input ) val = REF #( lo_test_app->ms_struc-s_02-input )
type = z2ui5_if_core_types=>cs_bind_type-one_way ). type = z2ui5_if_core_types=>cs_bind_type-one_way ).
cl_abap_unit_assert=>assert_equals( cl_abap_unit_assert=>assert_equals(
act = lv_result act = lv_result
@ -252,14 +252,14 @@ CLASS ltcl_test_main_structure IMPLEMENTATION.
RETURN. RETURN.
ENDIF. ENDIF.
DATA(lo_test_app) = NEW ltcl_test_main_structure( ). DATA(lo_test_app) = NEW ltcl_test_main_structure( ).
DATA(lo_app) = NEW z2ui5_cl_core_app( ). DATA(lo_app) = NEW z2ui5_cl_core_app( ).
lo_app->mo_app = lo_test_app. lo_app->mo_app = lo_test_app.
DATA(lo_bind) = NEW z2ui5_cl_core_bind_srv( lo_app ). DATA(lo_bind) = NEW z2ui5_cl_core_bind_srv( lo_app ).
DATA(lv_result) = lo_bind->main( DATA(lv_result) = lo_bind->main(
val = REF #( lo_test_app->ms_struc-s_02-s_03-input ) val = REF #( lo_test_app->ms_struc-s_02-s_03-input )
type = z2ui5_if_core_types=>cs_bind_type-one_way ). type = z2ui5_if_core_types=>cs_bind_type-one_way ).
cl_abap_unit_assert=>assert_equals( cl_abap_unit_assert=>assert_equals(
act = lv_result act = lv_result
@ -273,14 +273,14 @@ CLASS ltcl_test_main_structure IMPLEMENTATION.
RETURN. RETURN.
ENDIF. ENDIF.
DATA(lo_test_app) = NEW ltcl_test_main_structure( ). DATA(lo_test_app) = NEW ltcl_test_main_structure( ).
DATA(lo_app) = NEW z2ui5_cl_core_app( ). DATA(lo_app) = NEW z2ui5_cl_core_app( ).
lo_app->mo_app = lo_test_app. lo_app->mo_app = lo_test_app.
DATA(lo_bind) = NEW z2ui5_cl_core_bind_srv( lo_app ). DATA(lo_bind) = NEW z2ui5_cl_core_bind_srv( lo_app ).
DATA(lv_result) = lo_bind->main( DATA(lv_result) = lo_bind->main(
val = REF #( lo_test_app->ms_struc-s_02-s_03-s_04-input ) val = REF #( lo_test_app->ms_struc-s_02-s_03-s_04-input )
type = z2ui5_if_core_types=>cs_bind_type-one_way ). type = z2ui5_if_core_types=>cs_bind_type-one_way ).
cl_abap_unit_assert=>assert_equals( cl_abap_unit_assert=>assert_equals(
act = lv_result act = lv_result
@ -332,7 +332,7 @@ CLASS ltcl_test_main_object IMPLEMENTATION.
RETURN. RETURN.
ENDIF. ENDIF.
DATA(lo_test_app) = NEW ltcl_test_main_object( ). DATA(lo_test_app) = NEW ltcl_test_main_object( ).
lo_test_app->mo_obj = NEW #( ). lo_test_app->mo_obj = NEW #( ).
lo_test_app->mo_obj->mv_value = `test`. lo_test_app->mo_obj->mv_value = `test`.
DATA(lo_app) = NEW z2ui5_cl_core_app( ). DATA(lo_app) = NEW z2ui5_cl_core_app( ).
@ -340,8 +340,8 @@ CLASS ltcl_test_main_object IMPLEMENTATION.
DATA(lo_bind) = NEW z2ui5_cl_core_bind_srv( lo_app ). DATA(lo_bind) = NEW z2ui5_cl_core_bind_srv( lo_app ).
DATA(lv_result) = lo_bind->main( DATA(lv_result) = lo_bind->main(
val = REF #( lo_test_app->mo_obj->mv_value ) val = REF #( lo_test_app->mo_obj->mv_value )
type = z2ui5_if_core_types=>cs_bind_type-one_way ). type = z2ui5_if_core_types=>cs_bind_type-one_way ).
cl_abap_unit_assert=>assert_equals( cl_abap_unit_assert=>assert_equals(
act = lv_result act = lv_result
@ -355,15 +355,15 @@ CLASS ltcl_test_main_object IMPLEMENTATION.
RETURN. RETURN.
ENDIF. ENDIF.
DATA(lo_test_app) = NEW ltcl_test_main_object( ). DATA(lo_test_app) = NEW ltcl_test_main_object( ).
lo_test_app->mo_obj = NEW #( ). lo_test_app->mo_obj = NEW #( ).
DATA(lo_app) = NEW z2ui5_cl_core_app( ). DATA(lo_app) = NEW z2ui5_cl_core_app( ).
lo_app->mo_app = lo_test_app. lo_app->mo_app = lo_test_app.
DATA(lo_bind) = NEW z2ui5_cl_core_bind_srv( lo_app ). DATA(lo_bind) = NEW z2ui5_cl_core_bind_srv( lo_app ).
DATA(lv_result) = lo_bind->main( DATA(lv_result) = lo_bind->main(
val = REF #( lo_test_app->mo_obj->ms_struc-input ) val = REF #( lo_test_app->mo_obj->ms_struc-input )
type = z2ui5_if_core_types=>cs_bind_type-one_way ). type = z2ui5_if_core_types=>cs_bind_type-one_way ).
cl_abap_unit_assert=>assert_equals( cl_abap_unit_assert=>assert_equals(
act = lv_result act = lv_result

View File

@ -0,0 +1,206 @@
CLASS z2ui5_cl_core_dissolve_srv DEFINITION
PUBLIC
FINAL
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.
PROTECTED SECTION.
DATA mt_attri TYPE REF TO z2ui5_if_core_types=>ty_t_attri.
DATA mo_app TYPE REF TO object.
METHODS main_run.
METHODS main_init.
METHODS diss_struc
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 diss_dref
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 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 create_new_entry
IMPORTING
name TYPE string
RETURNING
VALUE(result) TYPE z2ui5_if_core_types=>ty_s_attri.
PRIVATE SECTION.
ENDCLASS.
CLASS z2ui5_cl_core_dissolve_srv IMPLEMENTATION.
METHOD constructor.
mt_attri = attri.
mo_app = app.
ENDMETHOD.
METHOD create_new_entry.
result = VALUE z2ui5_if_core_types=>ty_s_attri( ).
result-name = name.
DATA(lo_model) = NEW z2ui5_cl_core_attri_srv(
attri = mt_attri
app = mo_app ).
result-r_ref = lo_model->attri_get_val_ref( name ).
result-o_typedescr = cl_abap_datadescr=>describe_by_data_ref( result-r_ref ).
ENDMETHOD.
METHOD diss_dref.
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( lr_ref ).
CASE ls_attri2-o_typedescr->kind.
WHEN cl_abap_datadescr=>kind_struct.
DATA(lt_attri) = diss_struc( ir_attri ).
INSERT LINES OF lt_attri INTO TABLE result.
WHEN OTHERS.
ls_attri2-name = ir_attri->name && `->*`.
DATA(lo_model) = NEW z2ui5_cl_core_attri_srv(
attri = mt_attri
app = mo_app ).
ls_attri2-r_ref = lo_model->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(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
AND is_interface = abap_false
AND is_constant = abap_false.
TRY.
DATA(ls_new) = create_new_entry( lv_name && lr_attri->name ).
INSERT ls_new INTO TABLE result.
CATCH cx_root.
ENDTRY.
ENDLOOP.
ENDMETHOD.
METHOD diss_struc.
IF ir_attri->o_typedescr->kind = cl_abap_typedescr=>kind_ref.
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( lr_ref ).
LOOP AT lt_attri INTO DATA(ls_attri).
DATA(ls_new) = create_new_entry( lv_name && ls_attri-name ).
INSERT ls_new INTO TABLE result.
ENDLOOP.
ENDMETHOD.
METHOD main.
IF mt_attri->* IS INITIAL.
main_init( ).
RETURN.
ENDIF.
main_run( ).
ENDMETHOD.
METHOD main_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 main_run.
DATA(lt_attri_new) = VALUE z2ui5_if_core_types=>ty_t_attri( ).
LOOP AT mt_attri->* REFERENCE INTO DATA(lr_attri)
WHERE check_dissolved = abap_false.
lr_attri->check_dissolved = abap_true.
CASE lr_attri->o_typedescr->kind.
WHEN cl_abap_typedescr=>kind_struct.
DATA(lt_attri_struc) = diss_struc( lr_attri ).
INSERT LINES OF lt_attri_struc INTO TABLE lt_attri_new.
WHEN cl_abap_typedescr=>kind_ref.
CASE lr_attri->o_typedescr->type_kind.
WHEN cl_abap_typedescr=>typekind_oref.
DATA(lt_attri_oref) = diss_oref( lr_attri ).
INSERT LINES OF lt_attri_oref INTO TABLE lt_attri_new.
WHEN cl_abap_typedescr=>typekind_dref.
DATA(lt_attri_dref) = diss_dref( lr_attri ).
INSERT LINES OF lt_attri_dref INTO TABLE lt_attri_new.
WHEN OTHERS.
ASSERT 1 = 0.
ENDCASE.
WHEN OTHERS.
ENDCASE.
ENDLOOP.
INSERT LINES OF lt_attri_new INTO TABLE mt_attri->*.
ENDMETHOD.
ENDCLASS.

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOCLASS>
<CLSNAME>Z2UI5_CL_CORE_DISSOLVE_SRV</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>abap2UI5 - backend attri dissolver</DESCRIPT>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
</VSEOCLASS>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -5,7 +5,7 @@ CLASS z2ui5_cl_core_draft_srv DEFINITION
PUBLIC SECTION. PUBLIC SECTION.
METHODS count METHODS count_entries
RETURNING RETURNING
VALUE(result) TYPE i. VALUE(result) TYPE i.
@ -48,7 +48,7 @@ CLASS z2ui5_cl_core_draft_srv IMPLEMENTATION.
METHOD cleanup. METHOD cleanup.
DATA(lv_four_hours_ago) = z2ui5_cl_util=>time_substract_seconds( DATA(lv_four_hours_ago) = z2ui5_cl_util=>time_substract_seconds(
time = z2ui5_cl_util=>time_get_timestampl( ) time = z2ui5_cl_util=>time_get_timestampl( )
seconds = 60 * 60 * 4 ). seconds = 60 * 60 * 4 ).
DELETE FROM z2ui5_t_core_01 WHERE timestampl < @lv_four_hours_ago. DELETE FROM z2ui5_t_core_01 WHERE timestampl < @lv_four_hours_ago.
@ -86,19 +86,18 @@ CLASS z2ui5_cl_core_draft_srv IMPLEMENTATION.
SELECT SINGLE * SELECT SINGLE *
FROM z2ui5_t_core_01 FROM z2ui5_t_core_01
WHERE id = @id WHERE id = @id
INTO @result. INTO @result ##SUBRC_OK.
ELSE. ELSE.
SELECT SINGLE id, id_prev, id_prev_app, id_prev_app_stack SELECT SINGLE id, id_prev, id_prev_app, id_prev_app_stack
FROM z2ui5_t_core_01 FROM z2ui5_t_core_01
WHERE id = @id WHERE id = @id
INTO CORRESPONDING FIELDS OF @result. INTO CORRESPONDING FIELDS OF @result ##SUBRC_OK.
ENDIF. ENDIF.
IF sy-subrc <> 0. IF sy-subrc <> 0.
* ASSERT 1 = 0.
RAISE EXCEPTION TYPE z2ui5_cx_util_error RAISE EXCEPTION TYPE z2ui5_cx_util_error
EXPORTING EXPORTING
val = `NO_DRAFT_ENTRY_OF_PREVIOUS_REQUEST_FOUND`. val = `NO_DRAFT_ENTRY_OF_PREVIOUS_REQUEST_FOUND`.
@ -123,12 +122,14 @@ CLASS z2ui5_cl_core_draft_srv IMPLEMENTATION.
result = CORRESPONDING #( ls_db ). result = CORRESPONDING #( ls_db ).
ENDMETHOD. ENDMETHOD.
METHOD count.
METHOD count_entries.
SELECT SELECT
COUNT( * ) COUNT( * )
FROM z2ui5_t_core_01 FROM z2ui5_t_core_01
INTO @result. INTO @result.
ENDMETHOD. ENDMETHOD.

View File

@ -50,6 +50,7 @@ CLASS z2ui5_cl_core_event_srv IMPLEMENTATION.
ENDMETHOD. ENDMETHOD.
METHOD get_t_arg. METHOD get_t_arg.
IF val IS NOT INITIAL. IF val IS NOT INITIAL.

View File

@ -15,7 +15,7 @@ CLASS ltcl_test IMPLEMENTATION.
METHOD event. METHOD event.
DATA(lo_event) = NEW z2ui5_cl_core_event_srv( ). DATA(lo_event) = NEW z2ui5_cl_core_event_srv( ).
DATA(lv_event) = lo_event->get_event( `POST`). DATA(lv_event) = lo_event->get_event( `POST` ).
cl_abap_unit_assert=>assert_equals( cl_abap_unit_assert=>assert_equals(
act = lv_event act = lv_event

View File

@ -19,13 +19,13 @@ CLASS z2ui5_cl_core_json_srv DEFINITION
RETURNING RETURNING
VALUE(result) TYPE string. VALUE(result) TYPE string.
METHODS model_client_to_server METHODS model_front_to_back
IMPORTING IMPORTING
!view TYPE string !view TYPE string
!t_attri TYPE REF TO z2ui5_if_core_types=>ty_t_attri !t_attri TYPE REF TO z2ui5_if_core_types=>ty_t_attri
!model TYPE REF TO z2ui5_if_ajson. !model TYPE REF TO z2ui5_if_ajson.
METHODS model_server_to_client METHODS model_back_to_front
IMPORTING IMPORTING
!t_attri TYPE z2ui5_if_core_types=>ty_t_attri !t_attri TYPE z2ui5_if_core_types=>ty_t_attri
RETURNING RETURNING
@ -40,11 +40,11 @@ ENDCLASS.
CLASS z2ui5_cl_core_json_srv IMPLEMENTATION. CLASS z2ui5_cl_core_json_srv IMPLEMENTATION.
METHOD model_client_to_server. METHOD model_front_to_back.
LOOP AT t_attri->* REFERENCE INTO DATA(lr_attri) LOOP AT t_attri->* REFERENCE INTO DATA(lr_attri)
WHERE bind_type = z2ui5_if_core_types=>cs_bind_type-two_way WHERE bind_type = z2ui5_if_core_types=>cs_bind_type-two_way
AND view = view. AND view = view.
TRY. TRY.
DATA(lo_val_front) = model->slice( lr_attri->name_client ). DATA(lo_val_front) = model->slice( lr_attri->name_client ).
@ -73,28 +73,22 @@ CLASS z2ui5_cl_core_json_srv IMPLEMENTATION.
ENDMETHOD. ENDMETHOD.
METHOD model_server_to_client. METHOD model_back_to_front.
TRY. TRY.
DATA(ajson_result) = CAST z2ui5_if_ajson( z2ui5_cl_ajson=>create_empty( ) ). DATA(ajson_result) = CAST z2ui5_if_ajson( z2ui5_cl_ajson=>create_empty( ) ).
LOOP AT t_attri REFERENCE INTO DATA(lr_attri) WHERE bind_type <> ``. LOOP AT t_attri REFERENCE INTO DATA(lr_attri) WHERE bind_type <> ``.
"(1) set pretty mode DATA(ajson) = CAST z2ui5_if_ajson( z2ui5_cl_ajson=>new( ) ).
IF lr_attri->custom_mapper IS BOUND.
DATA(ajson) = CAST z2ui5_if_ajson( z2ui5_cl_ajson=>create_empty( ii_custom_mapping = lr_attri->custom_mapper ) ).
ELSE.
ajson = CAST z2ui5_if_ajson( z2ui5_cl_ajson=>create_empty( ii_custom_mapping = z2ui5_cl_ajson_mapping=>create_upper_case( ) ) ).
ENDIF.
"(2) read attribute of end-user app & write to json
CASE lr_attri->bind_type. CASE lr_attri->bind_type.
WHEN z2ui5_if_core_types=>cs_bind_type-one_way WHEN z2ui5_if_core_types=>cs_bind_type-one_way
OR z2ui5_if_core_types=>cs_bind_type-two_way. OR z2ui5_if_core_types=>cs_bind_type-two_way.
ASSIGN lr_attri->r_ref->* TO FIELD-SYMBOL(<attribute>). ASSIGN lr_attri->r_ref->* TO FIELD-SYMBOL(<attribute>).
ASSERT sy-subrc = 0. ASSERT sy-subrc = 0.
ajson->set( iv_ignore_empty = abap_false iv_path = `/` iv_val = <attribute> ). ajson->set( iv_ignore_empty = abap_false iv_path = `/` iv_val = <attribute> ).
WHEN z2ui5_if_core_types=>cs_bind_type-one_time. WHEN z2ui5_if_core_types=>cs_bind_type-one_time.
ajson->set( iv_ignore_empty = abap_false iv_path = `/` iv_val = lr_attri->json_bind_local ). ajson->set( iv_ignore_empty = abap_false iv_path = `/` iv_val = lr_attri->json_bind_local ).
@ -103,16 +97,18 @@ CLASS z2ui5_cl_core_json_srv IMPLEMENTATION.
ASSERT `` = `ERROR_UNKNOWN_BIND_MODE`. ASSERT `` = `ERROR_UNKNOWN_BIND_MODE`.
ENDCASE. ENDCASE.
"(4) set compress mode IF lr_attri->custom_mapper IS BOUND.
"todo performance - add and filter in a single loop ajson = ajson->map( lr_attri->custom_mapper ).
ELSE.
ajson = ajson->map( z2ui5_cl_ajson_mapping=>create_upper_case( ) ).
ENDIF.
IF lr_attri->custom_filter IS BOUND. IF lr_attri->custom_filter IS BOUND.
ajson = ajson->filter( lr_attri->custom_filter ). ajson = ajson->filter( lr_attri->custom_filter ).
ELSE. ELSE.
ajson = ajson->filter( z2ui5_cl_ajson_filter_lib=>create_empty_filter( ) ). ajson = ajson->filter( z2ui5_cl_ajson_filter_lib=>create_empty_filter( ) ).
ENDIF. ENDIF.
"(5) write into result
"todo performance - write directly into result
ajson_result->set( iv_path = lr_attri->name_client iv_val = ajson ). ajson_result->set( iv_path = lr_attri->name_client iv_val = ajson ).
ENDLOOP. ENDLOOP.
@ -130,19 +126,19 @@ CLASS z2ui5_cl_core_json_srv IMPLEMENTATION.
DATA(lo_ajson) = CAST z2ui5_if_ajson( z2ui5_cl_ajson=>parse( val ) ). DATA(lo_ajson) = CAST z2ui5_if_ajson( z2ui5_cl_ajson=>parse( val ) ).
data(lv_model_edit_name) = `/` && z2ui5_if_core_types=>cs_ui5-two_way_model. DATA(lv_model_edit_name) = `/` && z2ui5_if_core_types=>cs_ui5-two_way_model.
result-o_model = z2ui5_cl_ajson=>create_empty( ). result-o_model = z2ui5_cl_ajson=>create_empty( ).
DATA(lo_model) = lo_ajson->slice( lv_model_edit_name ). DATA(lo_model) = lo_ajson->slice( lv_model_edit_name ).
result-o_model->set( iv_path = lv_model_edit_name iv_val = lo_model ). result-o_model->set( iv_path = lv_model_edit_name iv_val = lo_model ).
lo_ajson->delete( lv_model_edit_name ). lo_ajson->delete( lv_model_edit_name ).
lo_ajson = lo_ajson->slice( `/S_FRONT`). lo_ajson = lo_ajson->slice( `/S_FRONT` ).
lo_ajson->to_abap( lo_ajson->to_abap(
EXPORTING EXPORTING
iv_corresponding = abap_true iv_corresponding = abap_true
IMPORTING IMPORTING
ev_container = result-s_front ). ev_container = result-s_front ).
result-s_control-check_launchpad = xsdbool( result-s_front-search CS `scenario=LAUNCHPAD` ). result-s_control-check_launchpad = xsdbool( result-s_front-search CS `scenario=LAUNCHPAD` ).
IF result-s_front-id IS NOT INITIAL. IF result-s_front-id IS NOT INITIAL.
@ -171,7 +167,7 @@ CLASS z2ui5_cl_core_json_srv IMPLEMENTATION.
ajson_result->set( iv_path = `/` iv_val = val-s_front ). ajson_result->set( iv_path = `/` iv_val = val-s_front ).
ajson_result = ajson_result->filter( NEW z2ui5_cl_core_json_srv( ) ). ajson_result = ajson_result->filter( NEW z2ui5_cl_core_json_srv( ) ).
DATA(lv_frontend) = ajson_result->stringify( ). DATA(lv_frontend) = ajson_result->stringify( ).
result = `{` && result = `{` &&
|"S_FRONT":{ lv_frontend },| && |"S_FRONT":{ lv_frontend },| &&

View File

@ -25,7 +25,7 @@ CLASS ltcl_test IMPLEMENTATION.
origin = `ORIGIN` origin = `ORIGIN`
pathname = `PATHNAME` pathname = `PATHNAME`
search = `SEARCH` search = `SEARCH`
event = `BUTTON_POST` ) ). event = `BUTTON_POST` ) ).
cl_abap_unit_assert=>assert_equals( cl_abap_unit_assert=>assert_equals(
act = ls_result-s_front act = ls_result-s_front
@ -44,5 +44,4 @@ CLASS ltcl_test IMPLEMENTATION.
ENDMETHOD. ENDMETHOD.
ENDCLASS. ENDCLASS.

View File

@ -1,326 +0,0 @@
CLASS z2ui5_cl_core_model_srv DEFINITION
PUBLIC FINAL
CREATE PUBLIC.
PUBLIC SECTION.
DATA mt_attri TYPE REF TO z2ui5_if_core_types=>ty_t_attri.
DATA mo_app TYPE REF TO object.
METHODS constructor
IMPORTING
attri TYPE REF TO z2ui5_if_core_types=>ty_t_attri
app TYPE REF TO object.
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
RETURNING
VALUE(result) TYPE REF TO data.
METHODS diss_struc
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 diss_dref
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 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
val TYPE REF TO data
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_core_types=>ty_s_attri.
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)
WHERE data_rtti IS NOT INITIAL
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
IMPORTING
e_data = <val> ).
CLEAR lr_attri->data_rtti.
ENDLOOP.
attri_refs_update( ).
ENDMETHOD.
METHOD attri_before_save.
LOOP AT mt_attri->* REFERENCE INTO DATA(lr_attri).
IF lr_attri->bind_type = z2ui5_if_core_types=>cs_bind_type-one_time.
DELETE mt_attri->*.
CONTINUE.
ENDIF.
IF lr_attri->type_kind <> cl_abap_classdescr=>typekind_dref.
CLEAR lr_attri->r_ref.
CONTINUE.
ENDIF.
ASSIGN lr_attri->r_ref->* TO FIELD-SYMBOL(<val_ref>).
ASSIGN <val_ref>->* TO FIELD-SYMBOL(<val>).
lr_attri->data_rtti = z2ui5_cl_util=>xml_srtti_stringify( <val> ).
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.
ASSIGN mo_app->(iv_path) TO FIELD-SYMBOL(<attri>).
IF sy-subrc <> 0.
RAISE EXCEPTION TYPE z2ui5_cx_util_error
EXPORTING
val = `DEREF_FAILED_TARGET_INITIAL`.
ENDIF.
GET REFERENCE OF <attri> INTO result.
IF sy-subrc <> 0.
ASSERT 1 = 0.
ENDIF.
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.
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.
DATA(lt_attri_new) = VALUE z2ui5_if_core_types=>ty_t_attri( ).
LOOP AT mt_attri->* REFERENCE INTO DATA(lr_attri)
WHERE check_dissolved = abap_false.
lr_attri->check_dissolved = abap_true.
CASE lr_attri->type_kind.
WHEN cl_abap_typedescr=>typekind_struct1
OR cl_abap_typedescr=>typekind_struct2.
DATA(lt_attri_struc) = diss_struc( lr_attri ).
INSERT LINES OF lt_attri_struc INTO TABLE lt_attri_new.
WHEN cl_abap_typedescr=>typekind_oref.
DATA(lt_attri_oref) = diss_oref( lr_attri ).
INSERT LINES OF lt_attri_oref INTO TABLE lt_attri_new.
WHEN cl_abap_typedescr=>typekind_dref.
DATA(lt_attri_dref) = diss_dref( lr_attri ).
INSERT LINES OF lt_attri_dref INTO TABLE lt_attri_new.
WHEN OTHERS.
ENDCASE.
ENDLOOP.
INSERT LINES OF lt_attri_new INTO TABLE mt_attri->*.
ENDMETHOD.
METHOD diss_dref.
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( 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.
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(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
AND is_interface = abap_false
AND is_constant = abap_false.
TRY.
DATA(ls_new) = get_new_attri( lv_name && lr_attri->name ).
INSERT ls_new INTO TABLE result.
CATCH cx_root.
ENDTRY.
ENDLOOP.
ENDMETHOD.
METHOD diss_struc.
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( lr_ref ).
LOOP AT lt_attri INTO DATA(ls_attri).
DATA(ls_new) = get_new_attri( lv_name && ls_attri-name ).
INSERT ls_new INTO TABLE result.
ENDLOOP.
ENDMETHOD.
METHOD search_attribute.
* result = REF #( mt_attri->*[ r_ref = val ] OPTIONAL ).
LOOP AT mt_attri->* REFERENCE INTO DATA(lr_attri)
WHERE type_kind <> cl_abap_typedescr=>typekind_dref
AND type_kind <> cl_abap_typedescr=>typekind_oref.
IF lr_attri->r_ref = val.
result = lr_attri.
RETURN.
ENDIF.
ENDLOOP.
ENDMETHOD.
METHOD get_new_attri.
result = VALUE z2ui5_if_core_types=>ty_s_attri( ).
result-name = name.
result-r_ref = attri_get_val_ref( name ).
result-o_typedescr = cl_abap_datadescr=>describe_by_data_ref( result-r_ref ).
result-type_kind = z2ui5_cl_util=>rtti_get_type_kind_by_descr( result-o_typedescr ).
ENDMETHOD.
ENDCLASS.

View File

@ -1,257 +0,0 @@
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->search_a_dissolve_attribute( REF #( lo_app_client->mv_value ) ).
IF lr_attri->r_ref <> lr_value.
cl_abap_unit_assert=>abort( ).
ENDIF.
ENDMETHOD.
METHOD second_test.
DATA(lo_app_client) = NEW ltcl_test_app2( ).
DATA lr_value TYPE REF TO data.
GET REFERENCE OF lo_app_client->mv_value INTO lr_value.
DATA(lt_attri) = VALUE z2ui5_if_core_types=>ty_t_attri( ( r_ref = REF #( lo_app_client->mv_value ) ) ).
DATA(lo_model) = NEW z2ui5_cl_core_model_srv(
attri = REF #( lt_attri )
app = lo_app_client ).
DATA(lr_attri) = lo_model->search_a_dissolve_attribute( REF #( lo_app_client->mv_value ) ).
IF lr_attri->r_ref <> lr_value.
cl_abap_unit_assert=>abort( ).
ENDIF.
ENDMETHOD.
METHOD third_test.
DATA(lo_app_client) = NEW ltcl_test_app2( ).
DATA lr_value TYPE REF TO data.
GET REFERENCE OF lo_app_client->mv_value INTO lr_value.
lo_app_client->mo_app = NEW #( ).
DATA(lt_attri) = VALUE z2ui5_if_core_types=>ty_t_attri(
( name = `1` r_ref = REF #( lo_app_client->mr_value ) )
( name = `4` r_ref = REF #( lo_app_client->mr_value2 ) )
( name = `2` r_ref = REF #( lo_app_client->mo_app ) )
( name = `3` r_ref = REF #( lo_app_client->mv_value ) )
).
DATA(lr_attri) = REF #( lt_attri[ r_ref = lr_value ] ).
IF lr_attri->r_ref <> lr_value.
cl_abap_unit_assert=>abort( ).
ENDIF.
ENDMETHOD.
ENDCLASS.

View File

@ -42,11 +42,13 @@ CLASS z2ui5_cl_core_action DEFINITION
val TYPE REF TO z2ui5_cl_core_http_post. val TYPE REF TO z2ui5_cl_core_http_post.
PROTECTED SECTION. PROTECTED SECTION.
METHODS prepare_app_stack METHODS prepare_app_stack
IMPORTING IMPORTING
val TYPE z2ui5_if_core_types=>ty_s_next-o_app_leave val TYPE z2ui5_if_core_types=>ty_s_next-o_app_leave
RETURNING RETURNING
VALUE(result) TYPE REF TO z2ui5_cl_core_action. VALUE(result) TYPE REF TO z2ui5_cl_core_action.
PRIVATE SECTION. PRIVATE SECTION.
ENDCLASS. ENDCLASS.
@ -73,7 +75,7 @@ CLASS z2ui5_cl_core_action IMPLEMENTATION.
result->ms_actual-view = mo_http_post->ms_request-s_front-view. result->ms_actual-view = mo_http_post->ms_request-s_front-view.
result->mo_app->model_json_parse( result->mo_app->model_json_parse(
iv_view = mo_http_post->ms_request-s_front-view iv_view = mo_http_post->ms_request-s_front-view
io_model = mo_http_post->ms_request-o_model ). io_model = mo_http_post->ms_request-o_model ).
result->ms_actual-event = mo_http_post->ms_request-s_front-event. result->ms_actual-event = mo_http_post->ms_request-s_front-event.

View File

@ -3,7 +3,7 @@ CLASS ltcl_test DEFINITION FINAL FOR TESTING
RISK LEVEL HARMLESS. RISK LEVEL HARMLESS.
PRIVATE SECTION. PRIVATE SECTION.
METHODS: METHODS
first_test FOR TESTING RAISING cx_static_check. first_test FOR TESTING RAISING cx_static_check.
ENDCLASS. ENDCLASS.

View File

@ -68,7 +68,7 @@ CLASS z2ui5_cl_core_app IMPLEMENTATION.
TRY. TRY.
DATA(lo_model) = NEW z2ui5_cl_core_model_srv( DATA(lo_model) = NEW z2ui5_cl_core_attri_srv(
attri = REF #( mt_attri ) attri = REF #( mt_attri )
app = mo_app ). app = mo_app ).
lo_model->attri_before_save( ). lo_model->attri_before_save( ).
@ -92,7 +92,7 @@ CLASS z2ui5_cl_core_app IMPLEMENTATION.
DATA(ls_db) = lo_db->read_draft( id ). DATA(ls_db) = lo_db->read_draft( id ).
result = all_xml_parse( ls_db-data ). result = all_xml_parse( ls_db-data ).
DATA(lo_model) = NEW z2ui5_cl_core_model_srv( DATA(lo_model) = NEW z2ui5_cl_core_attri_srv(
attri = REF #( result->mt_attri ) attri = REF #( result->mt_attri )
app = result->mo_app ). app = result->mo_app ).
@ -109,7 +109,7 @@ CLASS z2ui5_cl_core_app IMPLEMENTATION.
result->mo_app = app. result->mo_app = app.
DATA(lo_model) = NEW z2ui5_cl_core_model_srv( DATA(lo_model) = NEW z2ui5_cl_core_attri_srv(
attri = REF #( result->mt_attri ) attri = REF #( result->mt_attri )
app = result->mo_app ). app = result->mo_app ).
@ -135,7 +135,7 @@ CLASS z2ui5_cl_core_app IMPLEMENTATION.
METHOD model_json_parse. METHOD model_json_parse.
DATA(lo_json_mapper) = NEW z2ui5_cl_core_json_srv( ). DATA(lo_json_mapper) = NEW z2ui5_cl_core_json_srv( ).
lo_json_mapper->model_client_to_server( lo_json_mapper->model_front_to_back(
view = iv_view view = iv_view
t_attri = REF #( mt_attri ) t_attri = REF #( mt_attri )
model = io_model ). model = io_model ).
@ -146,7 +146,7 @@ CLASS z2ui5_cl_core_app IMPLEMENTATION.
METHOD model_json_stringify. METHOD model_json_stringify.
DATA(lo_json_mapper) = NEW z2ui5_cl_core_json_srv( ). DATA(lo_json_mapper) = NEW z2ui5_cl_core_json_srv( ).
result = lo_json_mapper->model_server_to_client( mt_attri ). result = lo_json_mapper->model_back_to_front( mt_attri ).
ENDMETHOD. ENDMETHOD.
ENDCLASS. ENDCLASS.

View File

@ -3,7 +3,7 @@ CLASS ltcl_test DEFINITION FINAL FOR TESTING
RISK LEVEL HARMLESS. RISK LEVEL HARMLESS.
PRIVATE SECTION. PRIVATE SECTION.
METHODS: METHODS
first_test FOR TESTING RAISING cx_static_check. first_test FOR TESTING RAISING cx_static_check.
ENDCLASS. ENDCLASS.

View File

@ -31,10 +31,9 @@ CLASS z2ui5_cl_core_client IMPLEMENTATION.
METHOD z2ui5_if_client~clear. METHOD z2ui5_if_client~clear.
CASE val. IF val = z2ui5_if_client=>cs_clear-view.
WHEN z2ui5_if_client=>cs_clear-view. CLEAR mo_action->ms_next-s_set-s_view.
CLEAR mo_action->ms_next-s_set-s_view. ENDIF.
ENDCASE.
ENDMETHOD. ENDMETHOD.
@ -47,8 +46,7 @@ CLASS z2ui5_cl_core_client IMPLEMENTATION.
t_event_arg = mo_action->ms_actual-t_event_arg t_event_arg = mo_action->ms_actual-t_event_arg
s_draft = CORRESPONDING #( mo_action->mo_app->ms_draft ) s_draft = CORRESPONDING #( mo_action->mo_app->ms_draft )
check_on_navigated = mo_action->ms_actual-check_on_navigated check_on_navigated = mo_action->ms_actual-check_on_navigated
s_config = CORRESPONDING #( mo_action->mo_http_post->ms_request-s_front ) s_config = CORRESPONDING #( mo_action->mo_http_post->ms_request-s_front ) ).
).
ENDMETHOD. ENDMETHOD.
@ -222,11 +220,11 @@ CLASS z2ui5_cl_core_client IMPLEMENTATION.
val = z2ui5_cl_util=>conv_get_as_data_ref( val ) val = z2ui5_cl_util=>conv_get_as_data_ref( val )
type = z2ui5_if_core_types=>cs_bind_type-one_way type = z2ui5_if_core_types=>cs_bind_type-one_way
config = VALUE #( config = VALUE #(
path_only = path path_only = path
custom_filter = custom_filter custom_filter = custom_filter
custom_mapper = custom_mapper custom_mapper = custom_mapper
tab = z2ui5_cl_util=>conv_get_as_data_ref( tab ) tab = z2ui5_cl_util=>conv_get_as_data_ref( tab )
tab_index = tab_index ) ). tab_index = tab_index ) ).
ENDMETHOD. ENDMETHOD.
@ -246,13 +244,13 @@ CLASS z2ui5_cl_core_client IMPLEMENTATION.
val = z2ui5_cl_util=>conv_get_as_data_ref( val ) val = z2ui5_cl_util=>conv_get_as_data_ref( val )
type = z2ui5_if_core_types=>cs_bind_type-two_way type = z2ui5_if_core_types=>cs_bind_type-two_way
config = VALUE #( config = VALUE #(
path_only = path path_only = path
custom_filter = custom_filter custom_filter = custom_filter
custom_filter_back = custom_filter_back custom_filter_back = custom_filter_back
custom_mapper = custom_mapper custom_mapper = custom_mapper
custom_mapper_back = custom_mapper_back custom_mapper_back = custom_mapper_back
tab = z2ui5_cl_util=>conv_get_as_data_ref( tab ) tab = z2ui5_cl_util=>conv_get_as_data_ref( tab )
tab_index = tab_index ) ). tab_index = tab_index ) ).
ENDMETHOD. ENDMETHOD.
@ -263,9 +261,9 @@ CLASS z2ui5_cl_core_client IMPLEMENTATION.
result = lo_bind->main_local( result = lo_bind->main_local(
val = val val = val
config = VALUE #( config = VALUE #(
path_only = path path_only = path
custom_mapper = custom_mapper custom_mapper = custom_mapper
custom_filter = custom_filter ) ). custom_filter = custom_filter ) ).
ENDMETHOD. ENDMETHOD.
@ -285,8 +283,8 @@ CLASS z2ui5_cl_core_client IMPLEMENTATION.
DATA(lo_ui5) = NEW z2ui5_cl_core_event_srv( ). DATA(lo_ui5) = NEW z2ui5_cl_core_event_srv( ).
result = lo_ui5->get_event_client( result = lo_ui5->get_event_client(
val = val val = val
t_arg = t_arg ). t_arg = t_arg ).
ENDMETHOD. ENDMETHOD.
ENDCLASS. ENDCLASS.

View File

@ -1,6 +1,6 @@
CLASS ltcl_test_client DEFINITION FINAL FOR TESTING CLASS ltcl_test_client DEFINITION FINAL FOR TESTING
DURATION LONG DURATION LONG
RISK LEVEL harmless. RISK LEVEL HARMLESS.
PRIVATE SECTION. PRIVATE SECTION.
METHODS first_test FOR TESTING RAISING cx_static_check. METHODS first_test FOR TESTING RAISING cx_static_check.

View File

@ -52,418 +52,418 @@ CLASS z2ui5_cl_core_http_get IMPLEMENTATION.
METHOD get_js. METHOD get_js.
result = `sap.ui.define("z2ui5/Controller", ["sap/ui/core/mvc/Controller", "sap/ui/core/mvc/XMLView", "sap/ui/model/json/JSONModel", "sap/ui/core/BusyIndicator", "sap/m/MessageBox", "sap/m/MessageToast", "sap/ui/core/Fragment"], function(Control` && result = `sap.ui.define("z2ui5/Controller", ["sap/ui/core/mvc/Controller", "sap/ui/core/mvc/XMLView", "sap/ui/model/json/JSONModel", "sap/ui/core/BusyIndicator", "sap/m/MessageBox", "sap/m/MessageToast", "sap/ui/core/Fragment"], function(Control` &&
`ler, XMLView, JSONModel, BusyIndicator, MessageBox, MessageToast, Fragment) {` && |\n| && `ler, XMLView, JSONModel, BusyIndicator, MessageBox, MessageToast, Fragment) {` && |\n| &&
` "use strict";` && |\n| && ` "use strict";` && |\n| &&
` return Controller.extend("z2ui5.Controller", {` && |\n| && ` return Controller.extend("z2ui5.Controller", {` && |\n| &&
` async onAfterRendering() {` && |\n| && ` async onAfterRendering() {` && |\n| &&
` try{` && |\n| && ` try{` && |\n| &&
` if (!sap.z2ui5.oResponse.PARAMS) {` && |\n| && ` if (!sap.z2ui5.oResponse.PARAMS) {` && |\n| &&
` BusyIndicator.hide();` && |\n| && ` BusyIndicator.hide();` && |\n| &&
` if (sap.z2ui5.isBusy) {` && |\n| && ` if (sap.z2ui5.isBusy) {` && |\n| &&
` sap.z2ui5.isBusy = false;` && |\n| && ` sap.z2ui5.isBusy = false;` && |\n| &&
` }` && |\n| && ` }` && |\n| &&
` if (sap.z2ui5.busyDialog) {` && |\n| && ` if (sap.z2ui5.busyDialog) {` && |\n| &&
` sap.z2ui5.busyDialog.close();` && |\n| && ` sap.z2ui5.busyDialog.close();` && |\n| &&
` }` && |\n| && ` }` && |\n| &&
` return;` && |\n| && ` return;` && |\n| &&
` }` && |\n| && ` }` && |\n| &&
` const {S_POPUP, S_VIEW_NEST, S_VIEW_NEST2, S_POPOVER} = sap.z2ui5.oResponse.PARAMS;` && |\n| && ` const {S_POPUP, S_VIEW_NEST, S_VIEW_NEST2, S_POPOVER} = sap.z2ui5.oResponse.PARAMS;` && |\n| &&
` if (S_POPUP?.CHECK_DESTROY) {` && |\n| && ` if (S_POPUP?.CHECK_DESTROY) {` && |\n| &&
` sap.z2ui5.oController.PopupDestroy();` && |\n| && ` sap.z2ui5.oController.PopupDestroy();` && |\n| &&
` }` && |\n| && ` }` && |\n| &&
` if (S_POPOVER?.CHECK_DESTROY) {` && |\n| && ` if (S_POPOVER?.CHECK_DESTROY) {` && |\n| &&
` sap.z2ui5.oController.PopoverDestroy();` && |\n| && ` sap.z2ui5.oController.PopoverDestroy();` && |\n| &&
` }` && |\n| && ` }` && |\n| &&
` if (S_POPUP?.XML) {` && |\n| && ` if (S_POPUP?.XML) {` && |\n| &&
` sap.z2ui5.oController.PopupDestroy();` && |\n| && ` sap.z2ui5.oController.PopupDestroy();` && |\n| &&
` await this.displayFragment(S_POPUP.XML, 'oViewPopup');` && |\n| && ` await this.displayFragment(S_POPUP.XML, 'oViewPopup');` && |\n| &&
` }` && |\n| && ` }` && |\n| &&
` if (!sap.z2ui5.checkNestAfter) {` && |\n| && ` if (!sap.z2ui5.checkNestAfter) {` && |\n| &&
` if (S_VIEW_NEST?.XML) {` && |\n| && ` if (S_VIEW_NEST?.XML) {` && |\n| &&
` sap.z2ui5.oController.NestViewDestroy();` && |\n| && ` sap.z2ui5.oController.NestViewDestroy();` && |\n| &&
` await this.displayNestedView(S_VIEW_NEST.XML, 'oViewNest', 'S_VIEW_NEST');` && |\n| && ` await this.displayNestedView(S_VIEW_NEST.XML, 'oViewNest', 'S_VIEW_NEST');` && |\n| &&
` sap.z2ui5.checkNestAfter = true;` && |\n| && ` sap.z2ui5.checkNestAfter = true;` && |\n| &&
` }` && |\n| && ` }` && |\n| &&
` }` && |\n| && ` }` && |\n| &&
` if (!sap.z2ui5.checkNestAfter2) {` && |\n| && ` if (!sap.z2ui5.checkNestAfter2) {` && |\n| &&
` if (S_VIEW_NEST2?.XML) {` && |\n| && ` if (S_VIEW_NEST2?.XML) {` && |\n| &&
` sap.z2ui5.oController.NestViewDestroy2();` && |\n| && ` sap.z2ui5.oController.NestViewDestroy2();` && |\n| &&
` await this.displayNestedView2(S_VIEW_NEST2.XML, 'oViewNest2', 'S_VIEW_NEST2');` && |\n| && ` await this.displayNestedView2(S_VIEW_NEST2.XML, 'oViewNest2', 'S_VIEW_NEST2');` && |\n| &&
` sap.z2ui5.checkNestAfter2 = true;` && |\n| && ` sap.z2ui5.checkNestAfter2 = true;` && |\n| &&
` }` && |\n| && ` }` && |\n| &&
` }` && |\n| && ` }` && |\n| &&
` if (S_POPOVER?.XML) {` && |\n| && ` if (S_POPOVER?.XML) {` && |\n| &&
` await this.displayPopover(S_POPOVER.XML, 'oViewPopover', S_POPOVER.OPEN_BY_ID);` && |\n| && ` await this.displayPopover(S_POPOVER.XML, 'oViewPopover', S_POPOVER.OPEN_BY_ID);` && |\n| &&
` }` && |\n| && ` }` && |\n| &&
` BusyIndicator.hide();` && |\n| && ` BusyIndicator.hide();` && |\n| &&
` if (sap.z2ui5.isBusy) {` && |\n| && ` if (sap.z2ui5.isBusy) {` && |\n| &&
` sap.z2ui5.isBusy = false;` && |\n| && ` sap.z2ui5.isBusy = false;` && |\n| &&
` }` && |\n| && ` }` && |\n| &&
` if (sap.z2ui5.busyDialog) {` && |\n| && ` if (sap.z2ui5.busyDialog) {` && |\n| &&
` sap.z2ui5.busyDialog.close();` && |\n| && ` sap.z2ui5.busyDialog.close();` && |\n| &&
` }` && |\n| && ` }` && |\n| &&
` sap.z2ui5.onAfterRendering.forEach(item=>{` && |\n| && ` sap.z2ui5.onAfterRendering.forEach(item=>{` && |\n| &&
` if (item !== undefined) {` && |\n| && ` if (item !== undefined) {` && |\n| &&
` item();` && |\n| && ` item();` && |\n| &&
` }` && |\n| && ` }` && |\n| &&
` }` && |\n| && ` }` && |\n| &&
` )` && |\n| && ` )` && |\n| &&
` }catch(e){ BusyIndicator.hide(); sap.z2ui5.isBusy = false; MessageBox.error( e.toLocaleString() , { title : "Unexpected Error Occured - App Terminated" , actions : [ ] , onClose : () => { new sap.m.BusyDialog({ text : "Please Restart t` && ` }catch(e){ BusyIndicator.hide(); sap.z2ui5.isBusy = false; MessageBox.error( e.toLocaleString() , { title : "Unexpected Error Occured - App Terminated" , actions : [ ] , onClose : () => { new sap.m.BusyDialog({ text : "Please Restart t` &&
`he App" }).open(); } } ) }` && |\n| && `he App" }).open(); } } ) }` && |\n| &&
` },` && |\n| && ` },` && |\n| &&
|\n| && |\n| &&
` async displayFragment(xml, viewProp, openById) {` && |\n| && ` async displayFragment(xml, viewProp, openById) {` && |\n| &&
` const oFragment = await Fragment.load({` && |\n| && ` const oFragment = await Fragment.load({` && |\n| &&
` definition: xml,` && |\n| && ` definition: xml,` && |\n| &&
` controller: sap.z2ui5.oControllerPopup,` && |\n| && ` controller: sap.z2ui5.oControllerPopup,` && |\n| &&
` id: "popupId"` && |\n| && ` id: "popupId"` && |\n| &&
` });` && |\n| && ` });` && |\n| &&
` let oview_model = new JSONModel(sap.z2ui5.oResponse.OVIEWMODEL);` && |\n| && ` let oview_model = new JSONModel(sap.z2ui5.oResponse.OVIEWMODEL);` && |\n| &&
` oview_model.setSizeLimit(sap.z2ui5.JSON_MODEL_LIMIT);` && |\n| && ` oview_model.setSizeLimit(sap.z2ui5.JSON_MODEL_LIMIT);` && |\n| &&
` oFragment.setModel(oview_model);` && |\n| && ` oFragment.setModel(oview_model);` && |\n| &&
` let oControl = openById ? sap.z2ui5.oView.byId(openById) : null;` && |\n| && ` let oControl = openById ? sap.z2ui5.oView.byId(openById) : null;` && |\n| &&
` if (oControl) {` && |\n| && ` if (oControl) {` && |\n| &&
` oFragment.openBy(oControl);` && |\n| && ` oFragment.openBy(oControl);` && |\n| &&
` } else {` && |\n| && ` } else {` && |\n| &&
` oFragment.open();` && |\n| && ` oFragment.open();` && |\n| &&
` }` && |\n| && ` }` && |\n| &&
` sap.z2ui5[viewProp] = oFragment;` && |\n| && ` sap.z2ui5[viewProp] = oFragment;` && |\n| &&
` },` && |\n| && ` },` && |\n| &&
` async displayPopover(xml, viewProp, openById) {` && |\n| && ` async displayPopover(xml, viewProp, openById) {` && |\n| &&
` const oFragment = await Fragment.load({` && |\n| && ` const oFragment = await Fragment.load({` && |\n| &&
` definition: xml,` && |\n| && ` definition: xml,` && |\n| &&
` controller: sap.z2ui5.oControllerPopover,` && |\n| && ` controller: sap.z2ui5.oControllerPopover,` && |\n| &&
` id: "popoverId"` && |\n| && ` id: "popoverId"` && |\n| &&
` });` && |\n| && ` });` && |\n| &&
` let oview_model = new JSONModel(sap.z2ui5.oResponse.OVIEWMODEL);` && |\n| && ` let oview_model = new JSONModel(sap.z2ui5.oResponse.OVIEWMODEL);` && |\n| &&
` oview_model.setSizeLimit(sap.z2ui5.JSON_MODEL_LIMIT);` && |\n| && ` oview_model.setSizeLimit(sap.z2ui5.JSON_MODEL_LIMIT);` && |\n| &&
` oFragment.setModel(oview_model);` && |\n| && ` oFragment.setModel(oview_model);` && |\n| &&
` let oControl = openById ? sap.z2ui5.oView.byId(openById) : null;` && |\n| && ` let oControl = openById ? sap.z2ui5.oView.byId(openById) : null;` && |\n| &&
` if (oControl) {` && |\n| && ` if (oControl) {` && |\n| &&
` oFragment.openBy(oControl);` && |\n| && ` oFragment.openBy(oControl);` && |\n| &&
` } else {` && |\n| && ` } else {` && |\n| &&
` oFragment.open();` && |\n| && ` oFragment.open();` && |\n| &&
` }` && |\n| && ` }` && |\n| &&
` sap.z2ui5[viewProp] = oFragment;` && |\n| && ` sap.z2ui5[viewProp] = oFragment;` && |\n| &&
` },` && |\n| && ` },` && |\n| &&
` async displayNestedView(xml, viewProp, viewNestId) {` && |\n| && ` async displayNestedView(xml, viewProp, viewNestId) {` && |\n| &&
` const oView = await XMLView.create({` && |\n| && ` const oView = await XMLView.create({` && |\n| &&
` definition: xml,` && |\n| && ` definition: xml,` && |\n| &&
` controller: sap.z2ui5.oControllerNest,` && |\n| && ` controller: sap.z2ui5.oControllerNest,` && |\n| &&
` });` && |\n| && ` });` && |\n| &&
` let oview_model = new JSONModel(sap.z2ui5.oResponse.OVIEWMODEL);` && |\n| && ` let oview_model = new JSONModel(sap.z2ui5.oResponse.OVIEWMODEL);` && |\n| &&
` oview_model.setSizeLimit(sap.z2ui5.JSON_MODEL_LIMIT);` && |\n| && ` oview_model.setSizeLimit(sap.z2ui5.JSON_MODEL_LIMIT);` && |\n| &&
` oView.setModel(oview_model);` && |\n| && ` oView.setModel(oview_model);` && |\n| &&
` let oParent = sap.z2ui5.oView.byId(sap.z2ui5.oResponse.PARAMS[viewNestId].ID);` && |\n| && ` let oParent = sap.z2ui5.oView.byId(sap.z2ui5.oResponse.PARAMS[viewNestId].ID);` && |\n| &&
` if (oParent) {` && |\n| && ` if (oParent) {` && |\n| &&
` try {` && |\n| && ` try {` && |\n| &&
` oParent[sap.z2ui5.oResponse.PARAMS[viewNestId].METHOD_DESTROY]();` && |\n| && ` oParent[sap.z2ui5.oResponse.PARAMS[viewNestId].METHOD_DESTROY]();` && |\n| &&
` } catch {}` && |\n| && ` } catch {}` && |\n| &&
` oParent[sap.z2ui5.oResponse.PARAMS[viewNestId].METHOD_INSERT](oView);` && |\n| && ` oParent[sap.z2ui5.oResponse.PARAMS[viewNestId].METHOD_INSERT](oView);` && |\n| &&
` }` && |\n| && ` }` && |\n| &&
` sap.z2ui5[viewProp] = oView;` && |\n| && ` sap.z2ui5[viewProp] = oView;` && |\n| &&
` },` && |\n| && ` },` && |\n| &&
` async displayNestedView2(xml, viewProp, viewNestId) {` && |\n| && ` async displayNestedView2(xml, viewProp, viewNestId) {` && |\n| &&
` const oView = await XMLView.create({` && |\n| && ` const oView = await XMLView.create({` && |\n| &&
` definition: xml,` && |\n| && ` definition: xml,` && |\n| &&
` controller: sap.z2ui5.oControllerNest2,` && |\n| && ` controller: sap.z2ui5.oControllerNest2,` && |\n| &&
` });` && |\n| && ` });` && |\n| &&
` let oview_model = new JSONModel(sap.z2ui5.oResponse.OVIEWMODEL);` && |\n| && ` let oview_model = new JSONModel(sap.z2ui5.oResponse.OVIEWMODEL);` && |\n| &&
` oview_model.setSizeLimit(sap.z2ui5.JSON_MODEL_LIMIT);` && |\n| && ` oview_model.setSizeLimit(sap.z2ui5.JSON_MODEL_LIMIT);` && |\n| &&
` oView.setModel(oview_model);` && |\n| && ` oView.setModel(oview_model);` && |\n| &&
` let oParent = sap.z2ui5.oView.byId(sap.z2ui5.oResponse.PARAMS[viewNestId].ID);` && |\n| && ` let oParent = sap.z2ui5.oView.byId(sap.z2ui5.oResponse.PARAMS[viewNestId].ID);` && |\n| &&
` if (oParent) {` && |\n| && ` if (oParent) {` && |\n| &&
` try {` && |\n| && ` try {` && |\n| &&
` oParent[sap.z2ui5.oResponse.PARAMS[viewNestId].METHOD_DESTROY]();` && |\n| && ` oParent[sap.z2ui5.oResponse.PARAMS[viewNestId].METHOD_DESTROY]();` && |\n| &&
` } catch {}` && |\n| && ` } catch {}` && |\n| &&
` oParent[sap.z2ui5.oResponse.PARAMS[viewNestId].METHOD_INSERT](oView);` && |\n| && ` oParent[sap.z2ui5.oResponse.PARAMS[viewNestId].METHOD_INSERT](oView);` && |\n| &&
` }` && |\n| && ` }` && |\n| &&
` sap.z2ui5[viewProp] = oView;` && |\n| && ` sap.z2ui5[viewProp] = oView;` && |\n| &&
` },` && |\n| && ` },` && |\n| &&
` PopupDestroy() {` && |\n| && ` PopupDestroy() {` && |\n| &&
` if (!sap.z2ui5.oViewPopup) {` && |\n| && ` if (!sap.z2ui5.oViewPopup) {` && |\n| &&
` return;` && |\n| && ` return;` && |\n| &&
` }` && |\n| && ` }` && |\n| &&
` if (sap.z2ui5.oViewPopup.close) {` && |\n| && ` if (sap.z2ui5.oViewPopup.close) {` && |\n| &&
` try {` && |\n| && ` try {` && |\n| &&
` sap.z2ui5.oViewPopup.close();` && |\n| && ` sap.z2ui5.oViewPopup.close();` && |\n| &&
` } catch {}` && |\n| && ` } catch {}` && |\n| &&
` }` && |\n| && ` }` && |\n| &&
` sap.z2ui5.oViewPopup.destroy();` && |\n| && ` sap.z2ui5.oViewPopup.destroy();` && |\n| &&
` },` && |\n| && ` },` && |\n| &&
` PopoverDestroy() {` && |\n| && ` PopoverDestroy() {` && |\n| &&
` if (!sap.z2ui5.oViewPopover) {` && |\n| && ` if (!sap.z2ui5.oViewPopover) {` && |\n| &&
` return;` && |\n| && ` return;` && |\n| &&
` }` && |\n| && ` }` && |\n| &&
` if (sap.z2ui5.oViewPopover.close) {` && |\n| && ` if (sap.z2ui5.oViewPopover.close) {` && |\n| &&
` try {` && |\n| && ` try {` && |\n| &&
` sap.z2ui5.oViewPopover.close();` && |\n| && ` sap.z2ui5.oViewPopover.close();` && |\n| &&
` } catch {}` && |\n| && ` } catch {}` && |\n| &&
` }` && |\n| && ` }` && |\n| &&
` sap.z2ui5.oViewPopover.destroy();` && |\n| && ` sap.z2ui5.oViewPopover.destroy();` && |\n| &&
` },` && |\n| && ` },` && |\n| &&
` NestViewDestroy() {` && |\n| && ` NestViewDestroy() {` && |\n| &&
` if (!sap.z2ui5.oViewNest) {` && |\n| && ` if (!sap.z2ui5.oViewNest) {` && |\n| &&
` return;` && |\n| && ` return;` && |\n| &&
` }` && |\n| && ` }` && |\n| &&
` sap.z2ui5.oViewNest.destroy();` && |\n| && ` sap.z2ui5.oViewNest.destroy();` && |\n| &&
` },` && |\n| && ` },` && |\n| &&
` NestViewDestroy2() {` && |\n| && ` NestViewDestroy2() {` && |\n| &&
` if (!sap.z2ui5.oViewNest2) {` && |\n| && ` if (!sap.z2ui5.oViewNest2) {` && |\n| &&
` return;` && |\n| && ` return;` && |\n| &&
` }` && |\n| && ` }` && |\n| &&
` sap.z2ui5.oViewNest2.destroy();` && |\n| && ` sap.z2ui5.oViewNest2.destroy();` && |\n| &&
` },` && |\n| && ` },` && |\n| &&
` ViewDestroy() {` && |\n| && ` ViewDestroy() {` && |\n| &&
` if (!sap.z2ui5.oView) {` && |\n| && ` if (!sap.z2ui5.oView) {` && |\n| &&
` return;` && |\n| && ` return;` && |\n| &&
` }` && |\n| && ` }` && |\n| &&
` sap.z2ui5.oView.destroy();` && |\n| && ` sap.z2ui5.oView.destroy();` && |\n| &&
` },` && |\n| && ` },` && |\n| &&
` eF(...args) {` && |\n| && ` eF(...args) {` && |\n| &&
` sap.z2ui5.onBeforeEventFrontend.forEach(item => {` && |\n| && ` sap.z2ui5.onBeforeEventFrontend.forEach(item => {` && |\n| &&
` if (item !== undefined) {` && |\n| && ` if (item !== undefined) {` && |\n| &&
` item(args);` && |\n| && ` item(args);` && |\n| &&
` }` && |\n| && ` }` && |\n| &&
` }` && |\n| && ` }` && |\n| &&
` )` && |\n| && ` )` && |\n| &&
` let oCrossAppNavigator;` && |\n| && ` let oCrossAppNavigator;` && |\n| &&
` switch (args[0]) {` && |\n| && ` switch (args[0]) {` && |\n| &&
` case 'CROSS_APP_NAV_TO_PREV_APP':` && |\n| && ` case 'CROSS_APP_NAV_TO_PREV_APP':` && |\n| &&
` oCrossAppNavigator = sap.ushell.Container.getService("CrossApplicationNavigation");` && |\n| && ` oCrossAppNavigator = sap.ushell.Container.getService("CrossApplicationNavigation");` && |\n| &&
` oCrossAppNavigator.backToPreviousApp();` && |\n| && ` oCrossAppNavigator.backToPreviousApp();` && |\n| &&
` break;` && |\n| && ` break;` && |\n| &&
` case 'CROSS_APP_NAV_TO_EXT':` && |\n| && ` case 'CROSS_APP_NAV_TO_EXT':` && |\n| &&
` oCrossAppNavigator = sap.ushell.Container.getService("CrossApplicationNavigation");` && |\n| && ` oCrossAppNavigator = sap.ushell.Container.getService("CrossApplicationNavigation");` && |\n| &&
` const hash = (oCrossAppNavigator.hrefForExternal({` && |\n| && ` const hash = (oCrossAppNavigator.hrefForExternal({` && |\n| &&
` target: args[1],` && |\n| && ` target: args[1],` && |\n| &&
` params: args[2]` && |\n| && ` params: args[2]` && |\n| &&
` })) || "";` && |\n| && ` })) || "";` && |\n| &&
` if (args[3] === 'EXT') {` && |\n| && ` if (args[3] === 'EXT') {` && |\n| &&
` let url = window.location.href.split('#')[0] + hash;` && |\n| && ` let url = window.location.href.split('#')[0] + hash;` && |\n| &&
` sap.m.URLHelper.redirect(url, true);` && |\n| && ` sap.m.URLHelper.redirect(url, true);` && |\n| &&
` } else {` && |\n| && ` } else {` && |\n| &&
` oCrossAppNavigator.toExternal({` && |\n| && ` oCrossAppNavigator.toExternal({` && |\n| &&
` target: {` && |\n| && ` target: {` && |\n| &&
` shellHash: hash` && |\n| && ` shellHash: hash` && |\n| &&
` }` && |\n| && ` }` && |\n| &&
` });` && |\n| && ` });` && |\n| &&
` }` && |\n| && ` }` && |\n| &&
` break;` && |\n| && ` break;` && |\n| &&
` case 'LOCATION_RELOAD':` && |\n| && ` case 'LOCATION_RELOAD':` && |\n| &&
` window.location = args[1];` && |\n| && ` window.location = args[1];` && |\n| &&
` break;` && |\n| && ` break;` && |\n| &&
` case 'OPEN_NEW_TAB':` && |\n| && ` case 'OPEN_NEW_TAB':` && |\n| &&
` window.open(args[1], '_blank');` && |\n| && ` window.open(args[1], '_blank');` && |\n| &&
` break;` && |\n| && ` break;` && |\n| &&
` case 'POPUP_CLOSE':` && |\n| && ` case 'POPUP_CLOSE':` && |\n| &&
` sap.z2ui5.oController.PopupDestroy();` && |\n| && ` sap.z2ui5.oController.PopupDestroy();` && |\n| &&
` break;` && |\n| && ` break;` && |\n| &&
` case 'POPOVER_CLOSE':` && |\n| && ` case 'POPOVER_CLOSE':` && |\n| &&
` sap.z2ui5.oController.PopoverDestroy();` && |\n| && ` sap.z2ui5.oController.PopoverDestroy();` && |\n| &&
` break;` && |\n| && ` break;` && |\n| &&
` case 'NAV_CONTAINER_TO':` && |\n| && ` case 'NAV_CONTAINER_TO':` && |\n| &&
` var navCon = sap.z2ui5.oView.byId(args[1]);` && |\n| && ` var navCon = sap.z2ui5.oView.byId(args[1]);` && |\n| &&
` var navConTo = sap.z2ui5.oView.byId(args[2]);` && |\n| && ` var navConTo = sap.z2ui5.oView.byId(args[2]);` && |\n| &&
` navCon.to(navConTo);` && |\n| && ` navCon.to(navConTo);` && |\n| &&
` break;` && |\n| && ` break;` && |\n| &&
` case 'NEST_NAV_CONTAINER_TO':` && |\n| && ` case 'NEST_NAV_CONTAINER_TO':` && |\n| &&
` navCon = sap.z2ui5.oViewNest.byId(args[1]);` && |\n| && ` navCon = sap.z2ui5.oViewNest.byId(args[1]);` && |\n| &&
` navConTo = sap.z2ui5.oViewNest.byId(args[2]);` && |\n| && ` navConTo = sap.z2ui5.oViewNest.byId(args[2]);` && |\n| &&
` navCon.to(navConTo);` && |\n| && ` navCon.to(navConTo);` && |\n| &&
` break;` && |\n| && ` break;` && |\n| &&
` case 'NEST2_NAV_CONTAINER_TO':` && |\n| && ` case 'NEST2_NAV_CONTAINER_TO':` && |\n| &&
` navCon = sap.z2ui5.oViewNest2.byId(args[1]);` && |\n| && ` navCon = sap.z2ui5.oViewNest2.byId(args[1]);` && |\n| &&
` navConTo = sap.z2ui5.oViewNest2.byId(args[2]);` && |\n| && ` navConTo = sap.z2ui5.oViewNest2.byId(args[2]);` && |\n| &&
` navCon.to(navConTo);` && |\n| && ` navCon.to(navConTo);` && |\n| &&
` break;` && |\n| && ` break;` && |\n| &&
` case 'POPUP_NAV_CONTAINER_TO':` && |\n| && ` case 'POPUP_NAV_CONTAINER_TO':` && |\n| &&
` navCon = Fragment.byId("popupId",args[1]);` && |\n| && ` navCon = Fragment.byId("popupId",args[1]);` && |\n| &&
` navConTo = Fragment.byId("popupId",args[2]);` && |\n| && ` navConTo = Fragment.byId("popupId",args[2]);` && |\n| &&
` navCon.to(navConTo);` && |\n| && ` navCon.to(navConTo);` && |\n| &&
` break;` && |\n| && ` break;` && |\n| &&
` }` && |\n| && ` }` && |\n| &&
` },` && |\n| && ` },` && |\n| &&
` eB(...args) {` && |\n| && ` eB(...args) {` && |\n| &&
` if (sap.z2ui5.isBusy) {` && |\n| && ` if (sap.z2ui5.isBusy) {` && |\n| &&
` if (sap.z2ui5.isBusy == true) {` && |\n| && ` if (sap.z2ui5.isBusy == true) {` && |\n| &&
` sap.z2ui5.busyDialog = new sap.m.BusyDialog();` && |\n| && ` sap.z2ui5.busyDialog = new sap.m.BusyDialog();` && |\n| &&
` sap.z2ui5.busyDialog.open();` && |\n| && ` sap.z2ui5.busyDialog.open();` && |\n| &&
` return;` && |\n| && ` return;` && |\n| &&
` }` && |\n| && ` }` && |\n| &&
` }` && |\n| && ` }` && |\n| &&
` sap.z2ui5.isBusy = true;` && |\n| && ` sap.z2ui5.isBusy = true;` && |\n| &&
` if (!window.navigator.onLine) {` && |\n| && ` if (!window.navigator.onLine) {` && |\n| &&
` sap.m.MessageBox.alert('No internet connection! Please reconnect to the server and try again.');` && |\n| && ` sap.m.MessageBox.alert('No internet connection! Please reconnect to the server and try again.');` && |\n| &&
` sap.z2ui5.isBusy = false;` && |\n| && ` sap.z2ui5.isBusy = false;` && |\n| &&
` return;` && |\n| && ` return;` && |\n| &&
` }` && |\n| && ` }` && |\n| &&
` BusyIndicator.show();` && |\n| && ` BusyIndicator.show();` && |\n| &&
` let appStart = sap.z2ui5.oBody.APP_START;` && |\n| && ` let appStart = sap.z2ui5.oBody.APP_START;` && |\n| &&
` sap.z2ui5.oBody = {};` && |\n| && ` sap.z2ui5.oBody = {};` && |\n| &&
` sap.z2ui5.oBody.APP_START = appStart;` && |\n| && ` sap.z2ui5.oBody.APP_START = appStart;` && |\n| &&
` if ( sap.z2ui5.oController == this ) {` && |\n| && ` if ( sap.z2ui5.oController == this ) {` && |\n| &&
` sap.z2ui5.oBody.XX = sap.z2ui5.oView.getModel().getData().XX;` && |\n| && ` sap.z2ui5.oBody.XX = sap.z2ui5.oView.getModel().getData().XX;` && |\n| &&
` sap.z2ui5.oBody.VIEWNAME = 'MAIN';` && |\n| && ` sap.z2ui5.oBody.VIEWNAME = 'MAIN';` && |\n| &&
` }else if ` && |\n| && ` }else if ` && |\n| &&
` ( sap.z2ui5.oControllerPopup == this ) {` && |\n| && ` ( sap.z2ui5.oControllerPopup == this ) {` && |\n| &&
` sap.z2ui5.oBody.XX = sap.z2ui5.oViewPopup.getModel().getData().XX;` && |\n| && ` sap.z2ui5.oBody.XX = sap.z2ui5.oViewPopup.getModel().getData().XX;` && |\n| &&
` sap.z2ui5.oBody.VIEWNAME = 'MAIN';` && |\n| && ` sap.z2ui5.oBody.VIEWNAME = 'MAIN';` && |\n| &&
` }else if ( ` && |\n| && ` }else if ( ` && |\n| &&
` sap.z2ui5.oControllerPopover == this ) {` && |\n| && ` sap.z2ui5.oControllerPopover == this ) {` && |\n| &&
` sap.z2ui5.oBody.XX = sap.z2ui5.oViewPopover.getModel().getData().XX;` && |\n| && ` sap.z2ui5.oBody.XX = sap.z2ui5.oViewPopover.getModel().getData().XX;` && |\n| &&
` sap.z2ui5.oBody.VIEWNAME = 'MAIN';` && |\n| && ` sap.z2ui5.oBody.VIEWNAME = 'MAIN';` && |\n| &&
` }else if ( ` && |\n| && ` }else if ( ` && |\n| &&
` sap.z2ui5.oControllerNest == this ) {` && |\n| && ` sap.z2ui5.oControllerNest == this ) {` && |\n| &&
` sap.z2ui5.oBody.XX = sap.z2ui5.oViewNest.getModel().getData().XX;` && |\n| && ` sap.z2ui5.oBody.XX = sap.z2ui5.oViewNest.getModel().getData().XX;` && |\n| &&
` sap.z2ui5.oBody.VIEWNAME = 'NEST';` && |\n| && ` sap.z2ui5.oBody.VIEWNAME = 'NEST';` && |\n| &&
` }else if (` && |\n| && ` }else if (` && |\n| &&
` sap.z2ui5.oControllerNest2 == this ) {` && |\n| && ` sap.z2ui5.oControllerNest2 == this ) {` && |\n| &&
` sap.z2ui5.oBody.XX = sap.z2ui5.oViewNest2.getModel().getData().XX;` && |\n| && ` sap.z2ui5.oBody.XX = sap.z2ui5.oViewNest2.getModel().getData().XX;` && |\n| &&
` sap.z2ui5.oBody.VIEWNAME = 'NEST2';` && |\n| && ` sap.z2ui5.oBody.VIEWNAME = 'NEST2';` && |\n| &&
` }` && |\n| && ` }` && |\n| &&
` sap.z2ui5.onBeforeRoundtrip.forEach(item=>{` && |\n| && ` sap.z2ui5.onBeforeRoundtrip.forEach(item=>{` && |\n| &&
` if (item !== undefined) {` && |\n| && ` if (item !== undefined) {` && |\n| &&
` item();` && |\n| && ` item();` && |\n| &&
` }})` && |\n| && ` }})` && |\n| &&
` if (args[0][1]) {` && |\n| && ` if (args[0][1]) {` && |\n| &&
` sap.z2ui5.oController.ViewDestroy();` && |\n| && ` sap.z2ui5.oController.ViewDestroy();` && |\n| &&
` }` && |\n| && ` }` && |\n| &&
` sap.z2ui5.oBody.ID = sap.z2ui5.oResponse.ID;` && |\n| && ` sap.z2ui5.oBody.ID = sap.z2ui5.oResponse.ID;` && |\n| &&
` sap.z2ui5.oBody.ARGUMENTS = args;` && |\n| && ` sap.z2ui5.oBody.ARGUMENTS = args;` && |\n| &&
` sap.z2ui5.oResponseOld = sap.z2ui5.oResponse;` && |\n| && ` sap.z2ui5.oResponseOld = sap.z2ui5.oResponse;` && |\n| &&
` sap.z2ui5.oResponse = {};` && |\n| && ` sap.z2ui5.oResponse = {};` && |\n| &&
` sap.z2ui5.oController.Roundtrip();` && |\n| && ` sap.z2ui5.oController.Roundtrip();` && |\n| &&
` },` && |\n| && ` },` && |\n| &&
` responseError(response) {` && |\n| && ` responseError(response) {` && |\n| &&
` document.write(response);` && |\n| && ` document.write(response);` && |\n| &&
` },` && |\n| && ` },` && |\n| &&
` updateModelIfRequired(paramKey, oView) {` && |\n| && ` updateModelIfRequired(paramKey, oView) {` && |\n| &&
` if (sap.z2ui5.oResponse.PARAMS == undefined) { return; }` && |\n| && ` if (sap.z2ui5.oResponse.PARAMS == undefined) { return; }` && |\n| &&
` if (sap.z2ui5.oResponse.PARAMS[paramKey]?.CHECK_UPDATE_MODEL) {` && |\n| && ` if (sap.z2ui5.oResponse.PARAMS[paramKey]?.CHECK_UPDATE_MODEL) {` && |\n| &&
` let model = new JSONModel(sap.z2ui5.oResponse.OVIEWMODEL);` && |\n| && ` let model = new JSONModel(sap.z2ui5.oResponse.OVIEWMODEL);` && |\n| &&
` model.setSizeLimit(sap.z2ui5.JSON_MODEL_LIMIT);` && |\n| && ` model.setSizeLimit(sap.z2ui5.JSON_MODEL_LIMIT);` && |\n| &&
` oView.setModel(model);` && |\n| && ` oView.setModel(model);` && |\n| &&
` }` && |\n| && ` }` && |\n| &&
` },` && |\n| && ` },` && |\n| &&
` async responseSuccess(response) {` && |\n| && ` async responseSuccess(response) {` && |\n| &&
` try{` && |\n| && ` try{` && |\n| &&
` sap.z2ui5.oResponse = response;` && |\n| && ` sap.z2ui5.oResponse = response;` && |\n| &&
` if (sap.z2ui5.oResponse.PARAMS?.S_VIEW?.CHECK_DESTROY) {` && |\n| && ` if (sap.z2ui5.oResponse.PARAMS?.S_VIEW?.CHECK_DESTROY) {` && |\n| &&
` sap.z2ui5.oController.ViewDestroy();` && |\n| && ` sap.z2ui5.oController.ViewDestroy();` && |\n| &&
` }` && |\n| && ` }` && |\n| &&
` sap.z2ui5.oController.showMessage('S_MSG_TOAST', sap.z2ui5.oResponse.PARAMS);` && |\n| && ` sap.z2ui5.oController.showMessage('S_MSG_TOAST', sap.z2ui5.oResponse.PARAMS);` && |\n| &&
` sap.z2ui5.oController.showMessage('S_MSG_BOX', sap.z2ui5.oResponse.PARAMS);` && |\n| && ` sap.z2ui5.oController.showMessage('S_MSG_BOX', sap.z2ui5.oResponse.PARAMS);` && |\n| &&
` if (sap.z2ui5.oResponse.PARAMS?.S_VIEW?.XML) { if ( sap.z2ui5.oResponse.PARAMS?.S_VIEW?.XML !== '') {` && |\n| && ` if (sap.z2ui5.oResponse.PARAMS?.S_VIEW?.XML) { if ( sap.z2ui5.oResponse.PARAMS?.S_VIEW?.XML !== '') {` && |\n| &&
` sap.z2ui5.oController.ViewDestroy();` && |\n| && ` sap.z2ui5.oController.ViewDestroy();` && |\n| &&
` await sap.z2ui5.oController.createView(sap.z2ui5.oResponse.PARAMS.S_VIEW.XML, sap.z2ui5.oResponse.OVIEWMODEL);` && |\n| && ` await sap.z2ui5.oController.createView(sap.z2ui5.oResponse.PARAMS.S_VIEW.XML, sap.z2ui5.oResponse.OVIEWMODEL);` && |\n| &&
` return; } } ` && |\n| && ` return; } } ` && |\n| &&
` this.updateModelIfRequired('S_VIEW', sap.z2ui5.oView);` && |\n| && ` this.updateModelIfRequired('S_VIEW', sap.z2ui5.oView);` && |\n| &&
` this.updateModelIfRequired('S_VIEW_NEST', sap.z2ui5.oViewNest);` && |\n| && ` this.updateModelIfRequired('S_VIEW_NEST', sap.z2ui5.oViewNest);` && |\n| &&
` this.updateModelIfRequired('S_VIEW_NEST2', sap.z2ui5.oViewNest2);` && |\n| && ` this.updateModelIfRequired('S_VIEW_NEST2', sap.z2ui5.oViewNest2);` && |\n| &&
` this.updateModelIfRequired('S_POPUP', sap.z2ui5.oViewPopup);` && |\n| && ` this.updateModelIfRequired('S_POPUP', sap.z2ui5.oViewPopup);` && |\n| &&
` this.updateModelIfRequired('S_POPOVER', sap.z2ui5.oViewPopover);` && |\n| && ` this.updateModelIfRequired('S_POPOVER', sap.z2ui5.oViewPopover);` && |\n| &&
` sap.z2ui5.oController.onAfterRendering();` && |\n| && ` sap.z2ui5.oController.onAfterRendering();` && |\n| &&
` }catch(e){ BusyIndicator.hide(); MessageBox.error(e.toLocaleString()); }` && |\n| && ` }catch(e){ BusyIndicator.hide(); MessageBox.error(e.toLocaleString()); }` && |\n| &&
` },` && |\n| && ` },` && |\n| &&
` showMessage(msgType, params) {` && |\n| && ` showMessage(msgType, params) {` && |\n| &&
` if (params == undefined) { return; }` && |\n| && ` if (params == undefined) { return; }` && |\n| &&
` if (params[msgType]?.TEXT !== undefined) {` && |\n| && ` if (params[msgType]?.TEXT !== undefined) {` && |\n| &&
` if (msgType === 'S_MSG_TOAST') {` && |\n| && ` if (msgType === 'S_MSG_TOAST') {` && |\n| &&
` MessageToast.show(params[msgType].TEXT);` && |\n| && ` MessageToast.show(params[msgType].TEXT);` && |\n| &&
` } else if (msgType === 'S_MSG_BOX') {` && |\n| && ` } else if (msgType === 'S_MSG_BOX') {` && |\n| &&
` MessageBox[params[msgType].TYPE](params[msgType].TEXT);` && |\n| && ` MessageBox[params[msgType].TYPE](params[msgType].TEXT);` && |\n| &&
` }` && |\n| && ` }` && |\n| &&
` }` && |\n| && ` }` && |\n| &&
` },` && |\n| && ` },` && |\n| &&
` async createView(xml, viewModel) {` && |\n| && ` async createView(xml, viewModel) {` && |\n| &&
` const oView = await XMLView.create({` && |\n| && ` const oView = await XMLView.create({` && |\n| &&
` definition: xml,` && |\n| && ` definition: xml,` && |\n| &&
` controller: sap.z2ui5.oController,` && |\n| && ` controller: sap.z2ui5.oController,` && |\n| &&
` id: 'mainView',` && |\n| && ` id: 'mainView',` && |\n| &&
` });` && |\n| && ` });` && |\n| &&
` let oview_model = new JSONModel(viewModel);` && |\n| && ` let oview_model = new JSONModel(viewModel);` && |\n| &&
` oview_model.setSizeLimit(sap.z2ui5.JSON_MODEL_LIMIT);` && |\n| && ` oview_model.setSizeLimit(sap.z2ui5.JSON_MODEL_LIMIT);` && |\n| &&
` oView.setModel(oview_model);` && |\n| && ` oView.setModel(oview_model);` && |\n| &&
` if (sap.z2ui5.oParent) {` && |\n| && ` if (sap.z2ui5.oParent) {` && |\n| &&
` sap.z2ui5.oParent.removeAllPages();` && |\n| && ` sap.z2ui5.oParent.removeAllPages();` && |\n| &&
` sap.z2ui5.oParent.insertPage(oView);` && |\n| && ` sap.z2ui5.oParent.insertPage(oView);` && |\n| &&
` } else {` && |\n| && ` } else {` && |\n| &&
` oView.placeAt("content");` && |\n| && ` oView.placeAt("content");` && |\n| &&
` }` && |\n| && ` }` && |\n| &&
` sap.z2ui5.oView = oView;` && |\n| && ` sap.z2ui5.oView = oView;` && |\n| &&
` },` && |\n| && ` },` && |\n| &&
` async readHttp() {` && |\n| && ` async readHttp() {` && |\n| &&
` const response = await fetch(sap.z2ui5.pathname, {` && |\n| && ` const response = await fetch(sap.z2ui5.pathname, {` && |\n| &&
` method: 'POST',` && |\n| && ` method: 'POST',` && |\n| &&
` headers: {` && |\n| && ` headers: {` && |\n| &&
` 'Content-Type': 'application/json'` && |\n| && ` 'Content-Type': 'application/json'` && |\n| &&
` },` && |\n| && ` },` && |\n| &&
` body: JSON.stringify(sap.z2ui5.oBody)` && |\n| && ` body: JSON.stringify(sap.z2ui5.oBody)` && |\n| &&
` });` && |\n| && ` });` && |\n| &&
` if (!response.ok) {` && |\n| && ` if (!response.ok) {` && |\n| &&
` const responseText = await response.text();` && |\n| && ` const responseText = await response.text();` && |\n| &&
` sap.z2ui5.oController.responseError(responseText);` && |\n| && ` sap.z2ui5.oController.responseError(responseText);` && |\n| &&
` } else {` && |\n| && ` } else {` && |\n| &&
` const responseData = await response.json();` && |\n| && ` const responseData = await response.json();` && |\n| &&
` sap.z2ui5.responseData = responseData;` && |\n| && ` sap.z2ui5.responseData = responseData;` && |\n| &&
` if( !sap.z2ui5.oBody.APP_START ) { sap.z2ui5.oBody.APP_START = sap.z2ui5.responseData.S_FRONT.APP; }` && |\n| && ` if( !sap.z2ui5.oBody.APP_START ) { sap.z2ui5.oBody.APP_START = sap.z2ui5.responseData.S_FRONT.APP; }` && |\n| &&
` sap.z2ui5.oController.responseSuccess({` && |\n| && ` sap.z2ui5.oController.responseSuccess({` && |\n| &&
` ID : responseData.S_FRONT.ID,` && |\n| && ` ID : responseData.S_FRONT.ID,` && |\n| &&
` PARAMS : responseData.S_FRONT.PARAMS,` && |\n| && ` PARAMS : responseData.S_FRONT.PARAMS,` && |\n| &&
` OVIEWMODEL : responseData.MODEL,` && |\n| && ` OVIEWMODEL : responseData.MODEL,` && |\n| &&
` });` && |\n| && ` });` && |\n| &&
` }` && |\n| && ` }` && |\n| &&
` },` && |\n| && ` },` && |\n| &&
` Roundtrip() {` && |\n| && ` Roundtrip() {` && |\n| &&
` sap.z2ui5.checkTimerActive = false;` && |\n| && ` sap.z2ui5.checkTimerActive = false;` && |\n| &&
` sap.z2ui5.checkNestAfter = false;` && |\n| && ` sap.z2ui5.checkNestAfter = false;` && |\n| &&
` sap.z2ui5.checkNestAfter2 = false;` && |\n| && ` sap.z2ui5.checkNestAfter2 = false;` && |\n| &&
` let event = (args) => { if ( args != undefined ) { return args[0][0]; } };` && |\n| && ` let event = (args) => { if ( args != undefined ) { return args[0][0]; } };` && |\n| &&
` sap.z2ui5.oBody.S_FRONT = {` && |\n| && ` sap.z2ui5.oBody.S_FRONT = {` && |\n| &&
` ID: sap.z2ui5?.oBody?.ID,` && |\n| && ` ID: sap.z2ui5?.oBody?.ID,` && |\n| &&
` APP_START: sap.z2ui5?.oBody?.APP_START,` && |\n| && ` APP_START: sap.z2ui5?.oBody?.APP_START,` && |\n| &&
` XX: sap.z2ui5?.oBody?.XX,` && |\n| && ` XX: sap.z2ui5?.oBody?.XX,` && |\n| &&
` ORIGIN: window.location.origin,` && |\n| && ` ORIGIN: window.location.origin,` && |\n| &&
` PATHNAME: sap.z2ui5.pathname,` && |\n| && ` PATHNAME: sap.z2ui5.pathname,` && |\n| &&
` SEARCH: (sap.z2ui5.search) ? sap.z2ui5.search : window.location.search,` && |\n| && ` SEARCH: (sap.z2ui5.search) ? sap.z2ui5.search : window.location.search,` && |\n| &&
` VIEW: sap.z2ui5.oBody.VIEWNAME,` && |\n| && ` VIEW: sap.z2ui5.oBody.VIEWNAME,` && |\n| &&
` T_STARTUP_PARAMETERS: sap.z2ui5.startupParameters,` && |\n| && ` T_STARTUP_PARAMETERS: sap.z2ui5.startupParameters,` && |\n| &&
` EVENT: event(sap.z2ui5.oBody?.ARGUMENTS),` && |\n| && ` EVENT: event(sap.z2ui5.oBody?.ARGUMENTS),` && |\n| &&
` };` && |\n| && ` };` && |\n| &&
` if ( sap.z2ui5.oBody?.ARGUMENTS != undefined ) { if ( sap.z2ui5.oBody?.ARGUMENTS.length > 0 ) { sap.z2ui5.oBody?.ARGUMENTS.shift(); } }` && |\n| && ` if ( sap.z2ui5.oBody?.ARGUMENTS != undefined ) { if ( sap.z2ui5.oBody?.ARGUMENTS.length > 0 ) { sap.z2ui5.oBody?.ARGUMENTS.shift(); } }` && |\n| &&
` sap.z2ui5.oBody.S_FRONT.T_EVENT_ARG = sap.z2ui5.oBody?.ARGUMENTS;` && |\n| && ` sap.z2ui5.oBody.S_FRONT.T_EVENT_ARG = sap.z2ui5.oBody?.ARGUMENTS;` && |\n| &&
` delete sap.z2ui5.oBody.ID;` && |\n| && ` delete sap.z2ui5.oBody.ID;` && |\n| &&
` delete sap.z2ui5.oBody?.VIEWNAME;` && |\n| && ` delete sap.z2ui5.oBody?.VIEWNAME;` && |\n| &&
` delete sap.z2ui5.oBody?.APP_START;` && |\n| && ` delete sap.z2ui5.oBody?.APP_START;` && |\n| &&
` delete sap.z2ui5.oBody?.S_FRONT.XX;` && |\n| && ` delete sap.z2ui5.oBody?.S_FRONT.XX;` && |\n| &&
` delete sap.z2ui5.oBody?.ARGUMENTS;` && |\n| && ` delete sap.z2ui5.oBody?.ARGUMENTS;` && |\n| &&
` if (!sap.z2ui5.oBody.S_FRONT.T_EVENT_ARG) { delete sap.z2ui5.oBody.S_FRONT.T_EVENT_ARG; } ` && |\n| && ` if (!sap.z2ui5.oBody.S_FRONT.T_EVENT_ARG) { delete sap.z2ui5.oBody.S_FRONT.T_EVENT_ARG; } ` && |\n| &&
` if (sap.z2ui5.oBody.S_FRONT.T_EVENT_ARG) { if (sap.z2ui5.oBody.S_FRONT.T_EVENT_ARG.length == 0 ) { delete sap.z2ui5.oBody.S_FRONT.T_EVENT_ARG; } }` && |\n| && ` if (sap.z2ui5.oBody.S_FRONT.T_EVENT_ARG) { if (sap.z2ui5.oBody.S_FRONT.T_EVENT_ARG.length == 0 ) { delete sap.z2ui5.oBody.S_FRONT.T_EVENT_ARG; } }` && |\n| &&
` if (sap.z2ui5.oBody.S_FRONT.T_STARTUP_PARAMETERS == undefined) { delete sap.z2ui5.oBody.S_FRONT.T_STARTUP_PARAMETERS; } ` && |\n| && ` if (sap.z2ui5.oBody.S_FRONT.T_STARTUP_PARAMETERS == undefined) { delete sap.z2ui5.oBody.S_FRONT.T_STARTUP_PARAMETERS; } ` && |\n| &&
` if ( sap.z2ui5.oBody.S_FRONT.SEARCH == '' ){ delete sap.z2ui5.oBody.S_FRONT.SEARCH; } ` && |\n| && ` if ( sap.z2ui5.oBody.S_FRONT.SEARCH == '' ){ delete sap.z2ui5.oBody.S_FRONT.SEARCH; } ` && |\n| &&
` if (!sap.z2ui5.oBody.XX){ delete sap.z2ui5.oBody.XX; } ` && |\n| && ` if (!sap.z2ui5.oBody.XX){ delete sap.z2ui5.oBody.XX; } ` && |\n| &&
` sap.z2ui5.oController.readHttp();` && |\n| && ` sap.z2ui5.oController.readHttp();` && |\n| &&
` },` && |\n| && ` },` && |\n| &&
` })` && |\n| && ` })` && |\n| &&
`});` && |\n| && `});` && |\n| &&
`sap.ui.require(["z2ui5/Controller", "sap/ui/core/BusyIndicator", "sap/ui/core/mvc/XMLView", "sap/ui/core/Fragment", "sap/m/MessageToast", "sap/m/MessageBox", "sap/ui/model/json/JSONModel"], (Controller,BusyIndicator)=>{` && |\n| && `sap.ui.require(["z2ui5/Controller", "sap/ui/core/BusyIndicator", "sap/ui/core/mvc/XMLView", "sap/ui/core/Fragment", "sap/m/MessageToast", "sap/m/MessageBox", "sap/ui/model/json/JSONModel"], (Controller,BusyIndicator)=>{` && |\n| &&
` BusyIndicator.show();` && |\n| && ` BusyIndicator.show();` && |\n| &&
` sap.z2ui5.oController = new Controller();` && |\n| && ` sap.z2ui5.oController = new Controller();` && |\n| &&
` sap.z2ui5.oControllerNest = new Controller();` && |\n| && ` sap.z2ui5.oControllerNest = new Controller();` && |\n| &&
` sap.z2ui5.oControllerNest2 = new Controller();` && |\n| && ` sap.z2ui5.oControllerNest2 = new Controller();` && |\n| &&
` sap.z2ui5.oControllerPopup = new Controller();` && |\n| && ` sap.z2ui5.oControllerPopup = new Controller();` && |\n| &&
` sap.z2ui5.oControllerPopover = new Controller();` && |\n| && ` sap.z2ui5.oControllerPopover = new Controller();` && |\n| &&
` sap.z2ui5.pathname = sap.z2ui5.pathname || window.location.pathname;` && |\n| && ` sap.z2ui5.pathname = sap.z2ui5.pathname || window.location.pathname;` && |\n| &&
` sap.z2ui5.checkNestAfter = false;` && |\n| && ` sap.z2ui5.checkNestAfter = false;` && |\n| &&
` sap.z2ui5.oBody = {` && |\n| && ` sap.z2ui5.oBody = {` && |\n| &&
` APP_START: sap.z2ui5.APP_START` && |\n| && ` APP_START: sap.z2ui5.APP_START` && |\n| &&
` };` && |\n| && ` };` && |\n| &&
` sap.z2ui5.oController.Roundtrip();` && |\n| && ` sap.z2ui5.oController.Roundtrip();` && |\n| &&
` sap.z2ui5.onBeforeRoundtrip = [];` && |\n| && ` sap.z2ui5.onBeforeRoundtrip = [];` && |\n| &&
` sap.z2ui5.onAfterRendering = [];` && |\n| && ` sap.z2ui5.onAfterRendering = [];` && |\n| &&
` sap.z2ui5.onBeforeEventFrontend = [];` && |\n| && ` sap.z2ui5.onBeforeEventFrontend = [];` && |\n| &&
` sap.z2ui5.onAfterRoundtrip = []; }` && |\n| && ` sap.z2ui5.onAfterRoundtrip = []; }` && |\n| &&
`);`. `);`.
ENDMETHOD. ENDMETHOD.
@ -495,7 +495,7 @@ CLASS z2ui5_cl_core_http_get IMPLEMENTATION.
THEN get_default_config( ) THEN get_default_config( )
ELSE ms_request-t_config ). ELSE ms_request-t_config ).
DATA(lv_sec_policy) = COND #( WHEN ms_request-content_security_policy IS INITIAL DATA(lv_sec_policy) = COND #( WHEN ms_request-content_security_policy IS INITIAL
THEN get_default_security_policy( ) THEN get_default_security_policy( )
ELSE ms_request-content_security_policy ). ELSE ms_request-content_security_policy ).
@ -530,7 +530,7 @@ CLASS z2ui5_cl_core_http_get IMPLEMENTATION.
DATA(lv_add_js) = get_js_cc_startup( ) && ms_request-custom_js. DATA(lv_add_js) = get_js_cc_startup( ) && ms_request-custom_js.
mv_response = mv_response && mv_response = mv_response &&
`<script> sap.z2ui5 = sap.z2ui5 || {};` && |\n| && `<script> sap.z2ui5 = sap.z2ui5 || {};` && |\n| &&
get_js( ) && |\n| && get_js( ) && |\n| &&
lv_add_js && |\n| && lv_add_js && |\n| &&
` sap.z2ui5.JSON_MODEL_LIMIT = ` && COND #( WHEN ms_request-json_model_limit IS NOT INITIAL THEN ms_request-json_model_limit ELSE 100 ) && `;`. ` sap.z2ui5.JSON_MODEL_LIMIT = ` && COND #( WHEN ms_request-json_model_limit IS NOT INITIAL THEN ms_request-json_model_limit ELSE 100 ) && `;`.
@ -540,7 +540,7 @@ CLASS z2ui5_cl_core_http_get IMPLEMENTATION.
` sap.ui.require(["z2ui5/DebuggingTools","z2ui5/Controller"], (DebuggingTools) => { sap.z2ui5.DebuggingTools = new DebuggingTools(); ` && |\n| && ` sap.ui.require(["z2ui5/DebuggingTools","z2ui5/Controller"], (DebuggingTools) => { sap.z2ui5.DebuggingTools = new DebuggingTools(); ` && |\n| &&
` });`. ` });`.
mv_response = mv_response && |\n| && mv_response = mv_response && |\n| &&
`</script>` && |\n| && `</script>` && |\n| &&
`<abc/></body></html>`. `<abc/></body></html>`.

View File

@ -84,11 +84,11 @@ CLASS z2ui5_cl_core_http_post IMPLEMENTATION.
METHOD main_end. METHOD main_end.
ms_response = VALUE #( ms_response = VALUE #(
s_front-params = mo_action->ms_next-s_set s_front-params = mo_action->ms_next-s_set
s_front-id = mo_action->mo_app->ms_draft-id s_front-id = mo_action->mo_app->ms_draft-id
s_front-app = z2ui5_cl_util=>rtti_get_classname_by_ref( mo_action->mo_app->mo_app ) s_front-app = z2ui5_cl_util=>rtti_get_classname_by_ref( mo_action->mo_app->mo_app )
s_front-app_start = ms_request-s_control-app_start s_front-app_start = ms_request-s_control-app_start
model = mo_action->mo_app->model_json_stringify( ) ). model = mo_action->mo_app->model_json_stringify( ) ).
DATA(lo_json_mapper) = NEW z2ui5_cl_core_json_srv( ). DATA(lo_json_mapper) = NEW z2ui5_cl_core_json_srv( ).
result = lo_json_mapper->response_abap_to_json( ms_response ). result = lo_json_mapper->response_abap_to_json( ms_response ).

View File

@ -4,7 +4,7 @@ CLASS ltcl_test_handler_post DEFINITION FINAL FOR TESTING
RISK LEVEL HARMLESS. RISK LEVEL HARMLESS.
PRIVATE SECTION. PRIVATE SECTION.
METHODS: METHODS
load_startup_app FOR TESTING RAISING cx_static_check. load_startup_app FOR TESTING RAISING cx_static_check.
ENDCLASS. ENDCLASS.

View File

@ -31,9 +31,8 @@ INTERFACE z2ui5_if_core_types
BEGIN OF ty_s_attri, BEGIN OF ty_s_attri,
name TYPE string, name TYPE string,
name_client TYPE string, name_client TYPE string,
type_kind TYPE string,
bind_type TYPE string, bind_type TYPE string,
data_rtti TYPE string, srtti_data TYPE string,
check_dissolved TYPE abap_bool, check_dissolved TYPE abap_bool,
view TYPE string, view TYPE string,
json_bind_local TYPE REF TO z2ui5_if_ajson, json_bind_local TYPE REF TO z2ui5_if_ajson,
@ -42,7 +41,7 @@ INTERFACE z2ui5_if_core_types
custom_mapper TYPE REF TO z2ui5_if_ajson_mapping, custom_mapper TYPE REF TO z2ui5_if_ajson_mapping,
custom_mapper_back TYPE REF TO z2ui5_if_ajson_mapping, custom_mapper_back TYPE REF TO z2ui5_if_ajson_mapping,
r_ref TYPE REF TO data, r_ref TYPE REF TO data,
o_typedescr type ref to cl_abap_typedescr, o_typedescr TYPE REF TO cl_abap_typedescr,
END OF ty_s_attri. END OF ty_s_attri.
TYPES ty_t_attri TYPE SORTED TABLE OF ty_s_attri WITH UNIQUE KEY name. TYPES ty_t_attri TYPE SORTED TABLE OF ty_s_attri WITH UNIQUE KEY name.

View File

@ -45,10 +45,9 @@ CLASS z2ui5_cl_core_app_info IMPLEMENTATION.
DATA(page2) = z2ui5_cl_xml_view=>factory_popup( DATA(page2) = z2ui5_cl_xml_view=>factory_popup(
)->dialog( )->dialog(
stretch = abap_true stretch = abap_true
title = `abap2UI5 - System Information` title = `abap2UI5 - System Information`
afterclose = client->_event( `CLOSE` ) afterclose = client->_event( `CLOSE` ) ).
).
* page2->header_content( )->text( )->title( `abap2UI5 - System Information` )->toolbar_spacer( ). * page2->header_content( )->text( )->title( `abap2UI5 - System Information` )->toolbar_spacer( ).
@ -79,7 +78,7 @@ CLASS z2ui5_cl_core_app_info IMPLEMENTATION.
simple_form2->toolbar( )->title( `Frontend` ). simple_form2->toolbar( )->title( `Frontend` ).
simple_form2->label( `UI5 Version`). simple_form2->label( `UI5 Version` ).
simple_form2->text( client->_bind( mv_ui5_version ) ). simple_form2->text( client->_bind( mv_ui5_version ) ).
simple_form2->label( `Launchpad active` ). simple_form2->label( `Launchpad active` ).
simple_form2->checkbox( enabled = abap_false selected = client->get( )-check_launchpad_active ). simple_form2->checkbox( enabled = abap_false selected = client->get( )-check_launchpad_active ).
@ -97,19 +96,19 @@ CLASS z2ui5_cl_core_app_info IMPLEMENTATION.
simple_form2->label( `ABAP for Cloud` ). simple_form2->label( `ABAP for Cloud` ).
simple_form2->checkbox( enabled = abap_false selected = z2ui5_cl_util=>rtti_check_lang_version_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_entries( ) ).
simple_form2->toolbar( )->title( `abap2UI5` ). simple_form2->toolbar( )->title( `abap2UI5` ).
simple_form2->label( `Version ` ). simple_form2->label( `Version ` ).
simple_form2->text( z2ui5_if_app=>version ). simple_form2->text( z2ui5_if_app=>version ).
simple_form2->label( `Draft Entries ` ). simple_form2->label( `Draft Entries ` ).
simple_form2->text( lv_count ). simple_form2->text( lv_count ).
page2->footer( )->overflow_toolbar( page2->footer( )->overflow_toolbar(
)->toolbar_spacer( )->toolbar_spacer(
)->button( )->button(
text = 'close' text = 'close'
press = client->_event( 'CLOSE' ) press = client->_event( 'CLOSE' )
type = 'Emphasized' ). type = 'Emphasized' ).
client->popup_display( page2->stringify( ) ). client->popup_display( page2->stringify( ) ).
@ -146,6 +145,7 @@ CLASS z2ui5_cl_core_app_info IMPLEMENTATION.
client->popup_destroy( ). client->popup_destroy( ).
client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ).
WHEN OTHERS.
ENDCASE. ENDCASE.
ENDMETHOD. ENDMETHOD.

View File

@ -85,10 +85,10 @@ CLASS z2ui5_cl_core_app_startup IMPLEMENTATION.
* classname = 'z2ui5_cl_core_app_info' ). * classname = 'z2ui5_cl_core_app_info' ).
page2->header_content( page2->header_content(
)->text( )->text(
)->title( `abap2UI5 - Developing UI5 Apps Purely in ABAP` )->title( `abap2UI5 - Developing UI5 Apps Purely in ABAP`
)->toolbar_spacer( )->toolbar_spacer(
)->button( text = `System` icon = `sap-icon://information` )->button( text = `System` icon = `sap-icon://information`
press = client->_event( `OPEN_INFO` ) ). press = client->_event( `OPEN_INFO` ) ).
* press = client->_event_client( val = client->cs_event-open_new_tab * press = client->_event_client( val = client->cs_event-open_new_tab
* t_arg = VALUE #( ( lv_url_info ) ) ) ). * t_arg = VALUE #( ( lv_url_info ) ) ) ).
@ -127,7 +127,7 @@ CLASS z2ui5_cl_core_app_startup IMPLEMENTATION.
IF ms_home-class_editable = abap_true. IF ms_home-class_editable = abap_true.
simple_form2->input( placeholder = `fill in the class name and press 'check'` simple_form2->input( placeholder = `fill in the class name and press 'check'`
enabled = client->_bind( ms_home-class_editable ) enabled = client->_bind( ms_home-class_editable )
value = client->_bind_edit( ms_home-classname ) value = client->_bind_edit( ms_home-classname )
submit = client->_event( ms_home-btn_event_id ) submit = client->_event( ms_home-btn_event_id )
valuehelprequest = client->_event( 'VALUE_HELP' ) valuehelprequest = client->_event( 'VALUE_HELP' )
@ -138,7 +138,7 @@ CLASS z2ui5_cl_core_app_startup IMPLEMENTATION.
ENDIF. ENDIF.
simple_form2->label( ). simple_form2->label( ).
simple_form2->button( press = client->_event( ms_home-btn_event_id ) simple_form2->button( press = client->_event( ms_home-btn_event_id )
text = client->_bind( ms_home-btn_text ) text = client->_bind( ms_home-btn_text )
icon = client->_bind( ms_home-btn_icon ) icon = client->_bind( ms_home-btn_icon )
width = `70%` ). width = `70%` ).
@ -146,7 +146,7 @@ CLASS z2ui5_cl_core_app_startup IMPLEMENTATION.
)->link( text = `Link to the Application` )->link( text = `Link to the Application`
target = `_blank` target = `_blank`
href = lv_url href = lv_url
enabled = `{= $` && client->_bind( val = ms_home-class_editable ) && ` === false }` ). enabled = `{= $` && client->_bind( val = ms_home-class_editable ) && ` === false }` ).
DATA(lv_url_samples2) = z2ui5_cl_util=>app_get_url( DATA(lv_url_samples2) = z2ui5_cl_util=>app_get_url(
@ -155,19 +155,19 @@ CLASS z2ui5_cl_core_app_startup IMPLEMENTATION.
simple_form2->toolbar( )->title( `What's next?` ). simple_form2->toolbar( )->title( `What's next?` ).
IF z2ui5_cl_util=>rtti_check_class_exists( `z2ui5_cl_demo_app_000`). IF z2ui5_cl_util=>rtti_check_class_exists( `z2ui5_cl_demo_app_000` ).
simple_form2->label( `Start Developing` ). simple_form2->label( `Start Developing` ).
simple_form2->button( simple_form2->button(
text = `Check out the samples` text = `Check out the samples`
press = client->_event_client( val = client->cs_event-open_new_tab press = client->_event_client( val = client->cs_event-open_new_tab
t_arg = VALUE #( ( lv_url_samples2 ) ) ) t_arg = VALUE #( ( lv_url_samples2 ) ) )
width = `70%` ). width = `70%` ).
ELSE. ELSE.
simple_form2->label( `Install the sample repository` ). simple_form2->label( `Install the sample repository` ).
simple_form2->link( text = `And explore more than 100 demo apps...` simple_form2->link( text = `And explore more than 100 demo apps...`
target = `_blank` target = `_blank`
href = `https://github.com/abap2UI5/abap2UI5-samples` ). href = `https://github.com/abap2UI5/abap2UI5-samples` ).
ENDIF. ENDIF.
simple_form2->label( `` ). simple_form2->label( `` ).

View File

@ -20,26 +20,26 @@ CLASS z2ui5_cl_fw_cc_favicon IMPLEMENTATION.
METHOD get_js. METHOD get_js.
result = `sap.ui.define("z2ui5/Favicon" , ["sap/ui/core/Control"], (Control)=>{` && |\n| && result = `sap.ui.define("z2ui5/Favicon" , ["sap/ui/core/Control"], (Control)=>{` && |\n| &&
` "use strict";` && |\n| && ` "use strict";` && |\n| &&
` return Control.extend("z2ui5.Favicon", {` && |\n| && ` return Control.extend("z2ui5.Favicon", {` && |\n| &&
` metadata: {` && |\n| && ` metadata: {` && |\n| &&
` properties: {` && |\n| && ` properties: {` && |\n| &&
` favicon: {` && |\n| && ` favicon: {` && |\n| &&
` type: "string"` && |\n| && ` type: "string"` && |\n| &&
` },` && |\n| && ` },` && |\n| &&
` }` && |\n| && ` }` && |\n| &&
` },` && |\n| && ` },` && |\n| &&
` setFavicon(val) {` && |\n| && ` setFavicon(val) {` && |\n| &&
` this.setProperty("favicon", val);` && |\n| && ` this.setProperty("favicon", val);` && |\n| &&
` let headTitle = document.querySelector('head');` && |\n| && ` let headTitle = document.querySelector('head');` && |\n| &&
` let setFavicon = document.createElement('link');` && |\n| && ` let setFavicon = document.createElement('link');` && |\n| &&
` setFavicon.setAttribute('rel','shortcut icon');` && |\n| && ` setFavicon.setAttribute('rel','shortcut icon');` && |\n| &&
` setFavicon.setAttribute('href',val);` && |\n| && ` setFavicon.setAttribute('href',val);` && |\n| &&
` headTitle.appendChild(setFavicon);` && |\n| && ` headTitle.appendChild(setFavicon);` && |\n| &&
` },` && |\n| && ` },` && |\n| &&
` renderer(oRm, oControl) {}` && |\n| && ` renderer(oRm, oControl) {}` && |\n| &&
` });` && |\n| && ` });` && |\n| &&
` });`. ` });`.
ENDMETHOD. ENDMETHOD.

View File

@ -10,7 +10,7 @@ CLASS z2ui5_cl_fw_cc_scrolling DEFINITION
id TYPE string, id TYPE string,
scrollto TYPE string, scrollto TYPE string,
END OF ty_s_item. END OF ty_s_item.
TYPES ty_t_item TYPE STANDARD TABLE OF ty_s_item WITH DEFAULT KEY ##NEEDED. TYPES ty_t_item TYPE STANDARD TABLE OF ty_s_item WITH EMPTY KEY ##NEEDED.
CLASS-METHODS get_js CLASS-METHODS get_js
RETURNING RETURNING

View File

@ -25,7 +25,8 @@ CLASS z2ui5_cl_fw_cc_util IMPLEMENTATION.
` DateCreateObject: (s) => new Date(s),` && |\n| && ` DateCreateObject: (s) => new Date(s),` && |\n| &&
` DateAbapTimestampToDate: (sTimestamp) => new sap.gantt.misc.Format.abapTimestampToDate(sTimestamp),` && |\n| && ` DateAbapTimestampToDate: (sTimestamp) => new sap.gantt.misc.Format.abapTimestampToDate(sTimestamp),` && |\n| &&
` DateAbapDateToDateObject: (d) => new Date(d.slice(0, 4), parseInt(d.slice(4, 6)) - 1, d.slice(6, 8)),` && |\n| && ` DateAbapDateToDateObject: (d) => new Date(d.slice(0, 4), parseInt(d.slice(4, 6)) - 1, d.slice(6, 8)),` && |\n| &&
` DateAbapDateTimeToDateObject: (d, t = '000000') => new Date(d.slice(0, 4), parseInt(d.slice(4, 6)) - 1, d.slice(6, 8), t.slice(0, 2), t.slice(2, 4), t.slice(4, 6)),` && |\n| && ` DateAbapDateTimeToDateObject: (d, t = '000000') => new Date(d.slice(0, 4), ` && |\n| &&
` parseInt(d.slice(4, 6)) - 1, d.slice(6, 8), t.slice(0, 2), t.slice(2, 4), t.slice(4, 6)),` && |\n| &&
` };` && |\n| && ` };` && |\n| &&
` });`. ` });`.

View File

@ -16,8 +16,8 @@ CLASS z2ui5_cl_cc_chartjs DEFINITION
r TYPE string, r TYPE string,
END OF ty_x_y_r_data. END OF ty_x_y_r_data.
TYPES ty_x_y_r_data_t TYPE STANDARD TABLE OF ty_x_y_r_data WITH DEFAULT KEY. TYPES ty_x_y_r_data_t TYPE STANDARD TABLE OF ty_x_y_r_data WITH EMPTY KEY.
TYPES ty_bg_color TYPE STANDARD TABLE OF string WITH DEFAULT KEY. TYPES ty_bg_color TYPE STANDARD TABLE OF string WITH EMPTY KEY.
TYPES: TYPES:
BEGIN OF ty_padding, BEGIN OF ty_padding,
@ -82,7 +82,7 @@ CLASS z2ui5_cl_cc_chartjs DEFINITION
values TYPE string_table, values TYPE string_table,
END OF ty_data_venn . END OF ty_data_venn .
TYPES ty_data_venn_t TYPE STANDARD TABLE OF ty_data_venn WITH DEFAULT KEY. TYPES ty_data_venn_t TYPE STANDARD TABLE OF ty_data_venn WITH EMPTY KEY.
TYPES: TYPES:
BEGIN OF ty_dataset, BEGIN OF ty_dataset,
@ -111,7 +111,7 @@ CLASS z2ui5_cl_cc_chartjs DEFINITION
tension TYPE string, tension TYPE string,
END OF ty_dataset. END OF ty_dataset.
TYPES ty_datasets TYPE STANDARD TABLE OF ty_dataset WITH DEFAULT KEY. TYPES ty_datasets TYPE STANDARD TABLE OF ty_dataset WITH EMPTY KEY.
TYPES: TYPES:
BEGIN OF ty_data, BEGIN OF ty_data,
@ -612,7 +612,7 @@ ENDCLASS.
CLASS Z2UI5_CL_CC_CHARTJS IMPLEMENTATION. CLASS z2ui5_cl_cc_chartjs IMPLEMENTATION.
METHOD get_chartjs_local. METHOD get_chartjs_local.
@ -846,7 +846,7 @@ CLASS Z2UI5_CL_CC_CHARTJS IMPLEMENTATION.
rv_keep = abap_false. rv_keep = abap_false.
ENDIF. ENDIF.
WHEN z2ui5_if_ajson_types=>node_type-number. WHEN z2ui5_if_ajson_types=>node_type-number.
IF is_node-value = `0` or is_node-value = `0.00`. IF is_node-value = `0` OR is_node-value = `0.00`.
rv_keep = abap_false. rv_keep = abap_false.
ENDIF. ENDIF.
WHEN z2ui5_if_ajson_types=>node_type-string. WHEN z2ui5_if_ajson_types=>node_type-string.

View File

@ -69,7 +69,7 @@
on_highlighted TYPE string, on_highlighted TYPE string,
END OF ty_config_steps. END OF ty_config_steps.
TYPES ty_config_steps_tt TYPE STANDARD TABLE OF ty_config_steps WITH DEFAULT KEY. TYPES ty_config_steps_tt TYPE STANDARD TABLE OF ty_config_steps WITH EMPTY KEY.
TYPES: TYPES:
BEGIN OF ty_config, BEGIN OF ty_config,

View File

@ -80,7 +80,7 @@ ENDCLASS.
CLASS Z2UI5_CL_CC_IMAGEMAPSTER IMPLEMENTATION. CLASS z2ui5_cl_cc_imagemapster IMPLEMENTATION.
METHOD get_js_local. METHOD get_js_local.
@ -3302,7 +3302,7 @@ CLASS Z2UI5_CL_CC_IMAGEMAPSTER IMPLEMENTATION.
TRY. TRY.
DATA(li_ajson) = CAST z2ui5_if_ajson( z2ui5_cl_ajson=>create_empty( ) ). DATA(li_ajson) = CAST z2ui5_if_ajson( z2ui5_cl_ajson=>create_empty( ) ).
li_ajson->set( iv_path = `/` iv_val = is_config ). li_ajson->set( iv_path = `/` iv_val = is_config ).
li_ajson = li_ajson->filter( NEW Z2UI5_CL_CC_IMAGEMAPSTER( ) ). li_ajson = li_ajson->filter( NEW z2ui5_cl_cc_imagemapster( ) ).
* li_ajson = li_ajson->filter( z2ui5_cl_ajson_filter_lib=>create_empty_filter( ) ). * li_ajson = li_ajson->filter( z2ui5_cl_ajson_filter_lib=>create_empty_filter( ) ).
li_ajson = li_ajson->map( z2ui5_cl_ajson_mapping=>create_to_camel_case( ) ). li_ajson = li_ajson->map( z2ui5_cl_ajson_mapping=>create_to_camel_case( ) ).
* li_ajson = li_ajson->map( z2ui5_cl_ajson_mapping=>create_lower_case( ) ). * li_ajson = li_ajson->map( z2ui5_cl_ajson_mapping=>create_lower_case( ) ).
@ -3383,45 +3383,45 @@ CLASS Z2UI5_CL_CC_IMAGEMAPSTER IMPLEMENTATION.
ENDMETHOD. ENDMETHOD.
METHOD z2ui5_if_ajson_filter~keep_node. METHOD z2ui5_if_ajson_filter~keep_node.
rv_keep = abap_true. rv_keep = abap_true.
CASE iv_visit. CASE iv_visit.
WHEN z2ui5_if_ajson_filter=>visit_type-open. WHEN z2ui5_if_ajson_filter=>visit_type-open.
IF is_node-children = 0. IF is_node-children = 0.
rv_keep = abap_false. rv_keep = abap_false.
ENDIF. ENDIF.
WHEN z2ui5_if_ajson_filter=>visit_type-value. WHEN z2ui5_if_ajson_filter=>visit_type-value.
CASE is_node-type. CASE is_node-type.
WHEN z2ui5_if_ajson_types=>node_type-boolean. WHEN z2ui5_if_ajson_types=>node_type-boolean.
IF is_node-name = `is_selectable`. IF is_node-name = `is_selectable`.
RETURN. RETURN.
ENDIF. ENDIF.
IF is_node-value = `false`. IF is_node-value = `false`.
rv_keep = abap_false. rv_keep = abap_false.
ENDIF. ENDIF.
WHEN z2ui5_if_ajson_types=>node_type-number. WHEN z2ui5_if_ajson_types=>node_type-number.
IF is_node-value = `0` OR is_node-value = `0.00`. IF is_node-value = `0` OR is_node-value = `0.00`.
rv_keep = abap_false. rv_keep = abap_false.
ENDIF. ENDIF.
WHEN z2ui5_if_ajson_types=>node_type-string. WHEN z2ui5_if_ajson_types=>node_type-string.
IF is_node-value = ``. IF is_node-value = ``.
rv_keep = abap_false. rv_keep = abap_false.
ENDIF. ENDIF.
ENDCASE. ENDCASE.
WHEN z2ui5_if_ajson_filter=>visit_type-close. WHEN z2ui5_if_ajson_filter=>visit_type-close.
IF is_node-children = 0. IF is_node-children = 0.
rv_keep = abap_false. rv_keep = abap_false.
ENDIF. ENDIF.
ENDCASE. ENDCASE.
ENDMETHOD. ENDMETHOD.
ENDCLASS. ENDCLASS.

View File

@ -16,18 +16,18 @@ CLASS z2ui5_cl_cc_messaging DEFINITION
descriptionurl TYPE string, descriptionurl TYPE string,
persistent TYPE string, persistent TYPE string,
END OF ty_s_item . END OF ty_s_item .
TYPES ty_t_items TYPE STANDARD TABLE OF ty_s_item WITH DEFAULT KEY ##NEEDED. TYPES ty_t_items TYPE STANDARD TABLE OF ty_s_item WITH EMPTY KEY ##NEEDED.
CLASS-METHODS get_js CLASS-METHODS get_js
RETURNING RETURNING
VALUE(result) TYPE string . VALUE(result) TYPE string .
PROTECTED SECTION. PROTECTED SECTION.
PRIVATE SECTION. PRIVATE SECTION.
ENDCLASS. ENDCLASS.
CLASS Z2UI5_CL_CC_MESSAGING IMPLEMENTATION. CLASS z2ui5_cl_cc_messaging IMPLEMENTATION.
METHOD get_js. METHOD get_js.

View File

@ -27,6 +27,7 @@ CLASS z2ui5_cl_test_app_hello_world IMPLEMENTATION.
CASE client->get( )-event. CASE client->get( )-event.
WHEN 'BUTTON_POST'. WHEN 'BUTTON_POST'.
client->message_toast_display( |{ product } { quantity } - send to the server| ). client->message_toast_display( |{ product } { quantity } - send to the server| ).
WHEN OTHERS.
ENDCASE. ENDCASE.
client->view_display( z2ui5_cl_ui5=>_factory( )->_ns_m( client->view_display( z2ui5_cl_ui5=>_factory( )->_ns_m(

View File

@ -3,7 +3,7 @@ CLASS ltcl_unit_test DEFINITION FINAL FOR TESTING
RISK LEVEL HARMLESS. RISK LEVEL HARMLESS.
PRIVATE SECTION. PRIVATE SECTION.
METHODS: METHODS
first_test FOR TESTING RAISING cx_static_check. first_test FOR TESTING RAISING cx_static_check.
ENDCLASS. ENDCLASS.

View File

@ -652,7 +652,7 @@ CLASS z2ui5_cl_xml_view DEFINITION
METHODS column_list_item METHODS column_list_item
IMPORTING IMPORTING
!id TYPE clike OPTIONAL !id TYPE clike OPTIONAL
!valign TYPE clike OPTIONAL !valign TYPE clike OPTIONAL
!selected TYPE clike OPTIONAL !selected TYPE clike OPTIONAL
!type TYPE clike OPTIONAL !type TYPE clike OPTIONAL
@ -1516,8 +1516,8 @@ CLASS z2ui5_cl_xml_view DEFINITION
!selectionbehavior TYPE clike DEFAULT 'RowSelector' !selectionbehavior TYPE clike DEFAULT 'RowSelector'
!selectedindex TYPE clike OPTIONAL !selectedindex TYPE clike OPTIONAL
!id TYPE clike OPTIONAL !id TYPE clike OPTIONAL
!VISIBLEROWCOUNT type CLIKE optional !visiblerowcount TYPE clike OPTIONAL
!VISIBLEROWCOUNTMODE type CLIKE optional !visiblerowcountmode TYPE clike OPTIONAL
RETURNING RETURNING
VALUE(result) TYPE REF TO z2ui5_cl_xml_view . VALUE(result) TYPE REF TO z2ui5_cl_xml_view .
METHODS tree_columns METHODS tree_columns
@ -3404,7 +3404,7 @@ ENDCLASS.
CLASS Z2UI5_CL_XML_VIEW IMPLEMENTATION. CLASS z2ui5_cl_xml_view IMPLEMENTATION.
METHOD actions. METHOD actions.
@ -4132,20 +4132,20 @@ CLASS Z2UI5_CL_XML_VIEW IMPLEMENTATION.
( n = `icon` v = icon ) ( n = `icon` v = icon )
( n = `stretch` v = stretch ) ( n = `stretch` v = stretch )
( n = `state` v = state ) ( n = `state` v = state )
( n = `titleAlignment` v = titleAlignment ) ( n = `titleAlignment` v = titlealignment )
( n = `type` v = type ) ( n = `type` v = type )
( n = `showHeader` v = showheader ) ( n = `showHeader` v = showheader )
( n = `contentWidth` v = contentwidth ) ( n = `contentWidth` v = contentwidth )
( n = `contentHeight` v = contentheight ) ( n = `contentHeight` v = contentheight )
( n = `escapeHandler` v = escapeHandler ) ( n = `escapeHandler` v = escapehandler )
( n = `closeOnNavigation` v = z2ui5_cl_util=>boolean_abap_2_json( closeonnavigation ) ) ( n = `closeOnNavigation` v = z2ui5_cl_util=>boolean_abap_2_json( closeonnavigation ) )
( n = `draggable` v = z2ui5_cl_util=>boolean_abap_2_json( draggable ) ) ( n = `draggable` v = z2ui5_cl_util=>boolean_abap_2_json( draggable ) )
( n = `resizable` v = z2ui5_cl_util=>boolean_abap_2_json( resizable ) ) ( n = `resizable` v = z2ui5_cl_util=>boolean_abap_2_json( resizable ) )
( n = `horizontalScrolling` v = z2ui5_cl_util=>boolean_abap_2_json( horizontalscrolling ) ) ( n = `horizontalScrolling` v = z2ui5_cl_util=>boolean_abap_2_json( horizontalscrolling ) )
( n = `verticalScrolling` v = z2ui5_cl_util=>boolean_abap_2_json( verticalscrolling ) ) ( n = `verticalScrolling` v = z2ui5_cl_util=>boolean_abap_2_json( verticalscrolling ) )
( n = `afterOpen` v = afterOpen ) ( n = `afterOpen` v = afteropen )
( n = `beforeClose` v = beforeClose ) ( n = `beforeClose` v = beforeclose )
( n = `beforeOpen` v = beforeOpen ) ( n = `beforeOpen` v = beforeopen )
( n = `afterClose` v = afterclose ) ) ). ( n = `afterClose` v = afterclose ) ) ).
ENDMETHOD. ENDMETHOD.
@ -7237,8 +7237,8 @@ CLASS Z2UI5_CL_XML_VIEW IMPLEMENTATION.
( n = `selectionBehavior` v = selectionbehavior ) ( n = `selectionBehavior` v = selectionbehavior )
( n = `id` v = id ) ( n = `id` v = id )
( n = `selectedIndex` v = selectedindex ) ( n = `selectedIndex` v = selectedindex )
( n = `visibleRowCount` v = visibleRowCount ) ( n = `visibleRowCount` v = visiblerowcount )
( n = `visibleRowCountMode` v = visibleRowCountMode ) ) ). ( n = `visibleRowCountMode` v = visiblerowcountmode ) ) ).
ENDMETHOD. ENDMETHOD.
@ -7608,13 +7608,11 @@ CLASS Z2UI5_CL_XML_VIEW IMPLEMENTATION.
WHEN `ZZPLAIN`. WHEN `ZZPLAIN`.
result = mt_prop[ n = `VALUE` ]-v. result = mt_prop[ n = `VALUE` ]-v.
RETURN. RETURN.
WHEN OTHERS.
ENDCASE. ENDCASE.
IF me = mo_root. IF me = mo_root.
lt_prop = VALUE #( lt_prop = VALUE #(
( n = `xmlns:z2ui5` v = `z2ui5` ) ( n = `xmlns:z2ui5` v = `z2ui5` )
( n = `xmlns:layout` v = `sap.ui.layout` ) ( n = `xmlns:layout` v = `sap.ui.layout` )

View File

@ -258,9 +258,9 @@ CLASS Z2UI5_CL_XML_VIEW_CC IMPLEMENTATION.
METHOD favicon. METHOD favicon.
result = mo_view. result = mo_view.
mo_view->_generic( name = `Favicon` mo_view->_generic( name = `Favicon`
ns = `z2ui5` ns = `z2ui5`
t_prop = VALUE #( ( n = `favicon` v = favicon ) ) ). t_prop = VALUE #( ( n = `favicon` v = favicon ) ) ).
ENDMETHOD. ENDMETHOD.

View File

@ -56,13 +56,13 @@ CLASS z2ui5_cl_ui5 DEFINITION
RETURNING VALUE(result) TYPE REF TO z2ui5_cl_ui5_ui_webc. RETURNING VALUE(result) TYPE REF TO z2ui5_cl_ui5_ui_webc.
METHODS constructor METHODS constructor
IMPORTING node TYPE REF TO z2ui5_cl_UI5_tree_xml OPTIONAL. IMPORTING node TYPE REF TO z2ui5_cl_ui5_tree_xml OPTIONAL.
METHODS _stringify METHODS _stringify
RETURNING VALUE(result) TYPE string. RETURNING VALUE(result) TYPE string.
PROTECTED SECTION. PROTECTED SECTION.
DATA _node TYPE REF TO z2ui5_cl_UI5_tree_xml. DATA _node TYPE REF TO z2ui5_cl_ui5_tree_xml.
CLASS-METHODS _2xml CLASS-METHODS _2xml
IMPORTING obj TYPE REF TO z2ui5_cl_ui5 IMPORTING obj TYPE REF TO z2ui5_cl_ui5
@ -192,7 +192,7 @@ CLASS z2ui5_cl_ui5 IMPLEMENTATION.
CATCH cx_root. CATCH cx_root.
ENDTRY. ENDTRY.
DATA(lo_node) = NEW z2ui5_cl_UI5_tree_xml( ). DATA(lo_node) = NEW z2ui5_cl_ui5_tree_xml( ).
DATA(result2) = NEW z2ui5_cl_ui5( lo_node ). DATA(result2) = NEW z2ui5_cl_ui5( lo_node ).
result2->_node->mv_name = n. result2->_node->mv_name = n.
result2->_node->mv_ns = ns. result2->_node->mv_ns = ns.

View File

@ -41,6 +41,7 @@ CLASS z2ui5_cl_app_hello_world IMPLEMENTATION.
CASE client->get( )-event. CASE client->get( )-event.
WHEN 'BUTTON_POST'. WHEN 'BUTTON_POST'.
client->message_toast_display( |Your name is { name }| ). client->message_toast_display( |Your name is { name }| ).
WHEN OTHERS.
ENDCASE. ENDCASE.
ENDMETHOD. ENDMETHOD.

View File

@ -44,66 +44,9 @@ ENDCLASS.
CLASS z2ui5_cl_app_search_apps IMPLEMENTATION. CLASS Z2UI5_CL_APP_SEARCH_APPS IMPLEMENTATION.
METHOD z2ui5_if_app~main.
me->client = client.
IF check_initialized = abap_false.
check_initialized = abap_true.
z2ui5_cl_util=>db_load_by_handle(
EXPORTING
uname = sy-uname
handle = 'z2ui5_cl_app_search_apps'
IMPORTING
result = mt_favs ).
mt_apps = VALUE #( FOR row IN z2ui5_cl_util=>rtti_get_classes_impl_intf( `Z2UI5_IF_APP` )
( name = row ) ).
search( ).
view_display( client ).
RETURN.
ENDIF.
IF client->get( )-check_on_navigated = abap_true.
view_display( client ).
ENDIF.
CASE client->get( )-event.
WHEN `ON_PRESS`.
DATA(lt_arg) = client->get( )-t_event_arg.
DATA(lv_app) = lt_arg[ 1 ].
INSERT VALUE #( name = lv_app ) INTO TABLE mt_favs.
z2ui5_cl_util=>db_save(
uname = sy-uname
handle = 'z2ui5_cl_app_search_apps'
data = mt_favs ).
view_action_sheet( lv_app ).
view_nest_display( client ).
WHEN 'BACK'.
client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ).
WHEN 'ON_SEARCH'.
search( ).
client->view_model_update( ).
client->message_toast_display( |backend search done| ).
ENDCASE.
ENDMETHOD.
METHOD search. METHOD search.
@ -121,6 +64,39 @@ CLASS z2ui5_cl_app_search_apps IMPLEMENTATION.
ENDMETHOD. ENDMETHOD.
METHOD view_action_sheet.
DATA(action_sheet_view) = z2ui5_cl_xml_view=>factory_popup( ).
action_sheet_view->_generic_property( VALUE #( n = `core:require` v = `{ MessageToast: 'sap/m/MessageToast' }` ) ).
action_sheet_view->action_sheet( placement = `Botton`
showcancelbutton = abap_true
title = `Choose Your Action`
)->button( text = `Accept`
icon = `sap-icon://accept`
press = `MessageToast.show('selected action is ' + ${$source>/text})`
)->button( text = `Reject`
icon = `sap-icon://decline`
press = `MessageToast.show('selected action is ' + ${$source>/text})`
)->button( text = `Email`
icon = `sap-icon://email`
press = `MessageToast.show('selected action is ' + ${$source>/text})`
)->button( text = `Forward`
icon = `sap-icon://forward`
press = `MessageToast.show('selected action is ' + ${$source>/text})`
)->button( text = `Delete`
icon = `sap-icon://delete`
press = `MessageToast.show('selected action is ' + ${$source>/text})`
)->button( text = `Other`
press = `MessageToast.show('selected action is ' + ${$source>/text})` ).
client->popover_display( xml = action_sheet_view->stringify( )
by_id = val ).
ENDMETHOD.
METHOD view_display. METHOD view_display.
@ -151,8 +127,12 @@ CLASS z2ui5_cl_app_search_apps IMPLEMENTATION.
DATA(pages) = page->icon_tab_header( selectedkey = client->_bind_edit( mv_selected_key ) DATA(pages) = page->icon_tab_header( selectedkey = client->_bind_edit( mv_selected_key )
* select = client->_event( `OnSelectIconTabBar` ) * select = client->_event( `OnSelectIconTabBar` )
* select = client->_event_client( action = 'NAV_TO' t_arg = value #( ( `NavCon` ) ( `${$parameters}` ) ) ) * select = client->_event_client(
select = client->_event_client( val = client->cs_event-nav_container_to t_arg = VALUE #( ( `NavCon` ) ( `${$parameters>/selectedKey}` ) ) ) * action = 'NAV_TO'
* t_arg = value #( ( `NavCon` ) ( `${$parameters}` ) ) )
select = client->_event_client(
val = client->cs_event-nav_container_to
t_arg = VALUE #( ( `NavCon` ) ( `${$parameters>/selectedKey}` ) ) )
mode = `Inline` mode = `Inline`
)->items( )->items(
)->icon_tab_filter( key = `page_favs` )->icon_tab_filter( key = `page_favs`
@ -270,7 +250,7 @@ CLASS z2ui5_cl_app_search_apps IMPLEMENTATION.
row->text( `{DESCR}` ). row->text( `{DESCR}` ).
row->text( ). row->text( ).
row->checkbox( text = `ABAP for Cloud` row->checkbox( text = `ABAP for Cloud`
enabled = abap_false enabled = abap_false
selected = `{CHECK_ABAP_FOR_CLOUD}` ). selected = `{CHECK_ABAP_FOR_CLOUD}` ).
row = item->grid( ). row = item->grid( ).
@ -286,52 +266,16 @@ CLASS z2ui5_cl_app_search_apps IMPLEMENTATION.
row->checkbox( text = `Installed` row->checkbox( text = `Installed`
selected = `{CHECK_INSTALLED}` selected = `{CHECK_INSTALLED}`
enabled = abap_false enabled = abap_false ).
).
row->checkbox( text = `Standard ABAP (Min. {MIN_RELEASE})` row->checkbox( text = `Standard ABAP (Min. {MIN_RELEASE})`
selected = `{CHECK_STANDARD_ABAP}` selected = `{CHECK_STANDARD_ABAP}`
enabled = abap_false enabled = abap_false ).
). row->text( `{DESCR}` ).
row->text( `{DESCR}` ).
* page_online
client->view_display( page->stringify( ) ). client->view_display( page->stringify( ) ).
ENDMETHOD. ENDMETHOD.
METHOD view_action_sheet.
DATA(action_sheet_view) = z2ui5_cl_xml_view=>factory_popup( ).
action_sheet_view->_generic_property( VALUE #( n = `core:require` v = `{ MessageToast: 'sap/m/MessageToast' }` ) ).
action_sheet_view->action_sheet( placement = `Botton`
showcancelbutton = abap_true
title = `Choose Your Action`
)->button( text = `Accept`
icon = `sap-icon://accept`
press = `MessageToast.show('selected action is ' + ${$source>/text})`
)->button( text = `Reject`
icon = `sap-icon://decline`
press = `MessageToast.show('selected action is ' + ${$source>/text})`
)->button( text = `Email`
icon = `sap-icon://email`
press = `MessageToast.show('selected action is ' + ${$source>/text})`
)->button( text = `Forward`
icon = `sap-icon://forward`
press = `MessageToast.show('selected action is ' + ${$source>/text})`
)->button( text = `Delete`
icon = `sap-icon://delete`
press = `MessageToast.show('selected action is ' + ${$source>/text})`
)->button( text = `Other`
press = `MessageToast.show('selected action is ' + ${$source>/text})` ).
client->popover_display( xml = action_sheet_view->stringify( )
by_id = val ).
ENDMETHOD.
METHOD view_nest_display. METHOD view_nest_display.
@ -344,7 +288,7 @@ CLASS z2ui5_cl_app_search_apps IMPLEMENTATION.
* page_favs->generic_tile( * page_favs->generic_tile(
class = 'sapUiTinyMarginBegin sapUiTinyMarginTop tileLayout' class = 'sapUiTinyMarginBegin sapUiTinyMarginTop tileLayout'
press = client->_event( val = `ON_PRESS` t_arg = VALUE #( ( `${$source>/header}` ) ) ) press = client->_event( val = `ON_PRESS` t_arg = VALUE #( ( `${$source>/header}` ) ) )
header = client->_bind( val = lr_app->name tab = ref #( mt_favs ) tab_index = lv_tabix ) ). header = client->_bind( val = lr_app->name tab = REF #( mt_favs ) tab_index = lv_tabix ) ).
* visible = client->_bind( val = lr_app->check_fav tab = mt_apps tab_index = lv_tabix ) ). * visible = client->_bind( val = lr_app->check_fav tab = mt_apps tab_index = lv_tabix ) ).
ENDLOOP. ENDLOOP.
@ -354,4 +298,61 @@ CLASS z2ui5_cl_app_search_apps IMPLEMENTATION.
ENDMETHOD. ENDMETHOD.
METHOD z2ui5_if_app~main.
me->client = client.
IF check_initialized = abap_false.
check_initialized = abap_true.
z2ui5_cl_util=>db_load_by_handle(
EXPORTING
uname = sy-uname
handle = 'z2ui5_cl_app_search_apps'
IMPORTING
result = mt_favs ).
mt_apps = VALUE #( FOR row IN z2ui5_cl_util=>rtti_get_classes_impl_intf( `Z2UI5_IF_APP` )
( name = row ) ).
search( ).
view_display( client ).
RETURN.
ENDIF.
IF client->get( )-check_on_navigated = abap_true.
view_display( client ).
ENDIF.
CASE client->get( )-event.
WHEN `ON_PRESS`.
DATA(lt_arg) = client->get( )-t_event_arg.
DATA(lv_app) = lt_arg[ 1 ].
INSERT VALUE #( name = lv_app ) INTO TABLE mt_favs.
z2ui5_cl_util=>db_save(
uname = sy-uname
handle = 'z2ui5_cl_app_search_apps'
data = mt_favs ).
view_action_sheet( lv_app ).
view_nest_display( client ).
WHEN 'BACK'.
client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ).
WHEN 'ON_SEARCH'.
search( ).
client->view_model_update( ).
client->message_toast_display( |backend search done| ).
ENDCASE.
ENDMETHOD.
ENDCLASS. ENDCLASS.

View File

@ -39,14 +39,14 @@ CLASS lcl_github IMPLEMENTATION.
result = VALUE #( result = VALUE #(
( (
name = `Table Loader` name = `Table Loader`
descr = `Upload, Edit & Download Table Content (CSV, JSON)` descr = `Upload, Edit & Download Table Content (CSV, JSON)`
author_link = `https://github.com/oblomov-dev` author_link = `https://github.com/oblomov-dev`
author_name = `oblomov` author_name = `oblomov`
check_abap_for_cloud = abap_true check_abap_for_cloud = abap_true
min_release = `750` min_release = `750`
link = `https://github.com/oblomov-dev/a2UI5-db_table_loader` link = `https://github.com/oblomov-dev/a2UI5-db_table_loader`
t_app = VALUE #( t_app = VALUE #(
( (
name = `Upload JSON` name = `Upload JSON`
descr = `Modify DB Table with JSON Data` descr = `Modify DB Table with JSON Data`
@ -59,15 +59,15 @@ CLASS lcl_github IMPLEMENTATION.
) )
) ) ) )
( (
name = `The Quest` name = `The Quest`
descr = `A wizard's adventure game based on a fork of the AXAGE game engine (ABAP teXt Adventure Game Engine) and abap2UI5. The game is set in a fantasy world, where the player takes on the role of a wizard's apprentice. The play` && descr = `A wizard's adventure game based on a fork of the AXAGE game engine (ABAP teXt Adventure Game Engine) and abap2UI5. The game is set in a fantasy world, where the player ` &&
`er explores the wizard's house, interacts with various objects and explores. The Quest is work in progress...` `takes on the role of a wizard's apprentice. The player explores the wizard's house, interacts with various objects and explores. The Quest is work in progress...`
check_abap_for_cloud = abap_true check_abap_for_cloud = abap_true
min_release = `750` min_release = `750`
link = `https://github.com/nomssi/axage` link = `https://github.com/nomssi/axage`
author_link = `https://github.com/nomssi` author_link = `https://github.com/nomssi`
author_name = `Nomssi` author_name = `Nomssi`
t_app = VALUE #( t_app = VALUE #(
( (
name = `The Quest - Start the Adventure` name = `The Quest - Start the Adventure`
descr = `Adventure Game: The Wizard&amp;apos;s Aspirant Quest` descr = `Adventure Game: The Wizard&amp;apos;s Aspirant Quest`
@ -75,17 +75,17 @@ CLASS lcl_github IMPLEMENTATION.
) )
) ) ) )
( (
name = `Advent of Code` name = `Advent of Code`
descr = `Advent of Code 2023 in ABAP` descr = `Advent of Code 2023 in ABAP`
author_link = `https://github.com/joltdx` author_link = `https://github.com/joltdx`
author_name = `joltdx` author_name = `joltdx`
link = `https://github.com/joltdx/abap-advent-2023` link = `https://github.com/joltdx/abap-advent-2023`
check_abap_for_cloud = abap_true check_abap_for_cloud = abap_true
min_release = `750` min_release = `750`
t_app = VALUE #( t_app = VALUE #(
( (
name = `Advent of Code 2023 in ABAP` name = `Advent of Code 2023 in ABAP`
descr = `Advent of Code 2023 - ABAP2UI5 app` descr = `Advent of Code 2023 - ABAP2UI5 app`
classname = `zcl_advent_2023_a2ui5.clas.abap` classname = `zcl_advent_2023_a2ui5.clas.abap`
) )
) ) ). ) ) ).

View File

@ -83,6 +83,7 @@ CLASS z2ui5_cl_popup_error IMPLEMENTATION.
WHEN `BUTTON_CONFIRM`. WHEN `BUTTON_CONFIRM`.
client->popup_destroy( ). client->popup_destroy( ).
client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ).
WHEN OTHERS.
ENDCASE. ENDCASE.
ENDMETHOD. ENDMETHOD.

View File

@ -30,7 +30,7 @@ ENDCLASS.
CLASS Z2UI5_CL_POPUP_JS_LOADER IMPLEMENTATION. CLASS z2ui5_cl_popup_js_loader IMPLEMENTATION.
METHOD factory. METHOD factory.
@ -51,7 +51,7 @@ CLASS Z2UI5_CL_POPUP_JS_LOADER IMPLEMENTATION.
METHOD view_display. METHOD view_display.
DATA(popup) = z2ui5_cl_xml_view=>factory_popup( )->dialog( title = `load library` DATA(popup) = z2ui5_cl_xml_view=>factory_popup( )->dialog( `load library`
)->content( )->content(
)->_z2ui5( )->timer( client->_event( 'TIMER_FINISHED' ) )->_z2ui5( )->timer( client->_event( 'TIMER_FINISHED' )
)->_generic( ns = `html` name = `script` )->_cc_plain_xml( js ). )->_generic( ns = `html` name = `script` )->_cc_plain_xml( js ).
@ -75,6 +75,7 @@ CLASS Z2UI5_CL_POPUP_JS_LOADER IMPLEMENTATION.
WHEN `TIMER_FINISHED`. WHEN `TIMER_FINISHED`.
client->popup_destroy( ). client->popup_destroy( ).
client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ).
WHEN OTHERS.
ENDCASE. ENDCASE.
ENDMETHOD. ENDMETHOD.

View File

@ -57,7 +57,7 @@ CLASS Z2UI5_CL_POPUP_LAYOUT IMPLEMENTATION.
)->content( ). )->content( ).
DATA(tab) = popup->table( DATA(tab) = popup->table(
items = client->_bind_edit( ms_result-t_layout ) ). client->_bind_edit( ms_result-t_layout ) ).
DATA(lt_comp) = z2ui5_cl_util=>rtti_get_t_attri_by_struc( ms_result-t_layout ). DATA(lt_comp) = z2ui5_cl_util=>rtti_get_t_attri_by_struc( ms_result-t_layout ).
@ -66,8 +66,8 @@ CLASS Z2UI5_CL_POPUP_LAYOUT IMPLEMENTATION.
DATA(columns) = tab->columns( ). DATA(columns) = tab->columns( ).
LOOP AT lt_comp INTO DATA(ls_comp2). LOOP AT lt_comp INTO DATA(ls_comp2).
DATA(col) = columns->column( width = '8rem' )->header( ns = `` ). DATA(col) = columns->column( '8rem' )->header( `` ).
col->text( text = ls_comp2-name ). col->text( ls_comp2-name ).
ENDLOOP. ENDLOOP.
LOOP AT lt_comp INTO DATA(ls_comp). LOOP AT lt_comp INTO DATA(ls_comp).

View File

@ -58,7 +58,7 @@ CLASS z2ui5_cl_popup_messages IMPLEMENTATION.
afterclose = client->_event( 'BUTTON_CONTINUE' ) afterclose = client->_event( 'BUTTON_CONTINUE' )
)->table( )->table(
* mode = 'SingleSelectLeft' * mode = 'SingleSelectLeft'
items = client->_bind_edit( mt_msg ) client->_bind_edit( mt_msg )
)->columns( )->columns(
)->column( )->text( 'Title' )->get_parent( )->column( )->text( 'Title' )->get_parent(
)->column( )->text( 'Color' )->get_parent( )->column( )->text( 'Color' )->get_parent(
@ -98,6 +98,7 @@ CLASS z2ui5_cl_popup_messages IMPLEMENTATION.
WHEN `BUTTON_CONTINUE`. WHEN `BUTTON_CONTINUE`.
client->popup_destroy( ). client->popup_destroy( ).
client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ).
WHEN OTHERS.
ENDCASE. ENDCASE.
ENDMETHOD. ENDMETHOD.

View File

@ -53,7 +53,7 @@ CLASS z2ui5_cl_popup_table IMPLEMENTATION.
)->content( ). )->content( ).
DATA(tab) = popup->table( DATA(tab) = popup->table(
items = client->_bind( <tab_out> ) ). client->_bind( <tab_out> ) ).
* )->header_toolbar( * )->header_toolbar(
* )->overflow_toolbar( * )->overflow_toolbar(
* )->toolbar_spacer( * )->toolbar_spacer(
@ -67,12 +67,12 @@ CLASS z2ui5_cl_popup_table IMPLEMENTATION.
DATA(cells) = list->cells( ). DATA(cells) = list->cells( ).
LOOP AT lt_comp INTO DATA(ls_comp). LOOP AT lt_comp INTO DATA(ls_comp).
cells->text( text = `{` && ls_comp-name && `}` ). cells->text( `{` && ls_comp-name && `}` ).
ENDLOOP. ENDLOOP.
DATA(columns) = tab->columns( ). DATA(columns) = tab->columns( ).
LOOP AT lt_comp INTO ls_comp. LOOP AT lt_comp INTO ls_comp.
columns->column( width = '8rem' )->header( ns = `` )->text( text = ls_comp-name ). columns->column( '8rem' )->header( `` )->text( ls_comp-name ).
ENDLOOP. ENDLOOP.
popup->get_parent( popup->get_parent(

View File

@ -37,7 +37,7 @@ ENDCLASS.
CLASS Z2UI5_CL_POPUP_TO_CONFIRM IMPLEMENTATION. CLASS z2ui5_cl_popup_to_confirm IMPLEMENTATION.
METHOD result. METHOD result.

View File

@ -78,6 +78,7 @@ CLASS z2ui5_cl_popup_to_inform IMPLEMENTATION.
WHEN `BUTTON_CONFIRM`. WHEN `BUTTON_CONFIRM`.
client->popup_destroy( ). client->popup_destroy( ).
client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ).
WHEN OTHERS.
ENDCASE. ENDCASE.
ENDMETHOD. ENDMETHOD.

View File

@ -72,17 +72,16 @@ CLASS z2ui5_cl_popup_to_select IMPLEMENTATION.
DATA(popup) = z2ui5_cl_xml_view=>factory_popup( ). DATA(popup) = z2ui5_cl_xml_view=>factory_popup( ).
DATA(tab) = popup->table_select_dialog( DATA(tab) = popup->table_select_dialog(
items = `{path:'` items = `{path:'`
&& client->_bind_edit( val = <tab_out> path = abap_true ) && client->_bind_edit( val = <tab_out> path = abap_true )
&& `', sorter : { path : '` && to_upper( sort_field ) && `', descending : ` && `', sorter : { path : '` && to_upper( sort_field ) && `', descending : `
&& z2ui5_cl_util=>boolean_abap_2_json( me->descending ) && z2ui5_cl_util=>boolean_abap_2_json( me->descending )
&& ` } }` && ` } }`
cancel = client->_event( 'CANCEL' ) cancel = client->_event( 'CANCEL' )
search = client->_event( val = 'SEARCH' t_arg = VALUE #( ( `${$parameters>/value}` ) ( `${$parameters>/clearButtonPressed}` ) ) ) search = client->_event( val = 'SEARCH' t_arg = VALUE #( ( `${$parameters>/value}` ) ( `${$parameters>/clearButtonPressed}` ) ) )
confirm = client->_event( val = 'CONFIRM' t_arg = VALUE #( ( `${$parameters>/selectedContexts[0]/sPath}` ) ) ) confirm = client->_event( val = 'CONFIRM' t_arg = VALUE #( ( `${$parameters>/selectedContexts[0]/sPath}` ) ) )
growing = abap_true growing = abap_true
title = title title = title ).
).
DATA(lt_comp) = z2ui5_cl_util=>rtti_get_t_attri_by_struc( <tab_out> ). DATA(lt_comp) = z2ui5_cl_util=>rtti_get_t_attri_by_struc( <tab_out> ).
DELETE lt_comp WHERE name = 'ZZSELKZ'. DELETE lt_comp WHERE name = 'ZZSELKZ'.
@ -92,7 +91,7 @@ CLASS z2ui5_cl_popup_to_select IMPLEMENTATION.
DATA(cells) = list->cells( ). DATA(cells) = list->cells( ).
LOOP AT lt_comp INTO DATA(ls_comp). LOOP AT lt_comp INTO DATA(ls_comp).
cells->text( text = `{` && ls_comp-name && `}` ). cells->text( `{` && ls_comp-name && `}` ).
ENDLOOP. ENDLOOP.
DATA(columns) = tab->columns( ). DATA(columns) = tab->columns( ).
@ -103,7 +102,7 @@ CLASS z2ui5_cl_popup_to_select IMPLEMENTATION.
WHEN medium_label IS NOT INITIAL WHEN medium_label IS NOT INITIAL
THEN medium_label THEN medium_label
ELSE ls_comp-name ). ELSE ls_comp-name ).
columns->column( width = '8rem' )->header( ns = `` )->text( text = text ). columns->column( '8rem' )->header( `` )->text( text ).
ENDLOOP. ENDLOOP.
client->popup_display( popup->stringify( ) ). client->popup_display( popup->stringify( ) ).
@ -253,7 +252,7 @@ CLASS z2ui5_cl_popup_to_select IMPLEMENTATION.
DATA(lt_arg) = client->get( )-t_event_arg. DATA(lt_arg) = client->get( )-t_event_arg.
READ TABLE lt_arg INTO DATA(ls_arg) INDEX 1. READ TABLE lt_arg INTO DATA(ls_arg) INDEX 1.
assert sy-subrc = 0. ASSERT sy-subrc = 0.
ASSIGN mr_tab_popup->* TO <tab_out>. ASSIGN mr_tab_popup->* TO <tab_out>.
ASSIGN mr_tab_popup_backup->* TO <tab_out_backup>. ASSIGN mr_tab_popup_backup->* TO <tab_out_backup>.