bugfixes and refactoring (#1323)

* bugfixes and refactoring

* update

* update package structure

* update

* update

* update package assignment

* update

* update

* update

* update package structure
This commit is contained in:
oblomov 2024-08-24 09:07:34 +02:00 committed by GitHub
parent 1b167d0f47
commit bdb985af6c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
56 changed files with 2631 additions and 2057 deletions

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,901 @@
CLASS ltcl_test DEFINITION FINAL FOR TESTING
DURATION SHORT
RISK LEVEL HARMLESS.
PRIVATE SECTION.
METHODS test_db_handle FOR TESTING RAISING cx_static_check.
METHODS test_db_handle_read_id FOR TESTING RAISING cx_static_check.
ENDCLASS.
CLASS ltcl_test IMPLEMENTATION.
METHOD test_db_handle.
IF sy-sysid = 'ABC'.
RETURN.
ENDIF.
TYPES:
BEGIN OF ty_row,
title TYPE string,
value TYPE string,
selected TYPE abap_bool,
END OF ty_row.
DATA(ls_row) = VALUE ty_row(
title = `test`
value = `val`
selected = abap_true ).
DATA(ls_row_result) = VALUE ty_row( ).
DATA(lv_id) = z2ui5_cl_util=>db_save(
uname = `name`
handle = `handle1`
handle2 = `handle2`
handle3 = `handle3`
data = ls_row ).
z2ui5_cl_util=>db_load_by_id(
EXPORTING
id = lv_id
IMPORTING
result = ls_row_result ).
cl_abap_unit_assert=>assert_equals(
act = ls_row_result
exp = ls_row ).
CLEAR ls_row_result.
z2ui5_cl_util=>db_load_by_handle(
EXPORTING
uname = `name`
handle = `handle1`
handle2 = `handle2`
handle3 = `handle3`
IMPORTING
result = ls_row_result ).
cl_abap_unit_assert=>assert_equals(
act = ls_row_result
exp = ls_row ).
ENDMETHOD.
METHOD test_db_handle_read_id.
IF sy-sysid = 'ABC'.
RETURN.
ENDIF.
TYPES:
BEGIN OF ty_row,
title TYPE string,
value TYPE string,
selected TYPE abap_bool,
END OF ty_row.
DATA(ls_row) = VALUE ty_row(
title = `test`
value = `val`
selected = abap_true ).
DATA(lv_id) = z2ui5_cl_util=>db_save(
uname = `name`
handle = `handle1`
handle2 = `handle2`
handle3 = `handle3`
data = ls_row ).
cl_abap_unit_assert=>assert_not_initial( lv_id ).
DATA(lv_id2) = z2ui5_cl_util=>db_save(
uname = `name`
handle = `handle1`
handle2 = `handle2`
handle3 = `handle3`
data = ls_row ).
cl_abap_unit_assert=>assert_equals(
act = lv_id
exp = lv_id2 ).
ENDMETHOD.
ENDCLASS.
CLASS ltcl_test_app DEFINITION FOR TESTING.
PUBLIC SECTION.
INTERFACES if_serializable_object.
TYPES:
BEGIN OF ty_row,
title TYPE string,
value TYPE string,
descr TYPE string,
icon TYPE string,
info TYPE string,
selected TYPE abap_bool,
checkbox TYPE abap_bool,
END OF ty_row.
CONSTANTS sv_status TYPE string VALUE `test` ##NEEDED.
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-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.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS ltcl_test_app IMPLEMENTATION.
METHOD class_constructor.
sv_var = 1.
ss_tab = VALUE #( ).
st_tab = VALUE #( ).
ENDMETHOD.
ENDCLASS.
CLASS ltcl_unit_test_abap_api DEFINITION FINAL FOR TESTING
DURATION SHORT
RISK LEVEL HARMLESS.
PRIVATE SECTION.
METHODS check_input
IMPORTING
val TYPE data
RETURNING
VALUE(result) TYPE abap_bool.
METHODS test_assign FOR TESTING RAISING cx_static_check.
METHODS test_eledescr_rel_name FOR TESTING RAISING cx_static_check.
METHODS test_classdescr FOR TESTING RAISING cx_static_check.
METHODS test_substring_after FOR TESTING RAISING cx_static_check.
METHODS test_substring_before FOR TESTING RAISING cx_static_check.
METHODS test_string_shift FOR TESTING RAISING cx_static_check.
METHODS test_string_replace FOR TESTING RAISING cx_static_check.
METHODS test_raise_error FOR TESTING RAISING cx_static_check.
METHODS test_xsdbool FOR TESTING RAISING cx_static_check.
METHODS test_xsdbool_nested FOR TESTING RAISING cx_static_check.
ENDCLASS.
CLASS ltcl_unit_test DEFINITION FINAL FOR TESTING
DURATION MEDIUM
RISK LEVEL HARMLESS.
PRIVATE SECTION.
METHODS test_create FOR TESTING RAISING cx_static_check.
METHODS test_boolean_abap_2_json FOR TESTING RAISING cx_static_check.
METHODS test_boolean_check FOR TESTING RAISING cx_static_check.
METHODS test_c_trim FOR TESTING RAISING cx_static_check.
METHODS test_c_trim_lower FOR TESTING RAISING cx_static_check.
METHODS test_c_trim_upper FOR TESTING RAISING cx_static_check.
METHODS test_c_trim_horizontal_tab FOR TESTING RAISING cx_static_check.
METHODS test_time_get_timestampl FOR TESTING RAISING cx_static_check.
METHODS test_time_substract_seconds FOR TESTING RAISING cx_static_check.
METHODS test_func_get_user_tech FOR TESTING RAISING cx_static_check.
METHODS test_rtti_get_t_attri_by_incl FOR TESTING RAISING cx_static_check.
METHODS test_rtti_get_classname_by_ref FOR TESTING RAISING cx_static_check.
METHODS test_rtti_get_type_name FOR TESTING RAISING cx_static_check.
METHODS test_rtti_get_type_kind FOR TESTING RAISING cx_static_check.
METHODS test_rtti_check_type_kind FOR TESTING RAISING cx_static_check.
METHODS test_rtti_get_t_attri_by_obj FOR TESTING RAISING cx_static_check.
METHODS test_rtti_get_t_comp_by_struc FOR TESTING RAISING cx_static_check.
METHODS test_trans_json_any_2__w_struc FOR TESTING RAISING cx_static_check.
METHODS test_trans_xml_any_2__w_obj FOR TESTING RAISING cx_static_check.
METHODS test_trans_xml_any_2__w_data FOR TESTING RAISING cx_static_check.
METHODS test_trans_xml_2_any__w_obj FOR TESTING RAISING cx_static_check.
METHODS test_trans_xml_2_any__w_data FOR TESTING RAISING cx_static_check.
METHODS test_url_param_create_url FOR TESTING RAISING cx_static_check.
METHODS test_url_param_get FOR TESTING RAISING cx_static_check.
METHODS test_url_param_get_tab FOR TESTING RAISING cx_static_check.
METHODS test_url_param_set FOR TESTING RAISING cx_static_check.
METHODS test_x_check_raise FOR TESTING RAISING cx_static_check.
METHODS test_x_check_raise_not FOR TESTING RAISING cx_static_check.
METHODS test_x_raise FOR TESTING RAISING cx_static_check.
METHODS test_check_unassign_inital FOR TESTING RAISING cx_static_check.
METHODS conv_copy_ref_data FOR TESTING RAISING cx_static_check.
METHODS rtti_check_ref_data FOR TESTING RAISING cx_static_check.
METHODS test_check_bound_a_not_inital FOR TESTING RAISING cx_static_check.
METHODS test_sql_get_by_string FOR TESTING RAISING cx_static_check.
ENDCLASS.
CLASS ltcl_unit_test_abap_api IMPLEMENTATION.
METHOD test_assign.
DATA(lo_app) = NEW ltcl_test_app( ).
FIELD-SYMBOLS <any> TYPE any.
lo_app->mv_val = `ABC`.
DATA(lv_assign) = `LO_APP->` && 'MV_VAL'.
ASSIGN (lv_assign) TO <any>.
ASSERT sy-subrc = 0.
cl_abap_unit_assert=>assert_equals(
act = <any>
exp = `ABC` ).
ENDMETHOD.
METHOD test_classdescr.
DATA(lo_app) = NEW ltcl_test_app( ).
DATA(lt_attri) = CAST cl_abap_classdescr( cl_abap_objectdescr=>describe_by_object_ref( lo_app ) )->attributes.
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` ].
ENDMETHOD.
METHOD test_eledescr_rel_name.
DATA(lo_ele) = CAST cl_abap_elemdescr( cl_abap_elemdescr=>describe_by_data( abap_true ) ).
cl_abap_unit_assert=>assert_equals(
act = lo_ele->get_relative_name( )
exp = `ABAP_BOOL` ).
ENDMETHOD.
METHOD test_substring_after.
cl_abap_unit_assert=>assert_equals(
act = substring_after( val = 'this is a string' sub = 'a' )
exp = ` string` ).
ENDMETHOD.
METHOD test_substring_before.
cl_abap_unit_assert=>assert_equals(
act = substring_before( val = 'this is a string' sub = 'a' )
exp = `this is ` ).
ENDMETHOD.
METHOD test_string_shift.
cl_abap_unit_assert=>assert_equals(
act = shift_left( shift_right( val = ` string ` sub = ` ` ) )
exp = `string` ).
ENDMETHOD.
METHOD test_string_replace.
DATA(lv_search) = replace( val = `one two three`
sub = `two`
with = 'ABC'
occ = 0 ) ##NEEDED.
cl_abap_unit_assert=>assert_equals(
act = replace( val = `one two three` sub = `two` with = 'ABC' occ = 0 )
exp = `one ABC three` ).
ENDMETHOD.
METHOD test_raise_error.
TRY.
IF 1 = 1.
RAISE EXCEPTION TYPE z2ui5_cx_util_error.
ENDIF.
cl_abap_unit_assert=>fail( ).
CATCH z2ui5_cx_util_error INTO DATA(lx).
cl_abap_unit_assert=>assert_bound( lx ).
ENDTRY.
ENDMETHOD.
METHOD test_xsdbool.
DATA(lv_xsdbool) = xsdbool( 1 = 1 ).
IF lv_xsdbool = abap_false.
cl_abap_unit_assert=>assert_equals(
act = lv_xsdbool
exp = abap_false ).
ENDIF.
IF xsdbool( 1 = 1 ) = abap_false.
cl_abap_unit_assert=>fail( ).
ENDIF.
ENDMETHOD.
METHOD test_xsdbool_nested.
DATA(lv_xsdbool) = check_input( xsdbool( 1 = 1 ) ).
IF lv_xsdbool = abap_false.
cl_abap_unit_assert=>assert_equals(
act = lv_xsdbool
exp = abap_false ).
ENDIF.
IF check_input( abap_false ).
cl_abap_unit_assert=>fail( ).
ENDIF.
IF check_input( xsdbool( 1 = 1 ) ) = abap_false.
cl_abap_unit_assert=>fail( ).
ENDIF.
ENDMETHOD.
METHOD check_input.
result = val.
ENDMETHOD.
ENDCLASS.
CLASS ltcl_unit_test IMPLEMENTATION.
METHOD test_boolean_check.
DATA(lv_bool) = xsdbool( 1 = 1 ).
cl_abap_unit_assert=>assert_equals(
act = z2ui5_cl_util=>boolean_check_by_data( lv_bool )
exp = abap_true ).
lv_bool = xsdbool( 1 = 2 ).
cl_abap_unit_assert=>assert_equals(
act = z2ui5_cl_util=>boolean_check_by_data( lv_bool )
exp = abap_true ).
cl_abap_unit_assert=>assert_equals(
act = z2ui5_cl_util=>boolean_check_by_data( abap_true )
exp = abap_true ).
cl_abap_unit_assert=>assert_equals(
act = z2ui5_cl_util=>boolean_check_by_data( abap_false )
exp = abap_true ).
ENDMETHOD.
METHOD test_sql_get_by_string.
DATA(lv_test) = ``.
DATA(ls_sql) = z2ui5_cl_util_api=>sql_get_by_string( lv_test ) ##NEEDED.
ENDMETHOD.
METHOD test_create.
DATA(lo_test) = NEW z2ui5_cl_util( ) ##NEEDED.
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 ).
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 ).
cl_abap_unit_assert=>assert_equals( exp = `LTCL_TEST_APP`
act = lv_name2 ).
ENDMETHOD.
METHOD test_check_bound_a_not_inital.
DATA(lv_test) = `test`.
DATA(lr_test) = REF #( lv_test ).
cl_abap_unit_assert=>assert_true( z2ui5_cl_util_api=>check_bound_a_not_inital( lr_test ) ).
CLEAR lv_test.
cl_abap_unit_assert=>assert_false( z2ui5_cl_util_api=>check_bound_a_not_inital( lr_test ) ).
CLEAR lr_test.
cl_abap_unit_assert=>assert_false( z2ui5_cl_util_api=>check_bound_a_not_inital( lr_test ) ).
ENDMETHOD.
METHOD test_check_unassign_inital.
DATA(lv_test) = `test`.
DATA(lr_test) = REF #( lv_test ).
cl_abap_unit_assert=>assert_false( z2ui5_cl_util_api=>check_unassign_inital( lr_test ) ).
CLEAR lv_test.
cl_abap_unit_assert=>assert_true( z2ui5_cl_util_api=>check_unassign_inital( lr_test ) ).
ENDMETHOD.
METHOD rtti_check_ref_data.
DATA(lv_test) = `test`.
DATA lr_data TYPE REF TO data.
GET REFERENCE OF lv_test INTO lr_data.
cl_abap_unit_assert=>assert_equals(
act = z2ui5_cl_util_api=>rtti_check_ref_data( lr_data )
exp = abap_true ).
cl_abap_unit_assert=>assert_equals(
act = z2ui5_cl_util_api=>rtti_check_ref_data( lv_test )
exp = abap_false ).
ENDMETHOD.
METHOD conv_copy_ref_data.
DATA(lv_test) = `test`.
DATA lr_data TYPE REF TO data.
GET REFERENCE OF lv_test INTO lr_data.
DATA(lr_test2) = z2ui5_cl_util_api=>conv_copy_ref_data( lr_data ).
FIELD-SYMBOLS <result> TYPE data.
ASSIGN lr_test2->* TO <result>.
cl_abap_unit_assert=>assert_equals(
act = <result>
exp = lv_test ).
ENDMETHOD.
METHOD test_boolean_abap_2_json.
cl_abap_unit_assert=>assert_equals(
act = z2ui5_cl_util=>boolean_abap_2_json( `{ABCD}` )
exp = `{ABCD}` ).
ENDMETHOD.
METHOD test_time_get_timestampl.
DATA(lv_time) = z2ui5_cl_util=>time_get_timestampl( ).
DATA(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.
cl_abap_unit_assert=>fail( ).
ENDIF.
IF lv_time < lv_time2.
cl_abap_unit_assert=>fail( ).
ENDIF.
ENDMETHOD.
METHOD test_time_substract_seconds.
DATA(lv_time) = z2ui5_cl_util=>time_get_timestampl( ).
DATA(lv_time2) = z2ui5_cl_util=>time_get_timestampl( ).
IF lv_time IS INITIAL OR lv_time2 IS INITIAL.
cl_abap_unit_assert=>fail( ).
ENDIF.
IF lv_time2 < lv_time.
cl_abap_unit_assert=>fail( ).
ENDIF.
ENDMETHOD.
METHOD test_c_trim.
cl_abap_unit_assert=>assert_equals(
act = z2ui5_cl_util=>c_trim( ` JsadfHHs ` )
exp = `JsadfHHs` ).
ENDMETHOD.
METHOD test_c_trim_lower.
cl_abap_unit_assert=>assert_equals(
act = z2ui5_cl_util=>c_trim_lower( ` JsadfHHs ` )
exp = `jsadfhhs` ).
ENDMETHOD.
METHOD test_c_trim_upper.
cl_abap_unit_assert=>assert_equals(
act = z2ui5_cl_util=>c_trim_upper( ` JsadfHHs ` )
exp = `JSADFHHS` ).
ENDMETHOD.
METHOD test_func_get_user_tech.
cl_abap_unit_assert=>assert_equals(
act = sy-uname
exp = z2ui5_cl_util=>user_get_tech( ) ).
cl_abap_unit_assert=>assert_not_initial( z2ui5_cl_util=>user_get_tech( ) ).
ENDMETHOD.
METHOD test_x_raise.
TRY.
z2ui5_cl_util=>x_raise( ).
cl_abap_unit_assert=>fail( ).
CATCH cx_root.
ENDTRY.
ENDMETHOD.
METHOD test_x_check_raise.
TRY.
z2ui5_cl_util=>x_check_raise( xsdbool( 1 = 1 ) ).
cl_abap_unit_assert=>fail( ).
CATCH cx_root.
ENDTRY.
TRY.
z2ui5_cl_util=>x_check_raise( xsdbool( 1 = 3 ) ).
CATCH cx_root.
cl_abap_unit_assert=>fail( ).
ENDTRY.
ENDMETHOD.
METHOD test_trans_json_any_2__w_struc.
TYPES:
BEGIN OF ty_row,
title TYPE string,
value TYPE string,
selected TYPE abap_bool,
END OF ty_row.
DATA(ls_row) = VALUE ty_row( title = `test` ).
cl_abap_unit_assert=>assert_equals(
act = z2ui5_cl_util=>json_stringify( ls_row )
exp = `{"selected":false,"title":"test","value":""}` ).
ENDMETHOD.
METHOD test_url_param_create_url.
DATA(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 ).
cl_abap_unit_assert=>assert_equals(
act = lv_url
exp = `sap-client=100&app_start=z2ui5_cl_app_hello_world` ).
ENDMETHOD.
METHOD test_url_param_get.
DATA(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` ).
cl_abap_unit_assert=>assert_equals(
act = lv_param
exp = `z2ui5_cl_app_hello_world` ).
ENDMETHOD.
METHOD test_url_param_get_tab.
DATA(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(
act = lt_param[ n = `sap-client` ]-v
exp = `100` ).
cl_abap_unit_assert=>assert_equals(
act = lt_param[ n = `app_start` ]-v
exp = `z2ui5_cl_app_hello_world` ).
ENDMETHOD.
METHOD test_url_param_set.
DATA(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` ).
cl_abap_unit_assert=>assert_equals(
act = lv_param
exp = `sap-client=100&app_start=z2ui5_cl_app_hello_world2` ).
ENDMETHOD.
METHOD test_x_check_raise_not.
TRY.
z2ui5_cl_util=>x_check_raise( xsdbool( 1 = 2 ) ).
CATCH z2ui5_cx_util_error.
cl_abap_unit_assert=>fail( ).
ENDTRY.
ENDMETHOD.
METHOD test_rtti_get_type_name.
DATA(lv_xsdbool) = VALUE xsdboolean( ).
DATA(lv_name) = z2ui5_cl_util=>rtti_get_type_name( lv_xsdbool ).
cl_abap_unit_assert=>assert_equals(
act = lv_name
exp = `XSDBOOLEAN` ).
ENDMETHOD.
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 lr_string TYPE REF TO string.
cl_abap_unit_assert=>assert_equals(
act = lv_type_kind
exp = cl_abap_typedescr=>typekind_string ).
CREATE DATA lr_string.
lv_type_kind = z2ui5_cl_util=>rtti_get_type_kind( lr_string ).
cl_abap_unit_assert=>assert_equals(
act = lv_type_kind
exp = cl_abap_typedescr=>typekind_dref ).
ENDMETHOD.
METHOD test_rtti_check_type_kind.
DATA(lv_string) = VALUE string( ).
DATA lr_string TYPE REF TO string.
cl_abap_unit_assert=>assert_equals(
act = z2ui5_cl_util=>rtti_check_type_kind_dref( lv_string )
exp = abap_false ).
CREATE DATA lr_string.
cl_abap_unit_assert=>assert_equals(
act = z2ui5_cl_util=>rtti_check_type_kind_dref( lr_string )
exp = abap_true ).
ENDMETHOD.
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 ).
IF lines( lt_attri ) <> 7.
cl_abap_unit_assert=>fail( ).
ENDIF.
IF NOT line_exists( lt_attri[ name = `MS_TAB` ] ).
cl_abap_unit_assert=>fail( ).
ENDIF.
IF NOT line_exists( lt_attri[ name = `SS_TAB` type_kind = `v` ] ).
cl_abap_unit_assert=>fail( ).
ENDIF.
IF NOT line_exists( lt_attri[ name = `SV_VAR` type_kind = `g` is_class = abap_true ] ).
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` ] ).
cl_abap_unit_assert=>fail( ).
ENDIF.
ENDMETHOD.
METHOD test_rtti_get_t_comp_by_struc.
TYPES:
BEGIN OF ty_row,
title TYPE string,
value TYPE string,
descr TYPE string,
icon TYPE string,
info TYPE string,
selected TYPE abap_bool,
checkbox TYPE abap_bool,
END OF ty_row.
DATA(ls_row) = VALUE ty_row( ).
DATA(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` ] ).
cl_abap_unit_assert=>fail( ).
ENDIF.
IF NOT line_exists( lt_comp[ name = `VALUE` ] ).
cl_abap_unit_assert=>fail( ).
ENDIF.
IF NOT line_exists( lt_comp[ name = `SELECTED` ] ).
cl_abap_unit_assert=>fail( ).
ENDIF.
IF NOT line_exists( lt_comp[ name = `CHECKBOX` ] ).
cl_abap_unit_assert=>fail( ).
ENDIF.
DATA(ls_title) = lt_comp[ 1 ].
IF ls_title-type->type_kind <> `g`.
cl_abap_unit_assert=>fail( ).
ENDIF.
ENDMETHOD.
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 ).
IF lv_xml IS INITIAL.
cl_abap_unit_assert=>fail( ).
ENDIF.
ENDMETHOD.
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 ).
CLEAR lo_obj.
z2ui5_cl_util=>xml_parse(
EXPORTING
xml = lv_xml
IMPORTING
any = lo_obj ).
IF lo_obj IS NOT BOUND.
cl_abap_unit_assert=>fail( ).
ENDIF.
ENDMETHOD.
METHOD test_trans_xml_any_2__w_data.
TYPES:
BEGIN OF ty_row,
title TYPE string,
value TYPE string,
descr TYPE string,
icon TYPE string,
info TYPE string,
selected TYPE abap_bool,
checkbox TYPE abap_bool,
END OF ty_row.
DATA(ls_row) = VALUE ty_row( ).
ls_row-value = `test`.
DATA(lv_xml) = z2ui5_cl_util=>xml_stringify( ls_row ).
IF lv_xml IS INITIAL.
cl_abap_unit_assert=>fail( ).
ENDIF.
ENDMETHOD.
METHOD test_trans_xml_2_any__w_data.
TYPES:
BEGIN OF ty_row,
title TYPE string,
value TYPE string,
descr TYPE string,
icon TYPE string,
info TYPE string,
selected TYPE abap_bool,
checkbox TYPE abap_bool,
END OF ty_row.
DATA(ls_row) = VALUE ty_row( ).
DATA(ls_row2) = VALUE ty_row( ).
ls_row-value = `test`.
DATA(lv_xml) = z2ui5_cl_util=>xml_stringify( ls_row ).
z2ui5_cl_util=>xml_parse(
EXPORTING
xml = lv_xml
IMPORTING
any = ls_row2 ).
cl_abap_unit_assert=>assert_equals(
act = ls_row
exp = ls_row2 ).
ENDMETHOD.
METHOD test_c_trim_horizontal_tab.
IF z2ui5_cl_util=>c_trim( |{ cl_abap_char_utilities=>horizontal_tab }|
&& |JsadfHHs|
&& |{ cl_abap_char_utilities=>horizontal_tab }| ) <> `JsadfHHs`.
cl_abap_unit_assert=>fail( ).
ENDIF.
ENDMETHOD.
METHOD test_rtti_get_t_attri_by_incl.
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 ) ).
IF lines( lt_attri ) <> 2.
cl_abap_unit_assert=>fail( ).
ENDIF.
ENDMETHOD.
ENDCLASS.

View File

@ -1,190 +0,0 @@
CLASS z2ui5_cl_util DEFINITION
PUBLIC
INHERITING FROM z2ui5_cl_util_api
CREATE PUBLIC .
PUBLIC SECTION.
CLASS-METHODS app_get_url_source_code
IMPORTING
!client TYPE REF TO z2ui5_if_client
RETURNING
VALUE(result) TYPE string.
CLASS-METHODS app_get_url
IMPORTING
!client TYPE REF TO z2ui5_if_client
VALUE(classname) TYPE clike OPTIONAL
RETURNING
VALUE(result) TYPE string.
CLASS-METHODS db_delete_by_handle
IMPORTING
!uname TYPE clike OPTIONAL
!handle TYPE clike OPTIONAL
!handle2 TYPE clike OPTIONAL
!handle3 TYPE clike OPTIONAL
!check_commit TYPE abap_bool DEFAULT abap_true.
CLASS-METHODS db_save
IMPORTING
!uname TYPE clike OPTIONAL
!handle TYPE clike OPTIONAL
!handle2 TYPE clike OPTIONAL
!handle3 TYPE clike OPTIONAL
!data TYPE any
!check_commit TYPE abap_bool DEFAULT abap_true
RETURNING
VALUE(result) TYPE string.
CLASS-METHODS db_load_by_id
IMPORTING
!id TYPE clike OPTIONAL
EXPORTING
VALUE(result) TYPE any.
CLASS-METHODS db_load_by_handle
IMPORTING
!uname TYPE clike OPTIONAL
!handle TYPE clike OPTIONAL
!handle2 TYPE clike OPTIONAL
!handle3 TYPE clike OPTIONAL
EXPORTING
VALUE(result) TYPE any.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS Z2UI5_CL_UTIL IMPLEMENTATION.
METHOD app_get_url.
IF classname IS INITIAL.
classname = rtti_get_classname_by_ref( client->get_app( ) ).
ENDIF.
DATA(lv_url) = to_lower( client->get( )-s_config-origin && client->get( )-s_config-pathname ) && `?`.
DATA(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.
result = lv_url && url_param_create_url( lt_param ).
ENDMETHOD.
METHOD app_get_url_source_code.
DATA(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`.
ENDMETHOD.
METHOD db_delete_by_handle.
DELETE FROM z2ui5_t_02
WHERE
uname = @uname
AND handle = @handle
AND handle2 = @handle2
AND handle3 = @handle3.
IF check_commit = abap_true.
COMMIT WORK AND WAIT.
ENDIF.
ENDMETHOD.
METHOD db_load_by_handle.
DATA lt_db TYPE STANDARD TABLE OF z2ui5_t_02 WITH EMPTY KEY.
SELECT data
FROM z2ui5_t_02
WHERE
uname = @uname
AND handle = @handle
AND handle2 = @handle2
AND handle3 = @handle3
INTO CORRESPONDING FIELDS OF TABLE @lt_db.
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 ].
xml_parse(
EXPORTING
xml = ls_db-data
IMPORTING
any = result ).
ENDMETHOD.
METHOD db_load_by_id.
DATA lt_db TYPE STANDARD TABLE OF z2ui5_t_02 WITH EMPTY KEY.
SELECT data
FROM z2ui5_t_02
WHERE id = @id
INTO CORRESPONDING FIELDS OF TABLE @lt_db.
ASSERT sy-subrc = 0.
DATA(ls_db) = lt_db[ 1 ].
xml_parse(
EXPORTING
xml = ls_db-data
IMPORTING
any = result ).
ENDMETHOD.
METHOD db_save.
DATA lt_db TYPE STANDARD TABLE OF z2ui5_t_02 WITH EMPTY KEY.
SELECT id
FROM z2ui5_t_02
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_02(
uname = uname
handle = handle
handle2 = handle2
handle3 = handle3
data = xml_stringify( data ) ).
TRY.
ls_db-id = lt_db[ 1 ]-id.
CATCH cx_root.
ls_db-id = uuid_get_c32( ).
ENDTRY.
MODIFY z2ui5_t_02 FROM @ls_db.
ASSERT sy-subrc = 0.
IF check_commit = abap_true.
COMMIT WORK AND WAIT.
ENDIF.
result = ls_db-id.
ENDMETHOD.
ENDCLASS.

View File

@ -1,105 +0,0 @@
CLASS ltcl_test DEFINITION FINAL FOR TESTING
DURATION SHORT
RISK LEVEL HARMLESS.
PRIVATE SECTION.
METHODS test_db_handle FOR TESTING RAISING cx_static_check.
METHODS test_db_handle_read_id FOR TESTING RAISING cx_static_check.
ENDCLASS.
CLASS ltcl_test IMPLEMENTATION.
METHOD test_db_handle.
IF sy-sysid = 'ABC'.
RETURN.
ENDIF.
TYPES:
BEGIN OF ty_row,
title TYPE string,
value TYPE string,
selected TYPE abap_bool,
END OF ty_row.
DATA(ls_row) = VALUE ty_row(
title = `test`
value = `val`
selected = abap_true ).
DATA(ls_row_result) = VALUE ty_row( ).
DATA(lv_id) = z2ui5_cl_util=>db_save(
uname = `name`
handle = `handle1`
handle2 = `handle2`
handle3 = `handle3`
data = ls_row ).
z2ui5_cl_util=>db_load_by_id(
EXPORTING
id = lv_id
IMPORTING
result = ls_row_result ).
cl_abap_unit_assert=>assert_equals(
act = ls_row_result
exp = ls_row ).
CLEAR ls_row_result.
z2ui5_cl_util=>db_load_by_handle(
EXPORTING
uname = `name`
handle = `handle1`
handle2 = `handle2`
handle3 = `handle3`
IMPORTING
result = ls_row_result ).
cl_abap_unit_assert=>assert_equals(
act = ls_row_result
exp = ls_row ).
ENDMETHOD.
METHOD test_db_handle_read_id.
IF sy-sysid = 'ABC'.
RETURN.
ENDIF.
TYPES:
BEGIN OF ty_row,
title TYPE string,
value TYPE string,
selected TYPE abap_bool,
END OF ty_row.
DATA(ls_row) = VALUE ty_row(
title = `test`
value = `val`
selected = abap_true ).
DATA(lv_id) = z2ui5_cl_util=>db_save(
uname = `name`
handle = `handle1`
handle2 = `handle2`
handle3 = `handle3`
data = ls_row ).
cl_abap_unit_assert=>assert_not_initial( lv_id ).
DATA(lv_id2) = z2ui5_cl_util=>db_save(
uname = `name`
handle = `handle1`
handle2 = `handle2`
handle3 = `handle3`
data = ls_row ).
cl_abap_unit_assert=>assert_equals(
act = lv_id
exp = lv_id2 ).
ENDMETHOD.
ENDCLASS.

View File

@ -0,0 +1,55 @@
CLASS z2ui5_cl_core_util_srv DEFINITION
PUBLIC
INHERITING FROM z2ui5_cl_util
CREATE PUBLIC .
PUBLIC SECTION.
CLASS-METHODS app_get_url_source_code
IMPORTING
!client TYPE REF TO z2ui5_if_client
RETURNING
VALUE(result) TYPE string.
CLASS-METHODS app_get_url
IMPORTING
!client TYPE REF TO z2ui5_if_client
VALUE(classname) TYPE clike OPTIONAL
RETURNING
VALUE(result) TYPE string.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS z2ui5_cl_core_util_srv IMPLEMENTATION.
METHOD app_get_url.
IF classname IS INITIAL.
classname = rtti_get_classname_by_ref( client->get_app( ) ).
ENDIF.
DATA(lv_url) = to_lower( client->get( )-s_config-origin && client->get( )-s_config-pathname ) && `?`.
DATA(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.
result = lv_url && url_param_create_url( lt_param ).
ENDMETHOD.
METHOD app_get_url_source_code.
DATA(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`.
ENDMETHOD.
ENDCLASS.

View File

@ -3,9 +3,9 @@
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOCLASS>
<CLSNAME>Z2UI5_CL_UI5</CLSNAME>
<CLSNAME>Z2UI5_CL_CORE_UTIL_SRV</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>ui5 api</DESCRIPT>
<DESCRIPT>abap2UI5 - utility functions</DESCRIPT>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>

View File

@ -63,7 +63,7 @@ CLASS Z2UI5_CL_CORE_APP_STARTUP IMPLEMENTATION.
ms_home-class_value_state = `Success`.
ms_home-class_editable = abap_false.
ms_home-url = z2ui5_cl_util=>app_get_url(
ms_home-url = z2ui5_cl_core_util_srv=>app_get_url(
client = client
classname = ms_home-classname ).
@ -152,21 +152,21 @@ CLASS Z2UI5_CL_CORE_APP_STARTUP IMPLEMENTATION.
enabled = `{= $` && client->_bind( val = ms_home-class_editable ) && ` === false }` ).
DATA(lv_url_samples2) = z2ui5_cl_util=>app_get_url(
DATA(lv_url_samples2) = z2ui5_cl_core_util_srv=>app_get_url(
client = client
classname = 'z2ui5_cl_demo_app_000' ).
DATA(lv_url_samples3) = z2ui5_cl_util=>app_get_url(
client = client
classname = z2ui5_cl_util_api=>rtti_get_classname_by_ref( NEW z2ui5_cl_core_app_search( ) ) ).
* DATA(lv_url_samples3) = z2ui5_cl_core_util_srv=>app_get_url(
* client = client
* classname = z2ui5_cl_util=>rtti_get_classname_by_ref( NEW z2ui5_cl_core_app_search( ) ) ).
simple_form2->toolbar( )->title( `What's next?` ).
simple_form2->label( `App Finder` ).
simple_form2->button(
text = `Start & Install Apps`
press = client->_event_client( val = client->cs_event-open_new_tab t_arg = VALUE #( ( lv_url_samples3 ) ) )
width = `70%` ).
* simple_form2->label( `App Finder` ).
* simple_form2->button(
* text = `Start & Install Apps`
* press = client->_event_client( val = client->cs_event-open_new_tab t_arg = VALUE #( ( lv_url_samples3 ) ) )
* width = `70%` ).
IF z2ui5_cl_util=>rtti_check_class_exists( `z2ui5_cl_demo_app_000` ).
simple_form2->label( `Start Developing` ).
@ -183,20 +183,21 @@ CLASS Z2UI5_CL_CORE_APP_STARTUP IMPLEMENTATION.
href = `https://github.com/abap2UI5/abap2UI5-samples` ).
ENDIF.
simple_form2->label( `` ).
simple_form2->text( `` ).
* simple_form2->label( `` ).
* simple_form2->text( `` ).
simple_form2->toolbar( )->title( `Contribution` ).
simple_form2->label( `Open an issue` ).
simple_form2->link( text = `You have problems, comments or wishes?`
target = `_blank`
href = `https://github.com/abap2UI5/abap2UI5/issues` ).
simple_form2->label( `Open a Pull Request` ).
simple_form2->link( text = `You added a new feature or fixed a bug?`
target = `_blank`
href = `https://github.com/abap2UI5/abap2UI5/pulls` ).
simple_form2->label( `Open an issue` ).
simple_form2->link( text = `You have problems, comments or wishes?`
target = `_blank`
href = `https://github.com/abap2UI5/abap2UI5/issues` ).
simple_form2->toolbar( )->title( `Social Media` ).
@ -299,7 +300,7 @@ CLASS Z2UI5_CL_CORE_APP_STARTUP IMPLEMENTATION.
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_api=>rtti_get_classname_by_ref( NEW z2ui5_cl_app_hello_world( ) ).
ms_home-classname = z2ui5_cl_util=>rtti_get_classname_by_ref( NEW z2ui5_cl_app_hello_world( ) ).
ENDMETHOD.
ENDCLASS.

View File

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_DEVC" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<DEVC>
<CTEXT>test webc renderer</CTEXT>
</DEVC>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -1,267 +0,0 @@
CLASS z2ui5_cl_ui5 DEFINITION
PUBLIC
CREATE PUBLIC.
PUBLIC SECTION.
CLASS-METHODS _factory
IMPORTING check_popup TYPE abap_bool DEFAULT abap_false
RETURNING VALUE(result) TYPE REF TO z2ui5_cl_ui5.
METHODS _go_up
RETURNING VALUE(result) TYPE REF TO z2ui5_cl_ui5.
METHODS _go_root
RETURNING VALUE(result) TYPE REF TO z2ui5_cl_ui5.
METHODS _go_new
RETURNING VALUE(result) TYPE REF TO z2ui5_cl_ui5.
METHODS _add
IMPORTING n TYPE clike
ns TYPE clike
t_p TYPE z2ui5_if_types=>ty_t_name_value OPTIONAL
RETURNING VALUE(result) TYPE REF TO z2ui5_cl_ui5.
METHODS _add_p
IMPORTING n TYPE clike
v TYPE clike
RETURNING VALUE(result) TYPE REF TO z2ui5_cl_ui5.
METHODS _add_c
IMPORTING val TYPE clike
RETURNING VALUE(result) TYPE REF TO z2ui5_cl_ui5.
METHODS _ns
RETURNING VALUE(result) TYPE REF TO z2ui5_cl_ui5.
METHODS _ns_z2ui5
RETURNING VALUE(result) TYPE REF TO z2ui5_cl_ui5_z2ui5.
METHODS _ns_html
RETURNING VALUE(result) TYPE REF TO z2ui5_cl_ui5_html.
METHODS _ns_webc
RETURNING VALUE(result) TYPE REF TO z2ui5_cl_ui5_webc.
METHODS constructor
IMPORTING node TYPE REF TO z2ui5_cl_ui5__tree OPTIONAL.
METHODS _stringify
RETURNING VALUE(result) TYPE string.
PROTECTED SECTION.
DATA _node TYPE REF TO z2ui5_cl_ui5__tree.
CLASS-METHODS _2xml
IMPORTING obj TYPE REF TO z2ui5_cl_ui5
RETURNING VALUE(result) TYPE string.
CLASS-METHODS _2bool
IMPORTING val TYPE any
RETURNING VALUE(result) TYPE string.
PRIVATE SECTION.
ENDCLASS.
CLASS z2ui5_cl_ui5 IMPLEMENTATION.
METHOD constructor.
IF node IS NOT BOUND.
_node = NEW #( ).
_node->mo_root = _node.
ELSE.
_node = node.
ENDIF.
ENDMETHOD.
METHOD _2bool.
result = z2ui5_cl_util=>boolean_abap_2_json( val ).
ENDMETHOD.
METHOD _2xml.
DATA lt_prop TYPE z2ui5_if_types=>ty_t_name_value.
lt_prop = VALUE #( ( n = `` v = `sap.m` )
( n = `f` v = `sap.f` )
( n = `ndc` v = `sap.ndc` )
( n = `tnt` v = `sap.tnt` )
( n = `mvc` v = `sap.ui.core.mvc` )
( n = `core` v = `sap.ui.core` )
( n = `form` v = `sap.ui.layout.form` )
( n = `l` v = `sap.ui.layout` )
( n = `t` v = `sap.ui.table` )
( n = `webc` v = `sap.ui.webc.main` )
( n = `fl` v = `sap.ui.fl` )
( n = `vk` v = `sap.ui.vk` )
( n = `vbm` v = `sap.ui.vbm` )
( n = `z2ui5` v = `z2ui5` )
( n = `mchart` v = `sap.suite.ui.microchart` )
( n = `editor` v = `sap.ui.codeeditor` )
( n = `wf` v = `sap.ui.webc.fiori` )
( n = `wm` v = `sap.ui.webc.main` )
( n = `html` v = `http://www.w3.org/1999/xhtml` )
* ( n = `core:require` v = `{ MessageToast: 'sap/m/MessageToast' }` )
* ( n = `core:require` v = `{ URLHelper: 'sap/m/library/URLHelper' }` )
* ( n = `xmlns:webc` v = `sap.ui.webc.main` )
( n = `xmlns:uxap` v = `sap.uxap` )
( n = `xmlns:text` v = `sap.ui.richtexteditor` )
( n = `xmlns:fb` v = `sap.ui.comp.filterbar` )
( n = `xmlns:u` v = `sap.ui.unified` )
( n = `xmlns:gantt` v = `sap.gantt.simple` )
( n = `xmlns:axistime` v = `sap.gantt.axistime` )
( n = `xmlns:config` v = `sap.gantt.config` )
( n = `xmlns:shapes` v = `sap.gantt.simple.shapes` )
( n = `xmlns:commons` v = `sap.suite.ui.commons` )
( n = `xmlns:vm` v = `sap.ui.comp.variants` )
( n = `xmlns:viz` v = `sap.viz.ui5.controls` )
( n = `xmlns:svm` v = `sap.ui.comp.smartvariants` )
( n = `xmlns:flvm` v = `sap.ui.fl.variants` )
( n = `xmlns:p13n` v = `sap.m.p13n` )
( n = `xmlns:upload` v = `sap.m.upload` ) ).
IF obj->_node = obj->_node->mo_root.
LOOP AT obj->_node->mt_ns INTO DATA(lv_ns_tmp).
TRY.
DATA(ls_prop) = lt_prop[ v = lv_ns_tmp ].
ls_prop-n = `xmlns` && COND #( WHEN ls_prop-n IS NOT INITIAL THEN `:` && ls_prop-n ).
INSERT ls_prop INTO TABLE obj->_node->mt_prop.
CATCH cx_root.
DATA(lv_text) = COND #( WHEN lv_ns_tmp IS INITIAL THEN `XML_VIEW_NOT_VALID_NAMESPACE_EMPTY`
ELSE `XML_VIEW_NOT_VALID_NAMESPACE_NOT_FOUND failure: ` && lv_ns_tmp ).
RAISE EXCEPTION TYPE z2ui5_cx_util_error
EXPORTING
val = lv_text.
ENDTRY.
ENDLOOP.
ENDIF.
DATA(lv_ns) = lt_prop[ v = obj->_node->mv_ns ]-n.
lv_ns = COND #( WHEN lv_ns <> `` THEN |{ lv_ns }:| ).
DATA(lv_element) = obj->_node->mv_name.
DATA(lv_prop) = REDUCE #( INIT val = `` FOR row IN obj->_node->mt_prop
NEXT val = |{ val } { row-n }="{ escape(
val = COND #( WHEN row-v = abap_true
THEN `true`
ELSE row-v )
format = cl_abap_format=>e_xml_attr ) }"| ).
result = |{ result }<{ lv_ns }{ lv_element }{ lv_prop }|.
IF obj->_node->mt_child IS INITIAL AND obj->_node->mv_content IS INITIAL.
result = |{ result }/>|.
RETURN.
ENDIF.
result = |{ result }>|.
IF obj->_node->mv_content IS NOT INITIAL.
result = result && obj->_node->mv_content.
result = |{ result }</{ lv_ns }{ lv_element }>|.
RETURN.
ENDIF.
LOOP AT obj->_node->mt_child INTO DATA(lr_child).
DATA(lo_child) = NEW z2ui5_cl_ui5( lr_child ).
result = result && _2xml( lo_child ).
ENDLOOP.
result = |{ result }</{ lv_ns }{ lv_element }>|.
ENDMETHOD.
METHOD _add.
TRY.
INSERT CONV #( ns ) INTO TABLE _node->mo_root->mt_ns.
CATCH cx_root.
ENDTRY.
DATA(lo_node) = NEW z2ui5_cl_ui5__tree( ).
DATA(result2) = NEW z2ui5_cl_ui5( lo_node ).
result2->_node->mv_name = n.
result2->_node->mv_ns = ns.
result2->_node->mt_prop = t_p.
DELETE result2->_node->mt_prop WHERE v = ``.
result2->_node->mo_parent = _node.
result2->_node->mo_root = _node->mo_root.
INSERT result2->_node INTO TABLE _node->mt_child.
_node->mo_root->mo_previous = result2->_node.
result = result2.
ENDMETHOD.
METHOD _add_p.
INSERT VALUE #( n = n v = v ) INTO TABLE _node->mt_prop.
result = me.
ENDMETHOD.
METHOD _factory.
result = NEW #( ).
DATA(lv_n) = COND #( WHEN check_popup = abap_true THEN `FragmentDefinition` ELSE `View` ).
DATA(lv_ns) = COND #( WHEN check_popup = abap_true THEN `sap.ui.core` ELSE `sap.ui.core.mvc` ).
result->_node->mv_name = lv_n.
result->_node->mv_ns = lv_ns.
INSERT lv_ns INTO TABLE result->_node->mo_root->mt_ns.
"( n = lv_n ns = lv_ns ).
IF check_popup = abap_false.
result->_add_p( n = `displayBlock`
v = `true` ).
result->_add_p( n = `height`
v = `100%` ).
ENDIF.
result->_node->mt_ns = result->_node->mo_root->mt_ns.
result->_node->mo_root = result->_node.
ENDMETHOD.
METHOD _go_new.
result = NEW #( _node->mo_root->mo_previous ).
ENDMETHOD.
METHOD _go_root.
result = NEW #( _node->mo_root ).
ENDMETHOD.
METHOD _go_up.
IF _node = _node->mo_root.
RAISE EXCEPTION TYPE z2ui5_cx_util_error
EXPORTING
val = `XML_VIEW_PARSER_ERROR - go_up on root element not possible`.
ENDIF.
result = NEW #( _node->mo_parent ).
ENDMETHOD.
METHOD _ns.
result = NEW #( _node ).
ENDMETHOD.
METHOD _ns_html.
result = NEW #( _node ).
ENDMETHOD.
METHOD _ns_webc.
result = NEW #( _node ).
ENDMETHOD.
METHOD _ns_z2ui5.
result = NEW #( _node ).
ENDMETHOD.
METHOD _stringify.
DATA(lo_node) = NEW z2ui5_cl_ui5( _node->mo_root ).
result = _2xml( lo_node ).
ENDMETHOD.
METHOD _add_c.
_node->mv_content = val.
result = me.
ENDMETHOD.
ENDCLASS.

View File

@ -1,21 +0,0 @@
CLASS z2ui5_cl_ui5__tree DEFINITION
PUBLIC
FINAL
CREATE PUBLIC.
PUBLIC SECTION.
DATA mt_prop TYPE z2ui5_if_types=>ty_t_name_value.
DATA mt_ns TYPE SORTED TABLE OF string WITH UNIQUE KEY table_line.
DATA mv_name TYPE string.
DATA mv_content TYPE string.
DATA mv_ns TYPE string.
DATA mo_root TYPE REF TO z2ui5_cl_ui5__tree.
DATA mo_previous TYPE REF TO z2ui5_cl_ui5__tree.
DATA mo_parent TYPE REF TO z2ui5_cl_ui5__tree.
DATA mt_child TYPE STANDARD TABLE OF REF TO z2ui5_cl_ui5__tree WITH EMPTY KEY.
ENDCLASS.
CLASS Z2UI5_CL_UI5__TREE IMPLEMENTATION.
ENDCLASS.

View File

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

View File

@ -1,46 +0,0 @@
CLASS z2ui5_cl_ui5_html DEFINITION
PUBLIC
FINAL
CREATE PUBLIC INHERITING FROM z2ui5_cl_ui5.
PUBLIC SECTION.
METHODS script
IMPORTING src TYPE clike OPTIONAL
RETURNING VALUE(result) TYPE REF TO z2ui5_cl_ui5_html.
METHODS style
RETURNING VALUE(result) TYPE REF TO z2ui5_cl_ui5_html.
METHODS zz_plain
IMPORTING
val TYPE string
RETURNING
VALUE(result) TYPE REF TO z2ui5_cl_ui5_html.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS z2ui5_cl_ui5_html IMPLEMENTATION.
METHOD zz_plain.
result = me.
_add( n = `script`
ns = `http://www.w3.org/1999/xhtml`
t_p = VALUE #( ( n = `src` v = val ) ) ).
ENDMETHOD.
METHOD script.
result = _add( n = `script`
ns = `http://www.w3.org/1999/xhtml`
t_p = VALUE #( ( n = `src` v = src ) ) )->_ns_html( ).
ENDMETHOD.
METHOD style.
result = me.
_add( n = `style`
ns = `http://www.w3.org/1999/xhtml` ).
ENDMETHOD.
ENDCLASS.

View File

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

View File

@ -1,142 +0,0 @@
CLASS z2ui5_cl_ui5_webc DEFINITION
PUBLIC
FINAL
CREATE PUBLIC INHERITING FROM z2ui5_cl_ui5.
PUBLIC SECTION.
METHODS button
IMPORTING id TYPE clike OPTIONAL
icon TYPE clike OPTIONAL
text TYPE clike OPTIONAL
tooltip TYPE clike OPTIONAL
design TYPE clike OPTIONAL
click TYPE clike OPTIONAL
RETURNING VALUE(result) TYPE REF TO z2ui5_cl_ui5_webc.
METHODS bar
IMPORTING id TYPE clike OPTIONAL
design TYPE clike OPTIONAL
RETURNING VALUE(result) TYPE REF TO z2ui5_cl_ui5_webc.
METHODS label
IMPORTING
id TYPE clike OPTIONAL
text TYPE clike OPTIONAL
RETURNING VALUE(result) TYPE REF TO z2ui5_cl_ui5_webc.
METHODS panel
IMPORTING id TYPE clike OPTIONAL
RETURNING VALUE(result) TYPE REF TO z2ui5_cl_ui5_webc.
METHODS header
IMPORTING id TYPE clike OPTIONAL
RETURNING VALUE(result) TYPE REF TO z2ui5_cl_ui5_webc.
METHODS input
IMPORTING id TYPE clike OPTIONAL
text TYPE clike OPTIONAL
click TYPE clike OPTIONAL
value TYPE clike OPTIONAL
width TYPE clike OPTIONAL
RETURNING VALUE(result) TYPE REF TO z2ui5_cl_ui5_webc.
METHODS toast
IMPORTING id TYPE clike OPTIONAL
RETURNING VALUE(result) TYPE REF TO z2ui5_cl_ui5_webc.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS Z2UI5_CL_UI5_WEBC IMPLEMENTATION.
METHOD bar.
result = _add( n = `Bar`
ns = 'sap.ui.webc.fiori'
t_p = VALUE #( ( n = `id` v = id )
( n = `design` v = design )
) )->_ns_webc( ).
ENDMETHOD.
METHOD button.
result = me.
_add( n = `Button`
ns = 'sap.ui.webc.main'
t_p = VALUE #( ( n = `id` v = id )
( n = `icon` v = icon )
( n = `tooltip` v = tooltip )
( n = `text` v = text )
( n = `click` v = click )
( n = `design` v = design ) ) )->_ns_webc( ).
ENDMETHOD.
METHOD header.
result = _add( n = `header`
ns = 'sap.ui.webc.main'
t_p = VALUE #( ( n = `id` v = id ) ) )->_ns_webc( ).
ENDMETHOD.
METHOD input.
result = me.
_add( n = `Input`
ns = 'sap.ui.webc.main'
t_p = VALUE #(
( n = `id` v = id )
( n = `text` v = text )
( n = `click` v = click )
( n = `width` v = width )
( n = `value` v = value )
) )->_ns_webc( ).
ENDMETHOD.
METHOD label.
result = me.
_add( n = `Label`
ns = 'sap.ui.webc.main'
t_p = VALUE #(
( n = `id` v = id )
( n = `text` v = text )
) )->_ns_webc( ).
ENDMETHOD.
METHOD panel.
result = _add( n = `Panel`
ns = 'sap.ui.webc.main'
t_p = VALUE #(
( n = `id` v = id )
) )->_ns_webc( ).
ENDMETHOD.
METHOD toast.
result = me.
_add( n = `Toast`
ns = 'sap.ui.webc.main'
t_p = VALUE #(
( n = `id` v = id )
) )->_ns_webc( ).
ENDMETHOD.
ENDCLASS.

View File

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

View File

@ -1,70 +0,0 @@
CLASS z2ui5_cl_ui5_z2ui5 DEFINITION
PUBLIC
FINAL
CREATE PUBLIC INHERITING FROM z2ui5_cl_ui5.
PUBLIC SECTION.
METHODS file_uploader
IMPORTING
!value TYPE clike OPTIONAL
!path TYPE clike OPTIONAL
!placeholder TYPE clike OPTIONAL
!upload TYPE clike OPTIONAL
!icononly TYPE clike OPTIONAL
!buttononly TYPE clike OPTIONAL
!buttontext TYPE clike OPTIONAL
!uploadbuttontext TYPE clike OPTIONAL
!checkdirectupload TYPE clike OPTIONAL
!filetype TYPE clike OPTIONAL
RETURNING
VALUE(result) TYPE REF TO z2ui5_cl_ui5_z2ui5.
METHODS timer
IMPORTING
finished TYPE clike OPTIONAL
delayms TYPE clike OPTIONAL
checkrepeat TYPE clike OPTIONAL
PREFERRED PARAMETER finished
RETURNING
VALUE(result) TYPE REF TO z2ui5_cl_ui5_z2ui5.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS z2ui5_cl_ui5_z2ui5 IMPLEMENTATION.
METHOD timer.
result = me.
_add( n = `Timer`
ns = `z2ui5`
t_p = VALUE #( ( n = `delayMS` v = delayms )
( n = `finished` v = finished )
( n = `checkRepeat` v = _2bool( checkrepeat ) )
) ).
ENDMETHOD.
METHOD file_uploader.
result = me.
_add( n = `FileUploader`
ns = `z2ui5`
t_p = VALUE #( ( n = `placeholder` v = placeholder )
( n = `upload` v = upload )
( n = `path` v = path )
( n = `value` v = value )
( n = `iconOnly` v = _2bool( icononly ) )
( n = `buttonOnly` v = _2bool( buttononly ) )
( n = `buttonText` v = buttontext )
( n = `uploadButtonText` v = uploadbuttontext )
( n = `fileType` v = filetype )
( n = `checkDirectUpload` v = _2bool( checkdirectupload ) ) ) ).
ENDMETHOD.
ENDCLASS.

View File

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

View File

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_DEVC" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<DEVC>
<CTEXT>abap2UI5 - test</CTEXT>
</DEVC>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -1,62 +0,0 @@
CLASS z2ui5_cl_test_app_131 DEFINITION
PUBLIC
CREATE PUBLIC .
PUBLIC SECTION.
INTERFACES z2ui5_if_app .
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS z2ui5_cl_test_app_131 IMPLEMENTATION.
METHOD z2ui5_if_app~main.
DATA(lo_view) = z2ui5_cl_ui5=>_factory( )->_ns_webc(
)->bar( design = 'header'
)->label( id = 'basic-label'
)->button(
icon = 'home'
tooltip = 'Go home'
design = 'Transparent'
)->button(
icon = 'action-settings'
tooltip = 'Go to settings'
design = 'Transparent'
)->_go_up( )->_ns_webc(
)->panel(
)->header(
)->label( text = 'UI5 Web Components Enablement'
)->_go_up( )->_ns_webc(
)->input(
id = `myInput`
value = `Enter your text here!`
width = `100%`
)->button(
id = 'btn-9'
text = `Don't click me!`
icon = 'action-settings'
click = 'onClick'
design = 'Transparent'
)->_go_up( )->_ns_webc(
)->toast( 'myToast'
)->_ns_html(
)->script( )->_add_c(
` var toastOpener9 = sap.z2ui5.oView.byId("btn-9");` && |\n| &&
` var toast9 = sap.z2ui5.oView.byId("myToast"); ` && |\n| &&
` toastOpener9.getDomRef().addEventListener("click", () => {` && |\n| &&
` toast9.setText("MyText");` && |\n| &&
` toast9.show();` && |\n| &&
` });`
).
client->view_display( lo_view->_stringify( ) ).
ENDMETHOD.
ENDCLASS.

View File

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

View File

@ -1,53 +0,0 @@
CLASS z2ui5_cl_test_app_132 DEFINITION
PUBLIC
CREATE PUBLIC .
PUBLIC SECTION.
INTERFACES z2ui5_if_app .
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS z2ui5_cl_test_app_132 IMPLEMENTATION.
METHOD z2ui5_if_app~main.
* DATA(lo_view) = z2ui5_cl_ui5=>_factory( )->_ns_m(
* )->bar( )->content_middle(
* )->label( id = 'basic-label'
* )->button(
* icon = 'home'
* tooltip = 'Go home'
* )->button(
* icon = 'action-settings'
* tooltip = 'Go to settings'
* )->_go_up( )->_go_up( )->_ns_m(
* )->panel(
* )->label( text = 'UI5 Web Components Enablement build with sap.m'
* )->_go_up( )->_ns_m(
* )->input(
* id = `myInput`
* value = `Enter your text here!`
* width = `100%`
* )->button(
* id = 'btn-9'
* text = `Don't click me!`
* icon = 'action-settings'
* press = 'onClick'
* )->_ns_html(
* )->script( )->_add_c(
* ` debugger; var toastOpener9 = sap.z2ui5.oView.byId("btn-9");` && |\n| &&
* ` toastOpener9.getDomRef().addEventListener("click", () => {` && |\n| &&
* ` alert("MyText");` && |\n| &&
* ` });`
* ).
* client->view_display( lo_view->_stringify( ) ).
ENDMETHOD.
ENDCLASS.

View File

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

View File

@ -1,50 +0,0 @@
CLASS z2ui5_cl_test_hello_wor DEFINITION PUBLIC.
PUBLIC SECTION.
INTERFACES z2ui5_if_app.
DATA product TYPE string.
DATA quantity TYPE string.
DATA check_initialized TYPE abap_bool.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS z2ui5_cl_test_hello_wor IMPLEMENTATION.
METHOD z2ui5_if_app~main.
IF check_initialized = abap_false.
check_initialized = abap_true.
product = 'products'.
quantity = '500'.
ENDIF.
CASE client->get( )-event.
WHEN 'BUTTON_POST'.
client->message_toast_display( |{ product } { quantity } - send to the server| ).
WHEN OTHERS.
ENDCASE.
*
* client->view_display( z2ui5_cl_ui5=>_factory( )->_ns_m(
* )->shell(
* )->page( title = 'abap2UI5 - z2ui5_cl_app_hello_world' )->_ns_ui(
* )->simpleform( title = 'Hello World'
* editable = abap_true
* )->content( )->_ns_m(
* )->title( 'Make an input here and send it to the server...'
* )->label( 'quantity'
* )->input( client->_bind_edit( quantity )
* )->label( 'product'
* )->input( value = product
* enabled = abap_false
* )->button( text = 'post'
* press = client->_event( 'BUTTON_POST' )
* )->_stringify( ) ).
ENDMETHOD.
ENDCLASS.

View File

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

View File

@ -1,123 +0,0 @@
CLASS z2ui5_cl_test_int_test DEFINITION
PUBLIC
FINAL
CREATE PUBLIC.
PUBLIC SECTION.
INTERFACES z2ui5_if_app.
DATA product TYPE string.
DATA quantity TYPE string.
DATA check_initialized TYPE abap_bool.
CLASS-DATA sv_state TYPE string.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS Z2UI5_CL_TEST_INT_TEST IMPLEMENTATION.
METHOD z2ui5_if_app~main.
IF check_initialized = abap_false.
check_initialized = abap_true.
product = 'tomato'.
quantity = '500'.
ENDIF.
CASE client->get( )-event.
WHEN 'BUTTON_POST'.
client->message_toast_display( |{ product } { quantity } - send to the server| ).
WHEN 'BACK'.
client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ).
ENDCASE.
IF sv_state = 'TEST_MESSAGE_BOX'.
client->message_box_display( 'test message box' ).
ENDIF.
IF sv_state = 'TEST_MESSAGE_TOAST'.
client->message_toast_display( 'test message toast' ).
ENDIF.
CASE sv_state.
WHEN `ERROR`.
DATA(lv_test) = 1 / 0 ##NEEDED.
WHEN 'TEST_ONE_WAY'.
client->view_display( z2ui5_cl_xml_view=>factory( )->shell(
)->page( title = 'abap2UI5 - First Example'
navbuttonpress = client->_event( 'BACK' )
shownavbutton = abap_true
)->simple_form( title = 'Form Title'
editable = abap_true
)->content( 'form'
)->title( 'Input'
)->label( 'quantity'
)->input( client->_bind( quantity )
)->label( 'product'
)->input( value = product
enabled = abap_false
)->button( text = 'post'
press = client->_event( 'BUTTON_POST' )
)->get_root( )->xml_get( ) ).
WHEN 'TEST_POPUP'.
client->popup_display( z2ui5_cl_xml_view=>factory(
)->dialog( title = 'abap2UI5 - First Example'
)->simple_form( title = 'Form Title'
editable = abap_true
)->content( 'form'
)->title( 'Input'
)->label( 'quantity'
)->input( client->_bind_edit( quantity )
)->label( 'product'
)->input( value = product
enabled = abap_false
)->button( text = 'post'
press = client->_event( 'BUTTON_POST' )
)->get_root( )->xml_get( ) ).
WHEN OTHERS.
client->view_display( z2ui5_cl_xml_view=>factory( )->shell(
)->page( title = 'abap2UI5 - First Example'
navbuttonpress = client->_event( 'BACK' )
shownavbutton = abap_true
)->simple_form( title = 'Form Title'
editable = abap_true
)->content( 'form'
)->title( 'Input'
)->label( 'quantity'
)->input( client->_bind_edit( quantity )
)->label( 'product'
)->input( value = product
enabled = abap_false
)->button( text = 'post'
press = client->_event( 'BUTTON_POST' )
)->get_root( )->xml_get( ) ).
ENDCASE.
IF sv_state = 'TEST_NAVIGATE'.
DATA(lo_app) = NEW z2ui5_cl_test_int_test( ).
sv_state = 'LEAVE_APP'.
client->nav_app_call( lo_app ).
RETURN.
ENDIF.
IF sv_state = 'LEAVE_APP'.
CLEAR sv_state.
client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app ) ).
ENDIF.
ENDMETHOD.
ENDCLASS.

View File

@ -1,315 +0,0 @@
CLASS ltcl_unit_test DEFINITION FINAL FOR TESTING
DURATION SHORT
RISK LEVEL HARMLESS.
PRIVATE SECTION.
METHODS
first_test FOR TESTING RAISING cx_static_check.
ENDCLASS.
CLASS ltcl_unit_test IMPLEMENTATION.
METHOD first_test.
* DATA test TYPE /ui2/cl_json=>bool ##NEEDED.
* DATA test_const TYPE string VALUE /ui2/cl_json=>pretty_mode-extended ##NEEDED.
* DATA text TYPE char10.
* DATA text2 TYPE text100.
* DATA text3 TYPE text10.
* DATA text4 TYPE text10.
*
* DATA stringtab TYPE stringtab.
*
* DATA test1 TYPE text1.
* DATA test2 TYPE text10.
* DATA test3 TYPE text11.
* DATA test4 TYPE text12.
* DATA test5 TYPE text120.
* DATA test6 TYPE text128.
* DATA test7 TYPE text132.
* DATA test8 TYPE text140.
ENDMETHOD.
ENDCLASS.
*CLASS ltcl_integration_test DEFINITION FINAL FOR TESTING
* DURATION LONG
* RISK LEVEL HARMLESS.
*
* PUBLIC SECTION.
*
*
* PRIVATE SECTION.
* METHODS test_index_html FOR TESTING RAISING cx_static_check.
* METHODS test_xml_view FOR TESTING RAISING cx_static_check.
* METHODS test_id FOR TESTING RAISING cx_static_check.
* METHODS test_xml_popup FOR TESTING RAISING cx_static_check.
* METHODS test_bind_one_way FOR TESTING RAISING cx_static_check.
* METHODS test_bind_two_way FOR TESTING RAISING cx_static_check.
* METHODS test_message_toast FOR TESTING RAISING cx_static_check.
* METHODS test_message_box FOR TESTING RAISING cx_static_check.
* METHODS test_landing_page FOR TESTING RAISING cx_static_check.
* METHODS test_scroll_cursor FOR TESTING RAISING cx_static_check.
* METHODS test_navigate FOR TESTING RAISING cx_static_check.
* METHODS test_startup_path FOR TESTING RAISING cx_static_check.
*
* METHODS test_app_dump FOR TESTING RAISING cx_static_check.
*
*ENDCLASS.
*
*
*CLASS ltcl_integration_test IMPLEMENTATION.
*
* METHOD test_xml_view.
* DATA lo_data TYPE REF TO data.
* FIELD-SYMBOLS <val> TYPE any.
* "test
* z2ui5_cl_test_integration_test=>sv_state = ``.
* DATA(lv_response) = z2ui5_cl_fw_http_handler=>http_post(
* `{ "OLOCATION" : { "SEARCH" : "app_start=z2ui5_cl_test_integration_test"}}` ).
*
*
* /ui2/cl_json=>deserialize( EXPORTING json = lv_response
* CHANGING data = lo_data ).
*
*
* UNASSIGN <val>.
* DATA(lv_assign) = `PARAMS->S_VIEW->XML->*`.
* ASSIGN lo_data->(lv_assign) TO <val>.
* <val> = shift_left( <val> ).
* IF <val>(9) <> `<mvc:View`.
* cl_abap_unit_assert=>fail( 'xml view - intital view wrong' ).
* ENDIF.
*
* ENDMETHOD.
*
* METHOD test_index_html.
*
* DATA(lv_index_html) = z2ui5_cl_fw_http_handler=>http_get( ).
* IF lv_index_html IS INITIAL.
* cl_abap_unit_assert=>fail( 'HTTP GET - index html initial' ).
* ENDIF.
*
* ENDMETHOD.
*
*
* METHOD test_id.
* DATA lo_data TYPE REF TO data.
* FIELD-SYMBOLS <val> TYPE any.
*
* z2ui5_cl_test_integration_test=>sv_state = ``.
* DATA(lv_response) = z2ui5_cl_fw_http_handler=>http_post(
* `{ "OLOCATION" : { "SEARCH" : "app_start=z2ui5_cl_test_integration_test"}}` ).
*
*
* /ui2/cl_json=>deserialize( EXPORTING json = lv_response
* CHANGING data = lo_data ).
*
*
* UNASSIGN <val>.
* DATA(lv_assign) = `ID->*`.
* ASSIGN lo_data->(lv_assign) TO <val>.
* IF <val> IS INITIAL.
* cl_abap_unit_assert=>fail( msg = 'id - initial value is initial'
* quit = 5 ).
* ENDIF.
* ENDMETHOD.
*
* METHOD test_bind_one_way.
*
* DATA(lo_test) = NEW z2ui5_cl_test_integration_test( ) ##NEEDED.
* DATA lo_data TYPE REF TO data.
* FIELD-SYMBOLS <val> TYPE any.
*
* z2ui5_cl_test_integration_test=>sv_state = `TEST_ONE_WAY`.
* DATA(lv_response) = z2ui5_cl_fw_http_handler=>http_post(
* `{ "OLOCATION" : { "SEARCH" : "app_start=z2ui5_cl_test_integration_test"}}` ).
*
*
*
* /ui2/cl_json=>deserialize( EXPORTING json = lv_response
* CHANGING data = lo_data ).
*
*
* UNASSIGN <val>.
* DATA(lv_assign) = `OVIEWMODEL->QUANTITY->*`.
* ASSIGN lo_data->(lv_assign) TO <val>.
* IF <val> <> `500`.
* cl_abap_unit_assert=>fail( msg = 'data binding - initial set EDIT wrong'
* quit = 5 ).
* ENDIF.
* ENDMETHOD.
*
* METHOD test_bind_two_way.
* DATA lo_data TYPE REF TO data.
* FIELD-SYMBOLS <val> TYPE any.
*
* z2ui5_cl_test_integration_test=>sv_state = ``.
* DATA(lv_response) = z2ui5_cl_fw_http_handler=>http_post(
* `{ "OLOCATION" : { "SEARCH" : "app_start=z2ui5_cl_test_integration_test"}}` ).
*
*
* /ui2/cl_json=>deserialize( EXPORTING json = lv_response
* CHANGING data = lo_data ).
*
*
* UNASSIGN <val>.
* DATA(lv_assign) = `OVIEWMODEL->EDIT->QUANTITY->*`.
* ASSIGN lo_data->(lv_assign) TO <val>.
* IF <val> <> `500`.
* cl_abap_unit_assert=>fail( msg = 'data binding - initial set EDIT wrong'
* quit = 5 ).
* ENDIF.
* ENDMETHOD.
*
* METHOD test_message_box.
* DATA lo_data TYPE REF TO data.
* FIELD-SYMBOLS <val> TYPE any.
*
* z2ui5_cl_test_integration_test=>sv_state = `TEST_MESSAGE_BOX`.
* DATA(lv_response) = z2ui5_cl_fw_http_handler=>http_post(
* `{ "OLOCATION" : { "SEARCH" : "app_start=z2ui5_cl_test_integration_test"}}` ).
*
*
* /ui2/cl_json=>deserialize( EXPORTING json = lv_response
* CHANGING data = lo_data ).
*
*
*
* UNASSIGN <val>.
* DATA(lv_assign) = `PARAMS->S_MSG_BOX->TEXT->*`.
* ASSIGN lo_data->(lv_assign) TO <val>.
* IF <val> <> `test message box`.
* cl_abap_unit_assert=>fail( msg = 'message box - text wrong'
* quit = 5 ).
* ENDIF.
*
* UNASSIGN <val>.
* lv_assign = `PARAMS->S_MSG_BOX->TYPE->*`.
* ASSIGN lo_data->(lv_assign) TO <val>.
* IF <val> <> `information`.
* cl_abap_unit_assert=>fail( msg = 'message box - type wrong'
* quit = 5 ).
* ENDIF.
* ENDMETHOD.
*
* METHOD test_message_toast.
* DATA lo_data TYPE REF TO data.
* FIELD-SYMBOLS <val> TYPE any.
*
* z2ui5_cl_test_integration_test=>sv_state = `TEST_MESSAGE_TOAST`.
* DATA(lv_response) = z2ui5_cl_fw_http_handler=>http_post(
* `{ "OLOCATION" : { "SEARCH" : "app_start=z2ui5_cl_test_integration_test"}}` ).
*
*
* /ui2/cl_json=>deserialize( EXPORTING json = lv_response
* CHANGING data = lo_data ).
*
*
*
* UNASSIGN <val>.
* DATA(lv_assign) = `PARAMS->S_MSG_TOAST->TEXT->*`.
* ASSIGN lo_data->(lv_assign) TO <val>.
* IF <val> <> `test message toast`.
* cl_abap_unit_assert=>fail( msg = 'message toast - text wrong'
* quit = 5 ).
* ENDIF.
*
* ENDMETHOD.
*
*
* METHOD test_xml_popup.
* DATA lo_data TYPE REF TO data.
* FIELD-SYMBOLS <val> TYPE any.
*
* z2ui5_cl_test_integration_test=>sv_state = `TEST_POPUP`.
* DATA(lv_response) = z2ui5_cl_fw_http_handler=>http_post(
* `{ "OLOCATION" : { "SEARCH" : "app_start=z2ui5_cl_test_integration_test"}}` ).
*
*
* /ui2/cl_json=>deserialize( EXPORTING json = lv_response
* CHANGING data = lo_data ).
*
*
* UNASSIGN <val>.
* DATA(lv_assign) = `PARAMS->S_POPUP->XML->*`.
* ASSIGN lo_data->(lv_assign) TO <val>.
* <val> = shift_left( <val> ).
* IF <val>(9) <> `<mvc:View`.
* cl_abap_unit_assert=>fail( msg = 'xml popup - intital popup wrong'
* quit = 5 ).
* ENDIF.
* ENDMETHOD.
*
* METHOD test_landing_page.
*
*
* ENDMETHOD.
*
* METHOD test_scroll_cursor.
* DATA lo_data TYPE REF TO data.
*
* z2ui5_cl_test_integration_test=>sv_state = `TEST_SCROLL_CURSOR`.
* DATA(lv_response) = z2ui5_cl_fw_http_handler=>http_post(
* `{ "OLOCATION" : { "SEARCH" : "app_start=z2ui5_cl_test_integration_test"}}` ).
*
*
* /ui2/cl_json=>deserialize( EXPORTING json = lv_response
* CHANGING data = lo_data ).
*
* ENDMETHOD.
*
* METHOD test_startup_path.
* DATA lo_data TYPE REF TO data.
*
* z2ui5_cl_test_integration_test=>sv_state = `TEST_NAVIGATE`.
* DATA(lv_response) = z2ui5_cl_fw_http_handler=>http_post(
* `{ "OLOCATION" : { "SEARCH" : "app_start=z2ui5_cl_test_integration_test"}}` ).
*
*
* /ui2/cl_json=>deserialize( EXPORTING json = lv_response
* CHANGING data = lo_data ).
*
* ENDMETHOD.
*
* METHOD test_navigate.
* DATA lo_data TYPE REF TO data.
*
* z2ui5_cl_test_integration_test=>sv_state = `TEST_NAVIGATE`.
* DATA(lv_response) = z2ui5_cl_fw_http_handler=>http_post(
* `{ "OLOCATION" : { "SEARCH" : "app_start=z2ui5_cl_test_integration_test"}}` ).
*
*
* /ui2/cl_json=>deserialize( EXPORTING json = lv_response
* CHANGING data = lo_data ).
*
* ENDMETHOD.
*
*
* METHOD test_app_dump.
*
* DATA lo_data TYPE REF TO data.
* FIELD-SYMBOLS <val> TYPE any.
*
* z2ui5_cl_test_integration_test=>sv_state = `ERROR`.
* DATA(lv_response) = z2ui5_cl_fw_http_handler=>http_post( `{ "OLOCATION" : { "SEARCH" : "app_start=z2ui5_cl_test_integration_test"}}` ).
*
*
* /ui2/cl_json=>deserialize(
* EXPORTING
* json = lv_response
* CHANGING
* data = lo_data ).
*
* UNASSIGN <val>.
* ASSIGN (`LO_DATA->PARAMS->S_VIEW->XML->*`) TO <val>.
* cl_abap_unit_assert=>assert_not_initial( <val> ).
*
* ENDMETHOD.
*
*
*ENDCLASS.

View File

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

View File

@ -5,7 +5,6 @@ CLASS z2ui5_cl_util_api DEFINITION
PUBLIC SECTION.
TYPES:
BEGIN OF ty_s_token,
key TYPE string,
@ -40,6 +39,8 @@ CLASS z2ui5_cl_util_api DEFINITION
END OF ty_s_fix_val.
TYPES ty_t_fix_val TYPE STANDARD TABLE OF ty_s_fix_val WITH EMPTY KEY.
CLASS-METHODS rtti_get_t_attri_by_include
IMPORTING
type TYPE REF TO cl_abap_datadescr
@ -382,6 +383,40 @@ CLASS z2ui5_cl_util_api DEFINITION
IMPORTING !type TYPE REF TO cl_abap_datadescr
RETURNING VALUE(result) TYPE abap_component_tab ##NEEDED.
CLASS-METHODS db_delete_by_handle
IMPORTING
!uname TYPE clike OPTIONAL
!handle TYPE clike OPTIONAL
!handle2 TYPE clike OPTIONAL
!handle3 TYPE clike OPTIONAL
!check_commit TYPE abap_bool DEFAULT abap_true.
CLASS-METHODS db_save
IMPORTING
!uname TYPE clike OPTIONAL
!handle TYPE clike OPTIONAL
!handle2 TYPE clike OPTIONAL
!handle3 TYPE clike OPTIONAL
!data TYPE any
!check_commit TYPE abap_bool DEFAULT abap_true
RETURNING
VALUE(result) TYPE string.
CLASS-METHODS db_load_by_id
IMPORTING
!id TYPE clike OPTIONAL
EXPORTING
VALUE(result) TYPE any.
CLASS-METHODS db_load_by_handle
IMPORTING
!uname TYPE clike OPTIONAL
!handle TYPE clike OPTIONAL
!handle2 TYPE clike OPTIONAL
!handle3 TYPE clike OPTIONAL
EXPORTING
VALUE(result) TYPE any.
PROTECTED SECTION.
PRIVATE SECTION.
@ -394,6 +429,108 @@ ENDCLASS.
CLASS z2ui5_cl_util_api IMPLEMENTATION.
METHOD db_delete_by_handle.
DELETE FROM z2ui5_t_02
WHERE
uname = @uname
AND handle = @handle
AND handle2 = @handle2
AND handle3 = @handle3.
IF check_commit = abap_true.
COMMIT WORK AND WAIT.
ENDIF.
ENDMETHOD.
METHOD db_load_by_handle.
DATA lt_db TYPE STANDARD TABLE OF z2ui5_t_02 WITH EMPTY KEY.
SELECT data
FROM z2ui5_t_02
WHERE
uname = @uname
AND handle = @handle
AND handle2 = @handle2
AND handle3 = @handle3
INTO CORRESPONDING FIELDS OF TABLE @lt_db.
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 ].
xml_parse(
EXPORTING
xml = ls_db-data
IMPORTING
any = result ).
ENDMETHOD.
METHOD db_load_by_id.
DATA lt_db TYPE STANDARD TABLE OF z2ui5_t_02 WITH EMPTY KEY.
SELECT data
FROM z2ui5_t_02
WHERE id = @id
INTO CORRESPONDING FIELDS OF TABLE @lt_db.
ASSERT sy-subrc = 0.
DATA(ls_db) = lt_db[ 1 ].
xml_parse(
EXPORTING
xml = ls_db-data
IMPORTING
any = result ).
ENDMETHOD.
METHOD db_save.
DATA lt_db TYPE STANDARD TABLE OF z2ui5_t_02 WITH EMPTY KEY.
SELECT id
FROM z2ui5_t_02
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_02(
uname = uname
handle = handle
handle2 = handle2
handle3 = handle3
data = xml_stringify( data ) ).
TRY.
ls_db-id = lt_db[ 1 ]-id.
CATCH cx_root.
ls_db-id = uuid_get_c32( ).
ENDTRY.
MODIFY z2ui5_t_02 FROM @ls_db.
ASSERT sy-subrc = 0.
IF check_commit = abap_true.
COMMIT WORK AND WAIT.
ENDIF.
result = ls_db-id.
ENDMETHOD.
METHOD boolean_abap_2_json.
IF boolean_check_by_data( val ).

View File

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_DEVC" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<DEVC>
<CTEXT>abap2UI5 - classic (xml)</CTEXT>
</DEVC>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -3,7 +3,7 @@
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<DEVC>
<CTEXT>abap2UI5 - apps &amp; popups</CTEXT>
<CTEXT>abap2UI5 - popups</CTEXT>
</DEVC>
</asx:values>
</asx:abap>

View File

@ -196,12 +196,12 @@ CLASS Z2UI5_CL_POP_GET_RANGE_M IMPLEMENTATION.
type = `Transparent`
press = client->_event( val = `POPUP_DELETE_ALL` )
* )->toolbar_spacer(
)->button( text = 'DB Read'
press = client->_event( 'BUTTON_DB_READ' )
icon = 'sap-icon://download-from-cloud'
)->button( text = 'DB Save'
press = client->_event( 'BUTTON_DB_SAVE' )
icon = 'sap-icon://save'
* )->button( text = 'DB Read'
* press = client->_event( 'BUTTON_DB_READ' )
* icon = 'sap-icon://download-from-cloud'
* )->button( text = 'DB Save'
* press = client->_event( 'BUTTON_DB_SAVE' )
* icon = 'sap-icon://save'
* )->toolbar_spacer(
)->button( text = 'Cancel'
press = client->_event( 'BUTTON_CANCEL' )
@ -237,9 +237,20 @@ CLASS Z2UI5_CL_POP_GET_RANGE_M IMPLEMENTATION.
)->text( '{DESCR}'
)->text( '{DEF}' ).
dialog->footer( )->overflow_toolbar(
)->toolbar_spacer(
)->button(
* dialog->footer( )->overflow_toolbar(
* )->toolbar_spacer(
* )->button(
* text = 'Back'
* icon = 'sap-icon://nav-back'
* press = client->_event( 'DB_READ_CLOSE' )
* )->button(
* text = 'Open'
* icon = 'sap-icon://accept'
* press = client->_event( 'OPEN_SELECT' )
* type = 'Emphasized' ).
dialog->buttons(
)->button(
text = 'Back'
icon = 'sap-icon://nav-back'
press = client->_event( 'DB_READ_CLOSE' )
@ -289,9 +300,20 @@ CLASS Z2UI5_CL_POP_GET_RANGE_M IMPLEMENTATION.
)->switch( type = 'AcceptReject' state = client->_bind_edit( ms_variant_save-check_user )
).
dialog->footer( )->overflow_toolbar(
)->toolbar_spacer(
)->button(
* dialog->footer( )->overflow_toolbar(
* )->toolbar_spacer(
* )->button(
* text = 'Back'
* icon = 'sap-icon://nav-back'
* press = client->_event( 'DB_SAVE_CLOSE' )
* )->button(
* text = 'Save'
* press = client->_event( 'DB_SAVE' )
* type = 'Success'
* icon = 'sap-icon://save' ).
dialog->buttons(
)->button(
text = 'Back'
icon = 'sap-icon://nav-back'
press = client->_event( 'DB_SAVE_CLOSE' )

View File

@ -1,405 +0,0 @@
CLASS z2ui5_cl_pop_to_sel_w_l DEFINITION
PUBLIC FINAL
CREATE PROTECTED.
PUBLIC SECTION.
INTERFACES if_serializable_object.
INTERFACES z2ui5_if_app.
TYPES:
BEGIN OF ty_s_result,
row TYPE REF TO data,
check_confirmed TYPE abap_bool,
END OF ty_s_result.
DATA ms_result TYPE ty_s_result.
DATA mr_tab TYPE REF TO data.
DATA mr_out TYPE REF TO data.
DATA mr_out_tmp TYPE REF TO data.
DATA ms_layout TYPE z2ui5_cl_pop_layout_v2=>ty_s_layout.
DATA mv_search_value TYPE string.
CLASS-METHODS factory
IMPORTING
i_tab TYPE STANDARD TABLE
i_title TYPE clike OPTIONAL
i_sort_field TYPE clike OPTIONAL
i_descending TYPE abap_bool OPTIONAL
i_contentwidth TYPE clike OPTIONAL
i_contentheight TYPE clike OPTIONAL
i_growingthreshold TYPE clike OPTIONAL
i_handle01 TYPE z2ui5_cl_pop_layout_v2=>handle OPTIONAL
i_handle02 TYPE z2ui5_cl_pop_layout_v2=>handle OPTIONAL
i_handle03 TYPE z2ui5_cl_pop_layout_v2=>handle OPTIONAL
i_handle04 TYPE z2ui5_cl_pop_layout_v2=>handle OPTIONAL
RETURNING
VALUE(r_result) TYPE REF TO z2ui5_cl_pop_to_sel_w_l.
METHODS result
RETURNING
VALUE(result) TYPE ty_s_result.
PROTECTED SECTION.
DATA check_initialized TYPE abap_bool.
DATA client TYPE REF TO z2ui5_if_client.
DATA title TYPE string.
DATA sort_field TYPE string.
DATA content_width TYPE string.
DATA content_height TYPE string.
DATA growing_threshold TYPE string.
DATA descending TYPE abap_bool.
METHODS on_event.
METHODS display.
METHODS set_output_table.
METHODS on_event_search.
METHODS get_comp
RETURNING
VALUE(result) TYPE abap_component_tab.
PRIVATE SECTION.
METHODS set_row_id.
METHODS confirm.
METHODS on_after_layout.
ENDCLASS.
CLASS z2ui5_cl_pop_to_sel_w_l IMPLEMENTATION.
METHOD factory.
r_result = NEW #( ).
r_result->title = i_title.
r_result->sort_field = i_sort_field.
r_result->descending = i_descending.
r_result->content_height = i_contentheight.
r_result->content_width = i_contentwidth.
r_result->growing_threshold = i_growingthreshold.
r_result->mr_tab = z2ui5_cl_util=>conv_copy_ref_data( i_tab ).
CREATE DATA r_result->ms_result-row LIKE LINE OF i_tab.
r_result->ms_layout = z2ui5_cl_pop_layout_v2=>init_layout( data = r_result->mr_tab
control = z2ui5_cl_pop_layout_v2=>m_table
handle01 = i_handle01
handle02 = i_handle02
handle03 = i_handle03
handle04 = i_handle04 ).
ENDMETHOD.
METHOD display.
DATA(popup) = z2ui5_cl_xml_view=>factory_popup( )->dialog( title = title
afterclose = client->_event( 'CANCEL' ) ).
DATA(table) = popup->table( growing = 'true'
growingthreshold = '100'
width = 'auto'
autopopinmode = abap_true
items = client->_bind_edit( val = mr_out->* )
headertext = title ).
" TODO: variable is assigned but never used (ABAP cleaner)
DATA(headder) = table->header_toolbar(
)->overflow_toolbar(
)->title( title
)->search_field( value = client->_bind_edit( mv_search_value )
search = client->_event( 'SEARCH' )
change = client->_event( 'SEARCH' )
id = `SEARCH`
width = '17.5rem' ).
headder = z2ui5_cl_pop_layout_v2=>render_layout_function( xml = headder
client = client ).
DATA(columns) = table->columns( ).
LOOP AT ms_layout-t_layout REFERENCE INTO DATA(layout).
DATA(lv_index) = sy-tabix.
columns->column( visible = client->_bind( val = layout->visible
tab = ms_layout-t_layout
tab_index = lv_index )
halign = client->_bind( val = layout->halign
tab = ms_layout-t_layout
tab_index = lv_index )
importance = client->_bind( val = layout->importance
tab = ms_layout-t_layout
tab_index = lv_index )
mergeduplicates = client->_bind( val = layout->merge
tab = ms_layout-t_layout
tab_index = lv_index )
width = client->_bind( val = layout->width
tab = ms_layout-t_layout
tab_index = lv_index )
)->text( layout->tlabel ).
ENDLOOP.
DATA(cells) = columns->get_parent( )->items(
)->column_list_item(
valign = 'Middle'
type = 'Navigation'
press = client->_event( val = 'CONFIRM'
t_arg = VALUE #( ( `${ZZROW_ID}` ) ) )
)->cells( ).
LOOP AT ms_layout-t_layout REFERENCE INTO layout.
IF layout->t_sub_col IS NOT INITIAL.
DATA(sub_col) = ``.
DATA(index) = 0.
LOOP AT layout->t_sub_col INTO DATA(subcol).
index = index + 1.
READ TABLE ms_layout-t_layout INTO DATA(line) WITH KEY fname = subcol-fname.
IF sy-subrc <> 0.
CONTINUE.
ENDIF.
IF line-reference_field IS INITIAL.
DATA(column) = |{ line-tlabel }: \{{ subcol-fname }\}|.
ELSE.
column = |{ line-tlabel }: \{{ subcol-fname }\} \{{ line-reference_field }\}|.
ENDIF.
IF index = 1.
sub_col = column.
ELSE.
sub_col = |{ sub_col }{ cl_abap_char_utilities=>cr_lf }{ column }|.
ENDIF.
ENDLOOP.
IF layout->reference_field IS NOT INITIAL.
cells->object_identifier( title = |\{{ layout->fname }\} \{{ layout->reference_field }\}|
text = sub_col ).
ELSE.
cells->object_identifier( title = |\{{ layout->fname }\}|
text = sub_col ).
ENDIF.
ELSE.
" IF layout->reference_field IS NOT INITIAL.
cells->object_identifier( text = |\{{ layout->fname }\} \{{ layout->reference_field }\}| ).
" ELSE.
cells->object_identifier( text = |\{{ layout->fname }\}| ).
" ENDIF.
ENDIF.
ENDLOOP.
client->popup_display( popup->stringify( ) ).
ENDMETHOD.
METHOD z2ui5_if_app~main.
me->client = client.
IF check_initialized = abap_false.
check_initialized = abap_true.
set_output_table( ).
display( ).
RETURN.
ENDIF.
on_event( ).
on_after_layout( ).
ENDMETHOD.
METHOD on_event.
CASE client->get( )-event.
WHEN 'CONFIRM'.
confirm( ).
client->popup_destroy( ).
client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ).
WHEN 'CANCEL'.
client->popup_destroy( ).
client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ).
WHEN 'SEARCH'.
on_event_search( ).
client->popup_model_update( ).
WHEN OTHERS.
client = z2ui5_cl_pop_layout_v2=>on_event_layout( client = client
layout = ms_layout ).
ENDCASE.
ENDMETHOD.
METHOD on_after_layout.
IF client->get( )-check_on_navigated = abap_false.
RETURN.
ENDIF.
TRY.
DATA(app) = CAST z2ui5_cl_pop_layout_v2( client->get_app( client->get( )-s_draft-id_prev_app ) ).
ms_layout = app->ms_layout.
display( ).
CATCH cx_root.
ENDTRY.
ENDMETHOD.
METHOD confirm.
FIELD-SYMBOLS <tab> TYPE STANDARD TABLE.
ASSIGN mr_out->* TO <tab>.
DATA(t_arg) = client->get( )-t_event_arg.
DATA(row_clicked) = t_arg[ 1 ].
LOOP AT <tab> ASSIGNING FIELD-SYMBOL(<line>).
ASSIGN COMPONENT 'ZZROW_ID' OF STRUCTURE <line> TO FIELD-SYMBOL(<row_id>).
IF <row_id> IS NOT ASSIGNED.
CONTINUE.
ENDIF.
IF <row_id> = row_clicked.
ms_result-row->* = CORRESPONDING #( <line> ).
EXIT.
ENDIF.
ENDLOOP.
ms_result-check_confirmed = abap_true.
ENDMETHOD.
METHOD result.
result = ms_result.
ENDMETHOD.
METHOD set_output_table.
DATA(t_comp) = get_comp( ).
TRY.
DATA(new_struct_desc) = cl_abap_structdescr=>create( t_comp ).
DATA(new_table_desc) = cl_abap_tabledescr=>create( p_line_type = new_struct_desc
p_table_kind = cl_abap_tabledescr=>tablekind_std ).
CREATE DATA mr_out TYPE HANDLE new_table_desc.
CREATE DATA mr_out_tmp TYPE HANDLE new_table_desc.
CATCH cx_root.
ENDTRY.
mr_out->* = CORRESPONDING #( mr_tab->* ).
set_row_id( ).
mr_out_tmp->* = mr_out->*.
ENDMETHOD.
METHOD set_row_id.
FIELD-SYMBOLS <tab> TYPE STANDARD TABLE.
FIELD-SYMBOLS <line> TYPE any.
ASSIGN mr_out->* TO <tab>.
LOOP AT <tab> ASSIGNING <line>.
ASSIGN COMPONENT 'ZZROW_ID' OF STRUCTURE <line> TO FIELD-SYMBOL(<row>).
IF <row> IS ASSIGNED.
<row> = sy-tabix.
ENDIF.
ENDLOOP.
ENDMETHOD.
METHOD get_comp.
DATA index TYPE int4.
* DATA selkz TYPE abap_bool.
TRY.
DATA(comp) = z2ui5_cl_util_api=>rtti_get_t_attri_by_any( mr_tab ).
IF xsdbool( line_exists( comp[ name = 'ZZROW_ID' ] ) ) = abap_false.
APPEND LINES OF VALUE cl_abap_structdescr=>component_table(
( name = 'ZZROW_ID'
type = CAST #( cl_abap_datadescr=>describe_by_data( index ) ) ) ) TO result.
ENDIF.
* IF xsdbool( line_exists( comp[ name = 'SELKZ' ] ) ) = abap_false.
* APPEND LINES OF VALUE cl_abap_structdescr=>component_table(
* ( name = 'SELKZ'
* type = CAST #( cl_abap_datadescr=>describe_by_data( selkz ) ) ) ) TO result.
*
* ENDIF.
APPEND LINES OF comp TO result.
CATCH cx_root.
ENDTRY.
ENDMETHOD.
METHOD on_event_search.
FIELD-SYMBOLS <tab> TYPE STANDARD TABLE.
FIELD-SYMBOLS <tab_tmp> TYPE STANDARD TABLE.
ASSIGN mr_out->* TO <tab>.
ASSIGN mr_out_tmp->* TO <tab_tmp>.
IF <tab_tmp> IS NOT INITIAL.
<tab> = <tab_tmp>.
ENDIF.
IF mv_search_value IS INITIAL.
RETURN.
ENDIF.
LOOP AT <tab> ASSIGNING FIELD-SYMBOL(<f_row>).
DATA(lv_row) = ``.
DATA(lv_index) = 1.
DO.
ASSIGN COMPONENT lv_index OF STRUCTURE <f_row> TO FIELD-SYMBOL(<field>).
IF sy-subrc <> 0.
EXIT.
ENDIF.
lv_row = lv_row && <field>.
lv_index = lv_index + 1.
ENDDO.
IF lv_row NS mv_search_value.
DELETE <tab>.
ENDIF.
ENDLOOP.
ENDMETHOD.
ENDCLASS.

View File

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