Skip to content

Commit 0493188

Browse files
authored
Type Ref to Data Table with refresh (#195)
1 parent ba263f6 commit 0493188

3 files changed

+228
-0
lines changed

src/z2ui5_cl_demo_app_000.clas.abap

+9
Original file line numberDiff line numberDiff line change
@@ -874,6 +874,15 @@ CLASS Z2UI5_CL_DEMO_APP_000 IMPLEMENTATION.
874874
class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom'
875875
).
876876

877+
panel->generic_tile(
878+
header = 'Dynamic Objects VI'
879+
subheader = 'User Generic Struc Refs with refresh'
880+
press = client->_event( 'Z2UI5_CL_DEMO_APP_199' )
881+
mode = 'LineMode'
882+
class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom'
883+
).
884+
885+
877886
panel = page->panel(
878887
expandable = abap_false
879888
expanded = abap_true

src/z2ui5_cl_demo_app_199.clas.abap

+203
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,203 @@
1+
CLASS z2ui5_cl_demo_app_199 DEFINITION
2+
PUBLIC
3+
CREATE PUBLIC.
4+
5+
PUBLIC SECTION.
6+
INTERFACES z2ui5_if_app.
7+
8+
DATA mt_table TYPE REF TO data.
9+
10+
DATA mt_comp TYPE abap_component_tab.
11+
12+
PROTECTED SECTION.
13+
DATA client TYPE REF TO z2ui5_if_client.
14+
DATA check_initialized TYPE abap_bool.
15+
16+
METHODS on_init.
17+
METHODS on_event.
18+
19+
METHODS render_main.
20+
21+
PRIVATE SECTION.
22+
METHODS get_data.
23+
METHODS refresh.
24+
METHODS add_data.
25+
26+
METHODS get_comp
27+
RETURNING VALUE(result) TYPE abap_component_tab.
28+
ENDCLASS.
29+
30+
CLASS z2ui5_cl_demo_app_199 IMPLEMENTATION.
31+
32+
METHOD on_event.
33+
34+
CASE client->get( )-event.
35+
36+
WHEN 'BACK'.
37+
38+
client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ).
39+
40+
WHEN 'REFRESH'.
41+
42+
refresh( ).
43+
client->view_model_update( ).
44+
45+
WHEN 'ADD'.
46+
47+
add_data( ).
48+
client->view_model_update( ).
49+
50+
ENDCASE.
51+
ENDMETHOD.
52+
53+
METHOD on_init.
54+
get_data( ).
55+
render_main( ).
56+
ENDMETHOD.
57+
58+
METHOD render_main.
59+
60+
DATA(view) = z2ui5_cl_xml_view=>factory( ).
61+
62+
FIELD-SYMBOLS <tab> TYPE data.
63+
ASSIGN mt_table->* TO <tab>.
64+
65+
DATA(page) = view->page( id = `page_main`
66+
title = 'Refresh'
67+
navbuttonpress = client->_event( 'BACK' )
68+
shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL )
69+
class = 'sapUiContentPadding' ).
70+
71+
DATA(table) = page->table( growing = 'true'
72+
width = 'auto'
73+
items = client->_bind( <tab> )
74+
* headertext = mv_table
75+
).
76+
77+
DATA(columns) = table->columns( ).
78+
79+
LOOP AT mt_comp INTO DATA(comp).
80+
81+
IF comp-name = 'DATA'.
82+
CONTINUE.
83+
ENDIF.
84+
85+
columns->column( )->text( comp-name ).
86+
87+
ENDLOOP.
88+
89+
DATA(cells) = columns->get_parent( )->items(
90+
)->column_list_item( valign = 'Middle'
91+
type = 'Navigation'
92+
)->cells( ).
93+
94+
LOOP AT mt_comp INTO comp.
95+
96+
IF comp-name = 'DATA'.
97+
CONTINUE.
98+
ENDIF.
99+
100+
cells->object_identifier( text = '{' && comp-name && '}' ).
101+
ENDLOOP.
102+
103+
page->button( text = 'Refresh'
104+
press = client->_event( 'REFRESH' )
105+
)->button( text = 'Add'
106+
press = client->_event( 'ADD' ) ).
107+
108+
client->view_display( page->get_root( )->xml_get( ) ).
109+
110+
ENDMETHOD.
111+
112+
METHOD z2ui5_if_app~main.
113+
me->client = client.
114+
115+
IF check_initialized = abap_false.
116+
check_initialized = abap_true.
117+
118+
on_init( ).
119+
120+
ENDIF.
121+
122+
on_event( ).
123+
ENDMETHOD.
124+
125+
METHOD get_data.
126+
127+
FIELD-SYMBOLS <table> TYPE STANDARD TABLE.
128+
129+
mt_comp = get_comp( ).
130+
131+
TRY.
132+
133+
DATA(new_struct_desc) = cl_abap_structdescr=>create( mt_comp ).
134+
135+
DATA(new_table_desc) = cl_abap_tabledescr=>create( p_line_type = new_struct_desc
136+
p_table_kind = cl_abap_tabledescr=>tablekind_std ).
137+
138+
CREATE DATA mt_table TYPE HANDLE new_table_desc.
139+
140+
ASSIGN mt_table->* TO <table>.
141+
142+
SELECT * FROM z2ui5_t_01
143+
INTO CORRESPONDING FIELDS OF TABLE @<table>
144+
UP TO 2 ROWS.
145+
146+
CATCH cx_root.
147+
148+
ENDTRY.
149+
150+
ENDMETHOD.
151+
152+
METHOD get_comp.
153+
TRY.
154+
155+
DATA index TYPE int4.
156+
157+
TRY.
158+
159+
cl_abap_typedescr=>describe_by_name( EXPORTING p_name = 'Z2UI5_T_01'
160+
RECEIVING p_descr_ref = DATA(typedesc)
161+
EXCEPTIONS type_not_found = 1
162+
OTHERS = 2 ).
163+
164+
DATA(structdesc) = CAST cl_abap_structdescr( typedesc ).
165+
DATA(comp) = structdesc->get_components( ).
166+
167+
LOOP AT comp INTO DATA(com).
168+
IF com-as_include = abap_false.
169+
APPEND com TO result.
170+
ENDIF.
171+
ENDLOOP.
172+
173+
CATCH cx_root.
174+
175+
ENDTRY.
176+
177+
DATA(component) = VALUE cl_abap_structdescr=>component_table(
178+
( name = 'ROW_ID'
179+
type = CAST #( cl_abap_datadescr=>describe_by_data( index ) ) ) ).
180+
181+
APPEND LINES OF component TO result.
182+
183+
CATCH cx_root.
184+
ENDTRY.
185+
ENDMETHOD.
186+
187+
METHOD add_data.
188+
189+
FIELD-SYMBOLS <tab> TYPE STANDARD TABLE.
190+
191+
ASSIGN mt_table->* TO <tab>.
192+
193+
APPEND LINES OF <tab> TO <tab>.
194+
195+
ENDMETHOD.
196+
197+
METHOD refresh.
198+
199+
get_data( ).
200+
201+
ENDMETHOD.
202+
203+
ENDCLASS.

src/z2ui5_cl_demo_app_199.clas.xml

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
3+
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
4+
<asx:values>
5+
<VSEOCLASS>
6+
<CLSNAME>Z2UI5_CL_DEMO_APP_199</CLSNAME>
7+
<LANGU>E</LANGU>
8+
<DESCRIPT>Type Ref to Data Table with refresh</DESCRIPT>
9+
<STATE>1</STATE>
10+
<CLSCCINCL>X</CLSCCINCL>
11+
<FIXPT>X</FIXPT>
12+
<UNICODE>X</UNICODE>
13+
</VSEOCLASS>
14+
</asx:values>
15+
</asx:abap>
16+
</abapGit>

0 commit comments

Comments
 (0)