start app popup value help (#792)

* start app popup

* update value help

* lint fixes
This commit is contained in:
oblomov 2024-01-18 19:49:58 +01:00 committed by GitHub
parent b1e60622d8
commit e099cc2c69
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 139 additions and 40 deletions

View File

@ -176,21 +176,29 @@ CLASS z2ui5_cl_util_func DEFINITION
!val TYPE REF TO object
RETURNING
VALUE(result) TYPE abap_attrdescr_tab .
CLASS-METHODS rtti_get_t_comp_by_struc
CLASS-METHODS rtti_get_t_comp_by_data
IMPORTING
!val TYPE any
RETURNING
VALUE(result) TYPE cl_abap_structdescr=>component_table .
VALUE(result) TYPE cl_abap_structdescr=>component_table.
CLASS-METHODS rtti_get_type_name
IMPORTING
!val TYPE any
RETURNING
VALUE(result) TYPE string .
VALUE(result) TYPE string.
CLASS-METHODS rtti_check_type_kind_dref
IMPORTING
!val TYPE any
RETURNING
VALUE(result) TYPE abap_bool .
VALUE(result) TYPE abap_bool.
CLASS-METHODS rtti_get_classes_impl_intf
IMPORTING
!val TYPE clike
RETURNING
VALUE(result) TYPE string_table.
CLASS-METHODS rtti_get_type_kind
IMPORTING
!val TYPE any
@ -417,6 +425,68 @@ CLASS z2ui5_cl_util_func IMPLEMENTATION.
ENDMETHOD.
METHOD rtti_get_classes_impl_intf.
TRY.
DATA obj TYPE REF TO object.
CALL METHOD ('XCO_CP_ABAP')=>interface
EXPORTING
iv_name = val
RECEIVING
ro_interface = obj.
FIELD-SYMBOLS <any> TYPE any.
ASSIGN obj->('IF_XCO_AO_INTERFACE~IMPLEMENTATIONS') TO <any>.
obj = <any>.
ASSIGN obj->('IF_XCO_INTF_IMPLEMENTATIONS_FC~ALL') TO <any>.
obj = <any>.
CALL METHOD obj->('IF_XCO_INTF_IMPLEMENTATIONS~GET').
DATA lt_implementation_names TYPE string_table.
CALL METHOD obj->('IF_XCO_INTF_IMPLEMENTATIONS~GET_NAMES')
RECEIVING
rt_names = lt_implementation_names.
result = lt_implementation_names.
CATCH cx_sy_dyn_call_illegal_class.
TYPES:
BEGIN OF ty_s_impl,
clsname TYPE c LENGTH 30,
refclsname TYPE c LENGTH 30,
END OF ty_s_impl.
DATA lt_impl TYPE STANDARD TABLE OF ty_s_impl WITH DEFAULT KEY.
TYPES:
BEGIN OF ty_s_key,
intkey TYPE c LENGTH 30,
END OF ty_s_key.
DATA ls_key TYPE ty_s_key.
ls_key-intkey = val.
DATA(lv_fm) = `SEO_INTERFACE_IMPLEM_GET_ALL`.
CALL FUNCTION lv_fm
EXPORTING
intkey = ls_key
IMPORTING
impkeys = lt_impl
EXCEPTIONS
not_existing = 1
OTHERS = 2.
LOOP AT lt_impl REFERENCE INTO DATA(lr_impl).
INSERT CONV #( lr_impl->clsname ) INTO TABLE result.
ENDLOOP.
ENDTRY.
ENDMETHOD.
METHOD rtti_get_classname_by_ref.
DATA(lv_classname) = cl_abap_classdescr=>get_class_name( in ).
@ -450,10 +520,16 @@ CLASS z2ui5_cl_util_func IMPLEMENTATION.
ENDMETHOD.
METHOD rtti_get_t_comp_by_struc.
METHOD rtti_get_t_comp_by_data.
DATA(lo_type) = cl_abap_structdescr=>describe_by_data( val ).
DATA(lo_struct) = CAST cl_abap_structdescr( lo_type ).
TRY.
DATA(lo_tab) = CAST cl_abap_tabledescr( lo_type ).
DATA(lo_struct) = CAST cl_abap_structdescr( lo_tab->get_table_line_type( ) ).
CATCH cx_root.
lo_struct = CAST cl_abap_structdescr( lo_type ).
ENDTRY.
result = lo_struct->get_components( ).
ENDMETHOD.

View File

@ -696,7 +696,7 @@ CLASS ltcl_unit_test IMPLEMENTATION.
DATA(ls_row) = VALUE ty_row( ).
DATA(lt_comp) = z2ui5_cl_util_func=>rtti_get_t_comp_by_struc( ls_row ).
DATA(lt_comp) = z2ui5_cl_util_func=>rtti_get_t_comp_by_data( ls_row ).
IF lines( lt_comp ) <> 7.
cl_abap_unit_assert=>fail( ).

View File

@ -360,7 +360,7 @@ CLASS z2ui5_cl_fw_binding IMPLEMENTATION.
ASSIGN (lv_name) TO <attribute>.
z2ui5_cl_util_func=>x_check_raise( xsdbool( sy-subrc <> 0 ) ).
DATA(lt_comp) = z2ui5_cl_util_func=>rtti_get_t_comp_by_struc( <attribute> ).
DATA(lt_comp) = z2ui5_cl_util_func=>rtti_get_t_comp_by_data( <attribute> ).
DATA(lv_attri) = z2ui5_cl_util_func=>c_replace_assign_struc( val ).
LOOP AT lt_comp REFERENCE INTO DATA(lr_comp).

View File

@ -45,7 +45,7 @@ CLASS Z2UI5_CL_FW_CLIENT IMPLEMENTATION.
data lr_ref type ref to data.
ASSIGN i_tab[ i_tab_index ] TO <row>.
DATA(lt_attri) = z2ui5_cl_util_func=>rtti_get_t_comp_by_struc( <row> ).
DATA(lt_attri) = z2ui5_cl_util_func=>rtti_get_t_comp_by_data( <row> ).
LOOP AT lt_attri ASSIGNING FIELD-SYMBOL(<comp>).

View File

@ -238,7 +238,7 @@ CLASS z2ui5_cl_fw_controller IMPLEMENTATION.
ls_params = location->get_attribute( `STARTUP_PARAMETERS` )->get_val_ref( ).
ASSIGN ls_params->* TO <struc>.
DATA(lt_comp) = z2ui5_cl_util_func=>rtti_get_t_comp_by_struc( <struc> ).
DATA(lt_comp) = z2ui5_cl_util_func=>rtti_get_t_comp_by_data( <struc> ).
LOOP AT lt_comp INTO DATA(ls_comp).

View File

@ -29,6 +29,7 @@ CLASS z2ui5_cl_fw_app_startup DEFINITION
METHODS z2ui5_on_event.
METHODS view_display_start.
PROTECTED SECTION.
DATA mt_classes TYPE string_table.
PRIVATE SECTION.
ENDCLASS.
@ -89,7 +90,10 @@ CLASS z2ui5_cl_fw_app_startup IMPLEMENTATION.
content->input( placeholder = `fill in the class name and press 'check'`
editable = z2ui5_cl_util_func=>boolean_abap_2_json( ms_home-class_editable )
value = client->_bind_edit( ms_home-classname )
submit = client->_event( ms_home-btn_event_id ) ).
submit = client->_event( ms_home-btn_event_id )
valuehelprequest = client->_event( 'VALUE_HELP' )
showvaluehelp = abap_true
).
ELSE.
content->text( ms_home-classname ).
@ -140,6 +144,17 @@ CLASS z2ui5_cl_fw_app_startup IMPLEMENTATION.
z2ui5_on_init( ).
ENDIF.
IF client->get( )-check_on_navigated = abap_true.
TRY.
DATA(lo_f4) = CAST z2ui5_cl_popup_to_select( client->get_app( client->get( )-s_draft-id_prev_app ) ).
DATA(ls_result) = lo_f4->result( ).
IF ls_result-check_cancel = abap_false.
ms_home-classname = mt_classes[ ls_result-index ].
ENDIF.
CATCH cx_root.
ENDTRY.
ENDIF.
z2ui5_on_event( ).
view_display_start( ).
@ -176,6 +191,10 @@ CLASS z2ui5_cl_fw_app_startup IMPLEMENTATION.
type = `error` ).
ENDTRY.
WHEN 'VALUE_HELP'.
mt_classes = z2ui5_cl_util_func=>rtti_get_classes_impl_intf( `Z2UI5_IF_APP` ).
client->nav_app_call( z2ui5_cl_popup_to_select=>factory( mt_classes ) ).
WHEN `DEMOS`.
DATA li_app TYPE REF TO z2ui5_if_app.

View File

@ -12,9 +12,16 @@ CLASS z2ui5_cl_popup_to_select DEFINITION
RETURNING
VALUE(r_result) TYPE REF TO z2ui5_cl_popup_to_select.
TYPES:
BEGIN OF ty_s_result,
index TYPE i,
check_cancel TYPE abap_bool,
END OF ty_s_result.
DATA ms_result TYPE ty_s_result.
METHODS result
RETURNING
VALUE(result) TYPE i.
VALUE(result) TYPE ty_s_result.
DATA mr_tab TYPE REF TO data.
DATA mr_tab_popup TYPE REF TO data ##NEEDED.
@ -23,7 +30,6 @@ CLASS z2ui5_cl_popup_to_select DEFINITION
PROTECTED SECTION.
DATA check_initialized TYPE abap_bool.
DATA client TYPE REF TO z2ui5_if_client.
DATA mv_selected_index TYPE i.
METHODS on_event.
METHODS display.
METHODS set_output_table.
@ -31,6 +37,7 @@ CLASS z2ui5_cl_popup_to_select DEFINITION
METHODS on_event_search.
PRIVATE SECTION.
DATA lv_check_table_line TYPE abap_bool.
ENDCLASS.
@ -58,12 +65,10 @@ CLASS z2ui5_cl_popup_to_select IMPLEMENTATION.
cancel = client->_event( 'CANCEL' )
search = client->_event( val = 'SEARCH' t_arg = VALUE #( ( `${$parameters>/value}` ) ( `${$parameters>/clearButtonPressed}` ) ) )
confirm = client->_event( val = 'CONFIRM' t_arg = VALUE #( ( `${$parameters>/selectedContexts[0]/sPath}` ) ) )
growing = abap_true
).
DATA(lo_type) = cl_abap_structdescr=>describe_by_data( <tab_out> ).
DATA(lo_table) = CAST cl_abap_tabledescr( lo_type ).
DATA(lo_struct) = CAST cl_abap_structdescr( lo_table->get_table_line_type( ) ).
DATA(lt_comp) = lo_struct->get_components( ).
DATA(lt_comp) = z2ui5_cl_util_func=>rtti_get_t_comp_by_data( <tab_out> ).
DELETE lt_comp WHERE name = 'ZZSELKZ'.
DATA(list) = tab->column_list_item( valign = `Top` selected = `{ZZSELKZ}` ).
@ -106,6 +111,7 @@ CLASS z2ui5_cl_popup_to_select IMPLEMENTATION.
on_event_confirm( ).
WHEN 'CANCEL'.
ms_result-check_cancel = abap_true.
client->popup_destroy( ).
client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ).
@ -118,7 +124,7 @@ CLASS z2ui5_cl_popup_to_select IMPLEMENTATION.
METHOD result.
result = mv_selected_index.
result = ms_result.
ENDMETHOD.
@ -127,15 +133,20 @@ CLASS z2ui5_cl_popup_to_select IMPLEMENTATION.
FIELD-SYMBOLS <row> TYPE any.
FIELD-SYMBOLS <row2> TYPE any.
FIELD-SYMBOLS <row3> TYPE any.
FIELD-SYMBOLS <tab> TYPE STANDARD TABLE.
ASSIGN mr_tab->* TO <tab>.
DATA(lo_type) = cl_abap_structdescr=>describe_by_data( <tab> ).
DATA(lo_table) = CAST cl_abap_tabledescr( lo_type ).
DATA(lo_struct) = CAST cl_abap_structdescr( lo_table->get_table_line_type( ) ).
TRY.
DATA(lo_struct) = CAST cl_abap_structdescr( lo_table->get_table_line_type( ) ).
DATA(lt_comp) = lo_struct->get_components( ).
CATCH cx_root.
lv_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.
ENDTRY.
DATA(lo_type_bool) = cl_abap_structdescr=>describe_by_name( 'ABAP_BOOL' ).
DATA(lt_comp) = lo_struct->get_components( ).
INSERT VALUE #( name = `ZZSELKZ` type = CAST #( lo_type_bool ) ) INTO TABLE lt_comp.
DATA(lo_line_type) = cl_abap_structdescr=>create( lt_comp ).
@ -146,24 +157,25 @@ CLASS z2ui5_cl_popup_to_select IMPLEMENTATION.
FIELD-SYMBOLS <tab_out> TYPE STANDARD TABLE.
FIELD-SYMBOLS <tab_out2> TYPE STANDARD TABLE.
FIELD-SYMBOLS <field> TYPE any.
ASSIGN mr_tab_popup->* TO <tab_out>.
ASSIGN mr_tab_popup_backup->* TO <tab_out2>.
LOOP AT <tab> ASSIGNING <row>.
DATA lr_row TYPE REF TO data.
CREATE DATA lr_row LIKE LINE OF <tab_out>.
ASSIGN lr_row->* TO <row2>.
<row2> = CORRESPONDING #( <row> ).
IF lv_check_table_line = abap_true.
ASSIGN lr_row->('TAB_LINE') TO <field>.
<field> = <row>.
ELSE.
<row2> = CORRESPONDING #( <row> ).
ENDIF.
INSERT <row2> INTO TABLE <tab_out>.
DATA lr_row2 TYPE REF TO data.
CREATE DATA lr_row2 LIKE LINE OF <tab_out2>.
ASSIGN lr_row2->* TO <row3>.
<row3> = CORRESPONDING #( <row> ).
INSERT <row3> INTO TABLE <tab_out2>.
ENDLOOP.
<tab_out2> = <tab_out>.
ENDMETHOD.
@ -177,7 +189,7 @@ CLASS z2ui5_cl_popup_to_select IMPLEMENTATION.
DATA(lv_tabix) = sy-tabix.
ASSIGN ('<row>-ZZSELKZ') TO <field>.
IF <field> = abap_true.
mv_selected_index = lv_tabix.
ms_result-index = lv_tabix.
EXIT.
ENDIF.
ENDLOOP.
@ -192,22 +204,14 @@ CLASS z2ui5_cl_popup_to_select IMPLEMENTATION.
DATA(lt_arg) = client->get( )-t_event_arg.
READ TABLE lt_arg INTO DATA(ls_arg) INDEX 1.
FIELD-SYMBOLS <row> TYPE any.
FIELD-SYMBOLS <tab_out> TYPE STANDARD TABLE.
FIELD-SYMBOLS <tab_out_backup> TYPE STANDARD TABLE.
FIELD-SYMBOLS <row2> TYPE any.
FIELD-SYMBOLS <field2> TYPE any.
ASSIGN mr_tab_popup->* TO <tab_out>.
CLEAR <tab_out>.
ASSIGN mr_tab_popup_backup->* TO <tab_out_backup>.
LOOP AT <tab_out_backup> ASSIGNING <row>.
DATA lr_row TYPE REF TO data.
CREATE DATA lr_row LIKE LINE OF <tab_out>.
ASSIGN lr_row->* TO <row2>.
<row2> = CORRESPONDING #( <row> ).
INSERT <row2> INTO TABLE <tab_out>.
ENDLOOP.
<tab_out> = <tab_out_backup>.
DATA(lo_type) = cl_abap_structdescr=>describe_by_data( <tab_out> ).
DATA(lo_table) = CAST cl_abap_tabledescr( lo_type ).
@ -218,7 +222,7 @@ CLASS z2ui5_cl_popup_to_select IMPLEMENTATION.
LOOP AT lt_comp INTO DATA(ls_comp).
DATA(lv_assign) = '<ROW2>-' && ls_comp-name.
ASSIGN (lv_assign) TO <field2>.
IF <field2> CS ls_arg.
IF to_upper( <field2> ) CS to_upper( ls_arg ).
lv_check_continue = abap_true.
EXIT.
ENDIF.