Skip to content

New RTTI Sample - Dynamic Ref´s with Data Binding #510

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 10 commits into from
Jun 26, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/z2ui5_cl_demo_app_000.clas.abap
Original file line number Diff line number Diff line change
Expand Up @@ -360,7 +360,7 @@ CLASS z2ui5_cl_demo_app_000 IMPLEMENTATION.
).

panel->generic_tile( header = 'Dynamic Objects IV'
subheader = 'User Generic Data Refs from Prev App'
subheader = 'User Generic Data Refs'
press = client->_event( 'ZZ2UI5_CL_DEMO_APP_328' )
mode = 'LineMode'
class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom'
Expand Down
98 changes: 76 additions & 22 deletions src/z2ui5_cl_demo_app_328.clas.abap
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,14 @@ CLASS z2ui5_cl_demo_app_328 DEFINITION PUBLIC.
PUBLIC SECTION.
INTERFACES z2ui5_if_app.

DATA mt_table TYPE STANDARD TABLE OF z2ui5_t_01.
DATA mt_table TYPE REF TO data.
DATA mt_comp TYPE cl_abap_structdescr=>component_table.
DATA mo_table_obj TYPE REF TO z2ui5_cl_demo_app_329.

DATA mo_table_obj TYPE REF TO z2ui5_cl_demo_app_330.

DATA client TYPE REF TO z2ui5_if_client.
DATA client TYPE REF TO z2ui5_if_client.

PROTECTED SECTION.
METHODS get_data.

PRIVATE SECTION.
METHODS ui5_view_display.
Expand All @@ -23,41 +24,94 @@ CLASS z2ui5_cl_demo_app_328 IMPLEMENTATION.
me->client = client.

IF client->check_on_init( ).
ui5_view_display( ).
ENDIF.

CASE client->get( )-event.
get_data( ).

WHEN 'BUTTON_POPUP'.
mo_table_obj = z2ui5_cl_demo_app_329=>factory( mt_table ).

SELECT * FROM z2ui5_t_01 INTO TABLE @mt_table UP TO 10 ROWS.
ui5_view_display( ).

mo_table_obj = z2ui5_cl_demo_app_330=>factory( REF #( mt_table ) ).
ENDIF.

client->nav_app_call( z2ui5_cl_demo_app_329=>factory( mo_table_obj ) ).
CASE client->get( )-event.

WHEN 'BACK'.
client->nav_app_leave( ).

WHEN 'SELECTION_CHANGE' OR 'GO'.

IF mt_table->* <> mo_table_obj->mr_data->*.
client->message_toast_display( 'Error - MT_TABLE <> MO_TABLE_OBJ->MR_TABLE_DATA' ).
ENDIF.

ENDCASE.

ENDMETHOD.

METHOD ui5_view_display.

DATA(lo_main) = z2ui5_cl_xml_view=>factory( )->shell( ).
DATA(page) = lo_main->page( title = 'abap2UI5 - Popups'
navbuttonpress = client->_event( val = 'BACK' )
shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) ).
DATA(page) = z2ui5_cl_xml_view=>factory( ).

page->button( text = 'GO'
press = client->_event( 'GO' )
type = 'Success' ).

DATA(table) = page->table( growing = 'true'
width = 'auto'
items = client->_bind( mt_table->* )
mode = 'MultiSelect'
selectionchange = client->_event( 'SELECTION_CHANGE' ) ).

DATA(columns) = table->columns( ).

LOOP AT mt_comp INTO DATA(comp) WHERE name CP `ID*`.

columns->column( )->text( comp-name ).

ENDLOOP.

DATA(cells) = columns->get_parent( )->items(
)->column_list_item( valign = 'Middle'
type = 'Navigation'
)->cells( ).

LOOP AT mt_comp INTO comp.
cells->object_identifier( text = |\{{ comp-name }\}| ).
ENDLOOP.

client->view_display( page ).

ENDMETHOD.

METHOD get_data.
DATA selkz TYPE abap_bool.

FIELD-SYMBOLS <table> TYPE STANDARD TABLE.

mt_comp = z2ui5_cl_util=>rtti_get_t_attri_by_table_name( 'Z2UI5_T_01' ).

APPEND LINES OF VALUE cl_abap_structdescr=>component_table(
( name = 'SELKZ'
type = CAST #( cl_abap_datadescr=>describe_by_data( selkz ) ) ) ) TO mt_comp.

TRY.

DATA(new_struct_desc) = cl_abap_structdescr=>create( mt_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 mt_table TYPE HANDLE new_table_desc.

ASSIGN mt_table->* TO <table>.

SELECT * FROM z2ui5_t_01
INTO CORRESPONDING FIELDS OF TABLE @<table>
UP TO 10 ROWS.

" TODO: variable is assigned but never used (ABAP cleaner)
DATA(grid) = page->grid( 'L7 M12 S12' )->content( 'layout'
)->simple_form( 'Popup in new App' )->content( 'form'
)->label( 'Demo'
)->button( text = 'popup with gernic Ref to prev. App'
press = client->_event( 'BUTTON_POPUP' ) ).
CATCH cx_root.

client->view_display( lo_main->stringify( ) ).
ENDTRY.

ENDMETHOD.

Expand Down
30 changes: 9 additions & 21 deletions src/z2ui5_cl_demo_app_329.clas.abap
Original file line number Diff line number Diff line change
@@ -1,44 +1,32 @@
CLASS z2ui5_cl_demo_app_329 DEFINITION PUBLIC.

PUBLIC SECTION.
INTERFACES z2ui5_if_app.

INTERFACES if_serializable_object.

DATA mr_data type ref to data.

CLASS-METHODS factory
IMPORTING
i_data TYPE REF TO z2ui5_cl_demo_app_330
i_data TYPE ref to data
RETURNING
VALUE(result) TYPE REF TO z2ui5_cl_demo_app_329.

DATA mo_data TYPE REF TO z2ui5_cl_demo_app_330.

PROTECTED SECTION.

PRIVATE SECTION.
ENDCLASS.


CLASS z2ui5_cl_demo_app_329 IMPLEMENTATION.

CLASS Z2UI5_CL_DEMO_APP_329 IMPLEMENTATION.

METHOD factory.

result = NEW #( ).

result->mo_data = i_data.

ENDMETHOD.

METHOD z2ui5_if_app~main.


IF mo_data->mr_table_data IS NOT INITIAL.
client->message_toast_display( 'Success - Ref works.' ).
client->nav_app_leave( ).
ELSE.

client->message_toast_display( 'Error - Ref not working' ).
client->nav_app_leave( ).
ENDIF.
result->mr_data = i_data.

ENDMETHOD.

ENDCLASS.

31 changes: 0 additions & 31 deletions src/z2ui5_cl_demo_app_330.clas.abap

This file was deleted.

16 changes: 0 additions & 16 deletions src/z2ui5_cl_demo_app_330.clas.xml

This file was deleted.

Loading