Downport changes
Some checks are pending
ABAP_CLOUD / ABAP_CLOUD (push) Waiting to run
ABAP_STANDARD / ABAP_STANDARD (push) Waiting to run
UI5_2X / UI5_2X (push) Waiting to run

This commit is contained in:
github-actions[bot] 2025-04-04 18:10:48 +00:00
parent f23c1e6bbb
commit 1dbed16f7f
60 changed files with 15484 additions and 4902 deletions

View File

@ -1,359 +1,31 @@
{
"global": {
"files": "/src/**/*.*",
"noIssues": [ "/src/00" ]
"files": "/src/**/*.*"
},
"dependencies": [
{
"url": "https://github.com/abapedia/steampunk-2305-api-intersect-702",
"url": "https://github.com/open-abap/open-abap-core",
"folder": "/deps",
"files": "/src/**/*.*"
}
],
"syntax": {
"version": "v750",
"version": "v702",
"errorNamespace": "."
},
"rules": {
"7bit_ascii": true,
"abapdoc": false,
"sql_value_conversion" : true,
"select_single_full_key" : true,
"strict_sql" : true,
"easy_to_find_messages" : true,
"fully_type_itabs" : true,
"align_parameters": false,
"smim_consistency": true,
"allowed_object_naming": true,
"allowed_object_types": {
"allowed": [
"CLAS",
"DEVC",
"INTF",
"TABL",
]
},
"ambiguous_statement": true,
"avoid_use": {
"severity": "Error",
"skipQuickFix": false,
"define": true,
"statics": true,
"defaultKey": true,
"break": true,
"testSeams": true,
"describeLines": true,
"exportToMemory": true,
"exportToDatabase": true
},
"downport": true,
"begin_end_names": true,
"align_pseudo_comments" : true,
"dynpro_checks" : true,
"empty_event" : true,
"invalid_table_index" : true,
"macro_naming" : true,
"prefer_pragmas" : true,
"add_test_attributes" : true,
"implicit_start_of_selection" : true,
"reduce_procedural_code" : true,
"tables_declared_locally" : true,
"unused_macros" : true,
"align_type_expressions" : true,
"no_prefixes" : false,
"begin_single_include": true,
"call_transaction_authority_check": true,
"cds_comment_style": true,
"cds_legacy_view": true,
"cds_parser_error": true,
"chain_mainly_declarations": true,
"change_if_to_case": true,
"check_abstract": true,
"check_comments": true,
"check_ddic": true,
"check_include": true,
"check_subrc": true,
"check_syntax": true,
"check_text_elements": true,
"check_transformation_exists": true,
"class_attribute_names": false,
"classic_exceptions_overlap": true,
"cloud_types": true,
"colon_missing_space": true,
"commented_code": false,
"constant_classes": true,
"constructor_visibility_public": true,
"contains_tab": false,
"cyclic_oo": false,
"cyclomatic_complexity": {
"exclude": [],
"severity": "Error",
"max": 8
},
"dangerous_statement": {
"exclude": [],
"severity": "Error",
"execSQL": true,
"kernelCall": true,
"systemCall": true,
"insertReport": true,
"generateDynpro": true,
"generateReport": true,
"generateSubroutine": true,
"deleteReport": true,
"deleteTextpool": true,
"deleteDynpro": true,
"exportDynpro": true,
"dynamicSQL": true
},
"db_operation_in_loop": true,
"definitions_top": false,
"description_empty": true,
"double_space": false,
"downport": true,
"empty_line_in_statement": true,
"empty_statement": true,
"empty_structure": {
"loop": false,
"if": true,
"while": true,
"case": true,
"select": true,
"do": true,
"at": true,
"try": true,
"when": false
},
"exit_or_check": true,
"expand_macros": true,
"exporting": true,
"forbidden_identifier": true,
"forbidden_pseudo_and_pragma": {
"exclude": [],
"severity": "Error",
"pseudo": [],
"pragmas": [],
"ignoreGlobalClassDefinition": false,
"ignoreGlobalInterface": false
},
"form_tables_obsolete": true,
"fully_type_constants": {
"checkData": true
},
"function_module_recommendations": true,
"functional_writing": {
"ignoreExceptions": true
},
"global_class": true,
"identical_conditions": true,
"identical_contents": true,
"identical_descriptions": true,
"identical_form_names": true,
"if_in_if": true,
"definitions_top": true,
"implement_methods": true,
"in_statement_indentation": false,
"indentation": true,
"inline_data_old_versions": true,
"intf_referencing_clas": false,
"keep_single_parameter_on_one_line": false,
"keyword_case": false,
"line_break_multiple_parameters": false,
"line_break_style": true,
"line_length": false,
"line_only_punc": false,
"local_class_naming": false,
"local_testclass_consistency": true,
"local_variable_names": false,
"main_file_contents": true,
"many_parentheses": true,
"max_one_method_parameter_per_line": true,
"max_one_statement": true,
"message_exists": true,
"method_implemented_twice": true,
"method_length": {
"exclude": [],
"severity": "Error",
"statements": 100,
"errorWhenEmpty": false,
"ignoreTestClasses": true,
"checkForms": true
},
"method_overwrites_builtin": {
"exclude": [ "z2ui5_cl_xml_view" ],
"severity": "Error"
},
"method_parameter_names": false,
"mix_returning": false,
"modify_only_own_db_tables": {
"reportDynamic": true,
"ownTables": "^[yz]"
},
"msag_consistency": true,
"names_no_dash": true,
"nesting": {
"depth": 5
},
"newline_between_methods": true,
"no_aliases": true,
"no_chained_assignment": true,
"no_external_form_calls": true,
"no_inline_in_optional_branches": false,
"no_public_attributes": false,
"no_yoda_conditions": true,
"nrob_consistency": true,
"object_naming": {
"exclude": [],
"severity": "Error",
"patternKind": "required",
"ignoreNames": [],
"ignorePatterns": [],
"clas": "^Z2UI5_C(L|X)",
"intf": "^Z2UI5_IF",
"prog": "^Z",
"fugr": "^Z",
"tabl": "^Z",
"ttyp": "^Z",
"dtel": "^Z",
"doma": "^Z",
"msag": "^Z",
"tran": "^Z",
"enqu": "^EZ",
"auth": "^Z",
"pinf": "^Z",
"idoc": "^Z",
"xslt": "^Z",
"ssfo": "^Z",
"ssst": "^Z",
"shlp": "^Z"
},
"obsolete_statement": true,
"omit_parameter_name": true,
"omit_preceding_zeros": true,
"omit_receiving": true,
"parser_702_chaining": true,
"parser_error": true,
"parser_missing_space": true,
"pragma_style": true,
"prefer_corresponding": true,
"prefer_inline": true,
"prefer_is_not": true,
"prefer_raise_exception_new": true,
"prefer_returning_to_exporting": true,
"prefer_xsdbool": true,
"preferred_compare_operator": true,
"prefix_is_current_class": {
"severity": "Warning"
},
"reduce_string_templates": true,
"release_idoc": true,
"remove_descriptions": {
"exclude": [],
"severity": "Error",
"ignoreExceptions": false,
"ignoreWorkflow": false
},
"rfc_error_handling": true,
"select_add_order_by": false,
"select_performance": true,
"selection_screen_naming": true,
"sequential_blank": {
"severity": "Warning"
},
"short_case": true,
"sicf_consistency": true,
"slow_parameter_passing": true,
"space_before_colon": true,
"space_before_dot": true,
"sql_escape_host_variables": true,
"start_at_tab": false,
"static_call_via_instance": {
"allowInTestclassIncludes": false
},
"superclass_final": true,
"superfluous_value": true,
"sy_modification": true,
"tabl_enhancement_category": true,
"try_without_catch": true,
"type_form_parameters": true,
"types_naming": false,
"uncaught_exception": true,
"unknown_types": true,
"unnecessary_chaining": true,
"unnecessary_pragma": true,
"unnecessary_return": true,
"unreachable_code": true,
"unsecure_fae": true,
"unused_ddic": true,
"unused_methods": true,
"unused_types": true,
"unused_variables": {
"severity": "Error",
"skipNames": ["lv_dummy"]
},
"use_bool_expression": true,
"use_class_based_exceptions": true,
"use_line_exists": true,
"use_new": true,
"when_others_last": true,
"whitespace_end": false,
"xml_consistency": true,
"forbidden_void_type": {
"check": [
"^boole_d$",
"^char10$",
"^char12$",
"^char2$",
"^char20$",
"^char30$",
"^char4$",
"^char50$",
"^char70$",
"^cl_abap_syst",
"^cl_aff_",
"^cl_aucv_test_runner_abstract$",
"^cl_aucv_test_runner_standard$",
"^cl_aunit_assert$",
"^cl_axt_dbtable$",
"^cl_blue_wb_utility$",
"^cl_oo_source$",
"^/ui2/cl_$",
"^/ui2/cl_",
"^cl_saunit_internal_result$",
"^cl_srvd_wb_object_data$",
"^cl_wb_object_operator_factory$",
"^cl_wer_const$",
"^cl_xco_",
"^cx_aff_",
"^cx_wb_object_operation_error$",
"^cx_xco_",
"^flag$",
"^i18_a_langiso2$",
"^if_adt_lock_handle$",
"^if_aff_",
"^if_satc_ci_variant_access$",
"^if_saunit_internal_result$",
"^if_saunit_internal_result_type$",
"^if_srvd_types$",
"^if_wb_adt_plugin_resource_co$",
"^if_wb_object_data_selection_co$",
"^if_wb_object_operator$",
"^if_xco_",
"^int4$",
"^numc2$",
"^sabp_t_tadir_keys$",
"^sap_bool$",
"^srcsystem$",
"^stringtab$",
"^sychar01$",
"^sychar10$",
"^sychar70$",
"^sydatum$",
"^sylangu$",
"^syst_title$",
"^syuzeit$",
"^xubname$",
"^feld$",
"^abap_boolean$",
]
},
"xml_consistency": true
}
}

View File

@ -315,6 +315,7 @@ CLASS z2ui5_cl_ajson IMPLEMENTATION.
DATA lv_normalized_path TYPE string.
DATA lr_node TYPE REF TO z2ui5_if_ajson_types=>ty_node.
FIELD-SYMBOLS <item> LIKE LINE OF mt_json_tree.
DATA lv_tmp TYPE string.
lv_normalized_path = lcl_utils=>normalize_path( iv_path ).
lr_node = get_item( iv_path ).
@ -333,7 +334,7 @@ CLASS z2ui5_cl_ajson IMPLEMENTATION.
WHEN z2ui5_if_ajson_types=>node_type-null.
APPEND '' TO rt_string_table.
WHEN z2ui5_if_ajson_types=>node_type-boolean.
DATA lv_tmp TYPE string.
IF <item>-value = 'true'.
lv_tmp = abap_true.
ELSE.
@ -363,10 +364,11 @@ CLASS z2ui5_cl_ajson IMPLEMENTATION.
METHOD z2ui5_if_ajson~delete.
DATA ls_split_path TYPE z2ui5_if_ajson_types=>ty_path_name.
read_only_watchdog( ).
DATA ls_split_path TYPE z2ui5_if_ajson_types=>ty_path_name.
ls_split_path = lcl_utils=>split_path( iv_path ).
delete_subtree(
@ -553,6 +555,9 @@ CLASS z2ui5_cl_ajson IMPLEMENTATION.
DATA lr_parent TYPE REF TO z2ui5_if_ajson_types=>ty_node.
DATA lr_new_node TYPE REF TO z2ui5_if_ajson_types=>ty_node.
DATA lt_new_nodes TYPE z2ui5_if_ajson_types=>ty_nodes_tt.
DATA ls_new_path TYPE z2ui5_if_ajson_types=>ty_path_name.
DATA lv_new_index TYPE i.
read_only_watchdog( ).
@ -566,9 +571,9 @@ CLASS z2ui5_cl_ajson IMPLEMENTATION.
z2ui5_cx_ajson_error=>raise( |Path [{ iv_path }] is not array| ).
ENDIF.
DATA lt_new_nodes TYPE z2ui5_if_ajson_types=>ty_nodes_tt.
DATA ls_new_path TYPE z2ui5_if_ajson_types=>ty_path_name.
DATA lv_new_index TYPE i.
lv_new_index = lr_parent->children + 1.
ls_new_path-path = lcl_utils=>normalize_path( iv_path ).
@ -597,6 +602,8 @@ CLASS z2ui5_cl_ajson IMPLEMENTATION.
DATA lr_parent TYPE REF TO z2ui5_if_ajson_types=>ty_node.
DATA ls_deleted_node TYPE z2ui5_if_ajson_types=>ty_node.
DATA lv_item_order TYPE z2ui5_if_ajson_types=>ty_node-order.
DATA lt_new_nodes TYPE z2ui5_if_ajson_types=>ty_nodes_tt.
DATA lv_array_index TYPE i.
read_only_watchdog( ).
@ -643,8 +650,8 @@ CLASS z2ui5_cl_ajson IMPLEMENTATION.
lv_item_order = ls_deleted_node-order.
" convert to json
DATA lt_new_nodes TYPE z2ui5_if_ajson_types=>ty_nodes_tt.
DATA lv_array_index TYPE i.
IF lr_parent->type = z2ui5_if_ajson_types=>node_type-array.
lv_array_index = lcl_utils=>validate_array_index(
@ -756,10 +763,11 @@ CLASS z2ui5_cl_ajson IMPLEMENTATION.
METHOD z2ui5_if_ajson~set_boolean.
DATA lv_bool TYPE abap_bool.
ri_json = me.
DATA lv_bool TYPE abap_bool.
lv_bool = boolc( iv_val IS NOT INITIAL ).
z2ui5_if_ajson~set(
iv_ignore_empty = abap_false
@ -770,10 +778,11 @@ CLASS z2ui5_cl_ajson IMPLEMENTATION.
METHOD z2ui5_if_ajson~set_date.
DATA lv_val TYPE string.
ri_json = me.
DATA lv_val TYPE string.
lv_val = lcl_abap_to_json=>format_date( iv_val ).
z2ui5_if_ajson~set(
@ -797,10 +806,11 @@ CLASS z2ui5_cl_ajson IMPLEMENTATION.
METHOD z2ui5_if_ajson~set_null.
DATA lv_null_ref TYPE REF TO data.
ri_json = me.
DATA lv_null_ref TYPE REF TO data.
z2ui5_if_ajson~set(
iv_ignore_empty = abap_false
iv_path = iv_path
@ -810,10 +820,11 @@ CLASS z2ui5_cl_ajson IMPLEMENTATION.
METHOD z2ui5_if_ajson~set_string.
DATA lv_val TYPE string.
ri_json = me.
DATA lv_val TYPE string.
lv_val = iv_val.
z2ui5_if_ajson~set(
iv_ignore_empty = abap_false
@ -824,10 +835,11 @@ CLASS z2ui5_cl_ajson IMPLEMENTATION.
METHOD z2ui5_if_ajson~set_timestamp.
DATA lv_timestamp_iso TYPE string.
ri_json = me.
DATA lv_timestamp_iso TYPE string.
lv_timestamp_iso = lcl_abap_to_json=>format_timestamp( iv_val ).
z2ui5_if_ajson~set(
@ -894,6 +906,7 @@ CLASS z2ui5_cl_ajson IMPLEMENTATION.
DATA ls_deleted_node TYPE z2ui5_if_ajson_types=>ty_node.
DATA ls_new_node LIKE LINE OF mt_json_tree.
DATA ls_split_path TYPE z2ui5_if_ajson_types=>ty_path_name.
DATA lr_parent TYPE REF TO z2ui5_if_ajson_types=>ty_node.
read_only_watchdog( ).
@ -916,7 +929,7 @@ CLASS z2ui5_cl_ajson IMPLEMENTATION.
IF lr_node IS INITIAL. " Or node was cleared
DATA lr_parent TYPE REF TO z2ui5_if_ajson_types=>ty_node.
lr_parent = prove_path_exists( ls_split_path-path ).
ASSERT lr_parent IS NOT INITIAL.

View File

@ -420,6 +420,11 @@ CLASS lcl_json_parser IMPLEMENTATION.
DATA lr_stack_top LIKE LINE OF mt_stack.
DATA lo_node TYPE REF TO if_sxml_node.
FIELD-SYMBOLS <item> LIKE LINE OF rt_json_tree.
DATA lt_attributes TYPE if_sxml_attribute=>attributes.
DATA lo_attr LIKE LINE OF lt_attributes.
DATA lo_open TYPE REF TO if_sxml_open_element.
DATA lo_close TYPE REF TO if_sxml_close_element.
DATA lo_value TYPE REF TO if_sxml_value_node.
CLEAR mt_stack.
CLEAR mv_stack_path.
@ -439,9 +444,9 @@ CLASS lcl_json_parser IMPLEMENTATION.
CASE lo_node->type.
WHEN if_sxml_node=>co_nt_element_open.
DATA lt_attributes TYPE if_sxml_attribute=>attributes.
DATA lo_attr LIKE LINE OF lt_attributes.
DATA lo_open TYPE REF TO if_sxml_open_element.
lo_open ?= lo_node.
APPEND INITIAL LINE TO rt_json_tree ASSIGNING <item>.
@ -479,7 +484,7 @@ CLASS lcl_json_parser IMPLEMENTATION.
mv_stack_path = mv_stack_path && <item>-name && '/'.
WHEN if_sxml_node=>co_nt_element_close.
DATA lo_close TYPE REF TO if_sxml_close_element.
lo_close ?= lo_node.
READ TABLE mt_stack INDEX 1 INTO lr_stack_top.
@ -492,7 +497,7 @@ CLASS lcl_json_parser IMPLEMENTATION.
mv_stack_path = substring( val = mv_stack_path
len = find( val = mv_stack_path sub = '/' occ = -2 ) + 1 ).
WHEN if_sxml_node=>co_nt_value.
DATA lo_value TYPE REF TO if_sxml_value_node.
lo_value ?= lo_node.
<item>-value = lo_value->get_value( ).
@ -612,6 +617,8 @@ CLASS lcl_json_serializer IMPLEMENTATION.
DATA lv_item TYPE string.
DATA lv_indent_prefix TYPE string.
DATA lv_children_path TYPE string.
DATA lv_tail TYPE string.
IF mv_indent_step > 0.
lv_indent_prefix = repeat( val = ` `
@ -656,8 +663,8 @@ CLASS lcl_json_serializer IMPLEMENTATION.
" finish complex item
IF is_node-type = z2ui5_if_ajson_types=>node_type-array OR is_node-type = z2ui5_if_ajson_types=>node_type-object.
DATA lv_children_path TYPE string.
DATA lv_tail TYPE string.
lv_children_path = is_node-path && is_node-name && '/'. " for root: path = '' and name = '', so result is '/'
@ -958,6 +965,7 @@ CLASS lcl_json_to_abap IMPLEMENTATION.
FIELD-SYMBOLS <parent_anytab> TYPE ANY TABLE.
FIELD-SYMBOLS <parent_struc> TYPE any.
FIELD-SYMBOLS <tab_item> TYPE any.
FIELD-SYMBOLS <field> TYPE any.
" Assign container
CASE is_parent_type-type_kind.
@ -1022,7 +1030,7 @@ CLASS lcl_json_to_abap IMPLEMENTATION.
ENDIF.
WHEN lif_kind=>struct_flat OR lif_kind=>struct_deep.
FIELD-SYMBOLS <field> TYPE any.
ASSIGN COMPONENT ls_node_type-target_field_name OF STRUCTURE <parent_struc> TO <field>.
ASSERT sy-subrc = 0.
GET REFERENCE OF <field> INTO lr_target_field.

View File

@ -175,10 +175,11 @@ CLASS ltcl_parser_test IMPLEMENTATION.
ENDMETHOD.
METHOD parse_string.
DATA lt_act TYPE z2ui5_if_ajson_types=>ty_nodes_tt.
mo_nodes->add( ' | |object | | |1' ).
mo_nodes->add( '/ |string |str |abc | |0' ).
DATA lt_act TYPE z2ui5_if_ajson_types=>ty_nodes_tt.
lt_act = mo_cut->parse( '{"string": "abc"}' ).
cl_abap_unit_assert=>assert_equals(
act = lt_act
@ -186,10 +187,11 @@ CLASS ltcl_parser_test IMPLEMENTATION.
ENDMETHOD.
METHOD parse_number.
DATA lt_act TYPE z2ui5_if_ajson_types=>ty_nodes_tt.
mo_nodes->add( ' | |object | | |1' ).
mo_nodes->add( '/ |number |num |123 | |0' ).
DATA lt_act TYPE z2ui5_if_ajson_types=>ty_nodes_tt.
lt_act = mo_cut->parse( '{"number": 123}' ).
cl_abap_unit_assert=>assert_equals(
act = lt_act
@ -197,10 +199,11 @@ CLASS ltcl_parser_test IMPLEMENTATION.
ENDMETHOD.
METHOD parse_float.
DATA lt_act TYPE z2ui5_if_ajson_types=>ty_nodes_tt.
mo_nodes->add( ' | |object | | |1' ).
mo_nodes->add( '/ |float |num |123.45 | |0' ).
DATA lt_act TYPE z2ui5_if_ajson_types=>ty_nodes_tt.
CREATE OBJECT mo_cut.
lt_act = mo_cut->parse( '{"float": 123.45}' ).
cl_abap_unit_assert=>assert_equals(
@ -209,10 +212,11 @@ CLASS ltcl_parser_test IMPLEMENTATION.
ENDMETHOD.
METHOD parse_boolean.
DATA lt_act TYPE z2ui5_if_ajson_types=>ty_nodes_tt.
mo_nodes->add( ' | |object | | |1' ).
mo_nodes->add( '/ |boolean |bool |true | |0' ).
DATA lt_act TYPE z2ui5_if_ajson_types=>ty_nodes_tt.
lt_act = mo_cut->parse( '{"boolean": true}' ).
cl_abap_unit_assert=>assert_equals(
act = lt_act
@ -220,10 +224,11 @@ CLASS ltcl_parser_test IMPLEMENTATION.
ENDMETHOD.
METHOD parse_false.
DATA lt_act TYPE z2ui5_if_ajson_types=>ty_nodes_tt.
mo_nodes->add( ' | |object | | |1' ).
mo_nodes->add( '/ |false |bool |false | |0' ).
DATA lt_act TYPE z2ui5_if_ajson_types=>ty_nodes_tt.
lt_act = mo_cut->parse( '{"false": false}' ).
cl_abap_unit_assert=>assert_equals(
act = lt_act
@ -231,10 +236,11 @@ CLASS ltcl_parser_test IMPLEMENTATION.
ENDMETHOD.
METHOD parse_null.
DATA lt_act TYPE z2ui5_if_ajson_types=>ty_nodes_tt.
mo_nodes->add( ' | |object | | |1' ).
mo_nodes->add( '/ |null |null | | |0' ).
DATA lt_act TYPE z2ui5_if_ajson_types=>ty_nodes_tt.
lt_act = mo_cut->parse( '{"null": null}' ).
cl_abap_unit_assert=>assert_equals(
act = lt_act
@ -242,10 +248,11 @@ CLASS ltcl_parser_test IMPLEMENTATION.
ENDMETHOD.
METHOD parse_date.
DATA lt_act TYPE z2ui5_if_ajson_types=>ty_nodes_tt.
mo_nodes->add( ' | |object | | |1' ).
mo_nodes->add( '/ |date |str |2020-03-15 | |0' ).
DATA lt_act TYPE z2ui5_if_ajson_types=>ty_nodes_tt.
lt_act = mo_cut->parse( '{"date": "2020-03-15"}' ).
cl_abap_unit_assert=>assert_equals(
act = lt_act
@ -253,11 +260,13 @@ CLASS ltcl_parser_test IMPLEMENTATION.
ENDMETHOD.
METHOD parse_input_xstring.
DATA lt_act TYPE z2ui5_if_ajson_types=>ty_nodes_tt.
DATA lv_xstr TYPE xstring.
mo_nodes->add( ' | |object | | |1' ).
mo_nodes->add( '/ |string |str |abc | |0' ).
DATA lt_act TYPE z2ui5_if_ajson_types=>ty_nodes_tt.
DATA lv_xstr TYPE xstring.
lv_xstr = '7B22737472696E67223A2022616263227D0A'.
lt_act = mo_cut->parse( lv_xstr ).
@ -267,11 +276,13 @@ CLASS ltcl_parser_test IMPLEMENTATION.
ENDMETHOD.
METHOD parse_input_string.
DATA lt_act TYPE z2ui5_if_ajson_types=>ty_nodes_tt.
DATA lv_str TYPE string.
mo_nodes->add( ' | |object | | |1' ).
mo_nodes->add( '/ |string |str |abc | |0' ).
DATA lt_act TYPE z2ui5_if_ajson_types=>ty_nodes_tt.
DATA lv_str TYPE string.
lv_str = `{"string": "abc"}`.
lt_act = mo_cut->parse( lv_str ).
@ -281,12 +292,14 @@ CLASS ltcl_parser_test IMPLEMENTATION.
ENDMETHOD.
METHOD parse_input_string_table.
DATA lt_act TYPE z2ui5_if_ajson_types=>ty_nodes_tt.
DATA lt_json TYPE string_table.
mo_nodes->add( ' | |object | | |2' ).
mo_nodes->add( '/ |string |str |abc | |0' ).
mo_nodes->add( '/ |number |num |123 | |0' ).
DATA lt_act TYPE z2ui5_if_ajson_types=>ty_nodes_tt.
DATA lt_json TYPE string_table.
INSERT `{` INTO TABLE lt_json.
INSERT `"string": "abc",` INTO TABLE lt_json.
@ -1371,6 +1384,7 @@ CLASS ltcl_reader_test IMPLEMENTATION.
DATA lo_nodes TYPE REF TO lcl_nodes_helper.
DATA lt_act TYPE string_table.
DATA lt_exp TYPE string_table.
DATA lx TYPE REF TO z2ui5_cx_ajson_error.
CREATE OBJECT lo_nodes.
lo_nodes->add( ' | |array | | |6' ).
@ -1397,7 +1411,7 @@ CLASS ltcl_reader_test IMPLEMENTATION.
exp = lt_exp ).
" negative
DATA lx TYPE REF TO z2ui5_cx_ajson_error.
CREATE OBJECT lo_nodes.
lo_nodes->add( ' | |object | | |1' ).
@ -1640,6 +1654,7 @@ CLASS ltcl_json_to_abap IMPLEMENTATION.
DATA lo_cut TYPE REF TO lcl_json_to_abap.
DATA lv_mock TYPE t.
DATA lo_nodes TYPE REF TO lcl_nodes_helper.
DATA lv_mock_init TYPE t.
CREATE OBJECT lo_nodes.
lo_nodes->add( ' | |str |11:11:11| ' ).
@ -1655,7 +1670,7 @@ CLASS ltcl_json_to_abap IMPLEMENTATION.
act = lv_mock
exp = '111111' ).
DATA lv_mock_init TYPE t.
CREATE OBJECT lo_nodes.
lo_nodes->add( ' | |str || ' ).
@ -1823,6 +1838,7 @@ CLASS ltcl_json_to_abap IMPLEMENTATION.
DATA ls_mock TYPE ty_complex.
DATA ls_exp TYPE ty_complex.
DATA lo_nodes TYPE REF TO lcl_nodes_helper.
DATA ls_elem LIKE LINE OF ls_exp-tab.
CREATE OBJECT lo_nodes.
lo_nodes->add( ' | |object | | ' ).
@ -1839,7 +1855,7 @@ CLASS ltcl_json_to_abap IMPLEMENTATION.
CHANGING
c_container = ls_mock ).
DATA ls_elem LIKE LINE OF ls_exp-tab.
ls_elem-a = 'One'.
APPEND ls_elem TO ls_exp-tab.
ls_elem-a = 'Two'.
@ -1915,6 +1931,7 @@ CLASS ltcl_json_to_abap IMPLEMENTATION.
DATA lt_exp TYPE tty_struc_hashed.
DATA lo_nodes TYPE REF TO lcl_nodes_helper.
DATA ls_elem LIKE LINE OF lt_exp.
CREATE OBJECT lo_nodes.
lo_nodes->add( ' | |array | | ' ).
lo_nodes->add( '/ |1 |object | |1' ).
@ -1931,7 +1948,7 @@ CLASS ltcl_json_to_abap IMPLEMENTATION.
CHANGING
c_container = lt_mock ).
DATA ls_elem LIKE LINE OF lt_exp.
ls_elem-a = 'One'.
ls_elem-b = 1.
INSERT ls_elem INTO TABLE lt_exp.
@ -1952,6 +1969,7 @@ CLASS ltcl_json_to_abap IMPLEMENTATION.
DATA lt_exp TYPE tty_struc_sorted.
DATA lo_nodes TYPE REF TO lcl_nodes_helper.
DATA ls_elem LIKE LINE OF lt_exp.
CREATE OBJECT lo_nodes.
lo_nodes->add( ' | |array | | ' ).
lo_nodes->add( '/ |1 |object | |1' ).
@ -1968,7 +1986,7 @@ CLASS ltcl_json_to_abap IMPLEMENTATION.
CHANGING
c_container = lt_mock ).
DATA ls_elem LIKE LINE OF lt_exp.
ls_elem-a = 'One'.
ls_elem-b = 1.
INSERT ls_elem INTO TABLE lt_exp.
@ -1987,10 +2005,15 @@ CLASS ltcl_json_to_abap IMPLEMENTATION.
DATA lo_cut TYPE REF TO lcl_json_to_abap.
DATA lx TYPE REF TO z2ui5_cx_ajson_error.
DATA ls_mock TYPE ty_complex.
DATA lo_nodes TYPE REF TO lcl_nodes_helper.
DATA lt_str TYPE string_table.
DATA lr_obj TYPE REF TO object.
DATA lr_data TYPE REF TO data.
DATA lt_hashed TYPE HASHED TABLE OF string WITH UNIQUE KEY table_line.
CREATE OBJECT lo_cut.
DATA lo_nodes TYPE REF TO lcl_nodes_helper.
TRY.
CREATE OBJECT lo_nodes.
@ -2078,7 +2101,7 @@ CLASS ltcl_json_to_abap IMPLEMENTATION.
ENDTRY.
TRY.
DATA lt_str TYPE string_table.
CREATE OBJECT lo_nodes.
lo_nodes->add( ' | |array | | ' ).
lo_nodes->add( '/ |a |str |hello |1' ).
@ -2096,7 +2119,7 @@ CLASS ltcl_json_to_abap IMPLEMENTATION.
ENDTRY.
TRY.
DATA lr_obj TYPE REF TO object.
CREATE OBJECT lo_nodes.
lo_nodes->add( ' | |str |hello | ' ).
@ -2113,7 +2136,7 @@ CLASS ltcl_json_to_abap IMPLEMENTATION.
ENDTRY.
TRY.
DATA lr_data TYPE REF TO data.
CREATE OBJECT lo_nodes.
lo_nodes->add( ' | |str |hello | ' ).
@ -2130,7 +2153,7 @@ CLASS ltcl_json_to_abap IMPLEMENTATION.
ENDTRY.
TRY.
DATA lt_hashed TYPE HASHED TABLE OF string WITH UNIQUE KEY table_line.
CREATE OBJECT lo_nodes.
lo_nodes->add( ' | |array | | ' ).
lo_nodes->add( '/ |1 |str |One |1' ).
@ -2933,6 +2956,9 @@ CLASS ltcl_writer_test IMPLEMENTATION.
DATA lo_cut TYPE REF TO z2ui5_cl_ajson.
DATA lo_nodes_exp TYPE REF TO lcl_nodes_helper.
DATA li_writer TYPE REF TO z2ui5_if_ajson.
DATA BEGIN OF ls_dummy.
DATA x TYPE string VALUE 'world'.
DATA END OF ls_dummy.
lo_cut = z2ui5_cl_ajson=>create_empty( ).
li_writer = lo_cut.
@ -2970,10 +2996,7 @@ CLASS ltcl_writer_test IMPLEMENTATION.
lo_nodes_exp->add( '/a/ |2 |object | |2|1' ).
lo_nodes_exp->add( '/a/2/ |x |str |world| |0' ).
DATA:
BEGIN OF ls_dummy,
x TYPE string VALUE 'world',
END OF ls_dummy.
li_writer->push(
iv_path = '/a'
@ -3028,6 +3051,7 @@ CLASS ltcl_writer_test IMPLEMENTATION.
DATA lo_cut TYPE REF TO z2ui5_cl_ajson.
DATA li_writer TYPE REF TO z2ui5_if_ajson.
DATA lx TYPE REF TO z2ui5_cx_ajson_error.
lo_cut = z2ui5_cl_ajson=>create_empty( ).
li_writer = lo_cut.
@ -3038,7 +3062,7 @@ CLASS ltcl_writer_test IMPLEMENTATION.
iv_val = 123 ).
" touch another node
DATA lx TYPE REF TO z2ui5_cx_ajson_error.
TRY.
li_writer->touch_array( iv_path = '/a/1' ).
cl_abap_unit_assert=>fail( ).
@ -3860,6 +3884,7 @@ CLASS ltcl_integrated IMPLEMENTATION.
DATA lv_exp TYPE string.
DATA lv_src TYPE string.
DATA li_reader TYPE REF TO z2ui5_if_ajson.
lv_src = '['.
DO 10 TIMES.
IF sy-index <> 1.
@ -3871,7 +3896,7 @@ CLASS ltcl_integrated IMPLEMENTATION.
ENDDO.
lv_src = lv_src && ']'.
DATA li_reader TYPE REF TO z2ui5_if_ajson.
li_reader = z2ui5_cl_ajson=>parse( lv_src ).
li_reader->to_abap( IMPORTING ev_container = lt_act ).
@ -3888,6 +3913,7 @@ CLASS ltcl_integrated IMPLEMENTATION.
DATA ls_exp TYPE ty_loc.
DATA lv_src TYPE string.
DATA li_reader TYPE REF TO z2ui5_if_ajson.
lv_src = '['.
DO 10 TIMES.
IF sy-index <> 1.
@ -3899,7 +3925,7 @@ CLASS ltcl_integrated IMPLEMENTATION.
ENDDO.
lv_src = lv_src && ']'.
DATA li_reader TYPE REF TO z2ui5_if_ajson.
li_reader = z2ui5_cl_ajson=>parse( lv_src ).
li_reader->to_abap( IMPORTING ev_container = lt_act ).
@ -3913,6 +3939,9 @@ CLASS ltcl_integrated IMPLEMENTATION.
DATA lv_source TYPE string.
DATA li_reader TYPE REF TO z2ui5_if_ajson.
DATA ls_act TYPE ty_target.
DATA ls_exp TYPE ty_target.
FIELD-SYMBOLS <i> LIKE LINE OF ls_exp-issues.
lv_source = ltcl_parser_test=>sample_json( ).
li_reader = z2ui5_cl_ajson=>parse( lv_source ).
@ -3921,9 +3950,9 @@ CLASS ltcl_integrated IMPLEMENTATION.
act = li_reader->get( '/string' )
exp = 'abc' ).
DATA ls_act TYPE ty_target.
DATA ls_exp TYPE ty_target.
FIELD-SYMBOLS <i> LIKE LINE OF ls_exp-issues.
ls_exp-string = 'abc'.
ls_exp-number = 123.
@ -4235,6 +4264,7 @@ CLASS ltcl_abap_to_json IMPLEMENTATION.
DATA lo_nodes TYPE REF TO lcl_nodes_helper.
DATA lo_src TYPE REF TO z2ui5_cl_ajson.
DATA lt_nodes TYPE z2ui5_if_ajson_types=>ty_nodes_tt.
lo_src = z2ui5_cl_ajson=>create_empty( ).
CREATE OBJECT lo_nodes.
@ -4244,7 +4274,7 @@ CLASS ltcl_abap_to_json IMPLEMENTATION.
lo_nodes->add( '/a/b/ |c |object | ||0' ).
lo_src->mt_json_tree = lo_nodes->mt_nodes.
DATA lt_nodes TYPE z2ui5_if_ajson_types=>ty_nodes_tt.
lt_nodes = lcl_abap_to_json=>convert( iv_data = lo_src ).
cl_abap_unit_assert=>assert_equals(
@ -4538,6 +4568,7 @@ CLASS ltcl_abap_to_json IMPLEMENTATION.
DATA lt_tab TYPE TABLE OF ty_struc.
FIELD-SYMBOLS <s> LIKE LINE OF lt_tab.
DATA lt_strtab TYPE string_table.
APPEND INITIAL LINE TO lt_tab ASSIGNING <s>.
<s>-a = 'abc'.
@ -4565,7 +4596,7 @@ CLASS ltcl_abap_to_json IMPLEMENTATION.
act = lt_nodes
exp = lo_nodes_exp->mt_nodes ).
DATA lt_strtab TYPE string_table.
APPEND 'abc' TO lt_strtab.
APPEND 'bcd' TO lt_strtab.

File diff suppressed because it is too large Load Diff

View File

@ -20,13 +20,14 @@ CLASS ltcl_test_app DEFINITION FOR TESTING.
CLASS-DATA sv_var TYPE string.
CLASS-DATA ss_tab TYPE ty_row.
CLASS-DATA st_tab TYPE STANDARD TABLE OF ty_row WITH EMPTY KEY.
CLASS-DATA st_tab TYPE STANDARD TABLE OF ty_row WITH DEFAULT KEY.
CLASS-METHODS class_constructor.
DATA mv_val TYPE string ##NEEDED.
DATA ms_tab TYPE ty_row ##NEEDED.
DATA mt_tab TYPE STANDARD TABLE OF ty_row WITH EMPTY KEY ##NEEDED.
TYPES temp1_f9908b1ee3 TYPE STANDARD TABLE OF ty_row WITH DEFAULT KEY.
DATA mt_tab TYPE temp1_f9908b1ee3 ##NEEDED.
PROTECTED SECTION.
@ -36,10 +37,16 @@ ENDCLASS.
CLASS ltcl_test_app IMPLEMENTATION.
METHOD class_constructor.
DATA temp57 TYPE ltcl_test_app=>ty_row.
DATA temp58 LIKE st_tab.
sv_var = 1.
ss_tab = VALUE #( ).
st_tab = VALUE #( ).
CLEAR temp57.
ss_tab = temp57.
CLEAR temp58.
st_tab = temp58.
ENDMETHOD.
ENDCLASS.
@ -124,12 +131,16 @@ ENDCLASS.
CLASS ltcl_unit_test_abap_api IMPLEMENTATION.
METHOD test_assign.
DATA(lo_app) = NEW ltcl_test_app( ).
DATA lo_app TYPE REF TO ltcl_test_app.
FIELD-SYMBOLS <any> TYPE any.
DATA lv_assign TYPE string.
CREATE OBJECT lo_app TYPE ltcl_test_app.
lo_app->mv_val = `ABC`.
DATA(lv_assign) = |LO_APP->MV_VAL|.
lv_assign = |LO_APP->MV_VAL|.
ASSIGN (lv_assign) TO <any>.
ASSERT sy-subrc = 0.
@ -140,24 +151,106 @@ CLASS ltcl_unit_test_abap_api IMPLEMENTATION.
METHOD test_classdescr.
DATA(lo_app) = NEW ltcl_test_app( ).
DATA lo_app TYPE REF TO ltcl_test_app.
DATA temp59 TYPE REF TO cl_abap_classdescr.
DATA lt_attri LIKE temp59->attributes.
DATA lv_test LIKE LINE OF lt_attri.
DATA temp11 LIKE LINE OF lt_attri.
DATA temp12 LIKE sy-tabix.
DATA temp60 LIKE LINE OF lt_attri.
DATA temp61 LIKE sy-tabix.
DATA temp62 LIKE LINE OF lt_attri.
DATA temp63 LIKE sy-tabix.
DATA temp64 LIKE LINE OF lt_attri.
DATA temp65 LIKE sy-tabix.
DATA temp66 LIKE LINE OF lt_attri.
DATA temp67 LIKE sy-tabix.
DATA temp68 LIKE LINE OF lt_attri.
DATA temp69 LIKE sy-tabix.
DATA temp70 LIKE LINE OF lt_attri.
DATA temp71 LIKE sy-tabix.
CREATE OBJECT lo_app TYPE ltcl_test_app.
DATA(lt_attri) = CAST cl_abap_classdescr( cl_abap_objectdescr=>describe_by_object_ref( lo_app ) )->attributes.
temp59 ?= cl_abap_objectdescr=>describe_by_object_ref( lo_app ).
lt_attri = temp59->attributes.
" TODO: variable is assigned but never used (ABAP cleaner)
DATA(lv_test) = lt_attri[ name = `MS_TAB` ].
lv_test = lt_attri[ name = `MT_TAB` ].
lv_test = lt_attri[ name = `MV_VAL` ].
lv_test = lt_attri[ name = `SS_TAB` ].
lv_test = lt_attri[ name = `ST_TAB` ].
lv_test = lt_attri[ name = `SV_STATUS` ].
lv_test = lt_attri[ name = `SV_VAR` ].
temp12 = sy-tabix.
READ TABLE lt_attri WITH KEY name = `MS_TAB` INTO temp11.
sy-tabix = temp12.
IF sy-subrc <> 0.
ASSERT 1 = 0.
ENDIF.
lv_test = temp11.
temp61 = sy-tabix.
READ TABLE lt_attri WITH KEY name = `MT_TAB` INTO temp60.
sy-tabix = temp61.
IF sy-subrc <> 0.
ASSERT 1 = 0.
ENDIF.
lv_test = temp60.
temp63 = sy-tabix.
READ TABLE lt_attri WITH KEY name = `MV_VAL` INTO temp62.
sy-tabix = temp63.
IF sy-subrc <> 0.
ASSERT 1 = 0.
ENDIF.
lv_test = temp62.
temp65 = sy-tabix.
READ TABLE lt_attri WITH KEY name = `SS_TAB` INTO temp64.
sy-tabix = temp65.
IF sy-subrc <> 0.
ASSERT 1 = 0.
ENDIF.
lv_test = temp64.
temp67 = sy-tabix.
READ TABLE lt_attri WITH KEY name = `ST_TAB` INTO temp66.
sy-tabix = temp67.
IF sy-subrc <> 0.
ASSERT 1 = 0.
ENDIF.
lv_test = temp66.
temp69 = sy-tabix.
READ TABLE lt_attri WITH KEY name = `SV_STATUS` INTO temp68.
sy-tabix = temp69.
IF sy-subrc <> 0.
ASSERT 1 = 0.
ENDIF.
lv_test = temp68.
temp71 = sy-tabix.
READ TABLE lt_attri WITH KEY name = `SV_VAR` INTO temp70.
sy-tabix = temp71.
IF sy-subrc <> 0.
ASSERT 1 = 0.
ENDIF.
lv_test = temp70.
ENDMETHOD.
METHOD test_eledescr_rel_name.
DATA(lo_ele) = CAST cl_abap_elemdescr( cl_abap_elemdescr=>describe_by_data( abap_true ) ).
DATA temp72 TYPE REF TO cl_abap_elemdescr.
DATA lo_ele LIKE temp72.
temp72 ?= cl_abap_elemdescr=>describe_by_data( abap_true ).
lo_ele = temp72.
cl_abap_unit_assert=>assert_equals( exp = `ABAP_BOOL`
act = lo_ele->get_relative_name( ) ).
@ -190,7 +283,8 @@ CLASS ltcl_unit_test_abap_api IMPLEMENTATION.
METHOD test_string_replace.
DATA(lv_search) = replace( val = `one two three`
DATA lv_search TYPE string.
lv_search = replace( val = `one two three`
sub = `two`
with = 'ABC'
occ = 0 ) ##NEEDED.
@ -204,6 +298,7 @@ CLASS ltcl_unit_test_abap_api IMPLEMENTATION.
ENDMETHOD.
METHOD test_raise_error.
DATA lx TYPE REF TO z2ui5_cx_util_error.
TRY.
IF 1 = 1.
@ -211,7 +306,8 @@ CLASS ltcl_unit_test_abap_api IMPLEMENTATION.
ENDIF.
cl_abap_unit_assert=>fail( ).
CATCH z2ui5_cx_util_error INTO DATA(lx).
CATCH z2ui5_cx_util_error INTO lx.
cl_abap_unit_assert=>assert_bound( lx ).
ENDTRY.
@ -219,12 +315,18 @@ CLASS ltcl_unit_test_abap_api IMPLEMENTATION.
METHOD test_xsdbool.
DATA(lv_xsdbool) = xsdbool( 1 = 1 ).
DATA lv_xsdbool TYPE abap_bool.
DATA temp1 TYPE xsdboolean.
DATA temp2 TYPE xsdboolean.
temp1 = boolc( 1 = 1 ).
lv_xsdbool = temp1.
IF lv_xsdbool = abap_false.
cl_abap_unit_assert=>assert_false( lv_xsdbool ).
ENDIF.
IF xsdbool( 1 = 1 ) = abap_false.
temp2 = boolc( 1 = 1 ).
IF temp2 = abap_false.
cl_abap_unit_assert=>fail( ).
ENDIF.
@ -232,16 +334,22 @@ CLASS ltcl_unit_test_abap_api IMPLEMENTATION.
METHOD test_xsdbool_nested.
DATA(lv_xsdbool) = check_input( xsdbool( 1 = 1 ) ).
DATA lv_xsdbool TYPE abap_bool.
DATA temp3 TYPE xsdboolean.
DATA temp4 TYPE xsdboolean.
temp3 = boolc( 1 = 1 ).
lv_xsdbool = check_input( temp3 ).
IF lv_xsdbool = abap_false.
cl_abap_unit_assert=>assert_false( lv_xsdbool ).
ENDIF.
IF check_input( abap_false ).
IF check_input( abap_false ) IS NOT INITIAL.
cl_abap_unit_assert=>fail( ).
ENDIF.
IF check_input( xsdbool( 1 = 1 ) ) = abap_false.
temp4 = boolc( 1 = 1 ).
IF check_input( temp4 ) = abap_false.
cl_abap_unit_assert=>fail( ).
ENDIF.
@ -258,10 +366,16 @@ ENDCLASS.
CLASS ltcl_unit_test IMPLEMENTATION.
METHOD test_boolean_check.
DATA(lv_bool) = xsdbool( 1 = 1 ).
DATA lv_bool TYPE abap_bool.
DATA temp5 TYPE xsdboolean.
DATA temp6 TYPE xsdboolean.
temp5 = boolc( 1 = 1 ).
lv_bool = temp5.
cl_abap_unit_assert=>assert_true( z2ui5_cl_util=>boolean_check_by_data( lv_bool ) ).
lv_bool = xsdbool( 1 = 2 ).
temp6 = boolc( 1 = 2 ).
lv_bool = temp6.
cl_abap_unit_assert=>assert_true( z2ui5_cl_util=>boolean_check_by_data( lv_bool ) ).
cl_abap_unit_assert=>assert_true( z2ui5_cl_util=>boolean_check_by_data( abap_true ) ).
@ -272,26 +386,37 @@ CLASS ltcl_unit_test IMPLEMENTATION.
METHOD test_sql_get_by_string.
DATA(lv_test) = ``.
DATA(ls_sql) = z2ui5_cl_util=>filter_get_sql_by_sql_string( lv_test ) ##NEEDED.
DATA lv_test TYPE string.
DATA ls_sql TYPE z2ui5_cl_util=>ty_s_sql.
lv_test = ``.
ls_sql = z2ui5_cl_util=>filter_get_sql_by_sql_string( lv_test ) ##NEEDED.
ENDMETHOD.
METHOD test_create.
DATA(lo_test) = NEW z2ui5_cl_util( ) ##NEEDED.
DATA lo_test TYPE REF TO z2ui5_cl_util.
CREATE OBJECT lo_test TYPE z2ui5_cl_util.
ENDMETHOD.
METHOD test_rtti_get_classname_by_ref.
DATA(lo_test) = NEW z2ui5_cl_util( ).
DATA(lv_name) = z2ui5_cl_util=>rtti_get_classname_by_ref( lo_test ).
DATA lo_test TYPE REF TO z2ui5_cl_util.
DATA lv_name TYPE string.
DATA lo_test2 TYPE REF TO ltcl_test_app.
DATA lv_name2 TYPE string.
CREATE OBJECT lo_test TYPE z2ui5_cl_util.
lv_name = z2ui5_cl_util=>rtti_get_classname_by_ref( lo_test ).
cl_abap_unit_assert=>assert_equals( exp = `Z2UI5_CL_UTIL`
act = lv_name ).
DATA(lo_test2) = NEW ltcl_test_app( ).
DATA(lv_name2) = z2ui5_cl_util=>rtti_get_classname_by_ref( lo_test2 ).
CREATE OBJECT lo_test2 TYPE ltcl_test_app.
lv_name2 = z2ui5_cl_util=>rtti_get_classname_by_ref( lo_test2 ).
cl_abap_unit_assert=>assert_equals( exp = `LTCL_TEST_APP`
act = lv_name2 ).
@ -299,8 +424,11 @@ CLASS ltcl_unit_test IMPLEMENTATION.
METHOD test_check_bound_a_not_inital.
DATA(lv_test) = `test`.
DATA(lr_test) = REF #( lv_test ).
DATA lv_test TYPE string.
DATA lr_test LIKE REF TO lv_test.
lv_test = `test`.
GET REFERENCE OF lv_test INTO lr_test.
cl_abap_unit_assert=>assert_true( z2ui5_cl_util=>check_bound_a_not_inital( lr_test ) ).
CLEAR lv_test.
@ -312,8 +440,11 @@ CLASS ltcl_unit_test IMPLEMENTATION.
METHOD test_check_unassign_inital.
DATA(lv_test) = `test`.
DATA(lr_test) = REF #( lv_test ).
DATA lv_test TYPE string.
DATA lr_test LIKE REF TO lv_test.
lv_test = `test`.
GET REFERENCE OF lv_test INTO lr_test.
cl_abap_unit_assert=>assert_false( z2ui5_cl_util=>check_unassign_inital( lr_test ) ).
@ -324,8 +455,10 @@ CLASS ltcl_unit_test IMPLEMENTATION.
METHOD rtti_check_ref_data.
DATA(lv_test) = `test`.
DATA lv_test TYPE string.
DATA lr_data TYPE REF TO data.
lv_test = `test`.
GET REFERENCE OF lv_test INTO lr_data.
cl_abap_unit_assert=>assert_true( z2ui5_cl_util=>rtti_check_ref_data( lr_data ) ).
@ -336,13 +469,18 @@ CLASS ltcl_unit_test IMPLEMENTATION.
METHOD conv_copy_ref_data.
DATA(lv_test) = `test`.
DATA lv_test TYPE string.
DATA lr_data TYPE REF TO data.
DATA lr_test2 TYPE REF TO data.
FIELD-SYMBOLS <result> TYPE data.
lv_test = `test`.
GET REFERENCE OF lv_test INTO lr_data.
DATA(lr_test2) = z2ui5_cl_util=>conv_copy_ref_data( lr_data ).
FIELD-SYMBOLS <result> TYPE data.
lr_test2 = z2ui5_cl_util=>conv_copy_ref_data( lr_data ).
ASSIGN lr_test2->* TO <result>.
cl_abap_unit_assert=>assert_equals( exp = lv_test
@ -359,9 +497,12 @@ CLASS ltcl_unit_test IMPLEMENTATION.
METHOD test_time_get_timestampl.
DATA(lv_time) = z2ui5_cl_util=>time_get_timestampl( ).
DATA lv_time TYPE timestampl.
DATA lv_time2 TYPE timestampl.
lv_time = z2ui5_cl_util=>time_get_timestampl( ).
DATA(lv_time2) = z2ui5_cl_util=>time_substract_seconds( time = lv_time
lv_time2 = z2ui5_cl_util=>time_substract_seconds( time = lv_time
seconds = 60 * 60 * 4 ).
IF lv_time IS INITIAL OR lv_time2 IS INITIAL.
@ -376,8 +517,11 @@ CLASS ltcl_unit_test IMPLEMENTATION.
METHOD test_time_substract_seconds.
DATA(lv_time) = z2ui5_cl_util=>time_get_timestampl( ).
DATA(lv_time2) = z2ui5_cl_util=>time_get_timestampl( ).
DATA lv_time TYPE timestampl.
DATA lv_time2 TYPE timestampl.
lv_time = z2ui5_cl_util=>time_get_timestampl( ).
lv_time2 = z2ui5_cl_util=>time_get_timestampl( ).
IF lv_time IS INITIAL OR lv_time2 IS INITIAL.
cl_abap_unit_assert=>fail( ).
@ -430,15 +574,21 @@ CLASS ltcl_unit_test IMPLEMENTATION.
ENDMETHOD.
METHOD test_x_check_raise.
DATA temp7 TYPE xsdboolean.
DATA temp8 TYPE xsdboolean.
TRY.
z2ui5_cl_util=>x_check_raise( xsdbool( 1 = 1 ) ).
temp7 = boolc( 1 = 1 ).
z2ui5_cl_util=>x_check_raise( temp7 ).
cl_abap_unit_assert=>fail( ).
CATCH cx_root.
ENDTRY.
TRY.
z2ui5_cl_util=>x_check_raise( xsdbool( 1 = 3 ) ).
temp8 = boolc( 1 = 3 ).
z2ui5_cl_util=>x_check_raise( temp8 ).
CATCH cx_root.
cl_abap_unit_assert=>fail( ).
ENDTRY.
@ -454,7 +604,12 @@ CLASS ltcl_unit_test IMPLEMENTATION.
selected TYPE abap_bool,
END OF ty_row.
DATA(ls_row) = VALUE ty_row( title = `test` ).
DATA temp73 TYPE ty_row.
DATA ls_row LIKE temp73.
CLEAR temp73.
temp73-title = `test`.
ls_row = temp73.
cl_abap_unit_assert=>assert_equals( exp = `{"selected":false,"title":"test","value":""}`
act = z2ui5_cl_util=>json_stringify( ls_row ) ).
@ -463,9 +618,12 @@ CLASS ltcl_unit_test IMPLEMENTATION.
METHOD test_url_param_create_url.
DATA(lt_param) = z2ui5_cl_util=>url_param_get_tab(
DATA lt_param TYPE z2ui5_cl_util=>ty_t_name_value.
DATA lv_url TYPE string.
lt_param = z2ui5_cl_util=>url_param_get_tab(
`https://url.com/rvice_for_ui?sap-client=100&app_start=z2ui5_cl_app_hello_world` ).
DATA(lv_url) = z2ui5_cl_util=>url_param_create_url( lt_param ).
lv_url = z2ui5_cl_util=>url_param_create_url( lt_param ).
cl_abap_unit_assert=>assert_equals( exp = `sap-client=100&app_start=z2ui5_cl_app_hello_world`
act = lv_url ).
@ -474,7 +632,8 @@ CLASS ltcl_unit_test IMPLEMENTATION.
METHOD test_url_param_get.
DATA(lv_param) = z2ui5_cl_util=>url_param_get(
DATA lv_param TYPE string.
lv_param = z2ui5_cl_util=>url_param_get(
val = `app_start`
url = `https://url.com/rvice_for_ui?sap-client=100&app_start=z2ui5_cl_app_hello_world` ).
@ -485,20 +644,42 @@ CLASS ltcl_unit_test IMPLEMENTATION.
METHOD test_url_param_get_tab.
DATA(lt_param) = z2ui5_cl_util=>url_param_get_tab(
DATA lt_param TYPE z2ui5_cl_util=>ty_t_name_value.
DATA temp74 LIKE LINE OF lt_param.
DATA temp75 LIKE sy-tabix.
DATA temp76 LIKE LINE OF lt_param.
DATA temp77 LIKE sy-tabix.
lt_param = z2ui5_cl_util=>url_param_get_tab(
`https://url.com/rvice_for_ui?sap-client=100&app_start=z2ui5_cl_app_hello_world` ).
cl_abap_unit_assert=>assert_equals( exp = `100`
act = lt_param[ n = `sap-client` ]-v ).
temp75 = sy-tabix.
READ TABLE lt_param WITH KEY n = `sap-client` INTO temp74.
sy-tabix = temp75.
IF sy-subrc <> 0.
ASSERT 1 = 0.
ENDIF.
cl_abap_unit_assert=>assert_equals( exp = `100`
act = temp74-v ).
temp77 = sy-tabix.
READ TABLE lt_param WITH KEY n = `app_start` INTO temp76.
sy-tabix = temp77.
IF sy-subrc <> 0.
ASSERT 1 = 0.
ENDIF.
cl_abap_unit_assert=>assert_equals( exp = `z2ui5_cl_app_hello_world`
act = lt_param[ n = `app_start` ]-v ).
act = temp76-v ).
ENDMETHOD.
METHOD test_url_param_set.
DATA(lv_param) = z2ui5_cl_util=>url_param_set(
DATA lv_param TYPE string.
lv_param = z2ui5_cl_util=>url_param_set(
name = `app_start`
value = `z2ui5_cl_app_hello_world2`
url = `https://url.com/rvice_for_ui?sap-client=100&app_start=z2ui5_cl_app_hello_world` ).
@ -509,9 +690,12 @@ CLASS ltcl_unit_test IMPLEMENTATION.
ENDMETHOD.
METHOD test_x_check_raise_not.
DATA temp9 TYPE xsdboolean.
TRY.
z2ui5_cl_util=>x_check_raise( xsdbool( 1 = 2 ) ).
temp9 = boolc( 1 = 2 ).
z2ui5_cl_util=>x_check_raise( temp9 ).
CATCH z2ui5_cx_util_error.
cl_abap_unit_assert=>fail( ).
ENDTRY.
@ -519,8 +703,14 @@ CLASS ltcl_unit_test IMPLEMENTATION.
METHOD test_rtti_get_type_name.
DATA(lv_xsdbool) = VALUE xsdboolean( ).
DATA(lv_name) = z2ui5_cl_util=>rtti_get_type_name( lv_xsdbool ).
DATA temp78 TYPE xsdboolean.
DATA lv_xsdbool LIKE temp78.
DATA lv_name TYPE string.
CLEAR temp78.
lv_xsdbool = temp78.
lv_name = z2ui5_cl_util=>rtti_get_type_name( lv_xsdbool ).
cl_abap_unit_assert=>assert_equals( exp = `XSDBOOLEAN`
act = lv_name ).
@ -528,10 +718,17 @@ CLASS ltcl_unit_test IMPLEMENTATION.
METHOD test_rtti_get_type_kind.
DATA(lv_string) = VALUE string( ).
DATA(lv_type_kind) = z2ui5_cl_util=>rtti_get_type_kind( lv_string ).
DATA temp79 TYPE string.
DATA lv_string LIKE temp79.
DATA lv_type_kind TYPE string.
DATA lr_string TYPE REF TO string.
CLEAR temp79.
lv_string = temp79.
lv_type_kind = z2ui5_cl_util=>rtti_get_type_kind( lv_string ).
cl_abap_unit_assert=>assert_equals( exp = cl_abap_typedescr=>typekind_string
act = lv_type_kind ).
@ -544,8 +741,13 @@ CLASS ltcl_unit_test IMPLEMENTATION.
METHOD test_rtti_check_type_kind.
DATA(lv_string) = VALUE string( ).
DATA temp80 TYPE string.
DATA lv_string LIKE temp80.
DATA lr_string TYPE REF TO string.
CLEAR temp80.
lv_string = temp80.
cl_abap_unit_assert=>assert_false( z2ui5_cl_util=>rtti_check_type_kind_dref( lv_string ) ).
CREATE DATA lr_string.
@ -555,32 +757,45 @@ CLASS ltcl_unit_test IMPLEMENTATION.
METHOD test_rtti_get_t_attri_by_obj.
DATA(lo_obj) = NEW ltcl_test_app( ).
DATA(lt_attri) = z2ui5_cl_util=>rtti_get_t_attri_by_oref( lo_obj ).
DATA lo_obj TYPE REF TO ltcl_test_app.
DATA lt_attri TYPE abap_attrdescr_tab.
DATA temp81 LIKE sy-subrc.
DATA temp82 LIKE sy-subrc.
DATA temp83 LIKE sy-subrc.
DATA temp84 LIKE sy-subrc.
CREATE OBJECT lo_obj TYPE ltcl_test_app.
lt_attri = z2ui5_cl_util=>rtti_get_t_attri_by_oref( lo_obj ).
IF lines( lt_attri ) <> 7.
cl_abap_unit_assert=>fail( ).
ENDIF.
IF NOT line_exists( lt_attri[ name = `MS_TAB` ] ).
READ TABLE lt_attri WITH KEY name = `MS_TAB` TRANSPORTING NO FIELDS.
temp81 = sy-subrc.
IF NOT temp81 = 0.
cl_abap_unit_assert=>fail( ).
ENDIF.
IF NOT line_exists( lt_attri[ name = `SS_TAB`
type_kind = `v` ] ).
READ TABLE lt_attri WITH KEY name = `SS_TAB` type_kind = `v` TRANSPORTING NO FIELDS.
temp82 = sy-subrc.
IF NOT temp82 = 0.
cl_abap_unit_assert=>fail( ).
ENDIF.
IF NOT line_exists( lt_attri[ name = `SV_VAR`
type_kind = `g`
is_class = abap_true ] ).
READ TABLE lt_attri WITH KEY name = `SV_VAR` type_kind = `g` is_class = abap_true TRANSPORTING NO FIELDS.
temp83 = sy-subrc.
IF NOT temp83 = 0.
cl_abap_unit_assert=>fail( ).
ENDIF.
IF NOT line_exists( lt_attri[ name = `SV_STATUS`
type_kind = `g`
is_class = abap_true
is_constant = `X` ] ).
READ TABLE lt_attri WITH KEY name = `SV_STATUS` type_kind = `g` is_class = abap_true is_constant = `X` TRANSPORTING NO FIELDS.
temp84 = sy-subrc.
IF NOT temp84 = 0.
cl_abap_unit_assert=>fail( ).
ENDIF.
@ -599,31 +814,65 @@ CLASS ltcl_unit_test IMPLEMENTATION.
checkbox TYPE abap_bool,
END OF ty_row.
DATA(ls_row) = VALUE ty_row( ).
DATA temp85 TYPE ty_row.
DATA ls_row LIKE temp85.
DATA lt_comp TYPE abap_component_tab.
DATA temp86 LIKE sy-subrc.
DATA temp87 LIKE sy-subrc.
DATA temp88 LIKE sy-subrc.
DATA temp89 LIKE sy-subrc.
DATA ls_title LIKE LINE OF lt_comp.
DATA temp13 LIKE LINE OF lt_comp.
DATA temp14 LIKE sy-tabix.
CLEAR temp85.
DATA(lt_comp) = z2ui5_cl_util=>rtti_get_t_attri_by_any( ls_row ).
ls_row = temp85.
lt_comp = z2ui5_cl_util=>rtti_get_t_attri_by_any( ls_row ).
IF lines( lt_comp ) <> 7.
cl_abap_unit_assert=>fail( ).
ENDIF.
IF NOT line_exists( lt_comp[ name = `TITLE` ] ).
READ TABLE lt_comp WITH KEY name = `TITLE` TRANSPORTING NO FIELDS.
temp86 = sy-subrc.
IF NOT temp86 = 0.
cl_abap_unit_assert=>fail( ).
ENDIF.
IF NOT line_exists( lt_comp[ name = `VALUE` ] ).
READ TABLE lt_comp WITH KEY name = `VALUE` TRANSPORTING NO FIELDS.
temp87 = sy-subrc.
IF NOT temp87 = 0.
cl_abap_unit_assert=>fail( ).
ENDIF.
IF NOT line_exists( lt_comp[ name = `SELECTED` ] ).
READ TABLE lt_comp WITH KEY name = `SELECTED` TRANSPORTING NO FIELDS.
temp88 = sy-subrc.
IF NOT temp88 = 0.
cl_abap_unit_assert=>fail( ).
ENDIF.
IF NOT line_exists( lt_comp[ name = `CHECKBOX` ] ).
READ TABLE lt_comp WITH KEY name = `CHECKBOX` TRANSPORTING NO FIELDS.
temp89 = sy-subrc.
IF NOT temp89 = 0.
cl_abap_unit_assert=>fail( ).
ENDIF.
DATA(ls_title) = lt_comp[ 1 ].
temp14 = sy-tabix.
READ TABLE lt_comp INDEX 1 INTO temp13.
sy-tabix = temp14.
IF sy-subrc <> 0.
ASSERT 1 = 0.
ENDIF.
ls_title = temp13.
IF ls_title-type->type_kind <> `g`.
cl_abap_unit_assert=>fail( ).
@ -633,8 +882,11 @@ CLASS ltcl_unit_test IMPLEMENTATION.
METHOD test_trans_xml_any_2__w_obj.
DATA(lo_obj) = NEW ltcl_test_app( ).
DATA(lv_xml) = z2ui5_cl_util=>xml_stringify( lo_obj ).
DATA lo_obj TYPE REF TO ltcl_test_app.
DATA lv_xml TYPE string.
CREATE OBJECT lo_obj TYPE ltcl_test_app.
lv_xml = z2ui5_cl_util=>xml_stringify( lo_obj ).
IF lv_xml IS INITIAL.
cl_abap_unit_assert=>fail( ).
@ -643,8 +895,11 @@ CLASS ltcl_unit_test IMPLEMENTATION.
METHOD test_trans_xml_2_any__w_obj.
DATA(lo_obj) = NEW ltcl_test_app( ).
DATA(lv_xml) = z2ui5_cl_util=>xml_stringify( lo_obj ).
DATA lo_obj TYPE REF TO ltcl_test_app.
DATA lv_xml TYPE string.
CREATE OBJECT lo_obj TYPE ltcl_test_app.
lv_xml = z2ui5_cl_util=>xml_stringify( lo_obj ).
CLEAR lo_obj.
z2ui5_cl_util=>xml_parse( EXPORTING xml = lv_xml
@ -669,10 +924,16 @@ CLASS ltcl_unit_test IMPLEMENTATION.
checkbox TYPE abap_bool,
END OF ty_row.
DATA(ls_row) = VALUE ty_row( ).
DATA temp90 TYPE ty_row.
DATA ls_row LIKE temp90.
DATA lv_xml TYPE string.
CLEAR temp90.
ls_row = temp90.
ls_row-value = `test`.
DATA(lv_xml) = z2ui5_cl_util=>xml_stringify( ls_row ).
lv_xml = z2ui5_cl_util=>xml_stringify( ls_row ).
IF lv_xml IS INITIAL.
cl_abap_unit_assert=>fail( ).
@ -693,11 +954,22 @@ CLASS ltcl_unit_test IMPLEMENTATION.
checkbox TYPE abap_bool,
END OF ty_row.
DATA(ls_row) = VALUE ty_row( ).
DATA(ls_row2) = VALUE ty_row( ).
DATA temp91 TYPE ty_row.
DATA ls_row LIKE temp91.
DATA temp92 TYPE ty_row.
DATA ls_row2 LIKE temp92.
DATA lv_xml TYPE string.
CLEAR temp91.
ls_row = temp91.
CLEAR temp92.
ls_row2 = temp92.
ls_row-value = `test`.
DATA(lv_xml) = z2ui5_cl_util=>xml_stringify( ls_row ).
lv_xml = z2ui5_cl_util=>xml_stringify( ls_row ).
z2ui5_cl_util=>xml_parse( EXPORTING xml = lv_xml
IMPORTING any = ls_row2 ).
@ -720,14 +992,37 @@ CLASS ltcl_unit_test IMPLEMENTATION.
METHOD test_get_token_t_by_r_t.
DATA(lt_range) = VALUE z2ui5_cl_util=>ty_t_range( ( sign = 'I' option = 'EQ' low = `table` high = `` )
).
DATA temp93 TYPE z2ui5_cl_util=>ty_t_range.
DATA temp94 LIKE LINE OF temp93.
DATA lt_range LIKE temp93.
DATA lt_result TYPE z2ui5_cl_util=>ty_t_token.
DATA temp95 TYPE z2ui5_cl_util=>ty_t_token.
DATA temp96 LIKE LINE OF temp95.
DATA lt_exp LIKE temp95.
CLEAR temp93.
DATA(lt_result) = z2ui5_cl_util=>filter_get_token_t_by_range_t( lt_range ).
temp94-sign = 'I'.
temp94-option = 'EQ'.
temp94-low = `table`.
temp94-high = ``.
INSERT temp94 INTO TABLE temp93.
DATA(lt_exp) = VALUE z2ui5_cl_util=>ty_t_token(
( key = `=table` text = `=table` visible = 'X' selkz = '' editable = 'X' )
).
lt_range = temp93.
lt_result = z2ui5_cl_util=>filter_get_token_t_by_range_t( lt_range ).
CLEAR temp95.
temp96-key = `=table`.
temp96-text = `=table`.
temp96-visible = 'X'.
temp96-selkz = ''.
temp96-editable = 'X'.
INSERT temp96 INTO TABLE temp95.
lt_exp = temp95.
cl_abap_unit_assert=>assert_equals( exp = lt_exp
act = lt_result
@ -736,32 +1031,37 @@ CLASS ltcl_unit_test IMPLEMENTATION.
ENDMETHOD.
METHOD test_rtti_get_t_attri_by_incl.
TYPES BEGIN OF ty_struc_incl.
TYPES incl_title TYPE string.
TYPES incl_value TYPE string.
TYPES incl_value2 TYPE string.
TYPES END OF ty_struc_incl.
TYPES BEGIN OF ty_struc.
TYPES title TYPE string.
TYPES value TYPE string.
TYPES value2 TYPE string.
TYPES END OF ty_struc.
DATA BEGIN OF ms_struc2.INCLUDE TYPE ty_struc.INCLUDE TYPE ty_struc_incl.DATA END OF ms_struc2.
DATA lo_datadescr TYPE REF TO cl_abap_typedescr.
DATA temp97 TYPE REF TO cl_abap_datadescr.
DATA lt_attri TYPE abap_component_tab.
IF sy-sysid = 'ABC'.
RETURN.
ENDIF.
TYPES:
BEGIN OF ty_struc_incl,
incl_title TYPE string,
incl_value TYPE string,
incl_value2 TYPE string,
END OF ty_struc_incl.
TYPES:
BEGIN OF ty_struc,
title TYPE string,
value TYPE string,
value2 TYPE string,
END OF ty_struc.
DATA BEGIN OF ms_struc2.
INCLUDE TYPE ty_struc.
INCLUDE TYPE ty_struc_incl.
DATA END OF ms_struc2.
DATA(lo_datadescr) = cl_abap_typedescr=>describe_by_data( ms_struc2 ).
DATA(lt_attri) = z2ui5_cl_util=>rtti_get_t_attri_by_include( CAST #( lo_datadescr ) ).
lo_datadescr = cl_abap_typedescr=>describe_by_data( ms_struc2 ).
temp97 ?= lo_datadescr.
lt_attri = z2ui5_cl_util=>rtti_get_t_attri_by_include( temp97 ).
IF lines( lt_attri ) <> 6.
cl_abap_unit_assert=>fail( ).

View File

@ -15,7 +15,8 @@ ENDCLASS.
CLASS ltcl_test IMPLEMENTATION.
METHOD test_func_get_uuid_32.
DATA(lv_uuid) = z2ui5_cl_util_abap=>uuid_get_c32( ).
DATA lv_uuid TYPE string.
lv_uuid = z2ui5_cl_util_abap=>uuid_get_c32( ).
cl_abap_unit_assert=>assert_not_initial( lv_uuid ).
cl_abap_unit_assert=>assert_equals( exp = strlen( lv_uuid )
act = 32 ).
@ -24,7 +25,8 @@ CLASS ltcl_test IMPLEMENTATION.
METHOD test_func_get_uuid_22.
DATA(lv_uuid) = z2ui5_cl_util_abap=>uuid_get_c22( ).
DATA lv_uuid TYPE string.
lv_uuid = z2ui5_cl_util_abap=>uuid_get_c22( ).
cl_abap_unit_assert=>assert_not_initial( lv_uuid ).
cl_abap_unit_assert=>assert_equals( exp = strlen( lv_uuid )
act = 22 ).
@ -33,11 +35,20 @@ CLASS ltcl_test IMPLEMENTATION.
METHOD test_encoding.
DATA(lv_string) = `my string`.
DATA(lv_xstring) = z2ui5_cl_util_abap=>conv_get_xstring_by_string( lv_string ).
DATA(lv_string2) = z2ui5_cl_util_abap=>conv_encode_x_base64( lv_xstring ).
DATA(lv_xstring2) = z2ui5_cl_util_abap=>conv_decode_x_base64( lv_string2 ).
DATA(lv_string3) = z2ui5_cl_util_abap=>conv_get_string_by_xstring( lv_xstring2 ).
DATA lv_string TYPE string.
DATA lv_xstring TYPE xstring.
DATA lv_string2 TYPE string.
DATA lv_xstring2 TYPE xstring.
DATA lv_string3 TYPE string.
lv_string = `my string`.
lv_xstring = z2ui5_cl_util_abap=>conv_get_xstring_by_string( lv_string ).
lv_string2 = z2ui5_cl_util_abap=>conv_encode_x_base64( lv_xstring ).
lv_xstring2 = z2ui5_cl_util_abap=>conv_decode_x_base64( lv_string2 ).
lv_string3 = z2ui5_cl_util_abap=>conv_get_string_by_xstring( lv_xstring2 ).
cl_abap_unit_assert=>assert_equals( exp = lv_string
act = lv_string3 ).
@ -45,23 +56,27 @@ CLASS ltcl_test IMPLEMENTATION.
ENDMETHOD.
METHOD test_element_text.
DATA ls_result TYPE z2ui5_cl_util_abap=>ty_s_data_element_text.
IF sy-sysid = 'ABC'.
RETURN.
ENDIF.
DATA(ls_result) = z2ui5_cl_util_abap=>rtti_get_data_element_texts( `UNAME` ).
ls_result = z2ui5_cl_util_abap=>rtti_get_data_element_texts( `UNAME` ).
cl_abap_unit_assert=>assert_not_initial( ls_result ).
ENDMETHOD.
METHOD test_classes_impl_intf.
DATA mt_classes TYPE z2ui5_cl_util_abap=>ty_t_classes.
IF sy-sysid = 'ABC'.
RETURN.
ENDIF.
DATA(mt_classes) = z2ui5_cl_util_abap=>rtti_get_classes_impl_intf( `IF_SERIALIZABLE_OBJECT` ).
mt_classes = z2ui5_cl_util_abap=>rtti_get_classes_impl_intf( `IF_SERIALIZABLE_OBJECT` ).
cl_abap_unit_assert=>assert_not_initial( mt_classes ).
ENDMETHOD.

View File

@ -70,12 +70,18 @@ ENDCLASS.
CLASS z2ui5_cl_util_abap_http IMPLEMENTATION.
METHOD delete_response_cookie.
DATA(lv_val) = CONV string( val ).
DATA temp1 TYPE string.
DATA lv_val LIKE temp1.
DATA object TYPE REF TO object.
FIELD-SYMBOLS <any> TYPE any.
temp1 = val.
lv_val = temp1.
IF mo_server_onprem IS BOUND.
DATA object TYPE REF TO object.
FIELD-SYMBOLS <any> TYPE any.
ASSIGN mo_server_onprem->('RESPONSE') TO <any>.
object = <any>.
@ -98,7 +104,11 @@ CLASS z2ui5_cl_util_abap_http IMPLEMENTATION.
DATA object TYPE REF TO object.
FIELD-SYMBOLS <any> TYPE any.
DATA(lv_val) = CONV string( val ).
DATA temp2 TYPE string.
DATA lv_val LIKE temp2.
temp2 = val.
lv_val = temp2.
IF mo_server_onprem IS BOUND.
@ -126,7 +136,11 @@ CLASS z2ui5_cl_util_abap_http IMPLEMENTATION.
DATA object TYPE REF TO object.
FIELD-SYMBOLS <any> TYPE any.
DATA(lv_val) = CONV string( val ).
DATA temp3 TYPE string.
DATA lv_val LIKE temp3.
temp3 = val.
lv_val = temp3.
IF mo_server_onprem IS BOUND.
@ -152,8 +166,17 @@ CLASS z2ui5_cl_util_abap_http IMPLEMENTATION.
DATA object TYPE REF TO object.
FIELD-SYMBOLS <any> TYPE any.
DATA(lv_n) = CONV string( n ).
DATA(lv_v) = CONV string( v ).
DATA temp4 TYPE string.
DATA lv_n LIKE temp4.
DATA temp5 TYPE string.
DATA lv_v LIKE temp5.
temp4 = n.
lv_n = temp4.
temp5 = v.
lv_v = temp5.
IF mo_server_onprem IS BOUND.
ASSIGN mo_server_onprem->('RESPONSE') TO <any>.
@ -175,14 +198,14 @@ CLASS z2ui5_cl_util_abap_http IMPLEMENTATION.
METHOD factory.
result = NEW #( ).
CREATE OBJECT result.
result->mo_server_onprem = server.
ENDMETHOD.
METHOD factory_cloud.
result = NEW #( ).
CREATE OBJECT result.
result->mo_request_cloud = req.
result->mo_response_cloud = res.
@ -259,7 +282,11 @@ CLASS z2ui5_cl_util_abap_http IMPLEMENTATION.
DATA object TYPE REF TO object.
FIELD-SYMBOLS <any> TYPE any.
DATA(lv_reason) = CONV string( reason ).
DATA temp6 TYPE string.
DATA lv_reason LIKE temp6.
temp6 = reason.
lv_reason = temp6.
IF mo_server_onprem IS BOUND.

View File

@ -53,10 +53,10 @@ CLASS z2ui5_cl_util_db IMPLEMENTATION.
DELETE FROM z2ui5_t_91
WHERE
uname = @uname
AND handle = @handle
AND handle2 = @handle2
AND handle3 = @handle3.
uname = uname
AND handle = handle
AND handle2 = handle2
AND handle3 = handle3.
IF check_commit = abap_true.
COMMIT WORK AND WAIT.
@ -67,23 +67,35 @@ CLASS z2ui5_cl_util_db IMPLEMENTATION.
METHOD load_by_handle.
DATA lt_db TYPE STANDARD TABLE OF z2ui5_t_91 WITH EMPTY KEY.
DATA lt_db TYPE STANDARD TABLE OF z2ui5_t_91 WITH DEFAULT KEY.
DATA ls_db LIKE LINE OF lt_db.
DATA temp1 LIKE LINE OF lt_db.
DATA temp2 LIKE sy-tabix.
SELECT data
FROM z2ui5_t_91
FROM z2ui5_t_91 INTO CORRESPONDING FIELDS OF TABLE lt_db
WHERE
uname = @uname
AND handle = @handle
AND handle2 = @handle2
AND handle3 = @handle3
INTO CORRESPONDING FIELDS OF TABLE @lt_db.
uname = uname
AND handle = handle
AND handle2 = handle2
AND handle3 = handle3
.
IF sy-subrc <> 0.
RAISE EXCEPTION TYPE z2ui5_cx_util_error
EXPORTING
val = `No entry for handle exists`.
ENDIF.
DATA(ls_db) = lt_db[ 1 ].
temp2 = sy-tabix.
READ TABLE lt_db INDEX 1 INTO temp1.
sy-tabix = temp2.
IF sy-subrc <> 0.
ASSERT 1 = 0.
ENDIF.
ls_db = temp1.
z2ui5_cl_util=>xml_parse(
EXPORTING
@ -96,15 +108,27 @@ CLASS z2ui5_cl_util_db IMPLEMENTATION.
METHOD load_by_id.
DATA lt_db TYPE STANDARD TABLE OF z2ui5_t_91 WITH EMPTY KEY.
DATA lt_db TYPE STANDARD TABLE OF z2ui5_t_91 WITH DEFAULT KEY.
DATA ls_db LIKE LINE OF lt_db.
DATA temp3 LIKE LINE OF lt_db.
DATA temp4 LIKE sy-tabix.
SELECT data
FROM z2ui5_t_91
WHERE id = @id
INTO CORRESPONDING FIELDS OF TABLE @lt_db.
FROM z2ui5_t_91 INTO CORRESPONDING FIELDS OF TABLE lt_db
WHERE id = id
.
ASSERT sy-subrc = 0.
DATA(ls_db) = lt_db[ 1 ].
temp4 = sy-tabix.
READ TABLE lt_db INDEX 1 INTO temp3.
sy-tabix = temp4.
IF sy-subrc <> 0.
ASSERT 1 = 0.
ENDIF.
ls_db = temp3.
z2ui5_cl_util=>xml_parse(
EXPORTING
@ -117,30 +141,45 @@ CLASS z2ui5_cl_util_db IMPLEMENTATION.
METHOD save.
DATA lt_db TYPE STANDARD TABLE OF z2ui5_t_91 WITH EMPTY KEY.
DATA lt_db TYPE STANDARD TABLE OF z2ui5_t_91 WITH DEFAULT KEY.
DATA temp1 TYPE z2ui5_t_91.
DATA ls_db LIKE temp1.
DATA temp2 LIKE LINE OF lt_db.
DATA temp3 LIKE sy-tabix.
SELECT id
FROM z2ui5_t_91
FROM z2ui5_t_91 INTO CORRESPONDING FIELDS OF TABLE lt_db
WHERE
uname = @uname
AND handle = @handle
AND handle2 = @handle2
AND handle3 = @handle3
INTO CORRESPONDING FIELDS OF TABLE @lt_db ##SUBRC_OK.
DATA(ls_db) = VALUE z2ui5_t_91(
uname = uname
handle = handle
handle2 = handle2
handle3 = handle3
data = z2ui5_cl_util=>xml_stringify( data ) ).
AND handle = handle
AND handle2 = handle2
AND handle3 = handle3
##SUBRC_OK.
CLEAR temp1.
temp1-uname = uname.
temp1-handle = handle.
temp1-handle2 = handle2.
temp1-handle3 = handle3.
temp1-data = z2ui5_cl_util=>xml_stringify( data ).
ls_db = temp1.
TRY.
ls_db-id = lt_db[ 1 ]-id.
temp3 = sy-tabix.
READ TABLE lt_db INDEX 1 INTO temp2.
sy-tabix = temp3.
IF sy-subrc <> 0.
ASSERT 1 = 0.
ENDIF.
ls_db-id = temp2-id.
CATCH cx_root.
ls_db-id = z2ui5_cl_util=>uuid_get_c32( ).
ENDTRY.
MODIFY z2ui5_t_91 FROM @ls_db.
MODIFY z2ui5_t_91 FROM ls_db.
ASSERT sy-subrc = 0.
IF check_commit = abap_true.

View File

@ -19,14 +19,38 @@ CLASS z2ui5_cl_util_msg IMPLEMENTATION.
METHOD msg_get.
DATA(lv_kind) = z2ui5_cl_util=>rtti_get_type_kind( val ).
DATA lv_kind TYPE string.
FIELD-SYMBOLS <tab> TYPE ANY TABLE.
FIELD-SYMBOLS <row> TYPE ANY.
DATA lt_tab TYPE z2ui5_cl_util=>ty_t_msg.
DATA lt_attri TYPE abap_component_tab.
DATA temp1 TYPE z2ui5_cl_util=>ty_s_msg.
DATA ls_result LIKE temp1.
DATA temp2 LIKE LINE OF lt_attri.
DATA ls_attri LIKE REF TO temp2.
DATA lv_name TYPE string.
FIELD-SYMBOLS <comp> TYPE any.
DATA temp3 TYPE REF TO cx_root.
DATA lx LIKE temp3.
DATA lt_attri_o TYPE abap_attrdescr_tab.
DATA temp4 LIKE LINE OF lt_attri_o.
DATA ls_attri_o LIKE REF TO temp4.
DATA obj TYPE REF TO object.
DATA lr_tab TYPE REF TO data.
FIELD-SYMBOLS <tab2> TYPE data.
DATA lt_tab2 TYPE z2ui5_cl_util=>ty_t_msg.
DATA lx2 TYPE REF TO cx_root.
DATA temp5 TYPE z2ui5_cl_util=>ty_s_msg.
lv_kind = z2ui5_cl_util=>rtti_get_type_kind( val ).
CASE lv_kind.
WHEN cl_abap_datadescr=>typekind_table.
FIELD-SYMBOLS <tab> TYPE ANY TABLE.
ASSIGN val TO <tab>.
LOOP AT <tab> ASSIGNING FIELD-SYMBOL(<row>).
DATA(lt_tab) = msg_get( <row> ).
LOOP AT <tab> ASSIGNING <row>.
lt_tab = msg_get( <row> ).
INSERT LINES OF lt_tab INTO TABLE result.
ENDLOOP.
@ -36,12 +60,20 @@ CLASS z2ui5_cl_util_msg IMPLEMENTATION.
RETURN.
ENDIF.
DATA(lt_attri) = z2ui5_cl_util=>rtti_get_t_attri_by_any( val ).
DATA(ls_result) = VALUE z2ui5_cl_util=>ty_s_msg( ).
LOOP AT lt_attri REFERENCE INTO DATA(ls_attri).
DATA(lv_name) = |VAL-{ ls_attri->name }|.
ASSIGN (lv_name) TO FIELD-SYMBOL(<comp>).
lt_attri = z2ui5_cl_util=>rtti_get_t_attri_by_any( val ).
CLEAR temp1.
ls_result = temp1.
LOOP AT lt_attri REFERENCE INTO ls_attri.
lv_name = |VAL-{ ls_attri->name }|.
ASSIGN (lv_name) TO <comp>.
IF ls_attri->name = 'ITEM'.
lt_tab = msg_get( <comp> ).
@ -61,10 +93,18 @@ CLASS z2ui5_cl_util_msg IMPLEMENTATION.
WHEN cl_abap_datadescr=>typekind_oref.
TRY.
DATA(lx) = CAST cx_root( val ).
ls_result = VALUE #( type = 'E' text = lx->get_text( ) ).
DATA(lt_attri_o) = z2ui5_cl_util=>rtti_get_t_attri_by_oref( val ).
LOOP AT lt_attri_o REFERENCE INTO DATA(ls_attri_o)
temp3 ?= val.
lx = temp3.
CLEAR ls_result.
ls_result-type = 'E'.
ls_result-text = lx->get_text( ).
lt_attri_o = z2ui5_cl_util=>rtti_get_t_attri_by_oref( val ).
LOOP AT lt_attri_o REFERENCE INTO ls_attri_o
WHERE visibility = 'U'.
lv_name = |VAL->{ ls_attri_o->name }|.
ASSIGN (lv_name) TO <comp>.
@ -73,20 +113,22 @@ CLASS z2ui5_cl_util_msg IMPLEMENTATION.
INSERT ls_result INTO TABLE result.
CATCH cx_root.
DATA obj TYPE REF TO object.
obj = val.
TRY.
DATA lr_tab TYPE REF TO data.
CREATE DATA lr_tab TYPE ('if_bali_log=>ty_item_table').
ASSIGN lr_tab->* TO FIELD-SYMBOL(<tab2>).
ASSIGN lr_tab->* TO <tab2>.
CALL METHOD obj->(`IF_BALI_LOG~GET_ALL_ITEMS`)
RECEIVING
item_table = <tab2>.
DATA(lt_tab2) = msg_get( <tab2> ).
lt_tab2 = msg_get( <tab2> ).
INSERT LINES OF lt_tab2 INTO TABLE result.
CATCH cx_root.
@ -103,7 +145,8 @@ CLASS z2ui5_cl_util_msg IMPLEMENTATION.
lt_tab2 = msg_get( <tab2> ).
INSERT LINES OF lt_tab2 INTO TABLE result.
CATCH cx_root INTO DATA(lx2).
CATCH cx_root INTO lx2.
lt_attri_o = z2ui5_cl_util=>rtti_get_t_attri_by_oref( val ).
@ -121,9 +164,11 @@ CLASS z2ui5_cl_util_msg IMPLEMENTATION.
WHEN OTHERS.
IF z2ui5_cl_util=>rtti_check_clike( val ).
INSERT VALUE #( text = val
)
IF z2ui5_cl_util=>rtti_check_clike( val ) IS NOT INITIAL.
CLEAR temp5.
temp5-text = val.
INSERT temp5
INTO TABLE result.
ENDIF.
ENDCASE.

View File

@ -16,81 +16,230 @@ ENDCLASS.
CLASS ltcl_unit_test_msg_mapper IMPLEMENTATION.
METHOD test_sy.
DATA lv_dummy TYPE string.
DATA lt_result TYPE z2ui5_cl_util=>ty_t_msg.
DATA temp6 LIKE LINE OF lt_result.
DATA temp7 LIKE sy-tabix.
DATA temp8 LIKE LINE OF lt_result.
DATA temp9 LIKE sy-tabix.
DATA temp10 LIKE LINE OF lt_result.
DATA temp11 LIKE sy-tabix.
IF sy-sysid = 'ABC'.
RETURN.
ENDIF.
MESSAGE ID 'NET' TYPE 'I' NUMBER '001' INTO DATA(lv_dummy).
DATA(lt_result) = z2ui5_cl_util_msg=>msg_get( sy ).
MESSAGE ID 'NET' TYPE 'I' NUMBER '001' INTO lv_dummy.
lt_result = z2ui5_cl_util_msg=>msg_get( sy ).
temp7 = sy-tabix.
READ TABLE lt_result INDEX 1 INTO temp6.
sy-tabix = temp7.
IF sy-subrc <> 0.
ASSERT 1 = 0.
ENDIF.
cl_abap_unit_assert=>assert_equals( exp = `NET`
act = lt_result[ 1 ]-id ).
act = temp6-id ).
temp9 = sy-tabix.
READ TABLE lt_result INDEX 1 INTO temp8.
sy-tabix = temp9.
IF sy-subrc <> 0.
ASSERT 1 = 0.
ENDIF.
cl_abap_unit_assert=>assert_equals( exp = `001`
act = lt_result[ 1 ]-no ).
act = temp8-no ).
temp11 = sy-tabix.
READ TABLE lt_result INDEX 1 INTO temp10.
sy-tabix = temp11.
IF sy-subrc <> 0.
ASSERT 1 = 0.
ENDIF.
cl_abap_unit_assert=>assert_equals( exp = `I`
act = lt_result[ 1 ]-type ).
act = temp10-type ).
ENDMETHOD.
METHOD test_bapiret.
DATA temp12 TYPE bapirettab.
DATA temp13 LIKE LINE OF temp12.
DATA lt_msg LIKE temp12.
DATA lt_result TYPE z2ui5_cl_util=>ty_t_msg.
DATA temp1 LIKE LINE OF lt_msg.
DATA temp2 LIKE sy-tabix.
DATA temp14 LIKE LINE OF lt_result.
DATA temp15 LIKE sy-tabix.
DATA temp16 LIKE LINE OF lt_result.
DATA temp17 LIKE sy-tabix.
DATA temp18 LIKE LINE OF lt_result.
DATA temp19 LIKE sy-tabix.
IF sy-sysid = 'ABC'.
RETURN.
ENDIF.
DATA(lt_msg) = VALUE bapirettab(
( type = 'E' id = 'MSG1' number = '001' message = 'An empty Report field causes an empty XML Message to be sent' )
).
DATA(lt_result) = z2ui5_cl_util_msg=>msg_get( lt_msg[ 1 ] ).
CLEAR temp12.
temp13-type = 'E'.
temp13-id = 'MSG1'.
temp13-number = '001'.
temp13-message = 'An empty Report field causes an empty XML Message to be sent'.
INSERT temp13 INTO TABLE temp12.
lt_msg = temp12.
temp2 = sy-tabix.
READ TABLE lt_msg INDEX 1 INTO temp1.
sy-tabix = temp2.
IF sy-subrc <> 0.
ASSERT 1 = 0.
ENDIF.
lt_result = z2ui5_cl_util_msg=>msg_get( temp1 ).
temp15 = sy-tabix.
READ TABLE lt_result INDEX 1 INTO temp14.
sy-tabix = temp15.
IF sy-subrc <> 0.
ASSERT 1 = 0.
ENDIF.
cl_abap_unit_assert=>assert_equals( exp = `MSG1`
act = lt_result[ 1 ]-id ).
act = temp14-id ).
temp17 = sy-tabix.
READ TABLE lt_result INDEX 1 INTO temp16.
sy-tabix = temp17.
IF sy-subrc <> 0.
ASSERT 1 = 0.
ENDIF.
cl_abap_unit_assert=>assert_equals( exp = `001`
act = lt_result[ 1 ]-no ).
act = temp16-no ).
temp19 = sy-tabix.
READ TABLE lt_result INDEX 1 INTO temp18.
sy-tabix = temp19.
IF sy-subrc <> 0.
ASSERT 1 = 0.
ENDIF.
cl_abap_unit_assert=>assert_equals( exp = `E`
act = lt_result[ 1 ]-type ).
act = temp18-type ).
ENDMETHOD.
METHOD test_bapirettab.
DATA temp20 TYPE bapirettab.
DATA temp21 LIKE LINE OF temp20.
DATA lt_msg LIKE temp20.
DATA lt_result TYPE z2ui5_cl_util=>ty_t_msg.
DATA temp22 LIKE LINE OF lt_result.
DATA temp23 LIKE sy-tabix.
DATA temp24 LIKE LINE OF lt_result.
DATA temp25 LIKE sy-tabix.
DATA temp26 LIKE LINE OF lt_result.
DATA temp27 LIKE sy-tabix.
IF sy-sysid = 'ABC'.
RETURN.
ENDIF.
DATA(lt_msg) = VALUE bapirettab(
( type = 'E' id = 'MSG1' number = '001' message = 'An empty Report field causes an empty XML Message to be sent' )
( type = 'I' id = 'MSG2' number = '002' message = 'Product already in use' ) ).
DATA(lt_result) = z2ui5_cl_util_msg=>msg_get( lt_msg ).
CLEAR temp20.
temp21-type = 'E'.
temp21-id = 'MSG1'.
temp21-number = '001'.
temp21-message = 'An empty Report field causes an empty XML Message to be sent'.
INSERT temp21 INTO TABLE temp20.
temp21-type = 'I'.
temp21-id = 'MSG2'.
temp21-number = '002'.
temp21-message = 'Product already in use'.
INSERT temp21 INTO TABLE temp20.
lt_msg = temp20.
lt_result = z2ui5_cl_util_msg=>msg_get( lt_msg ).
temp23 = sy-tabix.
READ TABLE lt_result INDEX 1 INTO temp22.
sy-tabix = temp23.
IF sy-subrc <> 0.
ASSERT 1 = 0.
ENDIF.
cl_abap_unit_assert=>assert_equals( exp = `MSG1`
act = lt_result[ 1 ]-id ).
act = temp22-id ).
temp25 = sy-tabix.
READ TABLE lt_result INDEX 1 INTO temp24.
sy-tabix = temp25.
IF sy-subrc <> 0.
ASSERT 1 = 0.
ENDIF.
cl_abap_unit_assert=>assert_equals( exp = `001`
act = lt_result[ 1 ]-no ).
act = temp24-no ).
temp27 = sy-tabix.
READ TABLE lt_result INDEX 1 INTO temp26.
sy-tabix = temp27.
IF sy-subrc <> 0.
ASSERT 1 = 0.
ENDIF.
cl_abap_unit_assert=>assert_equals( exp = `E`
act = lt_result[ 1 ]-type ).
act = temp26-type ).
ENDMETHOD.
METHOD test_cx.
DATA lv_val TYPE i.
DATA lx TYPE REF TO cx_root.
DATA lt_result TYPE z2ui5_cl_util=>ty_t_msg.
DATA temp28 LIKE LINE OF lt_result.
DATA temp29 LIKE sy-tabix.
TRY.
DATA(lv_val) = 1 / 0.
CATCH cx_root INTO DATA(lx).
DATA(lt_result) = z2ui5_cl_util_msg=>msg_get( lx ).
lv_val = 1 / 0.
CATCH cx_root INTO lx.
lt_result = z2ui5_cl_util_msg=>msg_get( lx ).
ENDTRY.
temp29 = sy-tabix.
READ TABLE lt_result INDEX 1 INTO temp28.
sy-tabix = temp29.
IF sy-subrc <> 0.
ASSERT 1 = 0.
ENDIF.
cl_abap_unit_assert=>assert_equals( exp = `E`
act = lt_result[ 1 ]-type ).
act = temp28-type ).
ENDMETHOD.

View File

@ -49,21 +49,34 @@ CLASS z2ui5_cl_util_range IMPLEMENTATION.
FIELD-SYMBOLS <lt_range> TYPE STANDARD TABLE.
DATA temp1 TYPE xsdboolean.
FIELD-SYMBOLS <ls_range_item> TYPE ANY.
FIELD-SYMBOLS <lv_sign> TYPE any.
FIELD-SYMBOLS <lv_option> TYPE any.
FIELD-SYMBOLS <lv_low> TYPE any.
FIELD-SYMBOLS <lv_high> TYPE any.
ASSIGN me->mr_range->* TO <lt_range>.
IF xsdbool( <lt_range> IS INITIAL ) = abap_true.
temp1 = boolc( <lt_range> IS INITIAL ).
IF temp1 = abap_true.
RETURN.
ENDIF.
result = `(`.
LOOP AT <lt_range> ASSIGNING FIELD-SYMBOL(<ls_range_item>).
ASSIGN COMPONENT 'SIGN' OF STRUCTURE <ls_range_item> TO FIELD-SYMBOL(<lv_sign>).
ASSIGN COMPONENT 'OPTION' OF STRUCTURE <ls_range_item> TO FIELD-SYMBOL(<lv_option>).
ASSIGN COMPONENT 'LOW' OF STRUCTURE <ls_range_item> TO FIELD-SYMBOL(<lv_low>).
ASSIGN COMPONENT 'HIGH' OF STRUCTURE <ls_range_item> TO FIELD-SYMBOL(<lv_high>).
LOOP AT <lt_range> ASSIGNING <ls_range_item>.
ASSIGN COMPONENT 'SIGN' OF STRUCTURE <ls_range_item> TO <lv_sign>.
ASSIGN COMPONENT 'OPTION' OF STRUCTURE <ls_range_item> TO <lv_option>.
ASSIGN COMPONENT 'LOW' OF STRUCTURE <ls_range_item> TO <lv_low>.
ASSIGN COMPONENT 'HIGH' OF STRUCTURE <ls_range_item> TO <lv_high>.
IF sy-tabix <> 1.
result = |{ result } OR|.

View File

@ -42,16 +42,25 @@ CLASS z2ui5_cx_util_error IMPLEMENTATION.
ENDMETHOD.
METHOD if_message~get_text.
DATA error LIKE abap_true.
DATA temp1 TYPE string.
IF ms_error-x_root IS NOT INITIAL.
result = ms_error-x_root->get_text( ).
DATA(error) = abap_true.
error = abap_true.
ELSEIF ms_error-text IS NOT INITIAL.
result = ms_error-text.
error = abap_true.
ENDIF.
result = COND #( WHEN error = abap_true AND result IS INITIAL THEN `unknown error` ELSE result ).
IF error = abap_true AND result IS INITIAL.
temp1 = `unknown error`.
ELSE.
temp1 = result.
ENDIF.
result = temp1.
ENDMETHOD.
ENDCLASS.

View File

@ -8,13 +8,15 @@ ENDCLASS.
CLASS ltcl_unit_test IMPLEMENTATION.
METHOD test_raise.
DATA lx TYPE REF TO z2ui5_cx_util_error.
TRY.
RAISE EXCEPTION TYPE z2ui5_cx_util_error
EXPORTING val = `this is an error text`.
CATCH z2ui5_cx_util_error INTO DATA(lx).
CATCH z2ui5_cx_util_error INTO lx.
cl_abap_unit_assert=>assert_equals( exp = `this is an error text`
act = lx->get_text( ) ).
ENDTRY.

View File

@ -44,26 +44,33 @@ CLASS z2ui5_cl_core_srv_draft IMPLEMENTATION.
METHOD cleanup.
DATA(lv_four_hours_ago) = z2ui5_cl_util=>time_substract_seconds( time = z2ui5_cl_util=>time_get_timestampl( )
DATA lv_four_hours_ago TYPE timestampl.
lv_four_hours_ago = z2ui5_cl_util=>time_substract_seconds( time = z2ui5_cl_util=>time_get_timestampl( )
seconds = 60 * 60 * 4 ).
DELETE FROM z2ui5_t_01 WHERE timestampl < @lv_four_hours_ago.
DELETE FROM z2ui5_t_01 WHERE timestampl < lv_four_hours_ago.
COMMIT WORK.
ENDMETHOD.
METHOD create.
DATA temp1 TYPE ty_s_db.
DATA ls_db LIKE temp1.
ASSERT draft-id IS NOT INITIAL.
DATA(ls_db) = VALUE ty_s_db( id = draft-id
id_prev = draft-id_prev
id_prev_app = draft-id_prev_app
id_prev_app_stack = draft-id_prev_app_stack
timestampl = z2ui5_cl_util=>time_get_timestampl( )
data = model_xml ).
MODIFY z2ui5_t_01 FROM @ls_db.
CLEAR temp1.
temp1-id = draft-id.
temp1-id_prev = draft-id_prev.
temp1-id_prev_app = draft-id_prev_app.
temp1-id_prev_app_stack = draft-id_prev_app_stack.
temp1-timestampl = z2ui5_cl_util=>time_get_timestampl( ).
temp1-data = model_xml.
ls_db = temp1.
MODIFY z2ui5_t_01 FROM ls_db.
IF sy-subrc <> 0.
RAISE EXCEPTION TYPE z2ui5_cx_util_error
EXPORTING val = `CREATE_OF_DRAFT_ENTRY_ON_DATABASE_FAILED`.
@ -76,16 +83,16 @@ CLASS z2ui5_cl_core_srv_draft IMPLEMENTATION.
IF check_load_app = abap_true.
SELECT SINGLE * FROM z2ui5_t_01
WHERE id = @id
INTO @result ##SUBRC_OK.
SELECT SINGLE * FROM z2ui5_t_01 INTO result
WHERE id = id
##SUBRC_OK.
ELSE.
SELECT SINGLE id, id_prev, id_prev_app, id_prev_app_stack
FROM z2ui5_t_01
WHERE id = @id
INTO CORRESPONDING FIELDS OF @result ##SUBRC_OK.
SELECT SINGLE id id_prev id_prev_app id_prev_app_stack
FROM z2ui5_t_01 INTO CORRESPONDING FIELDS OF result
WHERE id = id
##SUBRC_OK.
ENDIF.
@ -104,17 +111,18 @@ CLASS z2ui5_cl_core_srv_draft IMPLEMENTATION.
METHOD read_info.
DATA(ls_db) = read( id = id
DATA ls_db TYPE z2ui5_t_01.
ls_db = read( id = id
check_load_app = abap_false ).
result = CORRESPONDING #( ls_db ).
MOVE-CORRESPONDING ls_db TO result.
ENDMETHOD.
METHOD count_entries.
SELECT COUNT( * ) FROM z2ui5_t_01
INTO @result.
INTO result.
ENDMETHOD.

View File

@ -19,13 +19,20 @@ CLASS ltcl_test IMPLEMENTATION.
METHOD test_create.
DATA(lo_draft) = NEW z2ui5_cl_core_srv_draft( ).
DATA lo_draft TYPE REF TO z2ui5_cl_core_srv_draft.
DATA temp2 TYPE z2ui5_if_types=>ty_s_draft.
DATA ls_db TYPE z2ui5_t_01.
CREATE OBJECT lo_draft TYPE z2ui5_cl_core_srv_draft.
lo_draft->create( draft = VALUE #( id = `TEST_ID` )
CLEAR temp2.
temp2-id = `TEST_ID`.
lo_draft->create( draft = temp2
model_xml = `my xml`
).
DATA(ls_db) = lo_draft->read_draft( `TEST_ID` ).
ls_db = lo_draft->read_draft( `TEST_ID` ).
cl_abap_unit_assert=>assert_equals( exp = `my xml`
act = ls_db-data ).

View File

@ -49,13 +49,13 @@ CLASS z2ui5_cl_core_action IMPLEMENTATION.
METHOD constructor.
mo_http_post = val.
mo_app = NEW #( ).
CREATE OBJECT mo_app.
ENDMETHOD.
METHOD factory_by_frontend.
result = NEW #( mo_http_post ).
CREATE OBJECT result EXPORTING VAL = mo_http_post.
IF mo_http_post->mo_action->mo_app->mo_app IS BOUND.
result->mo_app = mo_http_post->mo_action->mo_app.
@ -77,14 +77,19 @@ CLASS z2ui5_cl_core_action IMPLEMENTATION.
ENDMETHOD.
METHOD factory_first_start.
DATA lo_app TYPE REF TO z2ui5_cl_core_app.
DATA temp1 TYPE REF TO z2ui5_if_app.
DATA li_app LIKE temp1.
DATA x TYPE REF TO cx_root.
TRY.
result = NEW #( mo_http_post ).
CREATE OBJECT result EXPORTING VAL = mo_http_post.
IF mo_http_post->ms_request-s_control-app_start_draft IS NOT INITIAL.
TRY.
DATA(lo_app) = z2ui5_cl_core_app=>db_load( mo_http_post->ms_request-s_control-app_start_draft ).
lo_app = z2ui5_cl_core_app=>db_load( mo_http_post->ms_request-s_control-app_start_draft ).
result->mo_app = lo_app.
result->ms_actual-check_on_navigated = abap_true.
result->ms_next-s_set-set_app_state_active = abap_true.
@ -99,12 +104,16 @@ CLASS z2ui5_cl_core_action IMPLEMENTATION.
CREATE OBJECT result->mo_app->mo_app TYPE (mo_http_post->ms_request-s_control-app_start).
DATA(li_app) = CAST z2ui5_if_app( result->mo_app->mo_app ).
temp1 ?= result->mo_app->mo_app.
li_app = temp1.
li_app->id_draft = result->mo_app->ms_draft-id.
result->ms_actual-check_on_navigated = abap_true.
CATCH cx_root INTO DATA(x).
CATCH cx_root INTO x.
RAISE EXCEPTION TYPE z2ui5_cx_util_error
EXPORTING
val = |App with name { mo_http_post->ms_request-s_control-app_start } not found...|
@ -121,13 +130,17 @@ CLASS z2ui5_cl_core_action IMPLEMENTATION.
ENDMETHOD.
METHOD factory_stack_leave.
DATA lo_draft TYPE REF TO z2ui5_cl_core_srv_draft.
DATA ls_draft TYPE z2ui5_if_types=>ty_s_draft.
result = prepare_app_stack( ms_next-o_app_leave ).
" check for new app?
TRY.
DATA(lo_draft) = NEW z2ui5_cl_core_srv_draft( ).
DATA(ls_draft) = lo_draft->read_info( ms_next-o_app_leave->id_draft ).
CREATE OBJECT lo_draft TYPE z2ui5_cl_core_srv_draft.
ls_draft = lo_draft->read_info( ms_next-o_app_leave->id_draft ).
CATCH cx_root.
result->mo_app->ms_draft-id_prev_app_stack = mo_app->ms_draft-id_prev_app_stack.
RETURN.
@ -142,27 +155,41 @@ CLASS z2ui5_cl_core_action IMPLEMENTATION.
ENDMETHOD.
METHOD factory_system_startup.
DATA temp2 TYPE REF TO z2ui5_if_app.
DATA li_app LIKE temp2.
result = NEW #( mo_http_post ).
CREATE OBJECT result EXPORTING VAL = mo_http_post.
result->mo_app->ms_draft-id = z2ui5_cl_util=>uuid_get_c32( ).
result->ms_actual-check_on_navigated = abap_true.
result->mo_app->mo_app = z2ui5_cl_app_startup=>factory( ).
DATA(li_app) = CAST z2ui5_if_app( result->mo_app->mo_app ).
temp2 ?= result->mo_app->mo_app.
li_app = temp2.
li_app->id_draft = result->mo_app->ms_draft-id.
ENDMETHOD.
METHOD prepare_app_stack.
DATA temp3 TYPE string.
DATA lv_action TYPE string.
DATA temp1 LIKE LINE OF ms_next-s_set-s_follow_up_action-custom_js.
DATA temp2 LIKE sy-tabix.
DATA lv_dummy TYPE string.
mo_app->db_save( ).
val->id_draft = COND string( WHEN val->id_draft IS INITIAL
THEN z2ui5_cl_util=>uuid_get_c32( )
ELSE ms_next-o_app_leave->id_draft ).
result = NEW #( mo_http_post ).
IF val->id_draft IS INITIAL.
temp3 = z2ui5_cl_util=>uuid_get_c32( ).
ELSE.
temp3 = ms_next-o_app_leave->id_draft.
ENDIF.
val->id_draft = temp3.
CREATE OBJECT result EXPORTING VAL = mo_http_post.
TRY.
result->mo_app = z2ui5_cl_core_app=>db_load_by_app( val ).
CATCH cx_root.
@ -182,8 +209,18 @@ CLASS z2ui5_cl_core_action IMPLEMENTATION.
result->ms_next-s_set-s_popover-check_update_model = abap_false.
IF ms_next-s_set-s_follow_up_action IS NOT INITIAL.
DATA(lv_action) = ms_next-s_set-s_follow_up_action-custom_js[ 1 ].
SPLIT lv_action AT `.eB(['` INTO DATA(lv_dummy)
temp2 = sy-tabix.
READ TABLE ms_next-s_set-s_follow_up_action-custom_js INDEX 1 INTO temp1.
sy-tabix = temp2.
IF sy-subrc <> 0.
ASSERT 1 = 0.
ENDIF.
lv_action = temp1.
SPLIT lv_action AT `.eB(['` INTO lv_dummy
result->ms_actual-event.
SPLIT result->ms_actual-event AT `']` INTO result->ms_actual-event lv_dummy.
ENDIF.

View File

@ -10,8 +10,11 @@ CLASS z2ui5_cl_core_action DEFINITION LOCAL FRIENDS ltcl_test.
CLASS ltcl_test IMPLEMENTATION.
METHOD first_test.
DATA(lo_http) = NEW z2ui5_cl_core_handler( `` ).
DATA(lo_action) = NEW z2ui5_cl_core_action( lo_http ) ##NEEDED.
DATA lo_http TYPE REF TO z2ui5_cl_core_handler.
DATA lo_action TYPE REF TO z2ui5_cl_core_action.
CREATE OBJECT lo_http TYPE z2ui5_cl_core_handler EXPORTING VAL = ``.
CREATE OBJECT lo_action TYPE z2ui5_cl_core_action EXPORTING VAL = lo_http.
ENDMETHOD.
ENDCLASS.

View File

@ -60,33 +60,38 @@ CLASS z2ui5_cl_core_app IMPLEMENTATION.
ENDMETHOD.
METHOD all_xml_stringify.
DATA lo_model TYPE REF TO z2ui5_cl_core_srv_attri.
DATA x2 TYPE REF TO cx_root.
DATA lo_dissolver TYPE REF TO z2ui5_cl_core_srv_diss.
DATA cx TYPE REF TO cx_root.
TRY.
DATA(lo_model) = NEW z2ui5_cl_core_srv_attri( attri = mt_attri
app = mo_app ).
CREATE OBJECT lo_model TYPE z2ui5_cl_core_srv_attri EXPORTING attri = mt_attri app = mo_app.
lo_model->attri_before_save( ).
result = z2ui5_cl_util=>xml_stringify( me ).
CATCH cx_root INTO DATA(x2).
CATCH cx_root INTO x2.
TRY.
lo_model->attri_refs_update( ).
CLEAR mt_attri->*.
DATA(lo_dissolver) = NEW z2ui5_cl_core_srv_diss( attri = mt_attri
app = mo_app ).
CREATE OBJECT lo_dissolver TYPE z2ui5_cl_core_srv_diss EXPORTING attri = mt_attri app = mo_app.
lo_dissolver->main( ).
lo_dissolver->main( ).
lo_model = NEW z2ui5_cl_core_srv_attri( attri = mt_attri
app = mo_app ).
CREATE OBJECT lo_model TYPE z2ui5_cl_core_srv_attri EXPORTING attri = mt_attri app = mo_app.
lo_model->attri_before_save( ).
result = z2ui5_cl_util=>xml_stringify( me ).
CATCH cx_root INTO DATA(cx).
CATCH cx_root INTO cx.
RAISE EXCEPTION TYPE z2ui5_cx_util_error
EXPORTING
@ -105,12 +110,16 @@ CLASS z2ui5_cl_core_app IMPLEMENTATION.
METHOD db_load.
DATA(lo_db) = NEW z2ui5_cl_core_srv_draft( ).
DATA(ls_db) = lo_db->read_draft( id ).
DATA lo_db TYPE REF TO z2ui5_cl_core_srv_draft.
DATA ls_db TYPE z2ui5_t_01.
DATA lo_model TYPE REF TO z2ui5_cl_core_srv_attri.
CREATE OBJECT lo_db TYPE z2ui5_cl_core_srv_draft.
ls_db = lo_db->read_draft( id ).
result = all_xml_parse( ls_db-data ).
DATA(lo_model) = NEW z2ui5_cl_core_srv_attri( attri = result->mt_attri
app = result->mo_app ).
CREATE OBJECT lo_model TYPE z2ui5_cl_core_srv_attri EXPORTING attri = result->mt_attri app = result->mo_app.
lo_model->attri_after_load( ).
@ -118,27 +127,39 @@ CLASS z2ui5_cl_core_app IMPLEMENTATION.
METHOD db_load_by_app.
DATA(lo_db) = NEW z2ui5_cl_core_srv_draft( ).
DATA(ls_db) = lo_db->read_draft( app->id_draft ).
DATA lo_db TYPE REF TO z2ui5_cl_core_srv_draft.
DATA ls_db TYPE z2ui5_t_01.
DATA lo_model TYPE REF TO z2ui5_cl_core_srv_attri.
CREATE OBJECT lo_db TYPE z2ui5_cl_core_srv_draft.
ls_db = lo_db->read_draft( app->id_draft ).
result = all_xml_parse( ls_db-data ).
result->mo_app = app.
DATA(lo_model) = NEW z2ui5_cl_core_srv_attri( attri = result->mt_attri
app = result->mo_app ).
CREATE OBJECT lo_model TYPE z2ui5_cl_core_srv_attri EXPORTING attri = result->mt_attri app = result->mo_app.
lo_model->attri_refs_update( ).
ENDMETHOD.
METHOD db_save.
DATA temp1 TYPE REF TO z2ui5_if_app.
DATA temp2 TYPE REF TO z2ui5_if_app.
DATA lo_db TYPE REF TO z2ui5_cl_core_srv_draft.
IF mo_app IS BOUND.
CAST z2ui5_if_app( mo_app )->id_draft = ms_draft-id.
CAST z2ui5_if_app( mo_app )->check_initialized = abap_true.
temp1 ?= mo_app.
temp1->id_draft = ms_draft-id.
temp2 ?= mo_app.
temp2->check_initialized = abap_true.
ENDIF.
DATA(lo_db) = NEW z2ui5_cl_core_srv_draft( ).
CREATE OBJECT lo_db TYPE z2ui5_cl_core_srv_draft.
lo_db->create( draft = ms_draft
model_xml = all_xml_stringify( ) ).
@ -146,7 +167,8 @@ CLASS z2ui5_cl_core_app IMPLEMENTATION.
METHOD model_json_parse.
DATA(lo_json_mapper) = NEW z2ui5_cl_core_srv_json( ).
DATA lo_json_mapper TYPE REF TO z2ui5_cl_core_srv_json.
CREATE OBJECT lo_json_mapper TYPE z2ui5_cl_core_srv_json.
lo_json_mapper->model_front_to_back( view = iv_view
t_attri = mt_attri
model = io_model ).
@ -155,7 +177,8 @@ CLASS z2ui5_cl_core_app IMPLEMENTATION.
METHOD model_json_stringify.
DATA(lo_json_mapper) = NEW z2ui5_cl_core_srv_json( ).
DATA lo_json_mapper TYPE REF TO z2ui5_cl_core_srv_json.
CREATE OBJECT lo_json_mapper TYPE z2ui5_cl_core_srv_json.
result = lo_json_mapper->model_back_to_front( mt_attri ).
ENDMETHOD.

View File

@ -10,7 +10,8 @@ CLASS z2ui5_cl_core_app DEFINITION LOCAL FRIENDS ltcl_test.
CLASS ltcl_test IMPLEMENTATION.
METHOD first_test.
DATA(lo_action) = NEW z2ui5_cl_core_app( ) ##NEEDED.
DATA lo_action TYPE REF TO z2ui5_cl_core_app.
CREATE OBJECT lo_action TYPE z2ui5_cl_core_app.
ENDMETHOD.
ENDCLASS.
@ -41,22 +42,33 @@ CLASS ltcl_test_db IMPLEMENTATION.
ENDMETHOD.
METHOD test_db_save.
DATA lo_app_user TYPE REF TO ltcl_test_db.
DATA lo_app TYPE REF TO z2ui5_cl_core_app.
DATA lo_app_db TYPE REF TO z2ui5_cl_core_app.
DATA temp3 TYPE REF TO ltcl_test_db.
DATA lo_app_user_db LIKE temp3.
IF sy-sysid = 'ABC'.
RETURN.
ENDIF.
DATA(lo_app_user) = NEW ltcl_test_db( ).
CREATE OBJECT lo_app_user TYPE ltcl_test_db.
lo_app_user->mv_value = `my value`.
DATA(lo_app) = NEW z2ui5_cl_core_app( ).
CREATE OBJECT lo_app TYPE z2ui5_cl_core_app.
lo_app->ms_draft-id = `TEST_ID`.
lo_app->mo_app = lo_app_user.
lo_app->db_save( ).
DATA(lo_app_db) = z2ui5_cl_core_app=>db_load( `TEST_ID` ).
DATA(lo_app_user_db) = CAST ltcl_test_db( lo_app_db->mo_app ).
lo_app_db = z2ui5_cl_core_app=>db_load( `TEST_ID` ).
temp3 ?= lo_app_db->mo_app.
lo_app_user_db = temp3.
cl_abap_unit_assert=>assert_equals( exp = lo_app_user->mv_value
act = lo_app_user_db->mv_value ).

View File

@ -33,29 +33,37 @@ CLASS z2ui5_cl_core_client IMPLEMENTATION.
ENDMETHOD.
METHOD z2ui5_if_client~get.
DATA lo_params TYPE REF TO z2ui5_if_ajson.
DATA temp1 LIKE LINE OF lo_params->mt_json_tree.
DATA lr_comp LIKE REF TO temp1.
DATA temp2 TYPE z2ui5_if_types=>ty_s_name_value.
result = VALUE #( event = mo_action->ms_actual-event
check_launchpad_active = mo_action->mo_http_post->ms_request-s_control-check_launchpad
t_event_arg = mo_action->ms_actual-t_event_arg
s_draft = CORRESPONDING #( mo_action->mo_app->ms_draft )
check_on_navigated = mo_action->ms_actual-check_on_navigated
s_config = CORRESPONDING #( mo_action->mo_http_post->ms_request-s_front )
r_event_data = mo_action->ms_actual-r_data
).
CLEAR result.
result-event = mo_action->ms_actual-event.
result-check_launchpad_active = mo_action->mo_http_post->ms_request-s_control-check_launchpad.
result-t_event_arg = mo_action->ms_actual-t_event_arg.
MOVE-CORRESPONDING mo_action->mo_app->ms_draft TO result-s_draft.
result-check_on_navigated = mo_action->ms_actual-check_on_navigated.
MOVE-CORRESPONDING mo_action->mo_http_post->ms_request-s_front TO result-s_config.
result-r_event_data = mo_action->ms_actual-r_data.
TRY.
DATA(lo_params) = mo_action->mo_http_post->ms_request-s_front-o_comp_data->slice( `/startupParameters/` ).
lo_params = mo_action->mo_http_post->ms_request-s_front-o_comp_data->slice( `/startupParameters/` ).
IF lo_params IS NOT BOUND.
RETURN.
ENDIF.
LOOP AT lo_params->mt_json_tree
REFERENCE INTO DATA(lr_comp)
REFERENCE INTO lr_comp
WHERE name = `1`.
INSERT VALUE #( n = shift_left( val = shift_right( val = lr_comp->path
sub = `/` )
sub = `/` )
v = lr_comp->value ) INTO TABLE result-t_comp_params.
CLEAR temp2.
temp2-n = shift_left( val = shift_right( val = lr_comp->path sub = `/` ) sub = `/` ).
temp2-v = lr_comp->value.
INSERT temp2 INTO TABLE result-t_comp_params.
ENDLOOP.
CATCH cx_root.
ENDTRY.
@ -63,55 +71,153 @@ CLASS z2ui5_cl_core_client IMPLEMENTATION.
ENDMETHOD.
METHOD z2ui5_if_client~get_event_arg.
DATA temp3 LIKE LINE OF mo_action->ms_actual-t_event_arg.
DATA temp4 LIKE sy-tabix.
TRY.
result = mo_action->ms_actual-t_event_arg[ v ].
temp4 = sy-tabix.
READ TABLE mo_action->ms_actual-t_event_arg INDEX v INTO temp3.
sy-tabix = temp4.
IF sy-subrc <> 0.
ASSERT 1 = 0.
ENDIF.
result = temp3.
CATCH cx_root.
ENDTRY.
ENDMETHOD.
METHOD z2ui5_if_client~get_app.
DATA lo_app TYPE REF TO z2ui5_cl_core_app.
DATA temp5 TYPE REF TO z2ui5_if_app.
DATA temp6 TYPE REF TO z2ui5_if_app.
IF id IS NOT INITIAL.
DATA(lo_app) = z2ui5_cl_core_app=>db_load( id ).
result = CAST #( lo_app->mo_app ).
lo_app = z2ui5_cl_core_app=>db_load( id ).
temp5 ?= lo_app->mo_app.
result = temp5.
ELSE.
result = CAST #( mo_action->mo_app->mo_app ).
temp6 ?= mo_action->mo_app->mo_app.
result = temp6.
ENDIF.
ENDMETHOD.
METHOD z2ui5_if_client~message_box_display.
DATA lt_msg TYPE z2ui5_cl_util=>ty_t_msg.
DATA lv_text TYPE z2ui5_cl_util=>ty_s_msg-text.
DATA temp1 LIKE LINE OF lt_msg.
DATA temp2 LIKE sy-tabix.
DATA lv_type TYPE string.
DATA temp3 LIKE LINE OF lt_msg.
DATA temp4 LIKE sy-tabix.
DATA temp7 TYPE string.
DATA temp5 LIKE LINE OF lt_msg.
DATA temp6 LIKE sy-tabix.
DATA lv_title LIKE temp7.
DATA lv_details TYPE string.
DATA temp8 LIKE LINE OF lt_msg.
DATA lr_msg LIKE REF TO temp8.
DATA temp9 TYPE string.
DATA temp12 LIKE LINE OF lt_msg.
DATA temp13 LIKE sy-tabix.
DATA temp10 LIKE LINE OF lt_msg.
DATA temp11 LIKE sy-tabix.
IF z2ui5_cl_util=>rtti_check_clike( text ) = abap_false.
DATA(lt_msg) = z2ui5_cl_util=>msg_get_t( text ).
IF lines( lt_msg ) = 1.
DATA(lv_text) = lt_msg[ 1 ]-text.
DATA(lv_type) = z2ui5_cl_util=>ui5_get_msg_type( lt_msg[ 1 ]-type ).
lt_msg = z2ui5_cl_util=>msg_get_t( text ).
IF lines( lt_msg ) = 1.
temp2 = sy-tabix.
READ TABLE lt_msg INDEX 1 INTO temp1.
sy-tabix = temp2.
IF sy-subrc <> 0.
ASSERT 1 = 0.
ENDIF.
lv_text = temp1-text.
temp4 = sy-tabix.
READ TABLE lt_msg INDEX 1 INTO temp3.
sy-tabix = temp4.
IF sy-subrc <> 0.
ASSERT 1 = 0.
ENDIF.
lv_type = z2ui5_cl_util=>ui5_get_msg_type( temp3-type ).
lv_type = to_lower( lv_type ).
DATA(lv_title) = SWITCH #( lt_msg[ 1 ]-type
WHEN 'E' THEN `Error`
WHEN 'S' THEN `Success`
WHEN `W` THEN `Warning`
ELSE `Information` ).
temp6 = sy-tabix.
READ TABLE lt_msg INDEX 1 INTO temp5.
sy-tabix = temp6.
IF sy-subrc <> 0.
ASSERT 1 = 0.
ENDIF.
CASE temp5-type.
WHEN 'E'.
temp7 = `Error`.
WHEN 'S'.
temp7 = `Success`.
WHEN `W`.
temp7 = `Warning`.
WHEN OTHERS.
temp7 = `Information`.
ENDCASE.
lv_title = temp7.
ELSEIF lines( lt_msg ) > 1.
lv_text = | { lines( lt_msg ) } Messages found: |.
DATA(lv_details) = `<ul>`.
LOOP AT lt_msg REFERENCE INTO DATA(lr_msg).
lv_details = `<ul>`.
LOOP AT lt_msg REFERENCE INTO lr_msg.
lv_details = |{ lv_details }<li>{ lr_msg->text }</li>|.
ENDLOOP.
lv_details = |{ lv_details }</ul>|.
IF title IS INITIAL.
lv_title = SWITCH #( lt_msg[ 1 ]-type
WHEN 'E' THEN `Error`
WHEN 'S' THEN `Success`
WHEN `W` THEN `Warning`
ELSE `Information` ).
temp13 = sy-tabix.
READ TABLE lt_msg INDEX 1 INTO temp12.
sy-tabix = temp13.
IF sy-subrc <> 0.
ASSERT 1 = 0.
ENDIF.
lv_type = z2ui5_cl_util=>ui5_get_msg_type( lt_msg[ 1 ]-type ).
CASE temp12-type.
WHEN 'E'.
temp9 = `Error`.
WHEN 'S'.
temp9 = `Success`.
WHEN `W`.
temp9 = `Warning`.
WHEN OTHERS.
temp9 = `Information`.
ENDCASE.
lv_title = temp9.
ENDIF.
temp11 = sy-tabix.
READ TABLE lt_msg INDEX 1 INTO temp10.
sy-tabix = temp11.
IF sy-subrc <> 0.
ASSERT 1 = 0.
ENDIF.
lv_type = z2ui5_cl_util=>ui5_get_msg_type( temp10-type ).
ELSE.
RETURN.
ENDIF.
@ -133,39 +239,39 @@ CLASS z2ui5_cl_core_client IMPLEMENTATION.
lv_type = 'show'.
ENDIF.
mo_action->ms_next-s_set-s_msg_box = VALUE #( text = lv_text
type = lv_type
title = lv_title
styleclass = styleclass
onclose = onclose
actions = actions
emphasizedaction = emphasizedaction
initialfocus = initialfocus
textdirection = textdirection
icon = icon
details = lv_details
closeonnavigation = closeonnavigation
).
CLEAR mo_action->ms_next-s_set-s_msg_box.
mo_action->ms_next-s_set-s_msg_box-text = lv_text.
mo_action->ms_next-s_set-s_msg_box-type = lv_type.
mo_action->ms_next-s_set-s_msg_box-title = lv_title.
mo_action->ms_next-s_set-s_msg_box-styleclass = styleclass.
mo_action->ms_next-s_set-s_msg_box-onclose = onclose.
mo_action->ms_next-s_set-s_msg_box-actions = actions.
mo_action->ms_next-s_set-s_msg_box-emphasizedaction = emphasizedaction.
mo_action->ms_next-s_set-s_msg_box-initialfocus = initialfocus.
mo_action->ms_next-s_set-s_msg_box-textdirection = textdirection.
mo_action->ms_next-s_set-s_msg_box-icon = icon.
mo_action->ms_next-s_set-s_msg_box-details = lv_details.
mo_action->ms_next-s_set-s_msg_box-closeonnavigation = closeonnavigation.
ENDMETHOD.
METHOD z2ui5_if_client~message_toast_display.
mo_action->ms_next-s_set-s_msg_toast = VALUE #( text = text
duration = duration
width = width
my = my
at = at
of = of
offset = offset
collision = collision
onclose = onclose
autoclose = autoclose
animationtimingfunction = animationtimingfunction
animationduration = animationduration
closeonbrowsernavigation = closeonbrowsernavigation
class = class
).
CLEAR mo_action->ms_next-s_set-s_msg_toast.
mo_action->ms_next-s_set-s_msg_toast-text = text.
mo_action->ms_next-s_set-s_msg_toast-duration = duration.
mo_action->ms_next-s_set-s_msg_toast-width = width.
mo_action->ms_next-s_set-s_msg_toast-my = my.
mo_action->ms_next-s_set-s_msg_toast-at = at.
mo_action->ms_next-s_set-s_msg_toast-of = of.
mo_action->ms_next-s_set-s_msg_toast-offset = offset.
mo_action->ms_next-s_set-s_msg_toast-collision = collision.
mo_action->ms_next-s_set-s_msg_toast-onclose = onclose.
mo_action->ms_next-s_set-s_msg_toast-autoclose = autoclose.
mo_action->ms_next-s_set-s_msg_toast-animationtimingfunction = animationtimingfunction.
mo_action->ms_next-s_set-s_msg_toast-animationduration = animationduration.
mo_action->ms_next-s_set-s_msg_toast-closeonbrowsernavigation = closeonbrowsernavigation.
mo_action->ms_next-s_set-s_msg_toast-class = class.
ENDMETHOD.
@ -270,7 +376,8 @@ CLASS z2ui5_cl_core_client IMPLEMENTATION.
METHOD z2ui5_if_client~popup_destroy.
mo_action->ms_next-s_set-s_popup = VALUE #( check_destroy = abap_true ).
CLEAR mo_action->ms_next-s_set-s_popup.
mo_action->ms_next-s_set-s_popup-check_destroy = abap_true.
ENDMETHOD.
@ -309,49 +416,65 @@ CLASS z2ui5_cl_core_client IMPLEMENTATION.
METHOD z2ui5_if_client~_bind.
DATA(lo_bind) = NEW z2ui5_cl_core_srv_bind( mo_action->mo_app ).
DATA lo_bind TYPE REF TO z2ui5_cl_core_srv_bind.
DATA temp12 TYPE z2ui5_if_core_types=>ty_s_bind_config.
CREATE OBJECT lo_bind TYPE z2ui5_cl_core_srv_bind EXPORTING APP = mo_action->mo_app.
CLEAR temp12.
temp12-path_only = path.
temp12-custom_filter = custom_filter.
temp12-custom_mapper = custom_mapper.
temp12-tab = z2ui5_cl_util=>conv_get_as_data_ref( tab ).
temp12-tab_index = tab_index.
temp12-switch_default_model = switch_default_model.
result = lo_bind->main( val = z2ui5_cl_util=>conv_get_as_data_ref( val )
type = z2ui5_if_core_types=>cs_bind_type-one_way
config = VALUE #( path_only = path
custom_filter = custom_filter
custom_mapper = custom_mapper
tab = z2ui5_cl_util=>conv_get_as_data_ref( tab )
tab_index = tab_index
switch_default_model = switch_default_model ) ).
config = temp12 ).
ENDMETHOD.
METHOD z2ui5_if_client~_bind_edit.
DATA(lo_bind) = NEW z2ui5_cl_core_srv_bind( mo_action->mo_app ).
DATA lo_bind TYPE REF TO z2ui5_cl_core_srv_bind.
DATA temp13 TYPE z2ui5_if_core_types=>ty_s_bind_config.
CREATE OBJECT lo_bind TYPE z2ui5_cl_core_srv_bind EXPORTING APP = mo_action->mo_app.
CLEAR temp13.
temp13-path_only = path.
temp13-custom_filter = custom_filter.
temp13-custom_filter_back = custom_filter_back.
temp13-custom_mapper = custom_mapper.
temp13-custom_mapper_back = custom_mapper_back.
temp13-tab = z2ui5_cl_util=>conv_get_as_data_ref( tab ).
temp13-tab_index = tab_index.
temp13-switch_default_model = switch_default_model.
result = lo_bind->main( val = z2ui5_cl_util=>conv_get_as_data_ref( val )
type = z2ui5_if_core_types=>cs_bind_type-two_way
config = VALUE #( path_only = path
custom_filter = custom_filter
custom_filter_back = custom_filter_back
custom_mapper = custom_mapper
custom_mapper_back = custom_mapper_back
tab = z2ui5_cl_util=>conv_get_as_data_ref( tab )
tab_index = tab_index
switch_default_model = switch_default_model ) ).
config = temp13 ).
ENDMETHOD.
METHOD z2ui5_if_client~_bind_local.
DATA(lo_bind) = NEW z2ui5_cl_core_srv_bind( mo_action->mo_app ).
DATA lo_bind TYPE REF TO z2ui5_cl_core_srv_bind.
DATA temp14 TYPE z2ui5_if_core_types=>ty_s_bind_config.
CREATE OBJECT lo_bind TYPE z2ui5_cl_core_srv_bind EXPORTING APP = mo_action->mo_app.
CLEAR temp14.
temp14-path_only = path.
temp14-custom_mapper = custom_mapper.
temp14-custom_filter = custom_filter.
temp14-switch_default_model = switch_default_model.
result = lo_bind->main_local( val = val
config = VALUE #( path_only = path
custom_mapper = custom_mapper
custom_filter = custom_filter
switch_default_model = switch_default_model ) ).
config = temp14 ).
ENDMETHOD.
METHOD z2ui5_if_client~_event.
DATA(lo_ui5) = NEW z2ui5_cl_core_srv_event( ).
DATA lo_ui5 TYPE REF TO z2ui5_cl_core_srv_event.
CREATE OBJECT lo_ui5 TYPE z2ui5_cl_core_srv_event.
result = lo_ui5->get_event( val = val
t_arg = t_arg
s_cnt = s_ctrl ).
@ -365,7 +488,8 @@ CLASS z2ui5_cl_core_client IMPLEMENTATION.
METHOD z2ui5_if_client~_event_client.
DATA(lo_ui5) = NEW z2ui5_cl_core_srv_event( ).
DATA lo_ui5 TYPE REF TO z2ui5_cl_core_srv_event.
CREATE OBJECT lo_ui5 TYPE z2ui5_cl_core_srv_event.
result = lo_ui5->get_event_client( val = val
t_arg = t_arg ).
@ -392,7 +516,13 @@ CLASS z2ui5_cl_core_client IMPLEMENTATION.
METHOD z2ui5_if_client~set_session_stateful.
DATA(lv_check_sticky) = CAST z2ui5_if_app( mo_action->mo_app->mo_app )->check_sticky.
DATA temp15 TYPE REF TO z2ui5_if_app.
DATA lv_check_sticky LIKE temp15->check_sticky.
DATA temp16 TYPE REF TO z2ui5_if_app.
DATA temp17 TYPE REF TO z2ui5_if_app.
temp15 ?= mo_action->mo_app->mo_app.
lv_check_sticky = temp15->check_sticky.
IF lv_check_sticky = abap_true AND val = abap_true.
RAISE EXCEPTION TYPE z2ui5_cx_util_error
EXPORTING
@ -400,10 +530,14 @@ CLASS z2ui5_cl_core_client IMPLEMENTATION.
ENDIF.
IF val = abap_true.
mo_action->ms_next-s_set-s_stateful-active = 1.
CAST z2ui5_if_app( mo_action->mo_app->mo_app )->check_sticky = abap_true.
temp16 ?= mo_action->mo_app->mo_app.
temp16->check_sticky = abap_true.
ELSE.
mo_action->ms_next-s_set-s_stateful-active = 0.
CAST z2ui5_if_app( mo_action->mo_app->mo_app )->check_sticky = abap_false.
temp17 ?= mo_action->mo_app->mo_app.
temp17->check_sticky = abap_false.
ENDIF.
mo_action->ms_next-s_set-s_stateful-switched = abap_true.
@ -411,27 +545,38 @@ CLASS z2ui5_cl_core_client IMPLEMENTATION.
METHOD z2ui5_if_client~check_app_prev_stack.
DATA(ls_get) = z2ui5_if_client~get( ).
result = xsdbool( ls_get-s_draft-id_prev_app_stack IS NOT INITIAL ).
DATA ls_get TYPE z2ui5_if_types=>ty_s_get.
DATA temp1 TYPE xsdboolean.
ls_get = z2ui5_if_client~get( ).
temp1 = boolc( ls_get-s_draft-id_prev_app_stack IS NOT INITIAL ).
result = temp1.
ENDMETHOD.
METHOD z2ui5_if_client~check_on_init.
result = xsdbool( CAST z2ui5_if_app( mo_action->mo_app->mo_app )->check_initialized = abap_false ).
DATA temp18 TYPE REF TO z2ui5_if_app.
DATA temp2 TYPE xsdboolean.
temp18 ?= mo_action->mo_app->mo_app.
temp2 = boolc( temp18->check_initialized = abap_false ).
result = temp2.
ENDMETHOD.
METHOD z2ui5_if_client~check_on_navigated.
DATA(ls_get) = z2ui5_if_client~get( ).
DATA ls_get TYPE z2ui5_if_types=>ty_s_get.
ls_get = z2ui5_if_client~get( ).
result = ls_get-check_on_navigated.
ENDMETHOD.
METHOD z2ui5_if_client~get_app_prev.
DATA(ls_get) = z2ui5_if_client~get( ).
DATA ls_get TYPE z2ui5_if_types=>ty_s_get.
ls_get = z2ui5_if_client~get( ).
result = z2ui5_if_client~get_app( ls_get-s_draft-id_prev_app ).
ENDMETHOD.

View File

@ -10,9 +10,14 @@ CLASS z2ui5_cl_core_client DEFINITION LOCAL FRIENDS ltcl_test_client.
CLASS ltcl_test_client IMPLEMENTATION.
METHOD first_test.
DATA(lo_http) = NEW z2ui5_cl_core_handler( `` ).
DATA(lo_action) = NEW z2ui5_cl_core_action( lo_http ).
DATA(lo_client) = NEW z2ui5_cl_core_client( lo_action ) ##NEEDED.
DATA lo_http TYPE REF TO z2ui5_cl_core_handler.
DATA lo_action TYPE REF TO z2ui5_cl_core_action.
DATA lo_client TYPE REF TO z2ui5_cl_core_client.
CREATE OBJECT lo_http TYPE z2ui5_cl_core_handler EXPORTING VAL = ``.
CREATE OBJECT lo_action TYPE z2ui5_cl_core_action EXPORTING VAL = lo_http.
CREATE OBJECT lo_client TYPE z2ui5_cl_core_client EXPORTING ACTION = lo_action.
ENDMETHOD.
ENDCLASS.

View File

@ -37,7 +37,7 @@ CLASS z2ui5_cl_core_handler IMPLEMENTATION.
METHOD constructor.
mv_request_json = val.
mo_action = NEW z2ui5_cl_core_action( me ).
CREATE OBJECT mo_action TYPE z2ui5_cl_core_action EXPORTING VAL = me.
ENDMETHOD.
@ -45,45 +45,55 @@ CLASS z2ui5_cl_core_handler IMPLEMENTATION.
main_begin( ).
DO.
IF main_process( ).
IF main_process( ) IS NOT INITIAL.
EXIT.
ENDIF.
ENDDO.
result = VALUE #( body = mv_response
s_stateful = ms_response-s_front-params-s_stateful
).
CLEAR result.
result-body = mv_response.
result-s_stateful = ms_response-s_front-params-s_stateful.
ENDMETHOD.
METHOD main_begin.
DATA lo_json_mapper TYPE REF TO z2ui5_cl_core_srv_json.
DATA temp1 TYPE REF TO z2ui5_cl_core_srv_draft.
DATA x TYPE REF TO cx_root.
TRY.
DATA(lo_json_mapper) = NEW z2ui5_cl_core_srv_json( ).
CREATE OBJECT lo_json_mapper TYPE z2ui5_cl_core_srv_json.
ms_request = lo_json_mapper->request_json_to_abap( mv_request_json ).
IF ms_request-s_front-id IS NOT INITIAL.
mo_action = mo_action->factory_by_frontend( ).
ELSEIF ms_request-s_control-app_start IS NOT INITIAL.
NEW z2ui5_cl_core_srv_draft( )->cleanup( ).
CREATE OBJECT temp1 TYPE z2ui5_cl_core_srv_draft.
temp1->cleanup( ).
mo_action = mo_action->factory_first_start( ).
ELSE.
mo_action = mo_action->factory_system_startup( ).
ENDIF.
CATCH cx_root INTO DATA(x).
CATCH cx_root INTO x.
ASSERT x->get_text( ) = 1.
ENDTRY.
ENDMETHOD.
METHOD main_end.
DATA lo_model TYPE REF TO z2ui5_cl_core_srv_attri.
DATA lo_json_mapper TYPE REF TO z2ui5_cl_core_srv_json.
DATA temp2 TYPE REF TO z2ui5_if_app.
ms_response = VALUE #( s_front-params = mo_action->ms_next-s_set
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 )
).
CLEAR ms_response.
ms_response-s_front-params = mo_action->ms_next-s_set.
ms_response-s_front-id = mo_action->mo_app->ms_draft-id.
ms_response-s_front-app = z2ui5_cl_util=>rtti_get_classname_by_ref( mo_action->mo_app->mo_app ).
IF ms_response-s_front-params-s_view-check_update_model = abap_true
OR ms_response-s_front-params-s_view_nest-check_update_model = abap_true
@ -96,8 +106,8 @@ CLASS z2ui5_cl_core_handler IMPLEMENTATION.
OR ms_response-s_front-params-s_popup-xml IS NOT INITIAL
OR ms_response-s_front-params-s_popover-xml IS NOT INITIAL.
DATA(lo_model) = NEW z2ui5_cl_core_srv_attri( attri = mo_action->mo_app->mt_attri
app = mo_action->mo_app->mo_app ).
CREATE OBJECT lo_model TYPE z2ui5_cl_core_srv_attri EXPORTING attri = mo_action->mo_app->mt_attri app = mo_action->mo_app->mo_app.
lo_model->attri_refs_update( ).
ms_response-model = mo_action->mo_app->model_json_stringify( ).
@ -105,22 +115,33 @@ CLASS z2ui5_cl_core_handler IMPLEMENTATION.
ms_response-model = `{}`.
ENDIF.
DATA(lo_json_mapper) = NEW z2ui5_cl_core_srv_json( ).
CREATE OBJECT lo_json_mapper TYPE z2ui5_cl_core_srv_json.
mv_response = lo_json_mapper->response_abap_to_json( ms_response ).
CLEAR mo_action->ms_next.
IF CAST z2ui5_if_app( mo_action->mo_app->mo_app )->check_sticky = abap_false.
temp2 ?= mo_action->mo_app->mo_app.
IF temp2->check_sticky = abap_false.
mo_action->mo_app->db_save( ).
ENDIF.
ENDMETHOD.
METHOD main_process.
DATA li_client TYPE REF TO z2ui5_cl_core_client.
DATA temp3 TYPE REF TO z2ui5_if_app.
DATA li_app LIKE temp3.
DATA x TYPE REF TO cx_root.
TRY.
DATA(li_client) = NEW z2ui5_cl_core_client( mo_action ).
DATA(li_app) = CAST z2ui5_if_app( mo_action->mo_app->mo_app ).
CREATE OBJECT li_client TYPE z2ui5_cl_core_client EXPORTING ACTION = mo_action.
temp3 ?= mo_action->mo_app->mo_app.
li_app = temp3.
IF li_app->check_sticky = abap_false.
ROLLBACK WORK.
@ -141,7 +162,8 @@ CLASS z2ui5_cl_core_handler IMPLEMENTATION.
check_go_client = abap_true.
ENDIF.
CATCH cx_root INTO DATA(x).
CATCH cx_root INTO x.
ASSERT x->get_text( ) = 1.
ENDTRY.
ENDMETHOD.

View File

@ -10,13 +10,19 @@ CLASS z2ui5_cl_core_handler DEFINITION LOCAL FRIENDS ltcl_test_handler_post.
CLASS ltcl_test_handler_post IMPLEMENTATION.
METHOD load_startup_app.
DATA lv_payload TYPE string.
DATA lo_post TYPE REF TO z2ui5_cl_core_handler.
DATA temp4 TYPE REF TO z2ui5_cl_app_startup.
DATA lo_startup LIKE temp4.
IF sy-sysid = 'ABC'.
RETURN.
ENDIF.
DATA(lv_payload) = `{"S_FRONT":{"ORIGIN":"ORIGIN","PATHNAME":"PATHNAME","SEARCH":""}}`.
DATA(lo_post) = NEW z2ui5_cl_core_handler( lv_payload ).
lv_payload = `{"S_FRONT":{"ORIGIN":"ORIGIN","PATHNAME":"PATHNAME","SEARCH":""}}`.
CREATE OBJECT lo_post TYPE z2ui5_cl_core_handler EXPORTING VAL = lv_payload.
lo_post->main_begin( ).
cl_abap_unit_assert=>assert_bound( lo_post->mo_action ).
@ -27,7 +33,10 @@ CLASS ltcl_test_handler_post IMPLEMENTATION.
cl_abap_unit_assert=>assert_equals( exp = `PATHNAME`
act = lo_post->ms_request-s_front-pathname ).
DATA(lo_startup) = CAST z2ui5_cl_app_startup( lo_post->mo_action->mo_app->mo_app ) ##NEEDED.
temp4 ?= lo_post->mo_action->mo_app->mo_app.
lo_startup = temp4.
ENDMETHOD.
ENDCLASS.

View File

@ -43,13 +43,17 @@ ENDCLASS.
CLASS z2ui5_cl_core_srv_attri IMPLEMENTATION.
METHOD attri_after_load.
LOOP AT mt_attri->* REFERENCE INTO DATA(lr_attri).
DATA temp1 LIKE LINE OF mt_attri->*.
DATA lr_attri LIKE REF TO temp1.
FIELD-SYMBOLS <val> TYPE data.
LOOP AT mt_attri->* REFERENCE INTO lr_attri.
TRY.
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>).
ASSIGN lr_attri->r_ref->* TO <val>.
<val> = z2ui5_cl_util=>xml_srtti_parse( lr_attri->srtti_data ).
CLEAR lr_attri->srtti_data.
ENDIF.
@ -62,7 +66,12 @@ CLASS z2ui5_cl_core_srv_attri IMPLEMENTATION.
METHOD attri_before_save.
LOOP AT mt_attri->* REFERENCE INTO DATA(lr_attri).
DATA temp2 LIKE LINE OF mt_attri->*.
DATA lr_attri LIKE REF TO temp2.
FIELD-SYMBOLS <val_ref2> TYPE data.
FIELD-SYMBOLS <val_ref> TYPE data.
FIELD-SYMBOLS <val> TYPE data.
LOOP AT mt_attri->* REFERENCE INTO lr_attri.
IF lr_attri->o_typedescr IS NOT BOUND.
CONTINUE.
@ -78,7 +87,8 @@ CLASS z2ui5_cl_core_srv_attri IMPLEMENTATION.
lr_attri->o_typedescr->type_kind = cl_abap_classdescr=>typekind_num OR
lr_attri->o_typedescr->type_kind = cl_abap_classdescr=>typekind_numeric
).
ASSIGN lr_attri->r_ref->* TO FIELD-SYMBOL(<val_ref2>).
ASSIGN lr_attri->r_ref->* TO <val_ref2>.
CLEAR <val_ref2>.
CLEAR lr_attri->r_ref.
CONTINUE.
@ -93,9 +103,11 @@ CLASS z2ui5_cl_core_srv_attri IMPLEMENTATION.
CONTINUE.
ENDIF.
ASSIGN lr_attri->r_ref->* TO FIELD-SYMBOL(<val_ref>).
ASSIGN lr_attri->r_ref->* TO <val_ref>.
IF <val_ref> IS NOT INITIAL.
ASSIGN <val_ref>->* TO FIELD-SYMBOL(<val>).
ASSIGN <val_ref>->* TO <val>.
lr_attri->srtti_data = z2ui5_cl_util=>xml_srtti_stringify( <val> ).
CLEAR <val>.
ENDIF.
@ -108,14 +120,27 @@ CLASS z2ui5_cl_core_srv_attri IMPLEMENTATION.
ENDMETHOD.
METHOD attri_search_a_dissolve.
DATA lo_dissolve TYPE REF TO z2ui5_cl_core_srv_diss.
DATA temp3 LIKE sy-subrc.
DATA lt_attri TYPE z2ui5_if_core_types=>ty_t_attri.
FIELD-SYMBOLS <ls_attri> LIKE LINE OF mt_attri->*.
DATA lv_name LIKE <ls_attri>-name.
DATA temp4 LIKE sy-subrc.
DATA temp5 LIKE LINE OF lt_attri.
DATA temp6 LIKE sy-tabix.
DATA temp7 LIKE LINE OF lt_attri.
DATA temp8 LIKE sy-tabix.
DATA temp9 LIKE LINE OF lt_attri.
DATA temp10 LIKE sy-tabix.
DATA temp11 LIKE sy-subrc.
result = attri_search( val ).
IF result IS BOUND.
RETURN.
ENDIF.
DATA(lo_dissolve) = NEW z2ui5_cl_core_srv_diss( attri = mt_attri
app = mo_app ).
CREATE OBJECT lo_dissolve TYPE z2ui5_cl_core_srv_diss EXPORTING attri = mt_attri app = mo_app.
DO 5 TIMES.
@ -126,7 +151,10 @@ CLASS z2ui5_cl_core_srv_attri IMPLEMENTATION.
RETURN.
ENDIF.
IF line_exists( mt_attri->*[ check_dissolved = abap_false ] ).
READ TABLE mt_attri->* WITH KEY check_dissolved = abap_false TRANSPORTING NO FIELDS.
temp3 = sy-subrc.
IF temp3 = 0.
CONTINUE.
ENDIF.
@ -134,7 +162,8 @@ CLASS z2ui5_cl_core_srv_attri IMPLEMENTATION.
ENDDO.
""""" new
DATA(lt_attri) = mt_attri->*.
lt_attri = mt_attri->*.
DELETE lt_attri WHERE bind_type IS INITIAL.
CLEAR mt_attri->*.
DO 5 TIMES.
@ -143,18 +172,50 @@ CLASS z2ui5_cl_core_srv_attri IMPLEMENTATION.
result = attri_search( val ).
IF result IS BOUND.
LOOP AT mt_attri->* ASSIGNING FIELD-SYMBOL(<ls_attri>).
DATA(lv_name) = <ls_attri>-name.
IF line_exists( lt_attri[ name = lv_name ] ).
<ls_attri>-bind_type = lt_attri[ name = lv_name ]-bind_type.
<ls_attri>-name_client = lt_attri[ name = lv_name ]-name_client.
<ls_attri>-view = lt_attri[ name = lv_name ]-view.
LOOP AT mt_attri->* ASSIGNING <ls_attri>.
lv_name = <ls_attri>-name.
READ TABLE lt_attri WITH KEY name = lv_name TRANSPORTING NO FIELDS.
temp4 = sy-subrc.
IF temp4 = 0.
temp6 = sy-tabix.
READ TABLE lt_attri WITH KEY name = lv_name INTO temp5.
sy-tabix = temp6.
IF sy-subrc <> 0.
ASSERT 1 = 0.
ENDIF.
<ls_attri>-bind_type = temp5-bind_type.
temp8 = sy-tabix.
READ TABLE lt_attri WITH KEY name = lv_name INTO temp7.
sy-tabix = temp8.
IF sy-subrc <> 0.
ASSERT 1 = 0.
ENDIF.
<ls_attri>-name_client = temp7-name_client.
temp10 = sy-tabix.
READ TABLE lt_attri WITH KEY name = lv_name INTO temp9.
sy-tabix = temp10.
IF sy-subrc <> 0.
ASSERT 1 = 0.
ENDIF.
<ls_attri>-view = temp9-view.
ENDIF.
ENDLOOP.
RETURN.
ENDIF.
IF line_exists( mt_attri->*[ check_dissolved = abap_false ] ).
READ TABLE mt_attri->* WITH KEY check_dissolved = abap_false TRANSPORTING NO FIELDS.
temp11 = sy-subrc.
IF temp11 = 0.
CONTINUE.
ENDIF.
@ -171,7 +232,8 @@ CLASS z2ui5_cl_core_srv_attri IMPLEMENTATION.
METHOD attri_get_val_ref.
ASSIGN mo_app->(iv_path) TO FIELD-SYMBOL(<attri>).
FIELD-SYMBOLS <attri> TYPE any.
ASSIGN mo_app->(iv_path) TO <attri>.
IF sy-subrc <> 0.
RAISE EXCEPTION TYPE z2ui5_cx_util_error
@ -188,7 +250,9 @@ CLASS z2ui5_cl_core_srv_attri IMPLEMENTATION.
METHOD attri_refs_update.
LOOP AT mt_attri->* REFERENCE INTO DATA(lr_attri).
DATA temp12 LIKE LINE OF mt_attri->*.
DATA lr_attri LIKE REF TO temp12.
LOOP AT mt_attri->* REFERENCE INTO lr_attri.
TRY.
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 ).
@ -207,7 +271,9 @@ CLASS z2ui5_cl_core_srv_attri IMPLEMENTATION.
METHOD attri_search.
LOOP AT mt_attri->* REFERENCE INTO DATA(lr_attri)
DATA temp13 LIKE LINE OF mt_attri->*.
DATA lr_attri LIKE REF TO temp13.
LOOP AT mt_attri->* REFERENCE INTO lr_attri
WHERE o_typedescr IS BOUND.
IF lr_attri->o_typedescr->kind <> cl_abap_typedescr=>kind_elem

View File

@ -37,19 +37,38 @@ CLASS z2ui5_cl_core_srv_attri 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 lo_app_client TYPE REF TO ltcl_test_app2.
DATA lr_value TYPE REF TO data.
DATA temp14 TYPE z2ui5_if_core_types=>ty_t_attri.
DATA temp15 LIKE LINE OF temp14.
DATA lt_attri LIKE temp14.
DATA temp16 LIKE REF TO lt_attri.
DATA lo_model TYPE REF TO z2ui5_cl_core_srv_attri.
DATA temp17 LIKE REF TO lo_app_client->mv_value.
DATA lr_attri TYPE REF TO z2ui5_if_core_types=>ty_s_attri.
CREATE OBJECT lo_app_client TYPE ltcl_test_app2.
GET REFERENCE OF lo_app_client->mv_value INTO lr_value.
DATA(lt_attri) = VALUE z2ui5_if_core_types=>ty_t_attri( ( r_ref = lr_value
o_typedescr = cl_abap_datadescr=>describe_by_data_ref(
lr_value )
) ).
DATA(lo_model) = NEW z2ui5_cl_core_srv_attri( attri = REF #( lt_attri )
app = lo_app_client ).
CLEAR temp14.
DATA(lr_attri) = lo_model->attri_search_a_dissolve( REF #( lo_app_client->mv_value ) ).
temp15-r_ref = lr_value.
temp15-o_typedescr = cl_abap_datadescr=>describe_by_data_ref(
lr_value ).
INSERT temp15 INTO TABLE temp14.
lt_attri = temp14.
GET REFERENCE OF lt_attri INTO temp16.
CREATE OBJECT lo_model TYPE z2ui5_cl_core_srv_attri EXPORTING attri = temp16 app = lo_app_client.
GET REFERENCE OF lo_app_client->mv_value INTO temp17.
lr_attri = lo_model->attri_search_a_dissolve( temp17 ).
IF lr_attri->r_ref <> lr_value.
cl_abap_unit_assert=>abort( ).
@ -59,19 +78,41 @@ CLASS ltcl_test_search_attri IMPLEMENTATION.
METHOD second_test.
DATA(lo_app_client) = NEW ltcl_test_app2( ).
DATA lo_app_client TYPE REF TO ltcl_test_app2.
DATA lr_value TYPE REF TO data.
DATA temp18 LIKE REF TO lo_app_client->mv_value.
DATA temp1 TYPE z2ui5_if_core_types=>ty_t_attri.
DATA temp2 LIKE LINE OF temp1.
DATA lt_attri LIKE temp1.
DATA temp19 LIKE REF TO lt_attri.
DATA lo_model TYPE REF TO z2ui5_cl_core_srv_attri.
DATA temp20 LIKE REF TO lo_app_client->mv_value.
DATA lr_attri TYPE REF TO z2ui5_if_core_types=>ty_s_attri.
CREATE OBJECT lo_app_client TYPE ltcl_test_app2.
GET REFERENCE OF lo_app_client->mv_value INTO lr_value.
DATA(lt_attri) = VALUE z2ui5_if_core_types=>ty_t_attri( ( r_ref = REF #( lo_app_client->mv_value )
o_typedescr = cl_abap_datadescr=>describe_by_data_ref(
lr_value )
) ).
DATA(lo_model) = NEW z2ui5_cl_core_srv_attri( attri = REF #( lt_attri )
app = lo_app_client ).
GET REFERENCE OF lo_app_client->mv_value INTO temp18.
DATA(lr_attri) = lo_model->attri_search_a_dissolve( REF #( lo_app_client->mv_value ) ).
CLEAR temp1.
temp2-r_ref = temp18.
temp2-o_typedescr = cl_abap_datadescr=>describe_by_data_ref(
lr_value ).
INSERT temp2 INTO TABLE temp1.
lt_attri = temp1.
GET REFERENCE OF lt_attri INTO temp19.
CREATE OBJECT lo_model TYPE z2ui5_cl_core_srv_attri EXPORTING attri = temp19 app = lo_app_client.
GET REFERENCE OF lo_app_client->mv_value INTO temp20.
lr_attri = lo_model->attri_search_a_dissolve( temp20 ).
IF lr_attri->r_ref <> lr_value.
cl_abap_unit_assert=>abort( ).
@ -81,18 +122,56 @@ CLASS ltcl_test_search_attri IMPLEMENTATION.
METHOD third_test.
DATA(lo_app_client) = NEW ltcl_test_app2( ).
DATA lo_app_client TYPE REF TO ltcl_test_app2.
DATA lr_value TYPE REF TO data.
DATA temp21 LIKE REF TO lo_app_client->mv_value.
DATA temp3 LIKE REF TO lo_app_client->mo_app.
DATA temp1 LIKE REF TO lo_app_client->mr_value2.
DATA temp2 LIKE REF TO lo_app_client->mr_value.
DATA temp4 TYPE z2ui5_if_core_types=>ty_t_attri.
DATA temp5 LIKE LINE OF temp4.
DATA lt_attri LIKE temp4.
FIELD-SYMBOLS <temp22> TYPE z2ui5_if_core_types=>ty_s_attri.
DATA lr_attri LIKE REF TO <temp22>.
CREATE OBJECT lo_app_client TYPE ltcl_test_app2.
GET REFERENCE OF lo_app_client->mv_value INTO lr_value.
lo_app_client->mo_app = NEW #( ).
CREATE OBJECT lo_app_client->mo_app.
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 ] ).
GET REFERENCE OF lo_app_client->mv_value INTO temp21.
GET REFERENCE OF lo_app_client->mo_app INTO temp3.
GET REFERENCE OF lo_app_client->mr_value2 INTO temp1.
GET REFERENCE OF lo_app_client->mr_value INTO temp2.
CLEAR temp4.
temp5-name = `1`.
temp5-r_ref = temp2.
INSERT temp5 INTO TABLE temp4.
temp5-name = `4`.
temp5-r_ref = temp1.
INSERT temp5 INTO TABLE temp4.
temp5-name = `2`.
temp5-r_ref = temp3.
INSERT temp5 INTO TABLE temp4.
temp5-name = `3`.
temp5-r_ref = temp21.
INSERT temp5 INTO TABLE temp4.
lt_attri = temp4.
READ TABLE lt_attri WITH KEY r_ref = lr_value ASSIGNING <temp22>.
IF sy-subrc <> 0.
ASSERT 1 = 0.
ENDIF.
GET REFERENCE OF <temp22> INTO lr_attri.
IF lr_attri->r_ref <> lr_value.
cl_abap_unit_assert=>abort( ).
ENDIF.
@ -137,7 +216,7 @@ ENDCLASS.
CLASS ltcl_test_app3 IMPLEMENTATION.
METHOD constructor.
mo_app = NEW #( ).
CREATE OBJECT mo_app.
ENDMETHOD.
ENDCLASS.
@ -157,19 +236,35 @@ ENDCLASS.
CLASS ltcl_test_get_attri IMPLEMENTATION.
METHOD first_test.
DATA(lo_app_client) = NEW ltcl_test_app3( ).
" TODO: variable is assigned but never used (ABAP cleaner)
DATA lo_app_client TYPE REF TO ltcl_test_app3.
DATA lr_value TYPE REF TO data.
DATA temp23 TYPE z2ui5_if_core_types=>ty_t_attri.
DATA lt_attri LIKE temp23.
DATA temp24 LIKE REF TO lt_attri.
DATA lo_model TYPE REF TO z2ui5_cl_core_srv_attri.
DATA lr_attri TYPE REF TO data.
DATA temp25 LIKE REF TO lo_app_client->mv_value.
CREATE OBJECT lo_app_client TYPE ltcl_test_app3.
" TODO: variable is assigned but never used (ABAP cleaner)
GET REFERENCE OF lo_app_client->mv_value INTO lr_value.
DATA(lt_attri) = VALUE z2ui5_if_core_types=>ty_t_attri( ).
DATA(lo_model) = NEW z2ui5_cl_core_srv_attri( attri = REF #( lt_attri )
app = lo_app_client ).
CLEAR temp23.
DATA(lr_attri) = lo_model->attri_get_val_ref( `MV_VALUE` ).
lt_attri = temp23.
IF REF #( lo_app_client->mv_value ) <> lr_attri.
GET REFERENCE OF lt_attri INTO temp24.
CREATE OBJECT lo_model TYPE z2ui5_cl_core_srv_attri EXPORTING attri = temp24 app = lo_app_client.
lr_attri = lo_model->attri_get_val_ref( `MV_VALUE` ).
GET REFERENCE OF lo_app_client->mv_value INTO temp25.
IF temp25 <> lr_attri.
cl_abap_unit_assert=>abort( ).
ENDIF.
@ -177,14 +272,26 @@ CLASS ltcl_test_get_attri IMPLEMENTATION.
METHOD second_test.
DATA(lo_app_client) = NEW ltcl_test_app3( ).
DATA lo_app_client TYPE REF TO ltcl_test_app3.
DATA temp26 TYPE z2ui5_if_core_types=>ty_t_attri.
DATA lt_attri LIKE temp26.
DATA temp27 LIKE REF TO lt_attri.
DATA lo_model TYPE REF TO z2ui5_cl_core_srv_attri.
DATA lr_attri TYPE REF TO data.
CREATE OBJECT lo_app_client TYPE ltcl_test_app3.
CREATE DATA lo_app_client->mr_value.
DATA(lt_attri) = VALUE z2ui5_if_core_types=>ty_t_attri( ).
DATA(lo_model) = NEW z2ui5_cl_core_srv_attri( attri = REF #( lt_attri )
app = lo_app_client ).
DATA(lr_attri) = lo_model->attri_get_val_ref( `MR_VALUE->*` ).
CLEAR temp26.
lt_attri = temp26.
GET REFERENCE OF lt_attri INTO temp27.
CREATE OBJECT lo_model TYPE z2ui5_cl_core_srv_attri EXPORTING attri = temp27 app = lo_app_client.
lr_attri = lo_model->attri_get_val_ref( `MR_VALUE->*` ).
IF lr_attri <> lo_app_client->mr_value.
cl_abap_unit_assert=>abort( ).
@ -194,15 +301,30 @@ CLASS ltcl_test_get_attri IMPLEMENTATION.
METHOD third_test.
DATA(lo_app_client) = NEW ltcl_test_app3( ).
DATA lo_app_client TYPE REF TO ltcl_test_app3.
DATA temp28 TYPE z2ui5_if_core_types=>ty_t_attri.
DATA lt_attri LIKE temp28.
DATA temp29 LIKE REF TO lt_attri.
DATA lo_model TYPE REF TO z2ui5_cl_core_srv_attri.
DATA lr_attri TYPE REF TO data.
DATA temp30 LIKE REF TO lo_app_client->mo_app->mv_value.
CREATE OBJECT lo_app_client TYPE ltcl_test_app3.
DATA(lt_attri) = VALUE z2ui5_if_core_types=>ty_t_attri( ).
DATA(lo_model) = NEW z2ui5_cl_core_srv_attri( attri = REF #( lt_attri )
app = lo_app_client ).
DATA(lr_attri) = lo_model->attri_get_val_ref( `MO_APP->MV_VALUE` ).
CLEAR temp28.
IF REF #( lo_app_client->mo_app->mv_value ) <> lr_attri.
lt_attri = temp28.
GET REFERENCE OF lt_attri INTO temp29.
CREATE OBJECT lo_model TYPE z2ui5_cl_core_srv_attri EXPORTING attri = temp29 app = lo_app_client.
lr_attri = lo_model->attri_get_val_ref( `MO_APP->MV_VALUE` ).
GET REFERENCE OF lo_app_client->mo_app->mv_value INTO temp30.
IF temp30 <> lr_attri.
cl_abap_unit_assert=>abort( ).
ENDIF.
@ -210,14 +332,26 @@ CLASS ltcl_test_get_attri IMPLEMENTATION.
METHOD test4.
DATA(lo_app_client) = NEW ltcl_test_app3( ).
DATA lo_app_client TYPE REF TO ltcl_test_app3.
DATA temp31 TYPE z2ui5_if_core_types=>ty_t_attri.
DATA lt_attri LIKE temp31.
DATA temp32 LIKE REF TO lt_attri.
DATA lo_model TYPE REF TO z2ui5_cl_core_srv_attri.
DATA lr_attri TYPE REF TO data.
CREATE OBJECT lo_app_client TYPE ltcl_test_app3.
CREATE DATA lo_app_client->mo_app->mr_value.
DATA(lt_attri) = VALUE z2ui5_if_core_types=>ty_t_attri( ).
DATA(lo_model) = NEW z2ui5_cl_core_srv_attri( attri = REF #( lt_attri )
app = lo_app_client ).
DATA(lr_attri) = lo_model->attri_get_val_ref( `MO_APP->MR_VALUE->*` ).
CLEAR temp31.
lt_attri = temp31.
GET REFERENCE OF lt_attri INTO temp32.
CREATE OBJECT lo_model TYPE z2ui5_cl_core_srv_attri EXPORTING attri = temp32 app = lo_app_client.
lr_attri = lo_model->attri_get_val_ref( `MO_APP->MR_VALUE->*` ).
IF lr_attri <> lo_app_client->mo_app->mr_value.
cl_abap_unit_assert=>abort( ).

View File

@ -69,19 +69,26 @@ CLASS z2ui5_cl_core_srv_bind IMPLEMENTATION.
DATA lr_ref_in TYPE REF TO data.
FIELD-SYMBOLS <tab> TYPE STANDARD TABLE.
DATA lt_attri TYPE abap_component_tab.
FIELD-SYMBOLS <comp> LIKE LINE OF lt_attri.
DATA temp1 TYPE string.
ASSIGN ms_config-tab->* TO <tab>.
ASSIGN <tab>[ ms_config-tab_index ] TO <row>.
READ TABLE <tab> INDEX ms_config-tab_index ASSIGNING <row>.
DATA(lt_attri) = z2ui5_cl_util=>rtti_get_t_attri_by_any( ms_config-tab ).
LOOP AT lt_attri ASSIGNING FIELD-SYMBOL(<comp>).
lt_attri = z2ui5_cl_util=>rtti_get_t_attri_by_any( ms_config-tab ).
LOOP AT lt_attri ASSIGNING <comp>.
ASSIGN COMPONENT <comp>-name OF STRUCTURE <row> TO <ele>.
ASSERT sy-subrc = 0.
lr_ref_in = REF #( <ele> ).
GET REFERENCE OF <ele> INTO lr_ref_in.
IF i_val = lr_ref_in.
result = |{ iv_name }/{ shift_right( CONV string( ms_config-tab_index - 1 ) ) }/{ <comp>-name }|.
temp1 = ms_config-tab_index - 1.
result = |{ iv_name }/{ shift_right( temp1 ) }/{ <comp>-name }|.
RETURN.
ENDIF.
@ -94,6 +101,8 @@ CLASS z2ui5_cl_core_srv_bind IMPLEMENTATION.
ENDMETHOD.
METHOD check_raise_existing.
DATA lv_name1 TYPE string.
DATA lv_name2 TYPE string.
IF mr_attri->bind_type <> mv_type.
RAISE EXCEPTION TYPE z2ui5_cx_util_error
@ -103,8 +112,10 @@ CLASS z2ui5_cl_core_srv_bind IMPLEMENTATION.
IF mr_attri->custom_mapper IS BOUND.
DATA(lv_name1) = z2ui5_cl_util=>rtti_get_classname_by_ref( mr_attri->custom_mapper ).
DATA(lv_name2) = z2ui5_cl_util=>rtti_get_classname_by_ref( ms_config-custom_mapper ).
lv_name1 = z2ui5_cl_util=>rtti_get_classname_by_ref( mr_attri->custom_mapper ).
lv_name2 = z2ui5_cl_util=>rtti_get_classname_by_ref( ms_config-custom_mapper ).
IF lv_name1 <> lv_name2.
RAISE EXCEPTION TYPE z2ui5_cx_util_error
EXPORTING
@ -127,10 +138,17 @@ CLASS z2ui5_cl_core_srv_bind IMPLEMENTATION.
ENDMETHOD.
METHOD check_raise_new.
DATA temp2 TYPE REF TO if_serializable_object.
DATA lo_dummy LIKE temp2.
DATA temp3 TYPE REF TO if_serializable_object.
DATA lo_dummy2 LIKE temp3.
IF mr_attri->custom_filter_back IS BOUND.
TRY.
DATA(lo_dummy) = CAST if_serializable_object( mr_attri->custom_filter_back ) ##NEEDED.
temp2 ?= mr_attri->custom_filter_back.
lo_dummy = temp2.
CATCH cx_root.
RAISE EXCEPTION TYPE z2ui5_cx_util_error
EXPORTING
@ -141,7 +159,10 @@ CLASS z2ui5_cl_core_srv_bind IMPLEMENTATION.
IF mr_attri->custom_filter_back IS BOUND.
TRY.
DATA(lo_dummy2) = CAST if_serializable_object( mr_attri->custom_mapper_back ) ##NEEDED.
temp3 ?= mr_attri->custom_mapper_back.
lo_dummy2 = temp3.
CATCH cx_root.
RAISE EXCEPTION TYPE z2ui5_cx_util_error
EXPORTING
@ -153,16 +174,62 @@ CLASS z2ui5_cl_core_srv_bind IMPLEMENTATION.
ENDMETHOD.
METHOD clear.
DATA lv_path TYPE string.
FIELD-SYMBOLS <temp4> LIKE LINE OF mo_app->mt_attri->*.
DATA temp5 LIKE sy-tabix.
FIELD-SYMBOLS <temp6> LIKE LINE OF mo_app->mt_attri->*.
DATA temp7 LIKE sy-tabix.
FIELD-SYMBOLS <temp8> LIKE LINE OF mo_app->mt_attri->*.
DATA temp9 LIKE sy-tabix.
FIELD-SYMBOLS <temp10> LIKE LINE OF mo_app->mt_attri->*.
DATA temp11 LIKE sy-tabix.
DATA temp12 LIKE LINE OF mo_app->mt_attri->*.
DATA lr_bind2 LIKE REF TO temp12.
TRY.
DATA(lv_path) = shift_right( val = val
sub = `->*` ).
mo_app->mt_attri->*[ name = lv_path ]-check_dissolved = abap_false.
mo_app->mt_attri->*[ name = val ]-check_dissolved = abap_false.
mo_app->mt_attri->*[ name = lv_path ]-name_client = ``.
mo_app->mt_attri->*[ name = lv_path ]-bind_type = ``.
LOOP AT mo_app->mt_attri->* REFERENCE INTO DATA(lr_bind2)
lv_path = shift_right( val = val
sub = `->*` ).
temp5 = sy-tabix.
READ TABLE mo_app->mt_attri->* WITH KEY name = lv_path ASSIGNING <temp4>.
sy-tabix = temp5.
IF sy-subrc <> 0.
ASSERT 1 = 0.
ENDIF.
<temp4>-check_dissolved = abap_false.
temp7 = sy-tabix.
READ TABLE mo_app->mt_attri->* WITH KEY name = val ASSIGNING <temp6>.
sy-tabix = temp7.
IF sy-subrc <> 0.
ASSERT 1 = 0.
ENDIF.
<temp6>-check_dissolved = abap_false.
temp9 = sy-tabix.
READ TABLE mo_app->mt_attri->* WITH KEY name = lv_path ASSIGNING <temp8>.
sy-tabix = temp9.
IF sy-subrc <> 0.
ASSERT 1 = 0.
ENDIF.
<temp8>-name_client = ``.
temp11 = sy-tabix.
READ TABLE mo_app->mt_attri->* WITH KEY name = lv_path ASSIGNING <temp10>.
sy-tabix = temp11.
IF sy-subrc <> 0.
ASSERT 1 = 0.
ENDIF.
<temp10>-bind_type = ``.
LOOP AT mo_app->mt_attri->* REFERENCE INTO lr_bind2
WHERE name = lv_path.
CLEAR lr_bind2->r_ref.
ENDLOOP.
@ -179,6 +246,7 @@ CLASS z2ui5_cl_core_srv_bind IMPLEMENTATION.
ENDMETHOD.
METHOD get_client_name.
DATA temp13 TYPE string.
result = replace( val = mr_attri->name
sub = `-`
@ -188,15 +256,21 @@ CLASS z2ui5_cl_core_srv_bind IMPLEMENTATION.
sub = `>`
with = ``
occ = 0 ).
result = COND #( WHEN mv_type = z2ui5_if_core_types=>cs_bind_type-two_way
THEN |/{ z2ui5_if_core_types=>cs_ui5-two_way_model }| )
IF mv_type = z2ui5_if_core_types=>cs_bind_type-two_way.
temp13 = |/{ z2ui5_if_core_types=>cs_ui5-two_way_model }|.
ELSE.
CLEAR temp13.
ENDIF.
result = temp13
&& |/{ result }|.
ENDMETHOD.
METHOD main.
DATA lo_model TYPE REF TO z2ui5_cl_core_srv_attri.
IF z2ui5_cl_util=>check_bound_a_not_inital( config-tab ).
IF z2ui5_cl_util=>check_bound_a_not_inital( config-tab ) IS NOT INITIAL.
result = main_cell( val = val
type = type
@ -208,8 +282,8 @@ CLASS z2ui5_cl_core_srv_bind IMPLEMENTATION.
ms_config = config.
mv_type = type.
DATA(lo_model) = NEW z2ui5_cl_core_srv_attri( attri = mo_app->mt_attri
app = mo_app->mo_app ).
CREATE OBJECT lo_model TYPE z2ui5_cl_core_srv_attri EXPORTING attri = mo_app->mt_attri app = mo_app->mo_app.
lo_model->attri_refs_update( ).
@ -241,14 +315,20 @@ CLASS z2ui5_cl_core_srv_bind IMPLEMENTATION.
ENDMETHOD.
METHOD main_cell.
DATA lo_bind TYPE REF TO z2ui5_cl_core_srv_bind.
DATA temp14 TYPE z2ui5_if_core_types=>ty_s_bind_config.
ms_config = config.
mv_type = type.
DATA(lo_bind) = NEW z2ui5_cl_core_srv_bind( mo_app ).
CREATE OBJECT lo_bind TYPE z2ui5_cl_core_srv_bind EXPORTING APP = mo_app.
CLEAR temp14.
temp14-path_only = abap_true.
result = lo_bind->main( val = config-tab
type = type
config = VALUE #( path_only = abap_true ) ).
config = temp14 ).
result = bind_tab_cell( iv_name = result
i_val = val ).
@ -260,9 +340,17 @@ CLASS z2ui5_cl_core_srv_bind IMPLEMENTATION.
ENDMETHOD.
METHOD main_local.
DATA temp15 TYPE REF TO z2ui5_if_ajson.
DATA lo_json LIKE temp15.
DATA lv_id TYPE string.
DATA temp16 TYPE z2ui5_if_core_types=>ty_s_attri.
DATA x TYPE REF TO cx_root.
TRY.
DATA(lo_json) = CAST z2ui5_if_ajson( z2ui5_cl_ajson=>new( ) ).
temp15 ?= z2ui5_cl_ajson=>new( ).
lo_json = temp15.
lo_json->set( iv_path = `/`
iv_val = val ).
@ -278,11 +366,15 @@ CLASS z2ui5_cl_core_srv_bind IMPLEMENTATION.
lo_json = lo_json->filter( z2ui5_cl_ajson_filter_lib=>create_empty_filter( ) ).
ENDIF.
DATA(lv_id) = to_upper( z2ui5_cl_util=>uuid_get_c22( ) ).
INSERT VALUE #( name_client = |/{ lv_id }|
name = lv_id
json_bind_local = lo_json
bind_type = z2ui5_if_core_types=>cs_bind_type-one_time )
lv_id = to_upper( z2ui5_cl_util=>uuid_get_c22( ) ).
CLEAR temp16.
temp16-name_client = |/{ lv_id }|.
temp16-name = lv_id.
temp16-json_bind_local = lo_json.
temp16-bind_type = z2ui5_if_core_types=>cs_bind_type-one_time.
INSERT temp16
INTO TABLE mo_app->mt_attri->*.
result = |/{ lv_id }|.
@ -295,12 +387,14 @@ CLASS z2ui5_cl_core_srv_bind IMPLEMENTATION.
result = |\{{ result }\}|.
ENDIF.
CATCH cx_root INTO DATA(x).
CATCH cx_root INTO x.
ASSERT x IS NOT BOUND.
ENDTRY.
ENDMETHOD.
METHOD update_model_attri.
DATA temp17 TYPE z2ui5_if_core_types=>ty_s_attri-view.
mr_attri->bind_type = mv_type.
mr_attri->view = ms_config-view.
@ -308,9 +402,13 @@ CLASS z2ui5_cl_core_srv_bind IMPLEMENTATION.
mr_attri->custom_filter_back = ms_config-custom_filter_back.
mr_attri->custom_mapper = ms_config-custom_mapper.
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 ).
IF ms_config-view IS INITIAL.
temp17 = z2ui5_if_client=>cs_view-main.
ELSE.
temp17 = ms_config-view.
ENDIF.
mr_attri->view = temp17.
mr_attri->name_client = get_client_name( ).
ENDMETHOD.

View File

@ -61,14 +61,22 @@ ENDCLASS.
CLASS ltcl_test_bind IMPLEMENTATION.
METHOD test_one_way_w_x_error.
DATA(lo_app_client) = NEW ltcl_test_app( ).
DATA(lo_app) = NEW z2ui5_cl_core_app( ).
DATA lo_app_client TYPE REF TO ltcl_test_app.
DATA lo_app TYPE REF TO z2ui5_cl_core_app.
DATA lo_bind TYPE REF TO z2ui5_cl_core_srv_bind.
DATA temp18 LIKE REF TO lo_app_client->xx.
CREATE OBJECT lo_app_client TYPE ltcl_test_app.
CREATE OBJECT lo_app TYPE z2ui5_cl_core_app.
lo_app->mo_app = lo_app_client.
DATA(lo_bind) = NEW z2ui5_cl_core_srv_bind( lo_app ).
CREATE OBJECT lo_bind TYPE z2ui5_cl_core_srv_bind EXPORTING APP = lo_app.
TRY.
lo_bind->main( val = REF #( lo_app_client->xx )
GET REFERENCE OF lo_app_client->xx INTO temp18.
lo_bind->main( val = temp18
type = z2ui5_if_core_types=>cs_bind_type-one_way ).
cl_abap_unit_assert=>abort( ).
@ -80,13 +88,23 @@ CLASS ltcl_test_bind IMPLEMENTATION.
METHOD test_one_way.
DATA(lo_app_client) = NEW ltcl_test_app( ).
DATA(lo_app) = NEW z2ui5_cl_core_app( ).
DATA lo_app_client TYPE REF TO ltcl_test_app.
DATA lo_app TYPE REF TO z2ui5_cl_core_app.
DATA lo_bind TYPE REF TO z2ui5_cl_core_srv_bind.
DATA temp19 LIKE REF TO lo_app_client->mv_value.
DATA lv_bind TYPE string.
CREATE OBJECT lo_app_client TYPE ltcl_test_app.
CREATE OBJECT lo_app TYPE z2ui5_cl_core_app.
lo_app->mo_app = lo_app_client.
DATA(lo_bind) = NEW z2ui5_cl_core_srv_bind( lo_app ).
DATA(lv_bind) = lo_bind->main( val = REF #( lo_app_client->mv_value )
CREATE OBJECT lo_bind TYPE z2ui5_cl_core_srv_bind EXPORTING APP = lo_app.
GET REFERENCE OF lo_app_client->mv_value INTO temp19.
lv_bind = lo_bind->main( val = temp19
type = z2ui5_if_core_types=>cs_bind_type-one_way ).
cl_abap_unit_assert=>assert_equals( exp = `{/MV_VALUE}`
@ -96,17 +114,28 @@ CLASS ltcl_test_bind IMPLEMENTATION.
METHOD test_error_diff.
DATA(lo_app_client) = NEW ltcl_test_app( ).
DATA(lo_app) = NEW z2ui5_cl_core_app( ).
DATA lo_app_client TYPE REF TO ltcl_test_app.
DATA lo_app TYPE REF TO z2ui5_cl_core_app.
DATA lo_bind TYPE REF TO z2ui5_cl_core_srv_bind.
DATA temp20 LIKE REF TO lo_app_client->mv_value.
DATA temp21 LIKE REF TO lo_app_client->mv_value.
CREATE OBJECT lo_app_client TYPE ltcl_test_app.
CREATE OBJECT lo_app TYPE z2ui5_cl_core_app.
lo_app->mo_app = lo_app_client.
DATA(lo_bind) = NEW z2ui5_cl_core_srv_bind( lo_app ).
lo_bind->main( val = REF #( lo_app_client->mv_value )
CREATE OBJECT lo_bind TYPE z2ui5_cl_core_srv_bind EXPORTING APP = lo_app.
GET REFERENCE OF lo_app_client->mv_value INTO temp20.
lo_bind->main( val = temp20
type = z2ui5_if_core_types=>cs_bind_type-one_way ).
TRY.
lo_bind->main( val = REF #( lo_app_client->mv_value )
GET REFERENCE OF lo_app_client->mv_value INTO temp21.
lo_bind->main( val = temp21
type = z2ui5_if_core_types=>cs_bind_type-two_way ).
cl_abap_unit_assert=>abort( ).
@ -122,16 +151,31 @@ CLASS ltcl_test_bind IMPLEMENTATION.
* RETURN.
* ENDIF.
DATA(lo_app_client) = NEW ltcl_test_app( ).
DATA(lo_app) = NEW z2ui5_cl_core_app( ).
DATA lo_app_client TYPE REF TO ltcl_test_app.
DATA lo_app TYPE REF TO z2ui5_cl_core_app.
DATA lo_bind TYPE REF TO z2ui5_cl_core_srv_bind.
DATA temp22 LIKE REF TO lo_app_client->mv_value.
DATA lv_bind TYPE string.
DATA temp23 LIKE REF TO lo_app_client->mv_value.
DATA lv_bind2 TYPE string.
CREATE OBJECT lo_app_client TYPE ltcl_test_app.
CREATE OBJECT lo_app TYPE z2ui5_cl_core_app.
lo_app->mo_app = lo_app_client.
DATA(lo_bind) = NEW z2ui5_cl_core_srv_bind( lo_app ).
DATA(lv_bind) = lo_bind->main( val = REF #( lo_app_client->mv_value )
CREATE OBJECT lo_bind TYPE z2ui5_cl_core_srv_bind EXPORTING APP = lo_app.
GET REFERENCE OF lo_app_client->mv_value INTO temp22.
lv_bind = lo_bind->main( val = temp22
type = z2ui5_if_core_types=>cs_bind_type-two_way ).
DATA(lv_bind2) = lo_bind->main( val = REF #( lo_app_client->mv_value )
GET REFERENCE OF lo_app_client->mv_value INTO temp23.
lv_bind2 = lo_bind->main( val = temp23
type = z2ui5_if_core_types=>cs_bind_type-two_way ).
cl_abap_unit_assert=>assert_equals( exp = lv_bind2
@ -143,13 +187,20 @@ CLASS ltcl_test_bind IMPLEMENTATION.
METHOD test_local.
DATA(lo_app_client) = NEW ltcl_test_app( ).
DATA(lo_app) = NEW z2ui5_cl_core_app( ).
DATA lo_app_client TYPE REF TO ltcl_test_app.
DATA lo_app TYPE REF TO z2ui5_cl_core_app.
DATA lo_bind TYPE REF TO z2ui5_cl_core_srv_bind.
DATA lv_bind TYPE string.
CREATE OBJECT lo_app_client TYPE ltcl_test_app.
CREATE OBJECT lo_app TYPE z2ui5_cl_core_app.
lo_app->mo_app = lo_app_client.
DATA(lo_bind) = NEW z2ui5_cl_core_srv_bind( lo_app ).
DATA(lv_bind) = lo_bind->main_local( lo_app_client->mv_value ).
CREATE OBJECT lo_bind TYPE z2ui5_cl_core_srv_bind EXPORTING APP = lo_app.
lv_bind = lo_bind->main_local( lo_app_client->mv_value ).
cl_abap_unit_assert=>assert_not_initial( lv_bind ).
@ -157,17 +208,29 @@ CLASS ltcl_test_bind IMPLEMENTATION.
METHOD test_local_one.
DATA(lo_app_client) = NEW ltcl_test_app( ).
DATA(lo_app) = NEW z2ui5_cl_core_app( ).
DATA lo_app_client TYPE REF TO ltcl_test_app.
DATA lo_app TYPE REF TO z2ui5_cl_core_app.
DATA lo_bind TYPE REF TO z2ui5_cl_core_srv_bind.
DATA lv_bind TYPE string.
DATA temp24 LIKE REF TO lo_app_client->mv_value.
DATA lv_bind2 TYPE string.
CREATE OBJECT lo_app_client TYPE ltcl_test_app.
CREATE OBJECT lo_app TYPE z2ui5_cl_core_app.
lo_app->mo_app = lo_app_client.
DATA(lo_bind) = NEW z2ui5_cl_core_srv_bind( lo_app ).
DATA(lv_bind) = lo_bind->main_local( lo_app_client->mv_value ).
CREATE OBJECT lo_bind TYPE z2ui5_cl_core_srv_bind EXPORTING APP = lo_app.
lv_bind = lo_bind->main_local( lo_app_client->mv_value ).
cl_abap_unit_assert=>assert_not_initial( lv_bind ).
DATA(lv_bind2) = lo_bind->main( val = REF #( lo_app_client->mv_value )
GET REFERENCE OF lo_app_client->mv_value INTO temp24.
lv_bind2 = lo_bind->main( val = temp24
type = z2ui5_if_core_types=>cs_bind_type-two_way ).
cl_abap_unit_assert=>assert_not_initial( lv_bind2 ).
@ -210,19 +273,36 @@ ENDCLASS.
CLASS ltcl_test_main_structure IMPLEMENTATION.
METHOD test_one_way_lev1.
DATA(lo_test_app) = NEW ltcl_test_main_structure( ).
DATA(lo_app) = NEW z2ui5_cl_core_app( ).
DATA lo_test_app TYPE REF TO ltcl_test_main_structure.
DATA lo_app TYPE REF TO z2ui5_cl_core_app.
DATA lo_bind TYPE REF TO z2ui5_cl_core_srv_bind.
DATA temp25 LIKE REF TO lo_test_app->ms_struc-input.
DATA lv_result TYPE string.
DATA temp26 LIKE REF TO lo_test_app->ms_struc-input.
DATA temp1 TYPE z2ui5_if_core_types=>ty_s_bind_config.
CREATE OBJECT lo_test_app TYPE ltcl_test_main_structure.
CREATE OBJECT lo_app TYPE z2ui5_cl_core_app.
lo_app->mo_app = lo_test_app.
DATA(lo_bind) = NEW z2ui5_cl_core_srv_bind( lo_app ).
DATA(lv_result) = lo_bind->main( val = REF #( lo_test_app->ms_struc-input )
CREATE OBJECT lo_bind TYPE z2ui5_cl_core_srv_bind EXPORTING APP = lo_app.
GET REFERENCE OF lo_test_app->ms_struc-input INTO temp25.
lv_result = lo_bind->main( val = temp25
type = z2ui5_if_core_types=>cs_bind_type-one_way ).
cl_abap_unit_assert=>assert_equals( exp = `{/MS_STRUC/INPUT}`
act = lv_result ).
lv_result = lo_bind->main( val = REF #( lo_test_app->ms_struc-input )
config = VALUE #( path_only = abap_true )
GET REFERENCE OF lo_test_app->ms_struc-input INTO temp26.
CLEAR temp1.
temp1-path_only = abap_true.
lv_result = lo_bind->main( val = temp26
config = temp1
type = z2ui5_if_core_types=>cs_bind_type-one_way ).
cl_abap_unit_assert=>assert_equals( exp = `/MS_STRUC/INPUT`
@ -232,12 +312,22 @@ CLASS ltcl_test_main_structure IMPLEMENTATION.
METHOD test_one_way_lev2.
DATA(lo_test_app) = NEW ltcl_test_main_structure( ).
DATA(lo_app) = NEW z2ui5_cl_core_app( ).
DATA lo_test_app TYPE REF TO ltcl_test_main_structure.
DATA lo_app TYPE REF TO z2ui5_cl_core_app.
DATA lo_bind TYPE REF TO z2ui5_cl_core_srv_bind.
DATA temp27 LIKE REF TO lo_test_app->ms_struc-s_02-input.
DATA lv_result TYPE string.
CREATE OBJECT lo_test_app TYPE ltcl_test_main_structure.
CREATE OBJECT lo_app TYPE z2ui5_cl_core_app.
lo_app->mo_app = lo_test_app.
DATA(lo_bind) = NEW z2ui5_cl_core_srv_bind( lo_app ).
DATA(lv_result) = lo_bind->main( val = REF #( lo_test_app->ms_struc-s_02-input )
CREATE OBJECT lo_bind TYPE z2ui5_cl_core_srv_bind EXPORTING APP = lo_app.
GET REFERENCE OF lo_test_app->ms_struc-s_02-input INTO temp27.
lv_result = lo_bind->main( val = temp27
type = z2ui5_if_core_types=>cs_bind_type-one_way ).
cl_abap_unit_assert=>assert_equals( exp = `{/MS_STRUC/S_02/INPUT}`
@ -247,12 +337,22 @@ CLASS ltcl_test_main_structure IMPLEMENTATION.
METHOD test_one_way_lev3.
DATA(lo_test_app) = NEW ltcl_test_main_structure( ).
DATA(lo_app) = NEW z2ui5_cl_core_app( ).
DATA lo_test_app TYPE REF TO ltcl_test_main_structure.
DATA lo_app TYPE REF TO z2ui5_cl_core_app.
DATA lo_bind TYPE REF TO z2ui5_cl_core_srv_bind.
DATA temp28 LIKE REF TO lo_test_app->ms_struc-s_02-s_03-input.
DATA lv_result TYPE string.
CREATE OBJECT lo_test_app TYPE ltcl_test_main_structure.
CREATE OBJECT lo_app TYPE z2ui5_cl_core_app.
lo_app->mo_app = lo_test_app.
DATA(lo_bind) = NEW z2ui5_cl_core_srv_bind( lo_app ).
DATA(lv_result) = lo_bind->main( val = REF #( lo_test_app->ms_struc-s_02-s_03-input )
CREATE OBJECT lo_bind TYPE z2ui5_cl_core_srv_bind EXPORTING APP = lo_app.
GET REFERENCE OF lo_test_app->ms_struc-s_02-s_03-input INTO temp28.
lv_result = lo_bind->main( val = temp28
type = z2ui5_if_core_types=>cs_bind_type-one_way ).
cl_abap_unit_assert=>assert_equals( exp = `{/MS_STRUC/S_02/S_03/INPUT}`
@ -262,12 +362,22 @@ CLASS ltcl_test_main_structure IMPLEMENTATION.
METHOD test_one_way_lev4_long_name.
DATA(lo_test_app) = NEW ltcl_test_main_structure( ).
DATA(lo_app) = NEW z2ui5_cl_core_app( ).
DATA lo_test_app TYPE REF TO ltcl_test_main_structure.
DATA lo_app TYPE REF TO z2ui5_cl_core_app.
DATA lo_bind TYPE REF TO z2ui5_cl_core_srv_bind.
DATA temp29 LIKE REF TO lo_test_app->ms_struc-s_02-s_03-s_04-input.
DATA lv_result TYPE string.
CREATE OBJECT lo_test_app TYPE ltcl_test_main_structure.
CREATE OBJECT lo_app TYPE z2ui5_cl_core_app.
lo_app->mo_app = lo_test_app.
DATA(lo_bind) = NEW z2ui5_cl_core_srv_bind( lo_app ).
DATA(lv_result) = lo_bind->main( val = REF #( lo_test_app->ms_struc-s_02-s_03-s_04-input )
CREATE OBJECT lo_bind TYPE z2ui5_cl_core_srv_bind EXPORTING APP = lo_app.
GET REFERENCE OF lo_test_app->ms_struc-s_02-s_03-s_04-input INTO temp29.
lv_result = lo_bind->main( val = temp29
type = z2ui5_if_core_types=>cs_bind_type-one_way ).
cl_abap_unit_assert=>assert_equals( exp = `{/MS_STRUC/S_02/S_03/S_04/INPUT}`
@ -312,14 +422,24 @@ ENDCLASS.
CLASS ltcl_test_main_object IMPLEMENTATION.
METHOD test_one_way_value.
DATA(lo_test_app) = NEW ltcl_test_main_object( ).
lo_test_app->mo_obj = NEW #( ).
DATA lo_test_app TYPE REF TO ltcl_test_main_object.
DATA lo_app TYPE REF TO z2ui5_cl_core_app.
DATA lo_bind TYPE REF TO z2ui5_cl_core_srv_bind.
DATA temp30 LIKE REF TO lo_test_app->mo_obj->mv_value.
DATA lv_result TYPE string.
CREATE OBJECT lo_test_app TYPE ltcl_test_main_object.
CREATE OBJECT lo_test_app->mo_obj.
lo_test_app->mo_obj->mv_value = `test`.
DATA(lo_app) = NEW z2ui5_cl_core_app( ).
CREATE OBJECT lo_app TYPE z2ui5_cl_core_app.
lo_app->mo_app = lo_test_app.
DATA(lo_bind) = NEW z2ui5_cl_core_srv_bind( lo_app ).
DATA(lv_result) = lo_bind->main( val = REF #( lo_test_app->mo_obj->mv_value )
CREATE OBJECT lo_bind TYPE z2ui5_cl_core_srv_bind EXPORTING APP = lo_app.
GET REFERENCE OF lo_test_app->mo_obj->mv_value INTO temp30.
lv_result = lo_bind->main( val = temp30
type = z2ui5_if_core_types=>cs_bind_type-one_way ).
cl_abap_unit_assert=>assert_equals( exp = `{/MO_OBJ/MV_VALUE}`
@ -329,13 +449,23 @@ CLASS ltcl_test_main_object IMPLEMENTATION.
METHOD test_one_way_struc.
DATA(lo_test_app) = NEW ltcl_test_main_object( ).
lo_test_app->mo_obj = NEW #( ).
DATA(lo_app) = NEW z2ui5_cl_core_app( ).
DATA lo_test_app TYPE REF TO ltcl_test_main_object.
DATA lo_app TYPE REF TO z2ui5_cl_core_app.
DATA lo_bind TYPE REF TO z2ui5_cl_core_srv_bind.
DATA temp31 LIKE REF TO lo_test_app->mo_obj->ms_struc-input.
DATA lv_result TYPE string.
CREATE OBJECT lo_test_app TYPE ltcl_test_main_object.
CREATE OBJECT lo_test_app->mo_obj.
CREATE OBJECT lo_app TYPE z2ui5_cl_core_app.
lo_app->mo_app = lo_test_app.
DATA(lo_bind) = NEW z2ui5_cl_core_srv_bind( lo_app ).
DATA(lv_result) = lo_bind->main( val = REF #( lo_test_app->mo_obj->ms_struc-input )
CREATE OBJECT lo_bind TYPE z2ui5_cl_core_srv_bind EXPORTING APP = lo_app.
GET REFERENCE OF lo_test_app->mo_obj->ms_struc-input INTO temp31.
lv_result = lo_bind->main( val = temp31
type = z2ui5_if_core_types=>cs_bind_type-one_way ).
cl_abap_unit_assert=>assert_equals( exp = `{/MO_OBJ/MS_STRUC/INPUT}`

View File

@ -57,40 +57,53 @@ CLASS z2ui5_cl_core_srv_diss IMPLEMENTATION.
METHOD create_new_entry.
result = VALUE z2ui5_if_core_types=>ty_s_attri( ).
DATA temp1 TYPE z2ui5_if_core_types=>ty_s_attri.
DATA lo_model TYPE REF TO z2ui5_cl_core_srv_attri.
CLEAR temp1.
result = temp1.
result-name = name.
DATA(lo_model) = NEW z2ui5_cl_core_srv_attri( attri = mt_attri
app = mo_app ).
CREATE OBJECT lo_model TYPE z2ui5_cl_core_srv_attri EXPORTING 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 TYPE REF TO data.
DATA temp2 TYPE z2ui5_if_core_types=>ty_s_attri.
DATA ls_attri2 LIKE temp2.
DATA lt_attri TYPE z2ui5_if_core_types=>ty_t_attri.
DATA lo_model TYPE REF TO z2ui5_cl_core_srv_attri.
IF z2ui5_cl_util=>check_unassign_inital( ir_attri->r_ref ).
IF z2ui5_cl_util=>check_unassign_inital( ir_attri->r_ref ) IS NOT INITIAL.
RETURN.
ENDIF.
DATA(lr_ref) = z2ui5_cl_util=>unassign_data( ir_attri->r_ref ).
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( ).
CLEAR temp2.
ls_attri2 = temp2.
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 ).
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_srv_attri( attri = mt_attri
app = mo_app ).
CREATE OBJECT lo_model TYPE z2ui5_cl_core_srv_attri EXPORTING 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.
@ -99,21 +112,40 @@ CLASS z2ui5_cl_core_srv_diss IMPLEMENTATION.
ENDMETHOD.
METHOD diss_oref.
DATA lr_ref TYPE REF TO object.
DATA lt_attri TYPE abap_attrdescr_tab.
DATA temp3 LIKE LINE OF lt_attri.
DATA lr_attri LIKE REF TO temp3.
DATA temp4 TYPE string.
DATA lv_name TYPE string.
DATA ls_new TYPE z2ui5_if_core_types=>ty_s_attri.
IF z2ui5_cl_util=>check_unassign_inital( ir_attri->r_ref ).
IF z2ui5_cl_util=>check_unassign_inital( ir_attri->r_ref ) IS NOT INITIAL.
RETURN.
ENDIF.
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)
lr_ref = z2ui5_cl_util=>unassign_object( ir_attri->r_ref ).
lt_attri = z2ui5_cl_util=>rtti_get_t_attri_by_oref( lr_ref ).
LOOP AT lt_attri REFERENCE INTO lr_attri
WHERE visibility = cl_abap_objectdescr=>public
AND is_interface = abap_false
AND is_constant = abap_false.
TRY.
DATA(lv_name) = COND #( WHEN ir_attri->name IS NOT INITIAL THEN |{ ir_attri->name }->| ) && lr_attri->name.
DATA(ls_new) = create_new_entry( lv_name ).
IF ir_attri->name IS NOT INITIAL.
temp4 = |{ ir_attri->name }->|.
ELSE.
CLEAR temp4.
ENDIF.
lv_name = temp4 && lr_attri->name.
ls_new = create_new_entry( lv_name ).
INSERT ls_new INTO TABLE result.
CATCH cx_root.
@ -123,31 +155,46 @@ CLASS z2ui5_cl_core_srv_diss IMPLEMENTATION.
ENDMETHOD.
METHOD diss_struc.
DATA lv_name TYPE string.
DATA lr_ref TYPE REF TO data.
DATA lt_attri TYPE abap_component_tab.
DATA ls_attri LIKE LINE OF lt_attri.
DATA ls_new TYPE z2ui5_if_core_types=>ty_s_attri.
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 ).
lv_name = |{ ir_attri->name }->|.
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_any( lr_ref ).
LOOP AT lt_attri INTO DATA(ls_attri).
DATA(ls_new) = create_new_entry( lv_name && ls_attri-name ).
lt_attri = z2ui5_cl_util=>rtti_get_t_attri_by_any( lr_ref ).
LOOP AT lt_attri INTO ls_attri.
ls_new = create_new_entry( lv_name && ls_attri-name ).
INSERT ls_new INTO TABLE result.
ENDLOOP.
ENDMETHOD.
METHOD main.
DATA temp5 LIKE sy-subrc.
DATA temp6 LIKE sy-subrc.
TRY.
main_init( ).
IF line_exists( mt_attri->*[ check_dissolved = abap_false ] ).
READ TABLE mt_attri->* WITH KEY check_dissolved = abap_false TRANSPORTING NO FIELDS.
temp5 = sy-subrc.
IF temp5 = 0.
main_run( ).
ENDIF.
@ -155,7 +202,10 @@ CLASS z2ui5_cl_core_srv_diss IMPLEMENTATION.
CLEAR mt_attri->*.
main_init( ).
IF line_exists( mt_attri->*[ check_dissolved = abap_false ] ).
READ TABLE mt_attri->* WITH KEY check_dissolved = abap_false TRANSPORTING NO FIELDS.
temp6 = sy-subrc.
IF temp6 = 0.
main_run( ).
ENDIF.
ENDTRY.
@ -163,6 +213,11 @@ CLASS z2ui5_cl_core_srv_diss IMPLEMENTATION.
ENDMETHOD.
METHOD main_init.
DATA temp7 LIKE REF TO mo_app.
DATA temp1 TYPE z2ui5_if_core_types=>ty_s_attri.
DATA ls_attri LIKE temp1.
DATA temp8 LIKE REF TO ls_attri.
DATA lt_init TYPE z2ui5_if_core_types=>ty_t_attri.
IF mt_attri->* IS NOT INITIAL.
LOOP AT mt_attri->* TRANSPORTING NO FIELDS
@ -173,24 +228,46 @@ CLASS z2ui5_cl_core_srv_diss IMPLEMENTATION.
ENDIF.
ENDIF.
DATA(ls_attri) = VALUE z2ui5_if_core_types=>ty_s_attri( r_ref = REF #( mo_app ) ).
DATA(lt_init) = diss_oref( REF #( ls_attri ) ).
GET REFERENCE OF mo_app INTO temp7.
CLEAR temp1.
temp1-r_ref = temp7.
ls_attri = temp1.
GET REFERENCE OF ls_attri INTO temp8.
lt_init = diss_oref( temp8 ).
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( ).
DATA temp9 TYPE z2ui5_if_core_types=>ty_t_attri.
DATA lt_attri_new LIKE temp9.
DATA temp10 LIKE LINE OF mt_attri->*.
DATA lr_attri LIKE REF TO temp10.
DATA ls_entry TYPE z2ui5_if_core_types=>ty_s_attri.
DATA lt_attri_struc TYPE z2ui5_if_core_types=>ty_t_attri.
DATA lt_attri_oref TYPE z2ui5_if_core_types=>ty_t_attri.
DATA lt_attri_dref TYPE z2ui5_if_core_types=>ty_t_attri.
CLEAR temp9.
LOOP AT mt_attri->* REFERENCE INTO DATA(lr_attri)
lt_attri_new = temp9.
LOOP AT mt_attri->* REFERENCE INTO lr_attri
WHERE check_dissolved = abap_false
AND bind_type <> z2ui5_if_core_types=>cs_bind_type-one_time.
lr_attri->check_dissolved = abap_true.
IF lr_attri->o_typedescr IS NOT BOUND.
DATA(ls_entry) = create_new_entry( lr_attri->name ).
ls_entry = create_new_entry( lr_attri->name ).
lr_attri->o_typedescr = ls_entry-o_typedescr.
lr_attri->r_ref = ls_entry-r_ref.
ENDIF.
@ -198,7 +275,8 @@ CLASS z2ui5_cl_core_srv_diss IMPLEMENTATION.
CASE lr_attri->o_typedescr->kind.
WHEN cl_abap_typedescr=>kind_struct.
DATA(lt_attri_struc) = diss_struc( lr_attri ).
lt_attri_struc = diss_struc( lr_attri ).
INSERT LINES OF lt_attri_struc INTO TABLE lt_attri_new.
WHEN cl_abap_typedescr=>kind_ref.
@ -206,10 +284,12 @@ CLASS z2ui5_cl_core_srv_diss IMPLEMENTATION.
CASE lr_attri->o_typedescr->type_kind.
WHEN cl_abap_typedescr=>typekind_oref.
DATA(lt_attri_oref) = diss_oref( lr_attri ).
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 ).
lt_attri_dref = diss_dref( lr_attri ).
INSERT LINES OF lt_attri_dref INTO TABLE lt_attri_new.
WHEN OTHERS.
ASSERT 1 = 0.

View File

@ -51,16 +51,36 @@ ENDCLASS.
CLASS ltcl_test_dissolve IMPLEMENTATION.
METHOD test_ref.
DATA(lo_app) = NEW ltcl_test_dissolve( ).
DATA lo_app TYPE REF TO ltcl_test_dissolve.
DATA lt_attri TYPE z2ui5_if_core_types=>ty_t_attri.
DATA(lo_model) = NEW z2ui5_cl_core_srv_diss( attri = REF #( lt_attri )
app = lo_app ).
DATA temp11 LIKE REF TO lt_attri.
DATA lo_model TYPE REF TO z2ui5_cl_core_srv_diss.
DATA ls_attri LIKE LINE OF lt_attri.
DATA temp2 LIKE LINE OF lt_attri.
DATA temp3 LIKE sy-tabix.
DATA lr_ref LIKE REF TO lo_app->mv_value.
CREATE OBJECT lo_app TYPE ltcl_test_dissolve.
GET REFERENCE OF lt_attri INTO temp11.
CREATE OBJECT lo_model TYPE z2ui5_cl_core_srv_diss EXPORTING attri = temp11 app = lo_app.
lo_model->main( ).
DATA(ls_attri) = lt_attri[ name = `MV_VALUE` ].
GET REFERENCE OF lo_app->mv_value INTO DATA(lr_ref).
temp3 = sy-tabix.
READ TABLE lt_attri WITH KEY name = `MV_VALUE` INTO temp2.
sy-tabix = temp3.
IF sy-subrc <> 0.
ASSERT 1 = 0.
ENDIF.
ls_attri = temp2.
GET REFERENCE OF lo_app->mv_value INTO lr_ref.
IF ls_attri-r_ref <> lr_ref.
cl_abap_unit_assert=>abort( ).
@ -70,71 +90,184 @@ CLASS ltcl_test_dissolve IMPLEMENTATION.
METHOD test_init.
DATA(lo_app) = NEW ltcl_test_dissolve( ).
DATA lo_app TYPE REF TO ltcl_test_dissolve.
DATA lt_attri TYPE z2ui5_if_core_types=>ty_t_attri.
DATA(lo_model) = NEW z2ui5_cl_core_srv_diss( attri = REF #( lt_attri )
app = lo_app ).
DATA temp12 LIKE REF TO lt_attri.
DATA lo_model TYPE REF TO z2ui5_cl_core_srv_diss.
DATA temp13 TYPE z2ui5_if_core_types=>ty_s_attri.
DATA temp14 TYPE z2ui5_if_core_types=>ty_s_attri.
DATA temp15 TYPE z2ui5_if_core_types=>ty_s_attri.
DATA temp16 TYPE z2ui5_if_core_types=>ty_s_attri.
DATA temp17 TYPE z2ui5_if_core_types=>ty_s_attri.
DATA temp18 TYPE z2ui5_if_core_types=>ty_s_attri.
DATA temp19 TYPE z2ui5_if_core_types=>ty_s_attri.
DATA temp20 TYPE z2ui5_if_core_types=>ty_s_attri.
CREATE OBJECT lo_app TYPE ltcl_test_dissolve.
GET REFERENCE OF lt_attri INTO temp12.
CREATE OBJECT lo_model TYPE z2ui5_cl_core_srv_diss EXPORTING attri = temp12 app = lo_app.
lo_model->main( ).
lo_model->main( ).
lo_model->main( ).
cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_attri[ name = `MR_STRUC` ] OPTIONAL ) ).
cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_attri[ name = `MR_VALUE` ] OPTIONAL ) ).
cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_attri[ name = `MS_STRUC` ] OPTIONAL ) ).
cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_attri[ name = `MV_VALUE` ] OPTIONAL ) ).
CLEAR temp13.
READ TABLE lt_attri INTO temp14 WITH KEY name = `MR_STRUC`.
IF sy-subrc = 0.
temp13 = temp14.
ENDIF.
cl_abap_unit_assert=>assert_not_initial( temp13 ).
CLEAR temp15.
READ TABLE lt_attri INTO temp16 WITH KEY name = `MR_VALUE`.
IF sy-subrc = 0.
temp15 = temp16.
ENDIF.
cl_abap_unit_assert=>assert_not_initial( temp15 ).
CLEAR temp17.
READ TABLE lt_attri INTO temp18 WITH KEY name = `MS_STRUC`.
IF sy-subrc = 0.
temp17 = temp18.
ENDIF.
cl_abap_unit_assert=>assert_not_initial( temp17 ).
CLEAR temp19.
READ TABLE lt_attri INTO temp20 WITH KEY name = `MV_VALUE`.
IF sy-subrc = 0.
temp19 = temp20.
ENDIF.
cl_abap_unit_assert=>assert_not_initial( temp19 ).
ENDMETHOD.
METHOD test_dref.
DATA(lo_app) = NEW ltcl_test_dissolve( ).
DATA lo_app TYPE REF TO ltcl_test_dissolve.
DATA lt_attri TYPE z2ui5_if_core_types=>ty_t_attri.
DATA temp21 LIKE REF TO lt_attri.
DATA lo_model TYPE REF TO z2ui5_cl_core_srv_diss.
DATA temp22 TYPE z2ui5_if_core_types=>ty_s_attri.
DATA temp23 TYPE z2ui5_if_core_types=>ty_s_attri.
CREATE OBJECT lo_app TYPE 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_srv_diss( attri = REF #( lt_attri )
app = lo_app ).
GET REFERENCE OF lt_attri INTO temp21.
CREATE OBJECT lo_model TYPE z2ui5_cl_core_srv_diss EXPORTING attri = temp21 app = lo_app.
lo_model->main( ).
lo_model->main( ).
cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_attri[ name = `MR_VALUE->*` ] OPTIONAL ) ).
CLEAR temp22.
READ TABLE lt_attri INTO temp23 WITH KEY name = `MR_VALUE->*`.
IF sy-subrc = 0.
temp22 = temp23.
ENDIF.
cl_abap_unit_assert=>assert_not_initial( temp22 ).
ENDMETHOD.
METHOD test_oref.
DATA(lo_app) = NEW ltcl_test_dissolve( ).
lo_app->mo_app = NEW #( ).
DATA(lo_app2) = NEW ltcl_test_dissolve( ).
DATA lo_app TYPE REF TO ltcl_test_dissolve.
DATA lo_app2 TYPE REF TO ltcl_test_dissolve.
DATA lt_attri TYPE z2ui5_if_core_types=>ty_t_attri.
DATA temp24 LIKE REF TO lt_attri.
DATA lo_model TYPE REF TO z2ui5_cl_core_srv_diss.
DATA temp25 TYPE z2ui5_if_core_types=>ty_s_attri.
DATA temp26 TYPE z2ui5_if_core_types=>ty_s_attri.
DATA temp27 TYPE z2ui5_if_core_types=>ty_s_attri.
DATA temp28 TYPE z2ui5_if_core_types=>ty_s_attri.
DATA temp29 TYPE z2ui5_if_core_types=>ty_s_attri.
DATA temp30 TYPE z2ui5_if_core_types=>ty_s_attri.
DATA temp31 TYPE z2ui5_if_core_types=>ty_s_attri.
DATA temp32 TYPE z2ui5_if_core_types=>ty_s_attri.
CREATE OBJECT lo_app TYPE ltcl_test_dissolve.
CREATE OBJECT lo_app->mo_app.
CREATE OBJECT lo_app2 TYPE 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_srv_diss( attri = REF #( lt_attri )
app = lo_app2 ).
GET REFERENCE OF lt_attri INTO temp24.
CREATE OBJECT lo_model TYPE z2ui5_cl_core_srv_diss EXPORTING attri = temp24 app = lo_app2.
lo_model->main( ).
lo_model->main( ).
lo_model->main( ).
cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_attri[ name = `MO_APP->MV_VALUE` ] OPTIONAL ) ).
cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_attri[ name = `MO_APP->MR_STRUC` ] OPTIONAL ) ).
cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_attri[ name = `MO_APP->MR_VALUE` ] OPTIONAL ) ).
cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_attri[ name = `MO_APP->MS_STRUC` ] OPTIONAL ) ).
CLEAR temp25.
READ TABLE lt_attri INTO temp26 WITH KEY name = `MO_APP->MV_VALUE`.
IF sy-subrc = 0.
temp25 = temp26.
ENDIF.
cl_abap_unit_assert=>assert_not_initial( temp25 ).
CLEAR temp27.
READ TABLE lt_attri INTO temp28 WITH KEY name = `MO_APP->MR_STRUC`.
IF sy-subrc = 0.
temp27 = temp28.
ENDIF.
cl_abap_unit_assert=>assert_not_initial( temp27 ).
CLEAR temp29.
READ TABLE lt_attri INTO temp30 WITH KEY name = `MO_APP->MR_VALUE`.
IF sy-subrc = 0.
temp29 = temp30.
ENDIF.
cl_abap_unit_assert=>assert_not_initial( temp29 ).
CLEAR temp31.
READ TABLE lt_attri INTO temp32 WITH KEY name = `MO_APP->MS_STRUC`.
IF sy-subrc = 0.
temp31 = temp32.
ENDIF.
cl_abap_unit_assert=>assert_not_initial( temp31 ).
ENDMETHOD.
METHOD test_struc.
DATA(lo_app) = NEW ltcl_test_dissolve( ).
DATA lo_app TYPE REF TO ltcl_test_dissolve.
DATA lt_attri TYPE z2ui5_if_core_types=>ty_t_attri.
DATA(lo_model) = NEW z2ui5_cl_core_srv_diss( attri = REF #( lt_attri )
app = lo_app ).
DATA temp33 LIKE REF TO lt_attri.
DATA lo_model TYPE REF TO z2ui5_cl_core_srv_diss.
DATA temp34 TYPE z2ui5_if_core_types=>ty_s_attri.
DATA temp35 TYPE z2ui5_if_core_types=>ty_s_attri.
DATA temp36 TYPE z2ui5_if_core_types=>ty_s_attri.
DATA temp37 TYPE z2ui5_if_core_types=>ty_s_attri.
DATA temp38 TYPE z2ui5_if_core_types=>ty_s_attri.
DATA temp39 TYPE z2ui5_if_core_types=>ty_s_attri.
CREATE OBJECT lo_app TYPE ltcl_test_dissolve.
GET REFERENCE OF lt_attri INTO temp33.
CREATE OBJECT lo_model TYPE z2ui5_cl_core_srv_diss EXPORTING attri = temp33 app = lo_app.
lo_model->main( ).
lo_model->main( ).
@ -142,97 +275,229 @@ CLASS ltcl_test_dissolve IMPLEMENTATION.
lo_model->main( ).
lo_model->main( ).
cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_attri[ name = `MS_STRUC-INPUT` ] OPTIONAL ) ).
cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_attri[ name = `MS_STRUC-S_02-INPUT` ] OPTIONAL ) ).
cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_attri[ name = `MS_STRUC-S_02-S_03-S_04-INPUT` ] OPTIONAL ) ).
CLEAR temp34.
READ TABLE lt_attri INTO temp35 WITH KEY name = `MS_STRUC-INPUT`.
IF sy-subrc = 0.
temp34 = temp35.
ENDIF.
cl_abap_unit_assert=>assert_not_initial( temp34 ).
CLEAR temp36.
READ TABLE lt_attri INTO temp37 WITH KEY name = `MS_STRUC-S_02-INPUT`.
IF sy-subrc = 0.
temp36 = temp37.
ENDIF.
cl_abap_unit_assert=>assert_not_initial( temp36 ).
CLEAR temp38.
READ TABLE lt_attri INTO temp39 WITH KEY name = `MS_STRUC-S_02-S_03-S_04-INPUT`.
IF sy-subrc = 0.
temp38 = temp39.
ENDIF.
cl_abap_unit_assert=>assert_not_initial( temp38 ).
ENDMETHOD.
METHOD test_dref_struc.
DATA(lo_app) = NEW ltcl_test_dissolve( ).
lo_app->mo_app = NEW #( ).
DATA(lo_app2) = NEW ltcl_test_dissolve( ).
DATA lo_app TYPE REF TO ltcl_test_dissolve.
DATA lo_app2 TYPE REF TO ltcl_test_dissolve.
DATA lt_attri TYPE z2ui5_if_core_types=>ty_t_attri.
DATA temp40 LIKE REF TO lt_attri.
DATA lo_model TYPE REF TO z2ui5_cl_core_srv_diss.
DATA temp41 TYPE z2ui5_if_core_types=>ty_s_attri.
DATA temp42 TYPE z2ui5_if_core_types=>ty_s_attri.
DATA temp43 TYPE z2ui5_if_core_types=>ty_s_attri.
DATA temp44 TYPE z2ui5_if_core_types=>ty_s_attri.
DATA temp45 TYPE z2ui5_if_core_types=>ty_s_attri.
DATA temp46 TYPE z2ui5_if_core_types=>ty_s_attri.
CREATE OBJECT lo_app TYPE ltcl_test_dissolve.
CREATE OBJECT lo_app->mo_app.
CREATE OBJECT lo_app2 TYPE ltcl_test_dissolve.
lo_app2->mo_app = lo_app.
CREATE DATA lo_app->mr_struc.
DATA lt_attri TYPE z2ui5_if_core_types=>ty_t_attri.
DATA(lo_model) = NEW z2ui5_cl_core_srv_diss( attri = REF #( lt_attri )
app = lo_app ).
GET REFERENCE OF lt_attri INTO temp40.
CREATE OBJECT lo_model TYPE z2ui5_cl_core_srv_diss EXPORTING attri = temp40 app = lo_app.
lo_model->main( ).
lo_model->main( ).
lo_model->main( ).
cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_attri[ name = `MR_STRUC` ] OPTIONAL ) ).
cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_attri[ name = `MR_STRUC->INPUT` ] OPTIONAL ) ).
cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_attri[ name = `MR_STRUC->S_02-INPUT` ] OPTIONAL ) ).
CLEAR temp41.
READ TABLE lt_attri INTO temp42 WITH KEY name = `MR_STRUC`.
IF sy-subrc = 0.
temp41 = temp42.
ENDIF.
cl_abap_unit_assert=>assert_not_initial( temp41 ).
CLEAR temp43.
READ TABLE lt_attri INTO temp44 WITH KEY name = `MR_STRUC->INPUT`.
IF sy-subrc = 0.
temp43 = temp44.
ENDIF.
cl_abap_unit_assert=>assert_not_initial( temp43 ).
CLEAR temp45.
READ TABLE lt_attri INTO temp46 WITH KEY name = `MR_STRUC->S_02-INPUT`.
IF sy-subrc = 0.
temp45 = temp46.
ENDIF.
cl_abap_unit_assert=>assert_not_initial( temp45 ).
ENDMETHOD.
METHOD test_oref_dref.
DATA(lo_app) = NEW ltcl_test_dissolve( ).
lo_app->mo_app = NEW #( ).
DATA(lo_app2) = NEW ltcl_test_dissolve( ).
DATA lo_app TYPE REF TO ltcl_test_dissolve.
DATA lo_app2 TYPE REF TO ltcl_test_dissolve.
DATA lt_attri TYPE z2ui5_if_core_types=>ty_t_attri.
DATA temp47 LIKE REF TO lt_attri.
DATA lo_model TYPE REF TO z2ui5_cl_core_srv_diss.
DATA temp48 TYPE z2ui5_if_core_types=>ty_s_attri.
DATA temp49 TYPE z2ui5_if_core_types=>ty_s_attri.
CREATE OBJECT lo_app TYPE ltcl_test_dissolve.
CREATE OBJECT lo_app->mo_app.
CREATE OBJECT lo_app2 TYPE ltcl_test_dissolve.
lo_app->mo_app = lo_app2.
CREATE DATA lo_app2->mr_value TYPE string.
DATA lt_attri TYPE z2ui5_if_core_types=>ty_t_attri.
DATA(lo_model) = NEW z2ui5_cl_core_srv_diss( attri = REF #( lt_attri )
app = lo_app ).
GET REFERENCE OF lt_attri INTO temp47.
CREATE OBJECT lo_model TYPE z2ui5_cl_core_srv_diss EXPORTING attri = temp47 app = lo_app.
lo_model->main( ).
lo_model->main( ).
lo_model->main( ).
cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_attri[ name = `MO_APP->MR_VALUE->*` ] OPTIONAL ) ).
CLEAR temp48.
READ TABLE lt_attri INTO temp49 WITH KEY name = `MO_APP->MR_VALUE->*`.
IF sy-subrc = 0.
temp48 = temp49.
ENDIF.
cl_abap_unit_assert=>assert_not_initial( temp48 ).
ENDMETHOD.
METHOD test_oref_dref_struc.
DATA(lo_app) = NEW ltcl_test_dissolve( ).
lo_app->mo_app = NEW #( ).
DATA(lo_app2) = NEW ltcl_test_dissolve( ).
DATA lo_app TYPE REF TO ltcl_test_dissolve.
DATA lo_app2 TYPE REF TO ltcl_test_dissolve.
DATA lt_attri TYPE z2ui5_if_core_types=>ty_t_attri.
DATA temp50 LIKE REF TO lt_attri.
DATA lo_model TYPE REF TO z2ui5_cl_core_srv_diss.
DATA temp51 TYPE z2ui5_if_core_types=>ty_s_attri.
DATA temp52 TYPE z2ui5_if_core_types=>ty_s_attri.
DATA temp53 TYPE z2ui5_if_core_types=>ty_s_attri.
DATA temp54 TYPE z2ui5_if_core_types=>ty_s_attri.
DATA temp55 TYPE z2ui5_if_core_types=>ty_s_attri.
DATA temp56 TYPE z2ui5_if_core_types=>ty_s_attri.
CREATE OBJECT lo_app TYPE ltcl_test_dissolve.
CREATE OBJECT lo_app->mo_app.
CREATE OBJECT lo_app2 TYPE ltcl_test_dissolve.
lo_app->mo_app = lo_app2.
CREATE DATA lo_app->mo_app->mr_struc.
DATA lt_attri TYPE z2ui5_if_core_types=>ty_t_attri.
DATA(lo_model) = NEW z2ui5_cl_core_srv_diss( attri = REF #( lt_attri )
app = lo_app ).
GET REFERENCE OF lt_attri INTO temp50.
CREATE OBJECT lo_model TYPE z2ui5_cl_core_srv_diss EXPORTING attri = temp50 app = lo_app.
lo_model->main( ).
lo_model->main( ).
lo_model->main( ).
lo_model->main( ).
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_STRUC->INPUT` ] OPTIONAL ) ).
cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_attri[ name = `MO_APP->MR_STRUC->S_02-INPUT` ] OPTIONAL ) ).
CLEAR temp51.
READ TABLE lt_attri INTO temp52 WITH KEY name = `MO_APP->MR_STRUC`.
IF sy-subrc = 0.
temp51 = temp52.
ENDIF.
cl_abap_unit_assert=>assert_not_initial( temp51 ).
CLEAR temp53.
READ TABLE lt_attri INTO temp54 WITH KEY name = `MO_APP->MR_STRUC->INPUT`.
IF sy-subrc = 0.
temp53 = temp54.
ENDIF.
cl_abap_unit_assert=>assert_not_initial( temp53 ).
CLEAR temp55.
READ TABLE lt_attri INTO temp56 WITH KEY name = `MO_APP->MR_STRUC->S_02-INPUT`.
IF sy-subrc = 0.
temp55 = temp56.
ENDIF.
cl_abap_unit_assert=>assert_not_initial( temp55 ).
ENDMETHOD.
METHOD test_struc_dref.
DATA(lo_app) = NEW ltcl_test_dissolve( ).
lo_app->mo_app = NEW #( ).
DATA lo_app TYPE REF TO ltcl_test_dissolve.
DATA lt_attri TYPE z2ui5_if_core_types=>ty_t_attri.
DATA temp57 LIKE REF TO lt_attri.
DATA lo_model TYPE REF TO z2ui5_cl_core_srv_diss.
DATA temp58 TYPE z2ui5_if_core_types=>ty_s_attri.
DATA temp59 TYPE z2ui5_if_core_types=>ty_s_attri.
DATA temp60 TYPE z2ui5_if_core_types=>ty_s_attri.
DATA temp61 TYPE z2ui5_if_core_types=>ty_s_attri.
CREATE OBJECT lo_app TYPE ltcl_test_dissolve.
CREATE OBJECT lo_app->mo_app.
CREATE DATA lo_app->mo_app->ms_struc2-r_ref TYPE string.
DATA lt_attri TYPE z2ui5_if_core_types=>ty_t_attri.
DATA(lo_model) = NEW z2ui5_cl_core_srv_diss( attri = REF #( lt_attri )
app = lo_app ).
GET REFERENCE OF lt_attri INTO temp57.
CREATE OBJECT lo_model TYPE z2ui5_cl_core_srv_diss EXPORTING attri = temp57 app = lo_app.
lo_model->main( ).
lo_model->main( ).
lo_model->main( ).
lo_model->main( ).
cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_attri[ name = `MO_APP->MS_STRUC2-R_REF` ] OPTIONAL ) ).
cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_attri[ name = `MO_APP->MS_STRUC2-R_REF->*` ] OPTIONAL ) ).
CLEAR temp58.
READ TABLE lt_attri INTO temp59 WITH KEY name = `MO_APP->MS_STRUC2-R_REF`.
IF sy-subrc = 0.
temp58 = temp59.
ENDIF.
cl_abap_unit_assert=>assert_not_initial( temp58 ).
CLEAR temp60.
READ TABLE lt_attri INTO temp61 WITH KEY name = `MO_APP->MS_STRUC2-R_REF->*`.
IF sy-subrc = 0.
temp60 = temp61.
ENDIF.
cl_abap_unit_assert=>assert_not_initial( temp60 ).
ENDMETHOD.
ENDCLASS.

View File

@ -54,11 +54,17 @@ CLASS z2ui5_cl_core_srv_event IMPLEMENTATION.
ENDMETHOD.
METHOD get_t_arg.
DATA temp1 LIKE LINE OF val.
DATA lr_arg LIKE REF TO temp1.
DATA lv_new TYPE string.
IF val IS NOT INITIAL.
LOOP AT val REFERENCE INTO DATA(lr_arg).
DATA(lv_new) = lr_arg->*.
LOOP AT val REFERENCE INTO lr_arg.
lv_new = lr_arg->*.
IF lv_new IS INITIAL.
CONTINUE.
ENDIF.

View File

@ -14,8 +14,11 @@ ENDCLASS.
CLASS ltcl_test IMPLEMENTATION.
METHOD event.
DATA(lo_event) = NEW z2ui5_cl_core_srv_event( ).
DATA(lv_event) = lo_event->get_event( `POST` ).
DATA lo_event TYPE REF TO z2ui5_cl_core_srv_event.
DATA lv_event TYPE string.
CREATE OBJECT lo_event TYPE z2ui5_cl_core_srv_event.
lv_event = lo_event->get_event( `POST` ).
cl_abap_unit_assert=>assert_equals( exp = `.eB(['POST'])`
act = lv_event ).
@ -24,8 +27,11 @@ CLASS ltcl_test IMPLEMENTATION.
METHOD event_backend.
DATA(lo_event) = NEW z2ui5_cl_core_srv_event( ).
DATA(lv_event) = lo_event->get_event_client( z2ui5_if_client=>cs_event-popover_close ).
DATA lo_event TYPE REF TO z2ui5_cl_core_srv_event.
DATA lv_event TYPE string.
CREATE OBJECT lo_event TYPE z2ui5_cl_core_srv_event.
lv_event = lo_event->get_event_client( z2ui5_if_client=>cs_event-popover_close ).
cl_abap_unit_assert=>assert_equals( exp = `.eF('POPOVER_CLOSE')`
act = lv_event ).

View File

@ -42,18 +42,31 @@ CLASS z2ui5_cl_core_srv_json IMPLEMENTATION.
METHOD model_front_to_back.
IF line_exists( t_attri->*[ view = view ] ).
DATA(lv_view) = view.
DATA temp1 LIKE sy-subrc.
DATA lv_view LIKE view.
DATA temp2 LIKE LINE OF t_attri->*.
DATA lr_attri LIKE REF TO temp2.
DATA lo_val_front TYPE REF TO z2ui5_if_ajson.
FIELD-SYMBOLS <val> TYPE data.
DATA x TYPE REF TO cx_root.
READ TABLE t_attri->* WITH KEY view = view TRANSPORTING NO FIELDS.
temp1 = sy-subrc.
IF temp1 = 0.
lv_view = view.
ELSE.
lv_view = z2ui5_if_client=>cs_view-main.
ENDIF.
LOOP AT t_attri->* REFERENCE INTO DATA(lr_attri)
LOOP AT t_attri->* REFERENCE INTO lr_attri
WHERE bind_type = z2ui5_if_core_types=>cs_bind_type-two_way
AND view = lv_view.
TRY.
DATA(lo_val_front) = model->slice( lr_attri->name_client ).
lo_val_front = model->slice( lr_attri->name_client ).
IF lo_val_front IS NOT BOUND.
CONTINUE.
ENDIF.
@ -66,14 +79,16 @@ CLASS z2ui5_cl_core_srv_json IMPLEMENTATION.
lo_val_front = lo_val_front->filter( lr_attri->custom_filter_back ).
ENDIF.
ASSIGN lr_attri->r_ref->* TO FIELD-SYMBOL(<val>).
ASSIGN lr_attri->r_ref->* TO <val>.
IF sy-subrc <> 0.
CONTINUE.
ENDIF.
lo_val_front->to_abap( IMPORTING ev_container = <val> ).
CATCH cx_root INTO DATA(x).
CATCH cx_root INTO x.
RAISE EXCEPTION TYPE z2ui5_cx_util_error
EXPORTING
val = |JSON_PARSING_ERROR: { x->get_text( ) } |.
@ -84,24 +99,43 @@ CLASS z2ui5_cl_core_srv_json IMPLEMENTATION.
METHOD model_back_to_front.
DATA temp3 TYPE REF TO z2ui5_if_ajson.
DATA ajson_result LIKE temp3.
DATA temp4 LIKE LINE OF t_attri->*.
DATA lr_attri LIKE REF TO temp4.
DATA temp5 TYPE REF TO z2ui5_if_ajson.
DATA ajson LIKE temp5.
DATA temp6 TYPE REF TO z2ui5_if_ajson.
FIELD-SYMBOLS <attribute> TYPE data.
DATA temp7 TYPE string.
DATA x TYPE REF TO cx_root.
TRY.
DATA(ajson_result) = CAST z2ui5_if_ajson( z2ui5_cl_ajson=>create_empty( ) ).
LOOP AT t_attri->* REFERENCE INTO DATA(lr_attri) WHERE bind_type <> ``.
temp3 ?= z2ui5_cl_ajson=>create_empty( ).
ajson_result = temp3.
LOOP AT t_attri->* REFERENCE INTO lr_attri WHERE bind_type <> ``.
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 ) ).
temp5 ?= z2ui5_cl_ajson=>create_empty( ii_custom_mapping = lr_attri->custom_mapper ).
ajson = temp5.
ELSE.
ajson = CAST z2ui5_if_ajson( z2ui5_cl_ajson=>create_empty(
ii_custom_mapping = z2ui5_cl_ajson_mapping=>create_upper_case( ) ) ).
temp6 ?= z2ui5_cl_ajson=>create_empty( ii_custom_mapping = z2ui5_cl_ajson_mapping=>create_upper_case( ) ).
ajson = temp6.
ENDIF.
CASE lr_attri->bind_type.
WHEN z2ui5_if_core_types=>cs_bind_type-one_way
OR z2ui5_if_core_types=>cs_bind_type-two_way.
ASSIGN lr_attri->r_ref->* TO FIELD-SYMBOL(<attribute>).
ASSIGN lr_attri->r_ref->* TO <attribute>.
IF sy-subrc <> 0.
CONTINUE.
ENDIF.
@ -128,23 +162,45 @@ CLASS z2ui5_cl_core_srv_json IMPLEMENTATION.
ENDLOOP.
result = ajson_result->stringify( ).
result = COND #( WHEN result IS INITIAL THEN `{}` ELSE result ).
CATCH cx_root INTO DATA(x).
IF result IS INITIAL.
temp7 = `{}`.
ELSE.
temp7 = result.
ENDIF.
result = temp7.
CATCH cx_root INTO x.
ASSERT x IS NOT BOUND.
ENDTRY.
ENDMETHOD.
METHOD request_json_to_abap.
DATA temp8 TYPE REF TO z2ui5_if_ajson.
DATA lo_ajson LIKE temp8.
DATA lv_model_edit_name TYPE string.
DATA lo_model TYPE REF TO z2ui5_if_ajson.
DATA temp1 TYPE xsdboolean.
DATA lo_comp LIKE result-s_front-o_comp_data.
DATA lv_app_start TYPE string.
DATA lv_hash LIKE result-s_front-hash.
DATA lv_dummy TYPE string.
DATA x TYPE REF TO cx_root.
TRY.
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 }|.
temp8 ?= z2ui5_cl_ajson=>parse( val ).
lo_ajson = temp8.
lv_model_edit_name = |/{ z2ui5_if_core_types=>cs_ui5-two_way_model }|.
result-o_model = z2ui5_cl_ajson=>create_empty( ).
DATA(lo_model) = lo_ajson->slice( lv_model_edit_name ).
lo_model = lo_ajson->slice( lv_model_edit_name ).
result-o_model->set( iv_path = lv_model_edit_name
iv_val = lo_model ).
lo_ajson->delete( lv_model_edit_name ).
@ -155,18 +211,19 @@ CLASS z2ui5_cl_core_srv_json IMPLEMENTATION.
result-s_front-o_comp_data = lo_ajson->slice( `/CONFIG/ComponentData` ).
result-s_control-check_launchpad = xsdbool( result-s_front-search CS `scenario=LAUNCHPAD`
OR result-s_front-pathname CS `/ui2/flp`
OR result-s_front-pathname CS `test/flpSandbox`
).
temp1 = boolc( result-s_front-search CS `scenario=LAUNCHPAD` OR result-s_front-pathname CS `/ui2/flp` OR result-s_front-pathname CS `test/flpSandbox` ).
result-s_control-check_launchpad = temp1.
IF result-s_front-id IS NOT INITIAL.
RETURN.
ENDIF.
TRY.
IF result-s_front-o_comp_data IS BOUND.
DATA(lo_comp) = result-s_front-o_comp_data.
DATA(lv_app_start) = lo_comp->get( `/startupParameters/app_start/1` ).
lo_comp = result-s_front-o_comp_data.
lv_app_start = lo_comp->get( `/startupParameters/app_start/1` ).
result-s_control-app_start = lv_app_start.
result-s_control-app_start = z2ui5_cl_util=>c_trim_upper( result-s_control-app_start ).
ENDIF.
@ -174,8 +231,10 @@ CLASS z2ui5_cl_core_srv_json IMPLEMENTATION.
ENDTRY.
TRY.
DATA(lv_hash) = result-s_front-hash.
SPLIT lv_hash AT '&/' INTO DATA(lv_dummy) lv_hash.
lv_hash = result-s_front-hash.
SPLIT lv_hash AT '&/' INTO lv_dummy lv_hash.
IF lv_hash IS INITIAL.
lv_hash = result-s_front-hash+2.
ENDIF.
@ -197,7 +256,8 @@ CLASS z2ui5_cl_core_srv_json IMPLEMENTATION.
url = result-s_front-search ) ).
CATCH cx_root INTO DATA(x).
CATCH cx_root INTO x.
RAISE EXCEPTION TYPE z2ui5_cx_util_error
EXPORTING
val = x.
@ -206,22 +266,33 @@ CLASS z2ui5_cl_core_srv_json IMPLEMENTATION.
METHOD response_abap_to_json.
DATA temp9 TYPE REF TO z2ui5_if_ajson.
DATA ajson_result LIKE temp9.
DATA temp10 TYPE REF TO z2ui5_cl_core_srv_json.
DATA lv_frontend TYPE string.
DATA x TYPE REF TO cx_root.
TRY.
DATA(ajson_result) = CAST z2ui5_if_ajson( z2ui5_cl_ajson=>create_empty(
ii_custom_mapping = z2ui5_cl_ajson_mapping=>create_upper_case( ) ) ).
temp9 ?= z2ui5_cl_ajson=>create_empty( ii_custom_mapping = z2ui5_cl_ajson_mapping=>create_upper_case( ) ).
ajson_result = temp9.
ajson_result->set( iv_path = `/`
iv_val = val-s_front ).
ajson_result = ajson_result->filter( NEW z2ui5_cl_core_srv_json( ) ).
DATA(lv_frontend) = ajson_result->stringify( ).
CREATE OBJECT temp10 TYPE z2ui5_cl_core_srv_json.
ajson_result = ajson_result->filter( temp10 ).
lv_frontend = ajson_result->stringify( ).
result = |\{| &&
|"S_FRONT":{ lv_frontend },| &&
|"MODEL":{ val-model }| &&
|\}|.
CATCH cx_root INTO DATA(x).
CATCH cx_root INTO x.
ASSERT x IS NOT BOUND.
ENDTRY.
ENDMETHOD.

View File

@ -10,27 +10,54 @@ ENDCLASS.
CLASS ltcl_test IMPLEMENTATION.
METHOD request_json_to_abap.
DATA(lv_payload) = |\{"XX":\{"NAME":"test"\},"S_FRONT":\{"ID":"ID_NR","EDIT":\{"NAME":"test"\},"ORIGIN":"ORIGIN","PATHNAME":"PATHNAME","SEARCH":"SEARCH"| &&
DATA lv_payload TYPE string.
DATA lo_mapper TYPE REF TO z2ui5_cl_core_srv_json.
DATA ls_result TYPE z2ui5_if_core_types=>ty_s_request.
DATA temp11 TYPE z2ui5_if_core_types=>ty_s_request.
DATA ls_exp LIKE temp11.
DATA temp12 TYPE z2ui5_if_ajson_types=>ty_nodes_ts.
DATA lt_tree LIKE temp12.
DATA temp13 LIKE LINE OF lt_tree.
DATA temp14 LIKE sy-tabix.
lv_payload = |\{"XX":\{"NAME":"test"\},"S_FRONT":\{"ID":"ID_NR","EDIT":\{"NAME":"test"\},"ORIGIN":"ORIGIN","PATHNAME":"PATHNAME","SEARCH":"SEARCH"| &&
|,"VIEW":"MAIN","EVENT":"BUTTON_POST","T_EVENT_ARG":[]\}\}|.
DATA(lo_mapper) = NEW z2ui5_cl_core_srv_json( ).
DATA(ls_result) = lo_mapper->request_json_to_abap( lv_payload ).
DATA(ls_exp) = VALUE z2ui5_if_core_types=>ty_s_request( s_front = VALUE #( id = `ID_NR`
view = `MAIN`
origin = `ORIGIN`
pathname = `PATHNAME`
search = `SEARCH`
event = `BUTTON_POST` ) ).
CREATE OBJECT lo_mapper TYPE z2ui5_cl_core_srv_json.
ls_result = lo_mapper->request_json_to_abap( lv_payload ).
CLEAR temp11.
CLEAR temp11-s_front.
temp11-s_front-id = `ID_NR`.
temp11-s_front-view = `MAIN`.
temp11-s_front-origin = `ORIGIN`.
temp11-s_front-pathname = `PATHNAME`.
temp11-s_front-search = `SEARCH`.
temp11-s_front-event = `BUTTON_POST`.
ls_exp = temp11.
cl_abap_unit_assert=>assert_equals( exp = ls_exp-s_front
act = ls_result-s_front ).
DATA(lt_tree) = VALUE z2ui5_if_ajson_types=>ty_nodes_ts( ).
CLEAR temp12.
lt_tree = temp12.
lt_tree = ls_result-o_model->mt_json_tree.
temp14 = sy-tabix.
READ TABLE lt_tree WITH KEY name = `NAME` INTO temp13.
sy-tabix = temp14.
IF sy-subrc <> 0.
ASSERT 1 = 0.
ENDIF.
cl_abap_unit_assert=>assert_equals( exp = `test`
act = lt_tree[ name = `NAME` ]-value ).
act = temp13-value ).
cl_abap_unit_assert=>assert_equals( exp = 3
act = lines( lt_tree ) ).

View File

@ -26,16 +26,24 @@ ENDCLASS.
CLASS z2ui5_cl_core_srv_util IMPLEMENTATION.
METHOD app_get_url.
DATA lv_url TYPE string.
DATA lt_param TYPE z2ui5_cl_util=>ty_t_name_value.
DATA temp1 TYPE z2ui5_cl_util=>ty_s_name_value.
IF classname IS INITIAL.
classname = rtti_get_classname_by_ref( client->get_app( ) ).
ENDIF.
DATA(lv_url) = |{ client->get( )-s_config-origin }{ client->get( )-s_config-pathname }?|.
DATA(lt_param) = url_param_get_tab( client->get( )-s_config-search ).
lv_url = |{ client->get( )-s_config-origin }{ client->get( )-s_config-pathname }?|.
lt_param = url_param_get_tab( client->get( )-s_config-search ).
DELETE lt_param WHERE n = `app_start`.
INSERT VALUE #( n = `app_start`
v = to_lower( classname ) ) INTO TABLE lt_param.
CLEAR temp1.
temp1-n = `app_start`.
temp1-v = to_lower( classname ).
INSERT temp1 INTO TABLE lt_param.
result = lv_url && url_param_create_url( lt_param ) && client->get( )-s_config-hash.
@ -43,7 +51,8 @@ CLASS z2ui5_cl_core_srv_util IMPLEMENTATION.
METHOD app_get_url_source_code.
DATA(ls_config) = client->get( )-s_config.
DATA ls_config TYPE z2ui5_if_types=>ty_s_config.
ls_config = client->get( )-s_config.
result = |{ ls_config-origin }/sap/bc/adt/oo/classes/|
&& |{ rtti_get_classname_by_ref( client->get_app( ) ) }/source/main|.

View File

@ -22,7 +22,7 @@ CLASS z2ui5_cl_pop_bal DEFINITION
message_v4 TYPE string,
group TYPE string,
END OF ty_s_msg.
TYPES ty_t_msg TYPE STANDARD TABLE OF ty_s_msg WITH EMPTY KEY.
TYPES ty_t_msg TYPE STANDARD TABLE OF ty_s_msg WITH DEFAULT KEY.
DATA mt_msg TYPE ty_t_msg.
@ -46,18 +46,29 @@ ENDCLASS.
CLASS z2ui5_cl_pop_bal IMPLEMENTATION.
METHOD factory.
DATA lt_msg TYPE z2ui5_cl_util=>ty_t_msg.
DATA temp1 LIKE LINE OF lt_msg.
DATA lr_row LIKE REF TO temp1.
DATA temp2 TYPE ty_s_msg.
DATA ls_row LIKE temp2.
r_result = NEW #( ).
CREATE OBJECT r_result.
"read log infos
"handle
"..
"read messages..
DATA(lt_msg) = z2ui5_cl_util=>msg_get_t( i_messages ).
LOOP AT lt_msg REFERENCE INTO DATA(lr_row).
DATA(ls_row) = VALUE ty_s_msg( ).
lt_msg = z2ui5_cl_util=>msg_get_t( i_messages ).
LOOP AT lt_msg REFERENCE INTO lr_row.
CLEAR temp2.
ls_row = temp2.
ls_row-type = z2ui5_cl_util=>ui5_get_msg_type( lr_row->type ).
ls_row-title = lr_row->text.
ls_row-id = lr_row->id.
@ -81,14 +92,17 @@ CLASS z2ui5_cl_pop_bal IMPLEMENTATION.
METHOD view_display.
DATA(popup) = z2ui5_cl_xml_view=>factory_popup( ).
DATA popup TYPE REF TO z2ui5_cl_xml_view.
DATA table TYPE REF TO z2ui5_cl_xml_view.
popup = z2ui5_cl_xml_view=>factory_popup( ).
popup = popup->dialog( title = `Business Application Log`
contentheight = '50%'
contentwidth = '50%'
verticalscrolling = abap_false
afterclose = client->_event( 'BUTTON_CONTINUE' ) ).
DATA(table) = popup->table( client->_bind( mt_msg ) ).
table = popup->table( client->_bind( mt_msg ) ).
table->columns(
)->column( )->text( 'Date' )->get_parent(
)->column( )->text( 'Time' )->get_parent(

View File

@ -26,14 +26,15 @@ ENDCLASS.
CLASS z2ui5_cl_pop_error IMPLEMENTATION.
METHOD factory.
r_result = NEW #( ).
CREATE OBJECT r_result.
r_result->error = x_root.
ENDMETHOD.
METHOD view_display.
DATA(popup) = z2ui5_cl_xml_view=>factory_popup( )->dialog( title = `Error View`
DATA popup TYPE REF TO z2ui5_cl_xml_view.
popup = z2ui5_cl_xml_view=>factory_popup( )->dialog( title = `Error View`
afterclose = client->_event( 'BUTTON_CONFIRM' )
)->content(
)->vbox( 'sapUiMediumMargin'

View File

@ -46,7 +46,7 @@ ENDCLASS.
CLASS z2ui5_cl_pop_file_dl IMPLEMENTATION.
METHOD factory.
r_result = NEW #( ).
CREATE OBJECT r_result.
r_result->title = i_title.
r_result->question_text = i_text.
@ -66,18 +66,33 @@ CLASS z2ui5_cl_pop_file_dl IMPLEMENTATION.
METHOD view_display.
DATA(popup) = z2ui5_cl_xml_view=>factory_popup( )->dialog( title = title
DATA popup TYPE REF TO z2ui5_cl_xml_view.
DATA lv_csv_x TYPE xstring.
DATA lv_base64 TYPE string.
DATA temp1 TYPE z2ui5_if_types=>ty_t_name_value.
DATA temp2 LIKE LINE OF temp1.
popup = z2ui5_cl_xml_view=>factory_popup( )->dialog( title = title
icon = icon
afterclose = client->_event( 'BUTTON_CANCEL' )
)->content( ).
IF mv_check_download = abap_true.
DATA(lv_csv_x) = z2ui5_cl_util=>conv_get_xstring_by_string( mv_value ).
DATA(lv_base64) = z2ui5_cl_util=>conv_encode_x_base64( lv_csv_x ).
lv_csv_x = z2ui5_cl_util=>conv_get_xstring_by_string( mv_value ).
lv_base64 = z2ui5_cl_util=>conv_encode_x_base64( lv_csv_x ).
CLEAR temp1.
temp2-n = `src`.
temp2-v = mv_type && lv_base64.
INSERT temp2 INTO TABLE temp1.
temp2-n = `hidden`.
temp2-v = `hidden`.
INSERT temp2 INTO TABLE temp1.
popup->_generic( ns = `html`
name = `iframe`
t_prop = VALUE #( ( n = `src` v = mv_type && lv_base64 )
( n = `hidden` v = `hidden` ) ) ).
t_prop = temp1 ).
popup->_z2ui5( )->timer( client->_event( `CALLBACK_DOWNLOAD` ) ).

View File

@ -49,7 +49,7 @@ ENDCLASS.
CLASS z2ui5_cl_pop_file_ul IMPLEMENTATION.
METHOD factory.
r_result = NEW #( ).
CREATE OBJECT r_result.
r_result->title = i_title.
r_result->question_text = i_text.
@ -67,7 +67,8 @@ CLASS z2ui5_cl_pop_file_ul IMPLEMENTATION.
METHOD view_display.
DATA(popup) = z2ui5_cl_xml_view=>factory_popup( )->dialog( title = title
DATA popup TYPE REF TO z2ui5_cl_xml_view.
popup = z2ui5_cl_xml_view=>factory_popup( )->dialog( title = title
icon = icon
afterclose = client->_event( 'BUTTON_CANCEL' )
)->content(
@ -91,6 +92,9 @@ CLASS z2ui5_cl_pop_file_ul IMPLEMENTATION.
ENDMETHOD.
METHOD z2ui5_if_app~main.
DATA lv_dummy TYPE string.
DATA lv_data TYPE string.
DATA lv_data2 TYPE xstring.
me->client = client.
@ -104,10 +108,13 @@ CLASS z2ui5_cl_pop_file_ul IMPLEMENTATION.
WHEN `UPLOAD`.
SPLIT mv_value AT `;` INTO DATA(lv_dummy) DATA(lv_data).
SPLIT mv_value AT `;` INTO lv_dummy lv_data.
SPLIT lv_data AT `,` INTO lv_dummy lv_data.
DATA(lv_data2) = z2ui5_cl_util=>conv_decode_x_base64( lv_data ).
lv_data2 = z2ui5_cl_util=>conv_decode_x_base64( lv_data ).
ms_result-value = z2ui5_cl_util=>conv_get_string_by_xstring( lv_data2 ).
check_confirm_enabled = abap_true.

View File

@ -13,7 +13,7 @@ CLASS z2ui5_cl_pop_get_range DEFINITION
key TYPE string,
END OF ty_s_filter_pop.
DATA mt_filter TYPE STANDARD TABLE OF ty_s_filter_pop WITH EMPTY KEY.
DATA mt_filter TYPE STANDARD TABLE OF ty_s_filter_pop WITH DEFAULT KEY.
CLASS-METHODS factory
IMPORTING
@ -48,14 +48,17 @@ ENDCLASS.
CLASS z2ui5_cl_pop_get_range IMPLEMENTATION.
METHOD factory.
DATA temp1 TYPE z2ui5_cl_util=>ty_s_range.
r_result = NEW #( ).
CREATE OBJECT r_result.
z2ui5_cl_util=>itab_corresponding( EXPORTING val = t_range
CHANGING tab = r_result->ms_result-t_range
).
INSERT VALUE #( ) INTO TABLE r_result->ms_result-t_range.
CLEAR temp1.
INSERT temp1 INTO TABLE r_result->ms_result-t_range.
ENDMETHOD.
@ -67,23 +70,34 @@ CLASS z2ui5_cl_pop_get_range IMPLEMENTATION.
METHOD view_display.
DATA(lo_popup) = z2ui5_cl_xml_view=>factory_popup( ).
DATA lo_popup TYPE REF TO z2ui5_cl_xml_view.
DATA vbox TYPE REF TO z2ui5_cl_xml_view.
DATA item TYPE REF TO z2ui5_cl_xml_view.
DATA grid TYPE REF TO z2ui5_cl_xml_view.
DATA temp2 TYPE string_table.
lo_popup = z2ui5_cl_xml_view=>factory_popup( ).
lo_popup = lo_popup->dialog( afterclose = client->_event( 'BUTTON_CANCEL' )
contentheight = `50%`
contentwidth = `50%`
title = 'Define Filter Conditons' ).
DATA(vbox) = lo_popup->vbox( height = `100%`
vbox = lo_popup->vbox( height = `100%`
justifycontent = 'SpaceBetween' ).
DATA(item) = vbox->list( nodata = `no conditions defined`
item = vbox->list( nodata = `no conditions defined`
items = client->_bind_edit( mt_filter )
selectionchange = client->_event( 'SELCHANGE' )
)->custom_list_item( ).
DATA(grid) = item->grid( ).
grid = item->grid( ).
CLEAR temp2.
INSERT `${KEY}` INTO TABLE temp2.
grid->combobox( selectedkey = `{OPTION}`
items = client->_bind( mt_mapping )
)->item( key = '{N}'
@ -97,7 +111,7 @@ CLASS z2ui5_cl_pop_get_range IMPLEMENTATION.
)->button( icon = 'sap-icon://decline'
type = `Transparent`
press = client->_event( val = `POPUP_DELETE`
t_arg = VALUE #( ( `${KEY}` ) ) ) ).
t_arg = temp2 ) ).
lo_popup->buttons(
)->button( text = `Delete All`
@ -118,6 +132,17 @@ CLASS z2ui5_cl_pop_get_range IMPLEMENTATION.
ENDMETHOD.
METHOD z2ui5_if_app~main.
DATA temp4 LIKE LINE OF ms_result-t_range.
DATA lr_product LIKE REF TO temp4.
DATA temp5 TYPE z2ui5_cl_pop_get_range=>ty_s_filter_pop.
DATA temp6 LIKE LINE OF mt_filter.
DATA lr_filter LIKE REF TO temp6.
DATA temp7 TYPE z2ui5_cl_util=>ty_s_range.
DATA temp8 TYPE z2ui5_cl_pop_get_range=>ty_s_filter_pop.
DATA lt_event TYPE string_table.
DATA temp9 LIKE LINE OF lt_event.
DATA temp10 LIKE sy-tabix.
DATA temp11 LIKE mt_filter.
me->client = client.
@ -127,12 +152,16 @@ CLASS z2ui5_cl_pop_get_range IMPLEMENTATION.
mt_mapping = z2ui5_cl_util=>filter_get_token_range_mapping( ).
CLEAR mt_filter.
LOOP AT ms_result-t_range REFERENCE INTO DATA(lr_product).
INSERT VALUE #( low = lr_product->low
high = lr_product->high
option = lr_product->option
key = z2ui5_cl_util=>uuid_get_c32( )
) INTO TABLE mt_filter.
LOOP AT ms_result-t_range REFERENCE INTO lr_product.
CLEAR temp5.
temp5-low = lr_product->low.
temp5-high = lr_product->high.
temp5-option = lr_product->option.
temp5-key = z2ui5_cl_util=>uuid_get_c32( ).
INSERT temp5 INTO TABLE mt_filter.
ENDLOOP.
view_display( ).
@ -144,15 +173,19 @@ CLASS z2ui5_cl_pop_get_range IMPLEMENTATION.
WHEN `BUTTON_CONFIRM`.
CLEAR ms_result-t_range.
LOOP AT mt_filter REFERENCE INTO DATA(lr_filter).
LOOP AT mt_filter REFERENCE INTO lr_filter.
IF lr_filter->low IS INITIAL AND lr_filter->high IS INITIAL.
CONTINUE.
ENDIF.
INSERT VALUE #( sign = `I`
option = lr_filter->option
low = lr_filter->low
high = lr_filter->high
) INTO TABLE ms_result-t_range.
CLEAR temp7.
temp7-sign = `I`.
temp7-option = lr_filter->option.
temp7-low = lr_filter->low.
temp7-high = lr_filter->high.
INSERT temp7 INTO TABLE ms_result-t_range.
ENDLOOP.
ms_result-check_confirmed = abap_true.
@ -164,16 +197,30 @@ CLASS z2ui5_cl_pop_get_range IMPLEMENTATION.
client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ).
WHEN `POPUP_ADD`.
INSERT VALUE #( key = z2ui5_cl_util=>uuid_get_c32( ) ) INTO TABLE mt_filter.
CLEAR temp8.
temp8-key = z2ui5_cl_util=>uuid_get_c32( ).
INSERT temp8 INTO TABLE mt_filter.
client->popup_model_update( ).
WHEN `POPUP_DELETE`.
DATA(lt_event) = client->get( )-t_event_arg.
DELETE mt_filter WHERE key = lt_event[ 1 ].
lt_event = client->get( )-t_event_arg.
temp10 = sy-tabix.
READ TABLE lt_event INDEX 1 INTO temp9.
sy-tabix = temp10.
IF sy-subrc <> 0.
ASSERT 1 = 0.
ENDIF.
DELETE mt_filter WHERE key = temp9.
client->popup_model_update( ).
WHEN `POPUP_DELETE_ALL`.
mt_filter = VALUE #( ).
CLEAR temp11.
mt_filter = temp11.
client->popup_model_update( ).
ENDCASE.

View File

@ -39,7 +39,7 @@ ENDCLASS.
CLASS z2ui5_cl_pop_get_range_m IMPLEMENTATION.
METHOD factory.
r_result = NEW #( ).
CREATE OBJECT r_result.
r_result->ms_result-t_filter = val.
ENDMETHOD.
@ -52,27 +52,40 @@ CLASS z2ui5_cl_pop_get_range_m IMPLEMENTATION.
METHOD popup_display.
DATA(lo_popup) = z2ui5_cl_xml_view=>factory_popup( ).
DATA lo_popup TYPE REF TO z2ui5_cl_xml_view.
DATA vbox TYPE REF TO z2ui5_cl_xml_view.
DATA item TYPE REF TO z2ui5_cl_xml_view.
DATA grid TYPE REF TO z2ui5_cl_xml_view.
DATA temp1 TYPE string_table.
DATA temp3 TYPE string_table.
DATA temp5 TYPE string_table.
lo_popup = z2ui5_cl_xml_view=>factory_popup( ).
lo_popup = lo_popup->dialog( afterclose = client->_event( 'BUTTON_CANCEL' )
contentheight = `50%`
contentwidth = `50%`
title = 'Define Filter Conditons' ).
DATA(vbox) = lo_popup->vbox( height = `100%`
vbox = lo_popup->vbox( height = `100%`
justifycontent = 'SpaceBetween' ).
DATA(item) = vbox->list( nodata = `no conditions defined`
item = vbox->list( nodata = `no conditions defined`
items = client->_bind( ms_result-t_filter )
selectionchange = client->_event( 'SELCHANGE' )
)->custom_list_item( ).
DATA(grid) = item->grid( class = `sapUiSmallMarginTop sapUiSmallMarginBottom sapUiSmallMarginBegin` ).
grid = item->grid( class = `sapUiSmallMarginTop sapUiSmallMarginBottom sapUiSmallMarginBegin` ).
grid->text( `{NAME}` ).
CLEAR temp1.
INSERT `${NAME}` INTO TABLE temp1.
grid->multi_input( tokens = `{T_TOKEN}`
enabled = abap_false
valuehelprequest = client->_event( val = `LIST_OPEN`
t_arg = VALUE #( ( `${NAME}` ) ) )
t_arg = temp1 )
)->tokens(
)->token( key = `{KEY}`
text = `{TEXT}`
@ -80,14 +93,20 @@ CLASS z2ui5_cl_pop_get_range_m IMPLEMENTATION.
selected = `{SELKZ}`
editable = `{EDITABLE}` ).
CLEAR temp3.
INSERT `${NAME}` INTO TABLE temp3.
grid->button( text = `Select`
press = client->_event( val = `LIST_OPEN`
t_arg = VALUE #( ( `${NAME}` ) ) ) ).
t_arg = temp3 ) ).
CLEAR temp5.
INSERT `${NAME}` INTO TABLE temp5.
grid->button( icon = 'sap-icon://delete'
type = `Transparent`
text = `Clear`
press = client->_event( val = `LIST_DELETE`
t_arg = VALUE #( ( `${NAME}` ) ) ) ).
t_arg = temp5 ) ).
lo_popup->buttons(
)->button( text = `Clear All`
@ -108,6 +127,19 @@ CLASS z2ui5_cl_pop_get_range_m IMPLEMENTATION.
ENDMETHOD.
METHOD z2ui5_if_app~main.
DATA temp7 TYPE REF TO z2ui5_cl_pop_get_range.
DATA lo_popup LIKE temp7.
FIELD-SYMBOLS <tab> TYPE z2ui5_cl_util=>ty_s_filter_multi.
DATA lt_event TYPE string_table.
DATA temp1 LIKE LINE OF lt_event.
DATA temp2 LIKE sy-tabix.
DATA temp8 LIKE LINE OF lt_event.
DATA temp9 LIKE sy-tabix.
DATA ls_sql TYPE z2ui5_cl_util=>ty_s_filter_multi.
DATA temp3 LIKE LINE OF ms_result-t_filter.
DATA temp4 LIKE sy-tabix.
DATA temp10 LIKE LINE OF ms_result-t_filter.
DATA lr_sql LIKE REF TO temp10.
me->client = client.
IF check_initialized = abap_false.
@ -118,9 +150,13 @@ CLASS z2ui5_cl_pop_get_range_m IMPLEMENTATION.
IF client->get( )-check_on_navigated = abap_true.
DATA(lo_popup) = CAST z2ui5_cl_pop_get_range( client->get_app( client->get( )-s_draft-id_prev_app ) ).
temp7 ?= client->get_app( client->get( )-s_draft-id_prev_app ).
lo_popup = temp7.
IF lo_popup->result( )-check_confirmed = abap_true.
ASSIGN ms_result-t_filter[ name = mv_popup_name ] TO FIELD-SYMBOL(<tab>).
READ TABLE ms_result-t_filter WITH KEY name = mv_popup_name ASSIGNING <tab>.
<tab>-t_range = lo_popup->result( )-t_range.
<tab>-t_token = z2ui5_cl_util=>filter_get_token_t_by_range_t( <tab>-t_range ).
ENDIF.
@ -131,16 +167,42 @@ CLASS z2ui5_cl_pop_get_range_m IMPLEMENTATION.
CASE client->get( )-event.
WHEN 'LIST_DELETE'.
DATA(lt_event) = client->get( )-t_event_arg.
ASSIGN ms_result-t_filter[ name = lt_event[ 1 ] ] TO <tab>.
lt_event = client->get( )-t_event_arg.
temp2 = sy-tabix.
READ TABLE lt_event INDEX 1 INTO temp1.
sy-tabix = temp2.
IF sy-subrc <> 0.
ASSERT 1 = 0.
ENDIF.
READ TABLE ms_result-t_filter WITH KEY name = temp1 ASSIGNING <tab>.
CLEAR <tab>-t_token.
CLEAR <tab>-t_range.
client->popup_model_update( ).
WHEN 'LIST_OPEN'.
lt_event = client->get( )-t_event_arg.
mv_popup_name = lt_event[ 1 ].
DATA(ls_sql) = ms_result-t_filter[ name = mv_popup_name ].
temp9 = sy-tabix.
READ TABLE lt_event INDEX 1 INTO temp8.
sy-tabix = temp9.
IF sy-subrc <> 0.
ASSERT 1 = 0.
ENDIF.
mv_popup_name = temp8.
temp4 = sy-tabix.
READ TABLE ms_result-t_filter WITH KEY name = mv_popup_name INTO temp3.
sy-tabix = temp4.
IF sy-subrc <> 0.
ASSERT 1 = 0.
ENDIF.
ls_sql = temp3.
client->nav_app_call( z2ui5_cl_pop_get_range=>factory( ls_sql-t_range ) ).
WHEN `BUTTON_CONFIRM`.
@ -153,7 +215,9 @@ CLASS z2ui5_cl_pop_get_range_m IMPLEMENTATION.
client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ).
WHEN `POPUP_DELETE_ALL`.
LOOP AT ms_result-t_filter REFERENCE INTO DATA(lr_sql).
LOOP AT ms_result-t_filter REFERENCE INTO lr_sql.
CLEAR lr_sql->t_range.
CLEAR lr_sql->t_token.
ENDLOOP.

View File

@ -32,7 +32,7 @@ ENDCLASS.
CLASS z2ui5_cl_pop_html IMPLEMENTATION.
METHOD factory.
r_result = NEW #( ).
CREATE OBJECT r_result.
r_result->title = i_title.
r_result->icon = i_icon.
r_result->html = i_html.
@ -42,7 +42,8 @@ CLASS z2ui5_cl_pop_html IMPLEMENTATION.
METHOD view_display.
DATA(popup) = z2ui5_cl_xml_view=>factory_popup( )->dialog( title = title
DATA popup TYPE REF TO z2ui5_cl_xml_view.
popup = z2ui5_cl_xml_view=>factory_popup( )->dialog( title = title
icon = icon
afterclose = client->_event( 'BUTTON_CONFIRM' )
)->content(

View File

@ -47,7 +47,7 @@ ENDCLASS.
CLASS z2ui5_cl_pop_input_val IMPLEMENTATION.
METHOD factory.
r_result = NEW #( ).
CREATE OBJECT r_result.
r_result->title = title.
r_result->question_text = text.
@ -65,7 +65,8 @@ CLASS z2ui5_cl_pop_input_val IMPLEMENTATION.
METHOD view_display.
DATA(popup) = z2ui5_cl_xml_view=>factory_popup( )->dialog( title = title
DATA popup TYPE REF TO z2ui5_cl_xml_view.
popup = z2ui5_cl_xml_view=>factory_popup( )->dialog( title = title
icon = icon
afterclose = client->_event( 'BUTTON_CANCEL' )
)->content(

View File

@ -40,7 +40,7 @@ ENDCLASS.
CLASS z2ui5_cl_pop_itab_json_dl IMPLEMENTATION.
METHOD factory.
r_result = NEW #( ).
CREATE OBJECT r_result.
r_result->mr_itab = z2ui5_cl_util=>conv_copy_ref_data( itab ).
r_result->title = i_title.
@ -59,6 +59,12 @@ CLASS z2ui5_cl_pop_itab_json_dl IMPLEMENTATION.
METHOD z2ui5_if_app~main.
DATA app TYPE REF TO object.
DATA lv_link TYPE string.
DATA lv_text TYPE string.
DATA lx TYPE REF TO z2ui5_cx_util_error.
DATA lv_classname TYPE string.
DATA temp1 TYPE REF TO z2ui5_if_app.
DATA x TYPE REF TO cx_root.
me->client = client.
@ -66,25 +72,32 @@ CLASS z2ui5_cl_pop_itab_json_dl IMPLEMENTATION.
IF z2ui5_cl_util=>rtti_check_class_exists( `z2ui5_dbt_cl_app_03` ) = abap_false.
DATA(lv_link) = `https://github.com/oblomov-dev/a2UI5-db_table_loader`.
DATA(lv_text) = |<p>Please install the open-source project a2UI5-db_table_loader and try again: <a href="| &&
lv_link = `https://github.com/oblomov-dev/a2UI5-db_table_loader`.
lv_text = |<p>Please install the open-source project a2UI5-db_table_loader and try again: <a href="| &&
|{ lv_link }" style="color:blue; font-weight:600;" target="_blank">(link)</a></p>|.
DATA(lx) = NEW z2ui5_cx_util_error( val = lv_text ).
CREATE OBJECT lx TYPE z2ui5_cx_util_error EXPORTING val = lv_text.
client->nav_app_leave( z2ui5_cl_pop_error=>factory( lx ) ).
ELSE.
DATA(lv_classname) = `Z2UI5_DBT_CL_APP_03`.
lv_classname = `Z2UI5_DBT_CL_APP_03`.
CALL METHOD (lv_classname)=>('FACTORY_POPUP_BY_ITAB')
EXPORTING itab = mr_itab
RECEIVING result = app.
client->nav_app_leave( CAST #( app ) ).
temp1 ?= app.
client->nav_app_leave( temp1 ).
ENDIF.
CATCH cx_root INTO DATA(x).
CATCH cx_root INTO x.
client->nav_app_leave( z2ui5_cl_pop_to_inform=>factory( x->get_text( ) ) ).
ENDTRY.
ENDMETHOD.

View File

@ -40,14 +40,14 @@ ENDCLASS.
CLASS z2ui5_cl_pop_js_loader IMPLEMENTATION.
METHOD factory.
r_result = NEW #( ).
CREATE OBJECT r_result.
r_result->js = i_js.
r_result->user_command = i_result.
ENDMETHOD.
METHOD factory_check_open_ui5.
r_result = NEW #( ).
CREATE OBJECT r_result.
r_result->check_open_ui5 = abap_true.
ENDMETHOD.
@ -59,7 +59,8 @@ CLASS z2ui5_cl_pop_js_loader IMPLEMENTATION.
METHOD view_display.
DATA(popup) = z2ui5_cl_xml_view=>factory_popup( )->dialog( `Setup UI...`
DATA popup TYPE REF TO z2ui5_cl_xml_view.
popup = z2ui5_cl_xml_view=>factory_popup( )->dialog( `Setup UI...`
)->content( ).
IF js IS NOT INITIAL.

View File

@ -20,7 +20,7 @@ CLASS z2ui5_cl_pop_messages DEFINITION
message_v4 TYPE string,
group TYPE string,
END OF ty_s_msg.
TYPES ty_t_msg TYPE STANDARD TABLE OF ty_s_msg WITH EMPTY KEY.
TYPES ty_t_msg TYPE STANDARD TABLE OF ty_s_msg WITH DEFAULT KEY.
DATA mt_msg TYPE ty_t_msg.
@ -44,13 +44,24 @@ ENDCLASS.
CLASS z2ui5_cl_pop_messages IMPLEMENTATION.
METHOD factory.
DATA lt_msg TYPE z2ui5_cl_util=>ty_t_msg.
DATA temp1 LIKE LINE OF lt_msg.
DATA lr_row LIKE REF TO temp1.
DATA temp2 TYPE ty_s_msg.
DATA ls_row LIKE temp2.
r_result = NEW #( ).
DATA(lt_msg) = z2ui5_cl_util=>msg_get_t( i_messages ).
CREATE OBJECT r_result.
LOOP AT lt_msg REFERENCE INTO DATA(lr_row).
lt_msg = z2ui5_cl_util=>msg_get_t( i_messages ).
DATA(ls_row) = VALUE ty_s_msg( ).
LOOP AT lt_msg REFERENCE INTO lr_row.
CLEAR temp2.
ls_row = temp2.
ls_row-type = z2ui5_cl_util=>ui5_get_msg_type( lr_row->type ).
ls_row-title = lr_row->text.
* lr_row->title = `title`.
@ -67,7 +78,8 @@ CLASS z2ui5_cl_pop_messages IMPLEMENTATION.
METHOD view_display.
DATA(popup) = z2ui5_cl_xml_view=>factory_popup( ).
DATA popup TYPE REF TO z2ui5_cl_xml_view.
popup = z2ui5_cl_xml_view=>factory_popup( ).
popup = popup->dialog( title = `Messages`
contentheight = '50%'
contentwidth = '50%'

View File

@ -48,7 +48,7 @@ ENDCLASS.
CLASS z2ui5_cl_pop_pdf IMPLEMENTATION.
METHOD factory.
r_result = NEW #( ).
CREATE OBJECT r_result.
r_result->title = i_title.
r_result->button_text_confirm = i_button_text_confirm.
r_result->button_text_cancel = i_button_text_cancel.
@ -64,7 +64,22 @@ CLASS z2ui5_cl_pop_pdf IMPLEMENTATION.
METHOD view_display.
DATA(popup) = z2ui5_cl_xml_view=>factory_popup( )->dialog( title = title
DATA temp1 TYPE z2ui5_if_types=>ty_t_name_value.
DATA temp2 LIKE LINE OF temp1.
DATA popup TYPE REF TO z2ui5_cl_xml_view.
CLEAR temp1.
temp2-n = `src`.
temp2-v = mv_pdf.
INSERT temp2 INTO TABLE temp1.
temp2-n = `height`.
temp2-v = `800px`.
INSERT temp2 INTO TABLE temp1.
temp2-n = `width`.
temp2-v = `99%`.
INSERT temp2 INTO TABLE temp1.
popup = z2ui5_cl_xml_view=>factory_popup( )->dialog( title = title
icon = icon
stretch = abap_true
afterclose = client->_event( 'BUTTON_CANCEL' )
@ -73,10 +88,7 @@ CLASS z2ui5_cl_pop_pdf IMPLEMENTATION.
)->label( question_text
)->_generic( ns = `html`
name = `iframe`
t_prop = VALUE #( ( n = `src` v = mv_pdf )
( n = `height` v = `800px` )
( n = `width` v = `99%` )
)
t_prop = temp1
)->get_parent( )->get_parent( )->get_parent(
)->buttons(
)->button( text = button_text_cancel

View File

@ -43,27 +43,41 @@ CLASS z2ui5_cl_pop_table IMPLEMENTATION.
METHOD display.
FIELD-SYMBOLS <tab_out> TYPE STANDARD TABLE.
DATA popup TYPE REF TO z2ui5_cl_xml_view.
DATA tab TYPE REF TO z2ui5_cl_xml_view.
DATA lt_comp TYPE abap_component_tab.
DATA list TYPE REF TO z2ui5_cl_xml_view.
DATA cells TYPE REF TO z2ui5_cl_xml_view.
DATA ls_comp LIKE LINE OF lt_comp.
DATA columns TYPE REF TO z2ui5_cl_xml_view.
ASSIGN mr_tab->* TO <tab_out>.
DATA(popup) = z2ui5_cl_xml_view=>factory_popup( )->dialog( afterclose = client->_event( 'BUTTON_CONFIRM' )
popup = z2ui5_cl_xml_view=>factory_popup( )->dialog( afterclose = client->_event( 'BUTTON_CONFIRM' )
stretch = abap_true
title = title
* icon = 'sap-icon://edit'
)->content( ).
DATA(tab) = popup->table( client->_bind( <tab_out> ) ).
DATA(lt_comp) = z2ui5_cl_util=>rtti_get_t_attri_by_any( <tab_out> ).
tab = popup->table( client->_bind( <tab_out> ) ).
DATA(list) = tab->column_list_item( valign = `Top` ).
DATA(cells) = list->cells( ).
LOOP AT lt_comp INTO DATA(ls_comp).
lt_comp = z2ui5_cl_util=>rtti_get_t_attri_by_any( <tab_out> ).
list = tab->column_list_item( valign = `Top` ).
cells = list->cells( ).
LOOP AT lt_comp INTO ls_comp.
cells->text( |\{{ ls_comp-name }\}| ).
ENDLOOP.
DATA(columns) = tab->columns( ).
columns = tab->columns( ).
LOOP AT lt_comp INTO ls_comp.
columns->column( '8rem' )->header( `` )->text( ls_comp-name ).
ENDLOOP.
@ -81,7 +95,7 @@ CLASS z2ui5_cl_pop_table IMPLEMENTATION.
METHOD factory.
FIELD-SYMBOLS <tab> TYPE any.
r_result = NEW #( ).
CREATE OBJECT r_result.
IF i_title IS NOT INITIAL.
r_result->title = i_title.
ENDIF.

View File

@ -44,7 +44,7 @@ ENDCLASS.
CLASS z2ui5_cl_pop_textedit IMPLEMENTATION.
METHOD factory.
r_result = NEW #( ).
CREATE OBJECT r_result.
r_result->mv_stretch_active = i_stretch_active.
r_result->ms_result-text = i_textarea.
r_result->mv_title = i_title.
@ -54,7 +54,8 @@ CLASS z2ui5_cl_pop_textedit IMPLEMENTATION.
METHOD display.
DATA(popup) = z2ui5_cl_xml_view=>factory_popup( )->dialog( afterclose = client->_event( 'BUTTON_TEXTAREA_CANCEL' )
DATA popup TYPE REF TO z2ui5_cl_xml_view.
popup = z2ui5_cl_xml_view=>factory_popup( )->dialog( afterclose = client->_event( 'BUTTON_TEXTAREA_CANCEL' )
stretch = mv_stretch_active
title = mv_title
icon = 'sap-icon://edit'

View File

@ -56,7 +56,7 @@ CLASS z2ui5_cl_pop_to_confirm IMPLEMENTATION.
METHOD factory.
r_result = NEW #( ).
CREATE OBJECT r_result.
r_result->title = i_title.
r_result->icon = i_icon.
@ -70,7 +70,8 @@ CLASS z2ui5_cl_pop_to_confirm IMPLEMENTATION.
METHOD view_display.
DATA(popup) = z2ui5_cl_xml_view=>factory_popup( )->dialog( title = title
DATA popup TYPE REF TO z2ui5_cl_xml_view.
popup = z2ui5_cl_xml_view=>factory_popup( )->dialog( title = title
icon = icon
afterclose = client->_event( 'BUTTON_CANCEL' )
)->content(

View File

@ -32,7 +32,7 @@ ENDCLASS.
CLASS z2ui5_cl_pop_to_inform IMPLEMENTATION.
METHOD factory.
r_result = NEW #( ).
CREATE OBJECT r_result.
r_result->title = i_title.
r_result->icon = i_icon.
r_result->question_text = i_text.
@ -42,7 +42,8 @@ CLASS z2ui5_cl_pop_to_inform IMPLEMENTATION.
METHOD view_display.
DATA(popup) = z2ui5_cl_xml_view=>factory_popup( )->dialog( title = title
DATA popup TYPE REF TO z2ui5_cl_xml_view.
popup = z2ui5_cl_xml_view=>factory_popup( )->dialog( title = title
icon = icon
afterclose = client->_event( 'BUTTON_CONFIRM' )
)->content(

View File

@ -63,13 +63,17 @@ ENDCLASS.
CLASS z2ui5_cl_pop_to_select IMPLEMENTATION.
METHOD factory.
DATA temp1 TYPE string.
r_result = NEW #( ).
CREATE OBJECT r_result.
IF i_title IS INITIAL.
r_result->title = COND #(
WHEN i_multiselect = abap_true
THEN `Multi select`
ELSE `Single select` ).
IF i_multiselect = abap_true.
temp1 = `Multi select`.
ELSE.
temp1 = `Single select`.
ENDIF.
r_result->title = temp1.
ELSE.
r_result->title = i_title.
ENDIF.
@ -92,11 +96,34 @@ CLASS z2ui5_cl_pop_to_select IMPLEMENTATION.
METHOD display.
FIELD-SYMBOLS <tab_out> TYPE STANDARD TABLE.
DATA popup TYPE REF TO z2ui5_cl_xml_view.
DATA temp2 TYPE string_table.
DATA temp1 TYPE string_table.
DATA tab TYPE REF TO z2ui5_cl_xml_view.
DATA lt_comp TYPE abap_component_tab.
DATA list TYPE REF TO z2ui5_cl_xml_view.
DATA cells TYPE REF TO z2ui5_cl_xml_view.
DATA ls_comp LIKE LINE OF lt_comp.
DATA columns TYPE REF TO z2ui5_cl_xml_view.
DATA temp4 TYPE REF TO cl_abap_elemdescr.
DATA temp5 TYPE z2ui5_cl_util_abap=>ty_s_data_element_text-medium.
DATA data_element_name TYPE string.
DATA medium_label TYPE z2ui5_cl_util_abap=>ty_s_data_element_text-medium.
DATA text LIKE temp5.
ASSIGN mr_tab_popup->* TO <tab_out>.
DATA(popup) = z2ui5_cl_xml_view=>factory_popup( ).
DATA(tab) = popup->table_select_dialog(
popup = z2ui5_cl_xml_view=>factory_popup( ).
CLEAR temp2.
INSERT `${$parameters>/value}` INTO TABLE temp2.
INSERT `${$parameters>/clearButtonPressed}` INTO TABLE temp2.
CLEAR temp1.
INSERT `${$parameters>/selectedContexts[0]/sPath}` INTO TABLE temp1.
tab = popup->table_select_dialog(
items = |\{path:'|
&& client->_bind_edit( val = <tab_out>
path = abap_true )
@ -106,9 +133,9 @@ CLASS z2ui5_cl_pop_to_select IMPLEMENTATION.
cancel = client->_event( 'CANCEL' )
search = client->_event(
val = 'SEARCH'
t_arg = VALUE #( ( `${$parameters>/value}` ) ( `${$parameters>/clearButtonPressed}` ) ) )
t_arg = temp2 )
confirm = client->_event( val = 'CONFIRM'
t_arg = VALUE #( ( `${$parameters>/selectedContexts[0]/sPath}` ) ) )
t_arg = temp1 )
growing = abap_true
contentwidth = content_width
contentheight = content_height
@ -116,27 +143,38 @@ CLASS z2ui5_cl_pop_to_select IMPLEMENTATION.
title = title
multiselect = multiselect ).
DATA(lt_comp) = z2ui5_cl_util=>rtti_get_t_attri_by_any( <tab_out> ).
lt_comp = z2ui5_cl_util=>rtti_get_t_attri_by_any( <tab_out> ).
DELETE lt_comp WHERE name = 'ZZSELKZ'.
DATA(list) = tab->column_list_item( valign = `Top`
selected = `{ZZSELKZ}` ).
DATA(cells) = list->cells( ).
LOOP AT lt_comp INTO DATA(ls_comp).
list = tab->column_list_item( valign = `Top`
selected = `{ZZSELKZ}` ).
cells = list->cells( ).
LOOP AT lt_comp INTO ls_comp.
cells->text( |\{{ ls_comp-name }\}| ).
ENDLOOP.
DATA(columns) = tab->columns( ).
columns = tab->columns( ).
LOOP AT lt_comp INTO ls_comp.
DATA(text) = COND #(
LET data_element_name = substring_after(
val = CAST cl_abap_elemdescr( ls_comp-type )->absolute_name
sub = '\TYPE=' )
medium_label = z2ui5_cl_util=>rtti_get_data_element_texts( data_element_name )-medium IN
WHEN medium_label IS NOT INITIAL
THEN medium_label
ELSE ls_comp-name ).
temp4 ?= ls_comp-type.
data_element_name = substring_after( val = temp4->absolute_name sub = '\TYPE=' ).
medium_label = z2ui5_cl_util=>rtti_get_data_element_texts( data_element_name )-medium.
IF medium_label IS NOT INITIAL.
temp5 = medium_label.
ELSE.
temp5 = ls_comp-name.
ENDIF.
text = temp5.
columns->column( '8rem' )->header( `` )->text( text ).
ENDLOOP.
@ -194,29 +232,72 @@ CLASS z2ui5_cl_pop_to_select IMPLEMENTATION.
FIELD-SYMBOLS <tab_out2> TYPE STANDARD TABLE.
FIELD-SYMBOLS <field> TYPE any.
DATA lr_row TYPE REF TO data.
DATA lo_type TYPE REF TO cl_abap_typedescr.
DATA temp5 TYPE REF TO cl_abap_tabledescr.
DATA lo_table LIKE temp5.
DATA temp6 TYPE REF TO cl_abap_structdescr.
DATA lo_struct LIKE temp6.
DATA lt_comp TYPE abap_component_tab.
DATA temp7 TYPE REF TO cl_abap_elemdescr.
DATA lo_elem LIKE temp7.
DATA temp8 TYPE abap_componentdescr.
DATA temp11 TYPE REF TO cl_abap_datadescr.
DATA temp9 LIKE sy-subrc.
DATA lo_type_bool TYPE REF TO cl_abap_typedescr.
DATA temp10 TYPE abap_componentdescr.
DATA temp12 TYPE REF TO cl_abap_datadescr.
DATA lo_line_type TYPE REF TO cl_abap_structdescr.
DATA lo_tab_type TYPE REF TO cl_abap_tabledescr.
ASSIGN mr_tab->* TO <tab>.
DATA(lo_type) = cl_abap_structdescr=>describe_by_data( <tab> ).
DATA(lo_table) = CAST cl_abap_tabledescr( lo_type ).
lo_type = cl_abap_structdescr=>describe_by_data( <tab> ).
temp5 ?= lo_type.
lo_table = temp5.
TRY.
DATA(lo_struct) = CAST cl_abap_structdescr( lo_table->get_table_line_type( ) ).
DATA(lt_comp) = lo_struct->get_components( ).
temp6 ?= lo_table->get_table_line_type( ).
lo_struct = temp6.
lt_comp = lo_struct->get_components( ).
CATCH cx_root.
check_table_line = abap_true.
DATA(lo_elem) = CAST cl_abap_elemdescr( lo_table->get_table_line_type( ) ).
INSERT VALUE #( name = 'TAB_LINE'
type = CAST #( lo_elem ) ) INTO TABLE lt_comp.
temp7 ?= lo_table->get_table_line_type( ).
lo_elem = temp7.
CLEAR temp8.
temp8-name = 'TAB_LINE'.
temp11 ?= lo_elem.
temp8-type = temp11.
INSERT temp8 INTO TABLE lt_comp.
ENDTRY.
IF NOT line_exists( lt_comp[ name = `ZZSELKZ` ] ).
DATA(lo_type_bool) = cl_abap_structdescr=>describe_by_name( 'ABAP_BOOL' ).
INSERT VALUE #( name = `ZZSELKZ`
type = CAST #( lo_type_bool ) ) INTO TABLE lt_comp.
READ TABLE lt_comp WITH KEY name = `ZZSELKZ` TRANSPORTING NO FIELDS.
temp9 = sy-subrc.
IF NOT temp9 = 0.
lo_type_bool = cl_abap_structdescr=>describe_by_name( 'ABAP_BOOL' ).
CLEAR temp10.
temp10-name = `ZZSELKZ`.
temp12 ?= lo_type_bool.
temp10-type = temp12.
INSERT temp10 INTO TABLE lt_comp.
ENDIF.
DATA(lo_line_type) = cl_abap_structdescr=>create( lt_comp ).
DATA(lo_tab_type) = cl_abap_tabledescr=>create( lo_line_type ).
lo_line_type = cl_abap_structdescr=>create( lt_comp ).
lo_tab_type = cl_abap_tabledescr=>create( lo_line_type ).
CREATE DATA mr_tab_popup TYPE HANDLE lo_tab_type.
CREATE DATA mr_tab_popup_backup TYPE HANDLE lo_tab_type.
@ -232,7 +313,7 @@ CLASS z2ui5_cl_pop_to_select IMPLEMENTATION.
ASSERT sy-subrc = 0.
<field> = <row>.
ELSE.
<row2> = CORRESPONDING #( <row> ).
MOVE-CORRESPONDING <row> TO <row2>.
ENDIF.
INSERT <row2> INTO TABLE <tab_out>.
@ -268,7 +349,7 @@ CLASS z2ui5_cl_pop_to_select IMPLEMENTATION.
ASSERT sy-subrc = 0.
<row_result> = <table_line_selected>.
ELSE.
<row_result> = CORRESPONDING #( <row_selected> ).
MOVE-CORRESPONDING <row_selected> TO <row_result>.
ENDIF.
INSERT <row_result> INTO TABLE <table_result>.
@ -294,8 +375,15 @@ CLASS z2ui5_cl_pop_to_select IMPLEMENTATION.
FIELD-SYMBOLS <row2> TYPE any.
FIELD-SYMBOLS <field2> TYPE any.
DATA(lt_arg) = client->get( )-t_event_arg.
READ TABLE lt_arg INTO DATA(ls_arg) INDEX 1.
DATA lt_arg TYPE string_table.
DATA ls_arg TYPE string.
DATA lt_comp TYPE abap_component_tab.
DATA lv_check_continue LIKE abap_false.
DATA ls_comp LIKE LINE OF lt_comp.
DATA lv_assign TYPE string.
lt_arg = client->get( )-t_event_arg.
READ TABLE lt_arg INTO ls_arg INDEX 1.
ASSERT sy-subrc = 0.
ASSIGN mr_tab_popup->* TO <tab_out>.
@ -303,11 +391,15 @@ CLASS z2ui5_cl_pop_to_select IMPLEMENTATION.
<tab_out> = <tab_out_backup>.
DATA(lt_comp) = z2ui5_cl_util=>rtti_get_t_attri_by_any( <tab_out> ).
lt_comp = z2ui5_cl_util=>rtti_get_t_attri_by_any( <tab_out> ).
LOOP AT <tab_out> ASSIGNING <row2>.
DATA(lv_check_continue) = abap_false.
LOOP AT lt_comp INTO DATA(ls_comp).
DATA(lv_assign) = |<ROW2>-{ ls_comp-name }|.
lv_check_continue = abap_false.
LOOP AT lt_comp INTO ls_comp.
lv_assign = |<ROW2>-{ ls_comp-name }|.
ASSIGN (lv_assign) TO <field2>.
ASSERT sy-subrc = 0.
IF to_upper( <field2> ) CS to_upper( ls_arg ).

View File

@ -15,7 +15,7 @@ CLASS z2ui5_cl_app_hello_world IMPLEMENTATION.
METHOD z2ui5_if_app~main.
IF client->check_on_init( ).
IF client->check_on_init( ) IS NOT INITIAL.
client->view_display( z2ui5_cl_xml_view=>factory(
)->shell(

View File

@ -41,14 +41,16 @@ CLASS z2ui5_cl_app_startup IMPLEMENTATION.
METHOD factory.
result = NEW #( ).
CREATE OBJECT result.
ENDMETHOD.
METHOD on_event_check.
DATA li_app_test TYPE REF TO z2ui5_if_app.
DATA lx TYPE REF TO cx_root.
TRY.
DATA li_app_test TYPE REF TO z2ui5_if_app.
ms_home-classname = z2ui5_cl_util=>c_trim_upper( ms_home-classname ).
CREATE OBJECT li_app_test TYPE (ms_home-classname).
@ -62,7 +64,8 @@ CLASS z2ui5_cl_app_startup IMPLEMENTATION.
ms_home-url = z2ui5_cl_core_srv_util=>app_get_url( client = client
classname = ms_home-classname ).
CATCH cx_root INTO DATA(lx) ##CATCH_ALL.
CATCH cx_root INTO lx.
ms_home-class_value_state_text = lx->get_text( ).
ms_home-class_value_state = `Warning`.
client->message_box_display( text = ms_home-class_value_state_text
@ -73,7 +76,11 @@ CLASS z2ui5_cl_app_startup IMPLEMENTATION.
METHOD view_display_start.
DATA(page) = z2ui5_cl_xml_view=>factory( )->shell( )->page(
DATA page TYPE REF TO z2ui5_cl_xml_view.
DATA simple_form TYPE REF TO z2ui5_cl_xml_view.
DATA lv_url_samples2 TYPE string.
DATA temp1 TYPE string_table.
page = z2ui5_cl_xml_view=>factory( )->shell( )->page(
title = `abap2UI5 - Developing UI5 Apps Purely in ABAP`
shownavbutton = abap_false ).
@ -86,7 +93,8 @@ CLASS z2ui5_cl_app_startup IMPLEMENTATION.
icon = `sap-icon://information`
press = client->_event( `OPEN_INFO` ) ).
DATA(simple_form) = page->simple_form( editable = abap_true
simple_form = page->simple_form( editable = abap_true
layout = `ResponsiveGridLayout`
labelspanxl = `4`
labelspanl = `3`
@ -141,16 +149,20 @@ CLASS z2ui5_cl_app_startup IMPLEMENTATION.
href = client->_bind( ms_home-url )
enabled = |\{= ${ client->_bind( val = ms_home-class_editable ) } === false \}| ).
DATA(lv_url_samples2) = z2ui5_cl_core_srv_util=>app_get_url( client = client
lv_url_samples2 = z2ui5_cl_core_srv_util=>app_get_url( client = client
classname = 'z2ui5_cl_demo_app_000' ).
simple_form->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` ) IS NOT INITIAL.
simple_form->label( `Start Developing` ).
CLEAR temp1.
INSERT lv_url_samples2 INTO TABLE temp1.
simple_form->button( text = `Explore Code Samples`
press = client->_event_client( val = client->cs_event-open_new_tab
t_arg = VALUE #( ( lv_url_samples2 ) ) )
t_arg = temp1 )
width = `70%` ).
ELSE.
@ -184,10 +196,14 @@ CLASS z2ui5_cl_app_startup IMPLEMENTATION.
ENDMETHOD.
METHOD z2ui5_if_app~main.
DATA temp3 TYPE REF TO z2ui5_cl_pop_to_select.
DATA lo_f4 LIKE temp3.
DATA ls_result TYPE z2ui5_cl_pop_to_select=>ty_s_result.
FIELD-SYMBOLS <class> TYPE data.
me->client = client.
IF client->check_on_init( ).
IF client->check_on_init( ) IS NOT INITIAL.
z2ui5_on_init( ).
view_display_start( ).
RETURN.
@ -195,12 +211,18 @@ CLASS z2ui5_cl_app_startup IMPLEMENTATION.
IF client->get( )-check_on_navigated = abap_true.
TRY.
DATA(lo_f4) = CAST z2ui5_cl_pop_to_select( client->get_app( client->get( )-s_draft-id_prev_app ) ).
DATA(ls_result) = lo_f4->result( ).
temp3 ?= client->get_app( client->get( )-s_draft-id_prev_app ).
lo_f4 = temp3.
ls_result = lo_f4->result( ).
IF ls_result-check_confirmed = abap_true.
ASSIGN ls_result-row->* TO FIELD-SYMBOL(<class>).
ms_home = CORRESPONDING #( BASE ( ms_home ) <class> ).
ASSIGN ls_result-row->* TO <class>.
ms_home = ms_home.
MOVE-CORRESPONDING <class> TO ms_home.
view_display_start( ).
RETURN.
ENDIF.
@ -214,14 +236,22 @@ CLASS z2ui5_cl_app_startup IMPLEMENTATION.
METHOD view_display_popup.
DATA(page2) = z2ui5_cl_xml_view=>factory_popup(
DATA page2 TYPE REF TO z2ui5_cl_xml_view.
DATA content TYPE REF TO z2ui5_cl_xml_view.
DATA simple_form2 TYPE REF TO z2ui5_cl_xml_view.
DATA temp4 TYPE string.
DATA temp1 TYPE REF TO z2ui5_cl_core_srv_draft.
DATA lv_count LIKE temp4.
page2 = z2ui5_cl_xml_view=>factory_popup(
)->dialog( title = `abap2UI5 - System Information`
afterclose = client->_event( `CLOSE` ) ).
DATA(content) = page2->content( ).
content = page2->content( ).
content->_z2ui5( )->info_frontend( ui5_version = client->_bind( mv_ui5_version ) ).
DATA(simple_form2) = content->simple_form( editable = abap_true
simple_form2 = content->simple_form( editable = abap_true
layout = `ResponsiveGridLayout`
labelspanxl = `4`
labelspanl = `3`
@ -252,7 +282,12 @@ CLASS z2ui5_cl_app_startup IMPLEMENTATION.
simple_form2->checkbox( enabled = abap_false
selected = z2ui5_cl_util=>context_check_abap_cloud( ) ).
DATA(lv_count) = CONV string( NEW z2ui5_cl_core_srv_draft( )->count_entries( ) ).
CREATE OBJECT temp1 TYPE z2ui5_cl_core_srv_draft.
temp4 = temp1->count_entries( ).
lv_count = temp4.
simple_form2->toolbar( )->title( `abap2UI5` ).
simple_form2->label( `Version ` ).
simple_form2->text( z2ui5_if_app=>version ).
@ -308,12 +343,15 @@ CLASS z2ui5_cl_app_startup IMPLEMENTATION.
ENDMETHOD.
METHOD z2ui5_on_init.
DATA temp5 TYPE REF TO z2ui5_cl_app_hello_world.
ms_home-btn_text = `check`.
ms_home-btn_event_id = `BUTTON_CHECK`.
ms_home-class_editable = abap_true.
ms_home-btn_icon = `sap-icon://validate`.
ms_home-classname = z2ui5_cl_util=>rtti_get_classname_by_ref( NEW z2ui5_cl_app_hello_world( ) ).
CREATE OBJECT temp5 TYPE z2ui5_cl_app_hello_world.
ms_home-classname = z2ui5_cl_util=>rtti_get_classname_by_ref( temp5 ).
ENDMETHOD.

View File

@ -10,7 +10,8 @@ ENDCLASS.
CLASS ltcl_app_startup_test IMPLEMENTATION.
METHOD first_test.
DATA(lo_app) = z2ui5_cl_app_startup=>factory( ) ##NEEDED.
DATA lo_app TYPE REF TO z2ui5_cl_app_startup.
lo_app = z2ui5_cl_app_startup=>factory( ) ##NEEDED.
ENDMETHOD.
ENDCLASS.

View File

@ -106,7 +106,7 @@ CLASS z2ui5_cl_http_handler IMPLEMENTATION.
METHOD factory.
result = NEW #( ).
CREATE OBJECT result.
IF server IS BOUND.
result->mo_server = z2ui5_cl_util_abap_http=>factory( server ).
@ -121,13 +121,16 @@ CLASS z2ui5_cl_http_handler IMPLEMENTATION.
METHOD factory_cloud.
result = NEW #( ).
CREATE OBJECT result.
result->mo_server = z2ui5_cl_util_abap_http=>factory_cloud( req = req
res = res ).
ENDMETHOD.
METHOD _http_get.
DATA lv_style_css TYPE string.
DATA temp1 LIKE LINE OF is_config-t_add_config.
DATA lr_config LIKE REF TO temp1.
IF is_config-title IS INITIAL.
is_config-title = `abap2UI5`.
@ -150,7 +153,8 @@ CLASS z2ui5_cl_http_handler IMPLEMENTATION.
ENDIF.
IF is_config-styles_css IS INITIAL.
DATA(lv_style_css) = z2ui5_cl_app_style_css=>get( ).
lv_style_css = z2ui5_cl_app_style_css=>get( ).
ELSE.
lv_style_css = is_config-styles_css.
ENDIF.
@ -190,7 +194,9 @@ CLASS z2ui5_cl_http_handler IMPLEMENTATION.
|data-sap-ui-compatVersion="edge" data-sap-ui-async="true" data-sap-ui-frameOptions="trusted" data-sap-ui-bindingSyntax="complex"| && |\n| &&
|data-sap-ui-theme="{ is_config-theme }" src=" { is_config-src }" |.
LOOP AT is_config-t_add_config REFERENCE INTO DATA(lr_config).
LOOP AT is_config-t_add_config REFERENCE INTO lr_config.
result = |{ result } { lr_config->n }='{ lr_config->v }'|.
ENDLOOP.
@ -204,7 +210,8 @@ CLASS z2ui5_cl_http_handler IMPLEMENTATION.
METHOD run.
DATA(lo_handler) = factory( server = server
DATA lo_handler TYPE REF TO z2ui5_cl_http_handler.
lo_handler = factory( server = server
req = req
res = res
).
@ -221,6 +228,7 @@ CLASS z2ui5_cl_http_handler IMPLEMENTATION.
ENDMETHOD.
METHOD set_response.
DATA lv_contextid TYPE string.
mo_server->set_cdata( ms_res-body ).
mo_server->set_header_field( n = `cache-control`
@ -232,7 +240,8 @@ CLASS z2ui5_cl_http_handler IMPLEMENTATION.
IF ms_res-s_stateful-switched = abap_true.
mo_server->set_session_stateful( ms_res-s_stateful-active ).
IF mo_server->get_header_field( 'sap-contextid-accept' ) = 'header'.
DATA(lv_contextid) = mo_server->get_response_cookie( 'sap-contextid' ).
lv_contextid = mo_server->get_response_cookie( 'sap-contextid' ).
IF lv_contextid IS NOT INITIAL.
mo_server->delete_response_cookie( 'sap-contextid' ).
mo_server->set_header_field( n = 'sap-contextid'
@ -250,9 +259,13 @@ CLASS z2ui5_cl_http_handler IMPLEMENTATION.
ENDMETHOD.
METHOD _http_post.
DATA lo_post TYPE REF TO z2ui5_cl_core_handler.
DATA temp2 TYPE REF TO z2ui5_if_app.
DATA li_app LIKE temp2.
IF so_sticky_handler IS NOT BOUND.
DATA(lo_post) = NEW z2ui5_cl_core_handler( is_req-body ).
CREATE OBJECT lo_post TYPE z2ui5_cl_core_handler EXPORTING VAL = is_req-body.
ELSE.
lo_post = so_sticky_handler.
lo_post->mv_request_json = is_req-body.
@ -262,7 +275,10 @@ CLASS z2ui5_cl_http_handler IMPLEMENTATION.
TRY.
IF lo_post IS BOUND.
DATA(li_app) = CAST z2ui5_if_app( lo_post->mo_action->mo_app->mo_app ).
temp2 ?= lo_post->mo_action->mo_app->mo_app.
li_app = temp2.
IF li_app->check_sticky = abap_true.
so_sticky_handler = lo_post.
ELSE.
@ -287,7 +303,8 @@ CLASS z2ui5_cl_http_handler IMPLEMENTATION.
METHOD get_request.
DATA(lo_handler) = factory( server = server
DATA lo_handler TYPE REF TO z2ui5_cl_http_handler.
lo_handler = factory( server = server
req = req
res = res
).
@ -299,7 +316,9 @@ CLASS z2ui5_cl_http_handler IMPLEMENTATION.
METHOD get_response.
DATA(lo_handler) = factory( server = server
DATA lo_handler TYPE REF TO z2ui5_cl_http_handler.
DATA lv_contextid TYPE string.
lo_handler = factory( server = server
req = req
res = res
).
@ -314,7 +333,8 @@ CLASS z2ui5_cl_http_handler IMPLEMENTATION.
IF is_res-s_stateful-switched = abap_true.
lo_handler->mo_server->set_session_stateful( is_res-s_stateful-active ).
IF lo_handler->mo_server->get_header_field( 'sap-contextid-accept' ) = 'header'.
DATA(lv_contextid) = lo_handler->mo_server->get_response_cookie( 'sap-contextid' ).
lv_contextid = lo_handler->mo_server->get_response_cookie( 'sap-contextid' ).
IF lv_contextid IS NOT INITIAL.
lo_handler->mo_server->delete_response_cookie( 'sap-contextid' ).
lo_handler->mo_server->set_header_field( n = 'sap-contextid'

File diff suppressed because it is too large Load Diff

View File

@ -10,8 +10,11 @@ ENDCLASS.
CLASS ltcl_unit_test IMPLEMENTATION.
METHOD test_create.
DATA(lo_view) = z2ui5_cl_xml_view=>factory( ).
DATA(lv_xml) = lo_view->page( `test` )->stringify( ).
DATA lo_view TYPE REF TO z2ui5_cl_xml_view.
DATA lv_xml TYPE string.
lo_view = z2ui5_cl_xml_view=>factory( ).
lv_xml = lo_view->page( `test` )->stringify( ).
IF lv_xml IS INITIAL.
cl_abap_unit_assert=>fail( quit = 5 ).

View File

@ -266,44 +266,89 @@ CLASS z2ui5_cl_xml_view_cc IMPLEMENTATION.
ENDMETHOD.
METHOD bwip_js.
DATA temp1 TYPE z2ui5_if_types=>ty_t_name_value.
DATA temp2 LIKE LINE OF temp1.
result = mo_view.
CLEAR temp1.
temp2-n = `bcid`.
temp2-v = bcid.
INSERT temp2 INTO TABLE temp1.
temp2-n = `text`.
temp2-v = text.
INSERT temp2 INTO TABLE temp1.
temp2-n = `scale`.
temp2-v = scale.
INSERT temp2 INTO TABLE temp1.
temp2-n = `height`.
temp2-v = height.
INSERT temp2 INTO TABLE temp1.
mo_view->_generic( name = `bwipjs`
ns = `z2ui5`
t_prop = VALUE #( ( n = `bcid` v = bcid )
( n = `text` v = text )
( n = `scale` v = scale )
( n = `height` v = height )
) ).
t_prop = temp1 ).
ENDMETHOD.
METHOD camera_picture.
DATA temp3 TYPE z2ui5_if_types=>ty_t_name_value.
DATA temp4 LIKE LINE OF temp3.
result = mo_view.
CLEAR temp3.
temp4-n = `id`.
temp4-v = id.
INSERT temp4 INTO TABLE temp3.
temp4-n = `value`.
temp4-v = value.
INSERT temp4 INTO TABLE temp3.
temp4-n = `press`.
temp4-v = press.
INSERT temp4 INTO TABLE temp3.
temp4-n = `OnPhoto`.
temp4-v = onphoto.
INSERT temp4 INTO TABLE temp3.
temp4-n = `autoplay`.
temp4-v = z2ui5_cl_util=>boolean_abap_2_json( autoplay ).
INSERT temp4 INTO TABLE temp3.
mo_view->_generic( name = `CameraPicture`
ns = `z2ui5`
t_prop = VALUE #( ( n = `id` v = id )
( n = `value` v = value )
( n = `press` v = press )
( n = `OnPhoto` v = onphoto )
( n = `autoplay` v = z2ui5_cl_util=>boolean_abap_2_json( autoplay ) )
) ).
t_prop = temp3 ).
ENDMETHOD.
METHOD chartjs.
DATA temp5 TYPE z2ui5_if_types=>ty_t_name_value.
DATA temp6 LIKE LINE OF temp5.
result = mo_view.
CLEAR temp5.
temp6-n = `canvas_id`.
temp6-v = canvas_id.
INSERT temp6 INTO TABLE temp5.
temp6-n = `view`.
temp6-v = view.
INSERT temp6 INTO TABLE temp5.
temp6-n = `config`.
temp6-v = config.
INSERT temp6 INTO TABLE temp5.
temp6-n = `height`.
temp6-v = height.
INSERT temp6 INTO TABLE temp5.
temp6-n = `width`.
temp6-v = width.
INSERT temp6 INTO TABLE temp5.
temp6-n = `style`.
temp6-v = style.
INSERT temp6 INTO TABLE temp5.
mo_view->_generic( name = `chartjs`
ns = `z2ui5`
t_prop = VALUE #( ( n = `canvas_id` v = canvas_id )
( n = `view` v = view )
( n = `config` v = config )
( n = `height` v = height )
( n = `width` v = width )
( n = `style` v = style )
) ).
t_prop = temp5 ).
ENDMETHOD.
METHOD constructor.
@ -315,11 +360,13 @@ CLASS z2ui5_cl_xml_view_cc IMPLEMENTATION.
METHOD demo_output.
DATA lv_style TYPE string.
DATA lv_class TYPE c LENGTH 20.
mo_view->_generic( ns = `html`
name = `style` ).
DATA(lv_class) = 'Z2UI5_CL_CC_DEMO_OUT'.
lv_class = 'Z2UI5_CL_CC_DEMO_OUT'.
CALL METHOD (lv_class)=>('GET_STYLE')
RECEIVING
result = lv_style.
@ -328,259 +375,517 @@ CLASS z2ui5_cl_xml_view_cc IMPLEMENTATION.
ENDMETHOD.
METHOD favicon.
DATA temp7 TYPE z2ui5_if_types=>ty_t_name_value.
DATA temp8 LIKE LINE OF temp7.
result = mo_view.
CLEAR temp7.
temp8-n = `favicon`.
temp8-v = favicon.
INSERT temp8 INTO TABLE temp7.
mo_view->_generic( name = `Favicon`
ns = `z2ui5`
t_prop = VALUE #( ( n = `favicon` v = favicon ) ) ).
t_prop = temp7 ).
ENDMETHOD.
METHOD file_uploader.
DATA temp9 TYPE z2ui5_if_types=>ty_t_name_value.
DATA temp10 LIKE LINE OF temp9.
result = mo_view.
CLEAR temp9.
temp10-n = `placeholder`.
temp10-v = placeholder.
INSERT temp10 INTO TABLE temp9.
temp10-n = `upload`.
temp10-v = upload.
INSERT temp10 INTO TABLE temp9.
temp10-n = `path`.
temp10-v = path.
INSERT temp10 INTO TABLE temp9.
temp10-n = `value`.
temp10-v = value.
INSERT temp10 INTO TABLE temp9.
temp10-n = `iconOnly`.
temp10-v = z2ui5_cl_util=>boolean_abap_2_json( icononly ).
INSERT temp10 INTO TABLE temp9.
temp10-n = `buttonOnly`.
temp10-v = z2ui5_cl_util=>boolean_abap_2_json( buttononly ).
INSERT temp10 INTO TABLE temp9.
temp10-n = `buttonText`.
temp10-v = buttontext.
INSERT temp10 INTO TABLE temp9.
temp10-n = `uploadButtonText`.
temp10-v = uploadbuttontext.
INSERT temp10 INTO TABLE temp9.
temp10-n = `fileType`.
temp10-v = filetype.
INSERT temp10 INTO TABLE temp9.
temp10-n = `checkDirectUpload`.
temp10-v = z2ui5_cl_util=>boolean_abap_2_json( checkdirectupload ).
INSERT temp10 INTO TABLE temp9.
temp10-n = `icon`.
temp10-v = icon.
INSERT temp10 INTO TABLE temp9.
temp10-n = `enabled`.
temp10-v = z2ui5_cl_util=>boolean_abap_2_json( enabled ).
INSERT temp10 INTO TABLE temp9.
mo_view->_generic(
name = `FileUploader`
ns = `z2ui5`
t_prop = VALUE #( ( n = `placeholder` v = placeholder )
( n = `upload` v = upload )
( n = `path` v = path )
( n = `value` v = value )
( n = `iconOnly` v = z2ui5_cl_util=>boolean_abap_2_json( icononly ) )
( n = `buttonOnly` v = z2ui5_cl_util=>boolean_abap_2_json( buttononly ) )
( n = `buttonText` v = buttontext )
( n = `uploadButtonText` v = uploadbuttontext )
( n = `fileType` v = filetype )
( n = `checkDirectUpload` v = z2ui5_cl_util=>boolean_abap_2_json( checkdirectupload ) )
( n = `icon` v = icon )
( n = `enabled` v = z2ui5_cl_util=>boolean_abap_2_json( enabled ) ) ) ).
t_prop = temp9 ).
ENDMETHOD.
METHOD focus.
DATA temp11 TYPE z2ui5_if_types=>ty_t_name_value.
DATA temp12 LIKE LINE OF temp11.
result = mo_view.
CLEAR temp11.
temp12-n = `setUpdate`.
temp12-v = setupdate.
INSERT temp12 INTO TABLE temp11.
temp12-n = `selectionStart`.
temp12-v = selectionstart.
INSERT temp12 INTO TABLE temp11.
temp12-n = `selectionEnd`.
temp12-v = selectionend.
INSERT temp12 INTO TABLE temp11.
temp12-n = `focusId`.
temp12-v = focusid.
INSERT temp12 INTO TABLE temp11.
mo_view->_generic( name = `Focus`
ns = `z2ui5`
t_prop = VALUE #( ( n = `setUpdate` v = setupdate )
( n = `selectionStart` v = selectionstart )
( n = `selectionEnd` v = selectionend )
( n = `focusId` v = focusid )
) ).
t_prop = temp11 ).
ENDMETHOD.
METHOD geolocation.
DATA temp13 TYPE z2ui5_if_types=>ty_t_name_value.
DATA temp14 LIKE LINE OF temp13.
result = mo_view.
CLEAR temp13.
temp14-n = `finished`.
temp14-v = finished.
INSERT temp14 INTO TABLE temp13.
temp14-n = `longitude`.
temp14-v = longitude.
INSERT temp14 INTO TABLE temp13.
temp14-n = `latitude`.
temp14-v = latitude.
INSERT temp14 INTO TABLE temp13.
temp14-n = `altitude`.
temp14-v = altitude.
INSERT temp14 INTO TABLE temp13.
temp14-n = `accuracy`.
temp14-v = accuracy.
INSERT temp14 INTO TABLE temp13.
temp14-n = `altitudeAccuracy`.
temp14-v = altitudeaccuracy.
INSERT temp14 INTO TABLE temp13.
temp14-n = `speed`.
temp14-v = speed.
INSERT temp14 INTO TABLE temp13.
temp14-n = `heading`.
temp14-v = heading.
INSERT temp14 INTO TABLE temp13.
temp14-n = `enableHighAccuracy`.
temp14-v = z2ui5_cl_util=>boolean_abap_2_json( enablehighaccuracy ).
INSERT temp14 INTO TABLE temp13.
temp14-n = `timeout`.
temp14-v = timeout.
INSERT temp14 INTO TABLE temp13.
mo_view->_generic( name = `Geolocation`
ns = `z2ui5`
t_prop = VALUE #(
( n = `finished` v = finished )
( n = `longitude` v = longitude )
( n = `latitude` v = latitude )
( n = `altitude` v = altitude )
( n = `accuracy` v = accuracy )
( n = `altitudeAccuracy` v = altitudeaccuracy )
( n = `speed` v = speed )
( n = `heading` v = heading )
( n = `enableHighAccuracy` v = z2ui5_cl_util=>boolean_abap_2_json( enablehighaccuracy ) )
( n = `timeout` v = timeout )
) ).
t_prop = temp13 ).
ENDMETHOD.
METHOD history.
DATA temp15 TYPE z2ui5_if_types=>ty_t_name_value.
DATA temp16 LIKE LINE OF temp15.
result = mo_view.
CLEAR temp15.
temp16-n = `search`.
temp16-v = search.
INSERT temp16 INTO TABLE temp15.
mo_view->_generic( name = `History`
ns = `z2ui5`
t_prop = VALUE #( ( n = `search` v = search ) ) ).
t_prop = temp15 ).
ENDMETHOD.
METHOD info_frontend.
DATA temp17 TYPE z2ui5_if_types=>ty_t_name_value.
DATA temp18 LIKE LINE OF temp17.
result = mo_view.
CLEAR temp17.
temp18-n = `ui5_version`.
temp18-v = ui5_version.
INSERT temp18 INTO TABLE temp17.
temp18-n = `ui5_gav`.
temp18-v = ui5_gav.
INSERT temp18 INTO TABLE temp17.
temp18-n = `finished`.
temp18-v = finished.
INSERT temp18 INTO TABLE temp17.
temp18-n = `ui5_theme`.
temp18-v = ui5_theme.
INSERT temp18 INTO TABLE temp17.
temp18-n = `device_os`.
temp18-v = device_os.
INSERT temp18 INTO TABLE temp17.
temp18-n = `device_systemtype`.
temp18-v = device_systemtype.
INSERT temp18 INTO TABLE temp17.
temp18-n = `device_browser`.
temp18-v = device_browser.
INSERT temp18 INTO TABLE temp17.
temp18-n = `device_phone`.
temp18-v = device_phone.
INSERT temp18 INTO TABLE temp17.
temp18-n = `device_desktop`.
temp18-v = device_desktop.
INSERT temp18 INTO TABLE temp17.
temp18-n = `device_tablet`.
temp18-v = device_tablet.
INSERT temp18 INTO TABLE temp17.
temp18-n = `device_combi`.
temp18-v = device_combi.
INSERT temp18 INTO TABLE temp17.
temp18-n = `device_height`.
temp18-v = device_height.
INSERT temp18 INTO TABLE temp17.
temp18-n = `device_width`.
temp18-v = device_width.
INSERT temp18 INTO TABLE temp17.
mo_view->_generic( name = `Info`
ns = `z2ui5`
t_prop = VALUE #( ( n = `ui5_version` v = ui5_version )
( n = `ui5_gav` v = ui5_gav )
( n = `finished` v = finished )
( n = `ui5_theme` v = ui5_theme )
( n = `device_os` v = device_os )
( n = `device_systemtype` v = device_systemtype )
( n = `device_browser` v = device_browser )
( n = `device_phone` v = device_phone )
( n = `device_desktop` v = device_desktop )
( n = `device_tablet` v = device_tablet )
( n = `device_combi` v = device_combi )
( n = `device_height` v = device_height )
( n = `device_width` v = device_width ) )
t_prop = temp17
).
ENDMETHOD.
METHOD message_manager.
DATA temp19 TYPE z2ui5_if_types=>ty_t_name_value.
DATA temp20 LIKE LINE OF temp19.
result = mo_view.
CLEAR temp19.
temp20-n = `items`.
temp20-v = items.
INSERT temp20 INTO TABLE temp19.
mo_view->_generic( name = `MessageManager`
ns = `z2ui5`
t_prop = VALUE #( ( n = `items` v = items )
) ).
t_prop = temp19 ).
ENDMETHOD.
METHOD messaging.
DATA temp21 TYPE z2ui5_if_types=>ty_t_name_value.
DATA temp22 LIKE LINE OF temp21.
result = mo_view.
CLEAR temp21.
temp22-n = `items`.
temp22-v = items.
INSERT temp22 INTO TABLE temp21.
mo_view->_generic( name = `Messaging`
ns = `z2ui5`
t_prop = VALUE #( ( n = `items` v = items )
) ).
t_prop = temp21 ).
ENDMETHOD.
METHOD multiinput_ext.
DATA temp23 TYPE z2ui5_if_types=>ty_t_name_value.
DATA temp24 LIKE LINE OF temp23.
result = mo_view.
CLEAR temp23.
temp24-n = `MultiInputId`.
temp24-v = multiinputid.
INSERT temp24 INTO TABLE temp23.
temp24-n = `MultiInputName`.
temp24-v = multiinputname.
INSERT temp24 INTO TABLE temp23.
temp24-n = `change`.
temp24-v = change.
INSERT temp24 INTO TABLE temp23.
temp24-n = `addedTokens`.
temp24-v = addedtokens.
INSERT temp24 INTO TABLE temp23.
temp24-n = `removedTokens`.
temp24-v = removedtokens.
INSERT temp24 INTO TABLE temp23.
mo_view->_generic( name = `MultiInputExt`
ns = `z2ui5`
t_prop = VALUE #( ( n = `MultiInputId` v = multiinputid )
( n = `MultiInputName` v = multiinputname )
( n = `change` v = change )
( n = `addedTokens` v = addedtokens )
( n = `removedTokens` v = removedtokens ) ) ).
t_prop = temp23 ).
ENDMETHOD.
METHOD tree.
DATA temp25 TYPE z2ui5_if_types=>ty_t_name_value.
DATA temp26 LIKE LINE OF temp25.
result = mo_view.
CLEAR temp25.
temp26-n = `tree_id`.
temp26-v = tree_id.
INSERT temp26 INTO TABLE temp25.
mo_view->_generic( name = `Tree`
ns = `z2ui5`
t_prop = VALUE #( ( n = `tree_id` v = tree_id )
) ).
t_prop = temp25 ).
ENDMETHOD.
METHOD scrolling.
DATA temp27 TYPE z2ui5_if_types=>ty_t_name_value.
DATA temp28 LIKE LINE OF temp27.
result = mo_view.
CLEAR temp27.
temp28-n = `setUpdate`.
temp28-v = setupdate.
INSERT temp28 INTO TABLE temp27.
temp28-n = `items`.
temp28-v = items.
INSERT temp28 INTO TABLE temp27.
mo_view->_generic( name = `Scrolling`
ns = `z2ui5`
t_prop = VALUE #( ( n = `setUpdate` v = setupdate )
( n = `items` v = items )
) ).
t_prop = temp27 ).
ENDMETHOD.
METHOD spreadsheet_export.
DATA temp29 TYPE z2ui5_if_types=>ty_t_name_value.
DATA temp30 LIKE LINE OF temp29.
result = mo_view.
CLEAR temp29.
temp30-n = `tableId`.
temp30-v = tableid.
INSERT temp30 INTO TABLE temp29.
temp30-n = `text`.
temp30-v = text.
INSERT temp30 INTO TABLE temp29.
temp30-n = `icon`.
temp30-v = icon.
INSERT temp30 INTO TABLE temp29.
temp30-n = `type`.
temp30-v = type.
INSERT temp30 INTO TABLE temp29.
temp30-n = `tooltip`.
temp30-v = tooltip.
INSERT temp30 INTO TABLE temp29.
temp30-n = `columnconfig`.
temp30-v = columnconfig.
INSERT temp30 INTO TABLE temp29.
mo_view->_generic( name = `ExportSpreadsheet`
ns = `z2ui5`
t_prop = VALUE #( ( n = `tableId` v = tableid )
( n = `text` v = text )
( n = `icon` v = icon )
( n = `type` v = type )
( n = `tooltip` v = tooltip )
( n = `columnconfig` v = columnconfig )
) ).
t_prop = temp29 ).
ENDMETHOD.
METHOD timer.
DATA temp31 TYPE z2ui5_if_types=>ty_t_name_value.
DATA temp32 LIKE LINE OF temp31.
result = mo_view.
CLEAR temp31.
temp32-n = `delayMS`.
temp32-v = delayms.
INSERT temp32 INTO TABLE temp31.
temp32-n = `finished`.
temp32-v = finished.
INSERT temp32 INTO TABLE temp31.
temp32-n = `checkActive`.
temp32-v = z2ui5_cl_util=>boolean_abap_2_json( checkactive ).
INSERT temp32 INTO TABLE temp31.
temp32-n = `checkRepeat`.
temp32-v = z2ui5_cl_util=>boolean_abap_2_json( checkrepeat ).
INSERT temp32 INTO TABLE temp31.
mo_view->_generic( name = `Timer`
ns = `z2ui5`
t_prop = VALUE #( ( n = `delayMS` v = delayms )
( n = `finished` v = finished )
( n = `checkActive` v = z2ui5_cl_util=>boolean_abap_2_json( checkactive ) )
( n = `checkRepeat` v = z2ui5_cl_util=>boolean_abap_2_json( checkrepeat ) )
) ).
t_prop = temp31 ).
ENDMETHOD.
METHOD binding_update.
DATA temp33 TYPE z2ui5_if_types=>ty_t_name_value.
DATA temp34 LIKE LINE OF temp33.
result = mo_view.
CLEAR temp33.
temp34-n = `path`.
temp34-v = path.
INSERT temp34 INTO TABLE temp33.
temp34-n = `changed`.
temp34-v = changed.
INSERT temp34 INTO TABLE temp33.
mo_view->_generic( name = `BindingUpdate`
ns = `z2ui5`
t_prop = VALUE #(
* ( n = `value` v = value )
( n = `path` v = path )
( n = `changed` v = changed )
* ( n = `checkActive` v = z2ui5_cl_util=>boolean_abap_2_json( checkactive ) )
* ( n = `checkRepeat` v = z2ui5_cl_util=>boolean_abap_2_json( checkrepeat ) )
) ).
t_prop = temp33 ).
ENDMETHOD.
METHOD websocket.
DATA temp35 TYPE z2ui5_if_types=>ty_t_name_value.
DATA temp36 LIKE LINE OF temp35.
result = mo_view.
CLEAR temp35.
temp36-n = `value`.
temp36-v = value.
INSERT temp36 INTO TABLE temp35.
temp36-n = `path`.
temp36-v = path.
INSERT temp36 INTO TABLE temp35.
temp36-n = `received`.
temp36-v = received.
INSERT temp36 INTO TABLE temp35.
temp36-n = `checkActive`.
temp36-v = z2ui5_cl_util=>boolean_abap_2_json( checkactive ).
INSERT temp36 INTO TABLE temp35.
temp36-n = `checkRepeat`.
temp36-v = z2ui5_cl_util=>boolean_abap_2_json( checkrepeat ).
INSERT temp36 INTO TABLE temp35.
mo_view->_generic( name = `Websocket`
ns = `z2ui5`
t_prop = VALUE #( ( n = `value` v = value )
( n = `path` v = path )
( n = `received` v = received )
( n = `checkActive` v = z2ui5_cl_util=>boolean_abap_2_json( checkactive ) )
( n = `checkRepeat` v = z2ui5_cl_util=>boolean_abap_2_json( checkrepeat ) )
) ).
t_prop = temp35 ).
ENDMETHOD.
METHOD lp_title.
DATA temp37 TYPE z2ui5_if_types=>ty_t_name_value.
DATA temp38 LIKE LINE OF temp37.
result = mo_view.
CLEAR temp37.
temp38-n = `title`.
temp38-v = title.
INSERT temp38 INTO TABLE temp37.
temp38-n = `ApplicationFullWidth`.
temp38-v = z2ui5_cl_util=>boolean_abap_2_json( applicationfullwidth ).
INSERT temp38 INTO TABLE temp37.
mo_view->_generic( name = `LPTitle`
ns = `z2ui5`
t_prop = VALUE #(
( n = `title` v = title )
( n = `ApplicationFullWidth` v = z2ui5_cl_util=>boolean_abap_2_json( applicationfullwidth ) ) )
t_prop = temp37
).
ENDMETHOD.
METHOD title.
DATA temp39 TYPE z2ui5_if_types=>ty_t_name_value.
DATA temp40 LIKE LINE OF temp39.
result = mo_view.
CLEAR temp39.
temp40-n = `title`.
temp40-v = title.
INSERT temp40 INTO TABLE temp39.
mo_view->_generic( name = `Title`
ns = `z2ui5`
t_prop = VALUE #( ( n = `title` v = title ) ) ).
t_prop = temp39 ).
ENDMETHOD.
METHOD dirty.
DATA temp41 TYPE z2ui5_if_types=>ty_t_name_value.
DATA temp42 LIKE LINE OF temp41.
result = mo_view.
CLEAR temp41.
temp42-n = `isDirty`.
temp42-v = z2ui5_cl_util=>boolean_abap_2_json( isdirty ).
INSERT temp42 INTO TABLE temp41.
mo_view->_generic( name = `Dirty`
ns = `z2ui5`
t_prop = VALUE #( ( n = `isDirty` v = z2ui5_cl_util=>boolean_abap_2_json( isdirty ) ) ) ).
t_prop = temp41 ).
ENDMETHOD.
METHOD uitableext.
DATA temp43 TYPE z2ui5_if_types=>ty_t_name_value.
DATA temp44 LIKE LINE OF temp43.
CLEAR temp43.
temp44-n = `tableId`.
temp44-v = tableid.
INSERT temp44 INTO TABLE temp43.
result = mo_view->_generic( name = `UITableExt`
ns = `z2ui5`
t_prop = VALUE #( ( n = `tableId` v = tableid )
) ).
t_prop = temp43 ).
ENDMETHOD.
METHOD smartmultiinput_ext.
DATA temp45 TYPE z2ui5_if_types=>ty_t_name_value.
DATA temp46 LIKE LINE OF temp45.
result = mo_view.
CLEAR temp45.
temp46-n = `multiInputId`.
temp46-v = multiinputid.
INSERT temp46 INTO TABLE temp45.
temp46-n = `rangeData`.
temp46-v = rangedata.
INSERT temp46 INTO TABLE temp45.
temp46-n = `change`.
temp46-v = change.
INSERT temp46 INTO TABLE temp45.
temp46-n = `addedTokens`.
temp46-v = addedtokens.
INSERT temp46 INTO TABLE temp45.
temp46-n = `removedTokens`.
temp46-v = removedtokens.
INSERT temp46 INTO TABLE temp45.
mo_view->_generic( name = `SmartMultiInputExt`
ns = `z2ui5`
t_prop = VALUE #( ( n = `multiInputId` v = multiinputid )
( n = `rangeData` v = rangedata )
( n = `change` v = change )
( n = `addedTokens` v = addedtokens )
( n = `removedTokens` v = removedtokens ) ) ).
t_prop = temp45 ).
ENDMETHOD.

View File

@ -6,7 +6,7 @@ INTERFACE z2ui5_if_types
n TYPE string,
v TYPE string,
END OF ty_s_name_value.
TYPES ty_t_name_value TYPE STANDARD TABLE OF ty_s_name_value WITH EMPTY KEY.
TYPES ty_t_name_value TYPE STANDARD TABLE OF ty_s_name_value WITH DEFAULT KEY.
TYPES:
BEGIN OF ty_s_http_config,