From 67acc64d642a39a09c1beaffd365bd8fe5951556 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 18 Jul 2026 11:37:43 +0000 Subject: [PATCH 01/49] Add beta samples for the formatter demo kit pack and binding_call Three new samples in framework - new (beta) (00/08), demoing the two framework additions on the same branch: - 453 Formatter - demo kit pack: one table using weightStateByValue, round2DP, dimensions, stockStatusState/-Icon and deliveryStatusState from the curated z2ui5/model/formatter module via core:require - 454 Binding Call - filter and sort via backend event: binding_call_by_id applies a declarative filter/sorter to the list's items binding after the response - the model stays untouched - 455 Binding Call - live filter without roundtrip: cs_event-binding_call wired via _event_client on liveChange, the query resolved client-side from the event - zero backend contact Overview catalog regenerated. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_018JnhapjtGyzgxzuzUoeeXW --- src/00/08/z2ui5_cl_demo_app_453.clas.abap | 111 +++++++++++++++++++++ src/00/08/z2ui5_cl_demo_app_453.clas.xml | 16 ++++ src/00/08/z2ui5_cl_demo_app_454.clas.abap | 112 ++++++++++++++++++++++ src/00/08/z2ui5_cl_demo_app_454.clas.xml | 16 ++++ src/00/08/z2ui5_cl_demo_app_455.clas.abap | 85 ++++++++++++++++ src/00/08/z2ui5_cl_demo_app_455.clas.xml | 16 ++++ src/00/z2ui5_cl_sample_app_000.clas.abap | 3 + 7 files changed, 359 insertions(+) create mode 100644 src/00/08/z2ui5_cl_demo_app_453.clas.abap create mode 100644 src/00/08/z2ui5_cl_demo_app_453.clas.xml create mode 100644 src/00/08/z2ui5_cl_demo_app_454.clas.abap create mode 100644 src/00/08/z2ui5_cl_demo_app_454.clas.xml create mode 100644 src/00/08/z2ui5_cl_demo_app_455.clas.abap create mode 100644 src/00/08/z2ui5_cl_demo_app_455.clas.xml diff --git a/src/00/08/z2ui5_cl_demo_app_453.clas.abap b/src/00/08/z2ui5_cl_demo_app_453.clas.abap new file mode 100644 index 00000000..b90bb51f --- /dev/null +++ b/src/00/08/z2ui5_cl_demo_app_453.clas.abap @@ -0,0 +1,111 @@ +CLASS z2ui5_cl_demo_app_453 DEFINITION PUBLIC. + + PUBLIC SECTION. + INTERFACES z2ui5_if_app. + + TYPES: + BEGIN OF ty_s_product, + name TYPE string, + weight TYPE string, + price TYPE string, + currency TYPE string, + width TYPE i, + depth TYPE i, + height TYPE i, + dim_unit TYPE string, + status TYPE string, + delivery TYPE string, + END OF ty_s_product. + DATA t_products TYPE STANDARD TABLE OF ty_s_product WITH EMPTY KEY. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + + METHODS view_display. + + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_demo_app_453 IMPLEMENTATION. + + METHOD z2ui5_if_app~main. + + me->client = client. + IF client->check_on_init( ). + t_products = VALUE #( + ( name = `Comfort Easy` weight = `650` price = `249.99` currency = `EUR` + width = 30 depth = 21 height = 3 dim_unit = `cm` + status = `Available` delivery = `Shipped` ) + ( name = `Notebook Basic 15` weight = `1500` price = `956` currency = `EUR` + width = 40 depth = 28 height = 0 dim_unit = `cm` + status = `Out of Stock` delivery = `Failed Shipping` ) + ( name = `Ergo Screen E-I` weight = `2100` price = `230.5` currency = `EUR` + width = 54 depth = 46 height = 8 dim_unit = `cm` + status = `Discontinued` delivery = `Pending` ) ). + view_display( ). + ENDIF. + + ENDMETHOD. + + + METHOD view_display. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + + " require the framework's curated formatter module into the view - the + " demo kit pack (weightStateByValue, stockStatusState/-Icon, round2DP, + " dimensions, deliveryStatusState) then works as plain formatters in the + " bindings, exactly like the demo kit samples wire their Formatter.js. + view->_generic_property( VALUE #( n = `core:require` + v = `{Formatter: 'z2ui5/model/formatter'}` ) ). + + DATA(page) = view->shell( + )->page( + title = `abap2UI5 - Formatter - demo kit pack` + navbuttonpress = client->_event_nav_app_leave( ) + shownavbutton = client->check_app_prev_stack( ) ). + + page->message_strip( + text = `Every column except Product is formatted client-side by a function of the ` && + `curated module z2ui5/model/formatter - the demo kit pack, wired via core:require.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + + DATA(tab) = page->table( id = `productTable` + items = client->_bind( t_products ) ). + + tab->columns( + )->column( )->text( `Product` )->get_parent( + )->column( )->text( `Weight (g)` )->get_parent( + )->column( )->text( `Price` )->get_parent( + )->column( )->text( `Dimensions` )->get_parent( + )->column( )->text( `Status` )->get_parent( + )->column( )->text( `Delivery` )->get_parent( ). + + tab->items( + )->column_list_item( + )->cells( + )->text( `{NAME}` + )->object_number( + number = `{WEIGHT}` + state = |\{ path: 'WEIGHT', formatter: 'Formatter.weightStateByValue' \}| + )->object_number( + number = |\{ path: 'PRICE', formatter: 'Formatter.round2DP' \}| + unit = `{CURRENCY}` + )->text( |\{ parts: [\{path: 'WIDTH'\}, \{path: 'DEPTH'\}, \{path: 'HEIGHT'\}, | && + |\{path: 'DIM_UNIT'\}], formatter: 'Formatter.dimensions' \}| + )->object_status( + text = `{STATUS}` + icon = |\{ path: 'STATUS', formatter: 'Formatter.stockStatusIcon' \}| + state = |\{ path: 'STATUS', formatter: 'Formatter.stockStatusState' \}| + )->object_status( + text = `{DELIVERY}` + state = |\{ path: 'DELIVERY', formatter: 'Formatter.deliveryStatusState' \}| ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + +ENDCLASS. diff --git a/src/00/08/z2ui5_cl_demo_app_453.clas.xml b/src/00/08/z2ui5_cl_demo_app_453.clas.xml new file mode 100644 index 00000000..d8542e9b --- /dev/null +++ b/src/00/08/z2ui5_cl_demo_app_453.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_DEMO_APP_453 + E + Formatter - demo kit pack + 1 + X + X + X + + + + diff --git a/src/00/08/z2ui5_cl_demo_app_454.clas.abap b/src/00/08/z2ui5_cl_demo_app_454.clas.abap new file mode 100644 index 00000000..11cf90a1 --- /dev/null +++ b/src/00/08/z2ui5_cl_demo_app_454.clas.abap @@ -0,0 +1,112 @@ +CLASS z2ui5_cl_demo_app_454 DEFINITION PUBLIC. + + PUBLIC SECTION. + INTERFACES z2ui5_if_app. + + TYPES: + BEGIN OF ty_s_product, + name TYPE string, + category TYPE string, + END OF ty_s_product. + DATA t_products TYPE STANDARD TABLE OF ty_s_product WITH EMPTY KEY. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + + METHODS view_display. + METHODS on_event. + + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_demo_app_454 IMPLEMENTATION. + + METHOD z2ui5_if_app~main. + + me->client = client. + IF client->check_on_init( ). + t_products = VALUE #( + ( name = `Notebook Basic 15` category = `Laptops` ) + ( name = `Notebook Basic 17` category = `Laptops` ) + ( name = `Ergo Screen E-I` category = `Screens` ) + ( name = `Flat Basic` category = `Screens` ) + ( name = `Comfort Easy` category = `PDAs` ) + ( name = `ITelO Vault` category = `PDAs` ) ). + view_display( ). + ELSE. + on_event( ). + ENDIF. + + ENDMETHOD. + + + METHOD on_event. + + CASE client->get( )-event. + + WHEN `SEARCH`. + " apply a declarative filter to the list's items binding - + " client-side after the response renders. The model data stays + " untouched (no table copy, no view_model_update); an empty query + " clears the filter again. + client->binding_call_by_id( id = `productList` + params = VALUE #( ( `NAME` ) + ( `Contains` ) + ( client->get_event_arg( ) ) ) ). + + WHEN `SORT_ASC` OR `SORT_DESC`. + client->binding_call_by_id( id = `productList` + method = `sort` + params = VALUE #( ( `NAME` ) + ( COND #( WHEN client->get( )-event = `SORT_DESC` + THEN `true` + ELSE `false` ) ) ) ). + + ENDCASE. + + ENDMETHOD. + + + METHOD view_display. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + + DATA(page) = view->shell( + )->page( + title = `abap2UI5 - Binding Call - filter and sort` + navbuttonpress = client->_event_nav_app_leave( ) + shownavbutton = client->check_app_prev_stack( ) ). + + page->message_strip( + text = `Search and sort are applied to the list's items BINDING via binding_call_by_id ` && + `- the UI5 controller pattern getBinding('items').filter(...). The model stays untouched.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + + page->vbox( `sapUiSmallMargin` + )->search_field( width = `30%` + search = client->_event( val = `SEARCH` + t_arg = VALUE #( ( `${$parameters>/query}` ) ) ) + )->hbox( class = `sapUiTinyMarginTop` + )->button( text = `Sort ascending` + icon = `sap-icon://sort-ascending` + press = client->_event( `SORT_ASC` ) + )->button( text = `Sort descending` + icon = `sap-icon://sort-descending` + press = client->_event( `SORT_DESC` ) + class = `sapUiTinyMarginBegin` ) ). + + page->list( id = `productList` + headertext = `Products` + items = client->_bind( t_products ) + class = `sapUiSmallMargin` + )->standard_list_item( title = `{NAME}` + info = `{CATEGORY}` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + +ENDCLASS. diff --git a/src/00/08/z2ui5_cl_demo_app_454.clas.xml b/src/00/08/z2ui5_cl_demo_app_454.clas.xml new file mode 100644 index 00000000..23c79f63 --- /dev/null +++ b/src/00/08/z2ui5_cl_demo_app_454.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_DEMO_APP_454 + E + Binding Call - filter and sort via backend event + 1 + X + X + X + + + + diff --git a/src/00/08/z2ui5_cl_demo_app_455.clas.abap b/src/00/08/z2ui5_cl_demo_app_455.clas.abap new file mode 100644 index 00000000..9cf324d2 --- /dev/null +++ b/src/00/08/z2ui5_cl_demo_app_455.clas.abap @@ -0,0 +1,85 @@ +CLASS z2ui5_cl_demo_app_455 DEFINITION PUBLIC. + + PUBLIC SECTION. + INTERFACES z2ui5_if_app. + + TYPES: + BEGIN OF ty_s_product, + name TYPE string, + category TYPE string, + END OF ty_s_product. + DATA t_products TYPE STANDARD TABLE OF ty_s_product WITH EMPTY KEY. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + + METHODS view_display. + + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_demo_app_455 IMPLEMENTATION. + + METHOD z2ui5_if_app~main. + + me->client = client. + IF client->check_on_init( ). + t_products = VALUE #( + ( name = `Notebook Basic 15` category = `Laptops` ) + ( name = `Notebook Basic 17` category = `Laptops` ) + ( name = `Ergo Screen E-I` category = `Screens` ) + ( name = `Flat Basic` category = `Screens` ) + ( name = `Comfort Easy` category = `PDAs` ) + ( name = `ITelO Vault` category = `PDAs` ) ). + view_display( ). + ENDIF. + + ENDMETHOD. + + + METHOD view_display. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + + DATA(page) = view->shell( + )->page( + title = `abap2UI5 - Binding Call - live filter, no roundtrip` + navbuttonpress = client->_event_nav_app_leave( ) + shownavbutton = client->check_app_prev_stack( ) ). + + page->message_strip( + text = `Every keystroke filters the list's items binding purely client-side ` && + `(cs_event-binding_call via _event_client) - no backend roundtrip, exactly like ` && + `the original UI5 controller's oBinding.filter(...). Clearing the field clears the filter.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + + " t_arg order: control id, aggregation, method, then the filter params + " path / operator / value - the ${...} argument is resolved client-side + " against the liveChange event, so the current query reaches the filter + " without any server contact. + page->vbox( `sapUiSmallMargin` + )->search_field( width = `30%` + livechange = client->_event_client( + val = z2ui5_if_client=>cs_event-binding_call + t_arg = VALUE #( ( `productList` ) + ( `items` ) + ( `filter` ) + ( `NAME` ) + ( `Contains` ) + ( `${$parameters>/newValue}` ) ) ) ). + + page->list( id = `productList` + headertext = `Products` + items = client->_bind( t_products ) + class = `sapUiSmallMargin` + )->standard_list_item( title = `{NAME}` + info = `{CATEGORY}` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + +ENDCLASS. diff --git a/src/00/08/z2ui5_cl_demo_app_455.clas.xml b/src/00/08/z2ui5_cl_demo_app_455.clas.xml new file mode 100644 index 00000000..e097aded --- /dev/null +++ b/src/00/08/z2ui5_cl_demo_app_455.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_DEMO_APP_455 + E + Binding Call - live filter without roundtrip + 1 + X + X + X + + + + diff --git a/src/00/z2ui5_cl_sample_app_000.clas.abap b/src/00/z2ui5_cl_sample_app_000.clas.abap index 287bb99b..3c6df430 100644 --- a/src/00/z2ui5_cl_sample_app_000.clas.abap +++ b/src/00/z2ui5_cl_sample_app_000.clas.abap @@ -302,9 +302,12 @@ CLASS z2ui5_cl_sample_app_000 IMPLEMENTATION. ( group = `experimental, TODO` header = `Tree Table II` sub = `` app = `z2ui5_cl_demo_app_069` ) ( group = `experimental, TODO` header = `Tree Table III` sub = `Checkbox Binding per Node` app = `z2ui5_cl_demo_app_364` ) ( group = `experimental, TODO` header = `ViewSettingsDialog` sub = `` app = `z2ui5_cl_demo_app_099` ) + ( group = `framework - new (beta)` header = `Binding Call` sub = `filter and sort via backend event` app = `z2ui5_cl_demo_app_454` ) + ( group = `framework - new (beta)` header = `Binding Call` sub = `live filter without roundtrip` app = `z2ui5_cl_demo_app_455` ) ( group = `framework - new (beta)` header = `Control Call` sub = `Panel setExpanded` app = `z2ui5_cl_demo_app_448` ) ( group = `framework - new (beta)` header = `Control Call` sub = `PDFViewer open` app = `z2ui5_cl_demo_app_449` ) ( group = `framework - new (beta)` header = `Custom Control` sub = `MultiInput Validator` app = `z2ui5_cl_demo_app_451` ) + ( group = `framework - new (beta)` header = `Formatter` sub = `demo kit pack` app = `z2ui5_cl_demo_app_453` ) ( group = `framework - new (beta)` header = `Formatter` sub = `weightState via core require` app = `z2ui5_cl_demo_app_450` ) ( group = `obsolete` header = `follow_up_action with JS` sub = `` app = `z2ui5_cl_demo_app_309_0` ) ( group = `obsolete` header = `landing page` sub = `` app = `z2ui5_cl_demo_app_000` ) From 94cd10b7be6ea4a46d4c07e11d99fee6f5ad9b17 Mon Sep 17 00:00:00 2001 From: oblomov Date: Sat, 18 Jul 2026 11:42:57 +0000 Subject: [PATCH 02/49] abaplint diffs --- src/00/08/z2ui5_cl_demo_app_448.clas.xml | 2 +- src/00/08/z2ui5_cl_demo_app_449.clas.xml | 2 +- src/00/08/z2ui5_cl_demo_app_450.clas.xml | 2 +- src/00/08/z2ui5_cl_demo_app_451.clas.xml | 2 +- src/00/08/z2ui5_cl_demo_app_453.clas.xml | 2 +- src/00/08/z2ui5_cl_demo_app_454.clas.xml | 2 +- src/00/08/z2ui5_cl_demo_app_455.clas.xml | 2 +- src/01/02/z2ui5_cl_demo_app_383.clas.xml | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/00/08/z2ui5_cl_demo_app_448.clas.xml b/src/00/08/z2ui5_cl_demo_app_448.clas.xml index e930d7a8..de0a95cf 100644 --- a/src/00/08/z2ui5_cl_demo_app_448.clas.xml +++ b/src/00/08/z2ui5_cl_demo_app_448.clas.xml @@ -1,4 +1,4 @@ - + diff --git a/src/00/08/z2ui5_cl_demo_app_449.clas.xml b/src/00/08/z2ui5_cl_demo_app_449.clas.xml index 638c9160..dfc889a1 100644 --- a/src/00/08/z2ui5_cl_demo_app_449.clas.xml +++ b/src/00/08/z2ui5_cl_demo_app_449.clas.xml @@ -1,4 +1,4 @@ - + diff --git a/src/00/08/z2ui5_cl_demo_app_450.clas.xml b/src/00/08/z2ui5_cl_demo_app_450.clas.xml index be77585c..0761bd84 100644 --- a/src/00/08/z2ui5_cl_demo_app_450.clas.xml +++ b/src/00/08/z2ui5_cl_demo_app_450.clas.xml @@ -1,4 +1,4 @@ - + diff --git a/src/00/08/z2ui5_cl_demo_app_451.clas.xml b/src/00/08/z2ui5_cl_demo_app_451.clas.xml index 43c3aa92..814c2482 100644 --- a/src/00/08/z2ui5_cl_demo_app_451.clas.xml +++ b/src/00/08/z2ui5_cl_demo_app_451.clas.xml @@ -1,4 +1,4 @@ - + diff --git a/src/00/08/z2ui5_cl_demo_app_453.clas.xml b/src/00/08/z2ui5_cl_demo_app_453.clas.xml index d8542e9b..263c25aa 100644 --- a/src/00/08/z2ui5_cl_demo_app_453.clas.xml +++ b/src/00/08/z2ui5_cl_demo_app_453.clas.xml @@ -1,4 +1,4 @@ - + diff --git a/src/00/08/z2ui5_cl_demo_app_454.clas.xml b/src/00/08/z2ui5_cl_demo_app_454.clas.xml index 23c79f63..affe49ab 100644 --- a/src/00/08/z2ui5_cl_demo_app_454.clas.xml +++ b/src/00/08/z2ui5_cl_demo_app_454.clas.xml @@ -1,4 +1,4 @@ - + diff --git a/src/00/08/z2ui5_cl_demo_app_455.clas.xml b/src/00/08/z2ui5_cl_demo_app_455.clas.xml index e097aded..89dd39bc 100644 --- a/src/00/08/z2ui5_cl_demo_app_455.clas.xml +++ b/src/00/08/z2ui5_cl_demo_app_455.clas.xml @@ -1,4 +1,4 @@ - + diff --git a/src/01/02/z2ui5_cl_demo_app_383.clas.xml b/src/01/02/z2ui5_cl_demo_app_383.clas.xml index d13b3c31..b892013b 100644 --- a/src/01/02/z2ui5_cl_demo_app_383.clas.xml +++ b/src/01/02/z2ui5_cl_demo_app_383.clas.xml @@ -1,4 +1,4 @@ - + From d5716c2f55dd8e231713cdfe2f77d3ef76dc1039 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 18 Jul 2026 12:12:20 +0000 Subject: [PATCH 03/49] Fix ObjectStatus nesting in 453, add PlanningCalendar Date sample 456 453 chained two object_status cells without get_parent( ) - the builder navigates into child-less controls too, so the second ObjectStatus nested inside the first and view creation failed with "Cannot add direct child without default aggregation" (live find). Fixed and the per-method navigation rule documented in AGENTS.md. 456 (framework - new (beta)): the object-typed calendar date properties (CalendarAppointment startDate/endDate, PlanningCalendar startDate) demand real JS Date objects - a plain string binding crashes view creation. The sample keeps plain ISO strings in the model and converts at the point of use via Formatter.DateCreateObject from the curated module, so no other binding of a timestamp field changes type. Both view structures verified headless against the OpenUI5 runtime (states, icons, round2DP, dimensions, appointments render; no errors). Overview catalog regenerated. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_018JnhapjtGyzgxzuzUoeeXW --- AGENTS.md | 11 +++ src/00/08/z2ui5_cl_demo_app_453.clas.abap | 2 +- src/00/08/z2ui5_cl_demo_app_456.clas.abap | 101 ++++++++++++++++++++++ src/00/08/z2ui5_cl_demo_app_456.clas.xml | 16 ++++ src/00/z2ui5_cl_sample_app_000.clas.abap | 1 + 5 files changed, 130 insertions(+), 1 deletion(-) create mode 100644 src/00/08/z2ui5_cl_demo_app_456.clas.abap create mode 100644 src/00/08/z2ui5_cl_demo_app_456.clas.xml diff --git a/AGENTS.md b/AGENTS.md index f5aaf658..9f027f7d 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -575,6 +575,17 @@ header_title->_generic( Key rules for `_generic( )`: - `_generic( name = ... ns = ... t_prop = ... )` adds one element and navigates **into** it; typed methods continue the chain below it. +- **Navigation is per-method, not uniform — check `result =` in + `z2ui5_cl_xml_view` before chaining siblings.** Methods returning + `result = me` stay on the current node (leaf controls like `text`, + `button`, `object_number`, `search_field`, `standard_list_item`, + `message_strip`) — siblings chain directly. Methods returning + `result = _generic( ... )` navigate INTO the new element (all containers + and aggregations, but also child-less controls like `object_status`) — + a following sibling needs `->get_parent( )` first, or it silently nests + inside and UI5 fails view creation with "Cannot add direct child + without default aggregation" (bit sample 453: two chained + `object_status` cells). - Attributes go into `t_prop = VALUE #( ( n = `...` v = `...` ) ... )`. - `ns` is registered on the view automatically — only pass namespaces that are actually used. diff --git a/src/00/08/z2ui5_cl_demo_app_453.clas.abap b/src/00/08/z2ui5_cl_demo_app_453.clas.abap index b90bb51f..4c618bac 100644 --- a/src/00/08/z2ui5_cl_demo_app_453.clas.abap +++ b/src/00/08/z2ui5_cl_demo_app_453.clas.abap @@ -99,7 +99,7 @@ CLASS z2ui5_cl_demo_app_453 IMPLEMENTATION. )->object_status( text = `{STATUS}` icon = |\{ path: 'STATUS', formatter: 'Formatter.stockStatusIcon' \}| - state = |\{ path: 'STATUS', formatter: 'Formatter.stockStatusState' \}| + state = |\{ path: 'STATUS', formatter: 'Formatter.stockStatusState' \}| )->get_parent( )->object_status( text = `{DELIVERY}` state = |\{ path: 'DELIVERY', formatter: 'Formatter.deliveryStatusState' \}| ). diff --git a/src/00/08/z2ui5_cl_demo_app_456.clas.abap b/src/00/08/z2ui5_cl_demo_app_456.clas.abap new file mode 100644 index 00000000..c57e49dc --- /dev/null +++ b/src/00/08/z2ui5_cl_demo_app_456.clas.abap @@ -0,0 +1,101 @@ +CLASS z2ui5_cl_demo_app_456 DEFINITION PUBLIC. + + PUBLIC SECTION. + INTERFACES z2ui5_if_app. + + TYPES: + BEGIN OF ty_s_appointment, + start_at TYPE string, + end_at TYPE string, + title TYPE string, + type TYPE string, + END OF ty_s_appointment, + ty_t_appointment TYPE STANDARD TABLE OF ty_s_appointment WITH EMPTY KEY, + BEGIN OF ty_s_person, + name TYPE string, + t_appointments TYPE ty_t_appointment, + END OF ty_s_person. + DATA t_people TYPE STANDARD TABLE OF ty_s_person WITH EMPTY KEY. + DATA start_date TYPE string. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + + METHODS view_display. + + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_demo_app_456 IMPLEMENTATION. + + METHOD z2ui5_if_app~main. + + me->client = client. + IF client->check_on_init( ). + start_date = `2026-07-20T07:00:00`. + t_people = VALUE #( + ( name = `Anna Miller` + t_appointments = VALUE #( + ( start_at = `2026-07-20T08:00:00` end_at = `2026-07-20T09:00:00` + title = `Team meeting` type = `Type01` ) + ( start_at = `2026-07-20T11:00:00` end_at = `2026-07-20T12:30:00` + title = `Customer call` type = `Type08` ) ) ) + ( name = `Tom Schmidt` + t_appointments = VALUE #( + ( start_at = `2026-07-20T09:30:00` end_at = `2026-07-20T10:30:00` + title = `Code review` type = `Type06` ) ) ) ). + view_display( ). + ENDIF. + + ENDMETHOD. + + + METHOD view_display. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + + " calendar date properties (CalendarAppointment startDate/endDate, + " PlanningCalendar startDate) are typed "object" - they demand a real JS + " Date; a plain string binding crashes view creation ("Date must be a + " JavaScript or UI5Date date object"). Formatter.DateCreateObject from + " the curated module converts the model's ISO strings at the point of + " use - the model itself stays plain strings everywhere. + view->_generic_property( VALUE #( n = `core:require` + v = `{Formatter: 'z2ui5/model/formatter'}` ) ). + + DATA(page) = view->shell( + )->page( + title = `abap2UI5 - Formatter - Date objects for the PlanningCalendar` + navbuttonpress = client->_event_nav_app_leave( ) + shownavbutton = client->check_app_prev_stack( ) ). + + page->message_strip( + text = `The model carries plain ISO strings; Formatter.DateCreateObject turns them into ` && + `the real JS Date objects the object-typed calendar properties require - only at ` && + `the bindings that need them.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + + page->planning_calendar( + id = `PC1` + class = `sapUiSmallMargin` + startdate = `{ path: '/START_DATE', formatter: 'Formatter.DateCreateObject' }` + rows = client->_bind( t_people ) + )->rows( + )->planning_calendar_row( + title = `{NAME}` + appointments = `{path: 'T_APPOINTMENTS', templateShareable: true}` + )->appointments( + )->calendar_appointment( + startdate = `{ path: 'START_AT', formatter: 'Formatter.DateCreateObject' }` + enddate = `{ path: 'END_AT', formatter: 'Formatter.DateCreateObject' }` + title = `{TITLE}` + type = `{TYPE}` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + +ENDCLASS. diff --git a/src/00/08/z2ui5_cl_demo_app_456.clas.xml b/src/00/08/z2ui5_cl_demo_app_456.clas.xml new file mode 100644 index 00000000..b5f02d78 --- /dev/null +++ b/src/00/08/z2ui5_cl_demo_app_456.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_DEMO_APP_456 + E + Formatter - Date objects for PlanningCalendar + 1 + X + X + X + + + + diff --git a/src/00/z2ui5_cl_sample_app_000.clas.abap b/src/00/z2ui5_cl_sample_app_000.clas.abap index 3c6df430..d5576abb 100644 --- a/src/00/z2ui5_cl_sample_app_000.clas.abap +++ b/src/00/z2ui5_cl_sample_app_000.clas.abap @@ -307,6 +307,7 @@ CLASS z2ui5_cl_sample_app_000 IMPLEMENTATION. ( group = `framework - new (beta)` header = `Control Call` sub = `Panel setExpanded` app = `z2ui5_cl_demo_app_448` ) ( group = `framework - new (beta)` header = `Control Call` sub = `PDFViewer open` app = `z2ui5_cl_demo_app_449` ) ( group = `framework - new (beta)` header = `Custom Control` sub = `MultiInput Validator` app = `z2ui5_cl_demo_app_451` ) + ( group = `framework - new (beta)` header = `Formatter` sub = `Date objects for PlanningCalendar` app = `z2ui5_cl_demo_app_456` ) ( group = `framework - new (beta)` header = `Formatter` sub = `demo kit pack` app = `z2ui5_cl_demo_app_453` ) ( group = `framework - new (beta)` header = `Formatter` sub = `weightState via core require` app = `z2ui5_cl_demo_app_450` ) ( group = `obsolete` header = `follow_up_action with JS` sub = `` app = `z2ui5_cl_demo_app_309_0` ) From e45a74f875dd45de176be1aa891ec48d9c7fe6cc Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 18 Jul 2026 12:27:48 +0000 Subject: [PATCH 04/49] Add minimal date-object sample 457 (DatePicker dateValue) The smallest possible demo of the object-typed date property pattern: one DatePicker whose dateValue converts the model's ISO string via Formatter.DateCreateObject, one Text proving the model itself stays a plain string. Companion to the full PlanningCalendar sample 456. Verified headless (real Date on the control, field renders the long format, model string unchanged). Overview catalog regenerated. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_018JnhapjtGyzgxzuzUoeeXW --- src/00/08/z2ui5_cl_demo_app_457.clas.abap | 66 +++++++++++++++++++++++ src/00/08/z2ui5_cl_demo_app_457.clas.xml | 16 ++++++ src/00/z2ui5_cl_sample_app_000.clas.abap | 1 + 3 files changed, 83 insertions(+) create mode 100644 src/00/08/z2ui5_cl_demo_app_457.clas.abap create mode 100644 src/00/08/z2ui5_cl_demo_app_457.clas.xml diff --git a/src/00/08/z2ui5_cl_demo_app_457.clas.abap b/src/00/08/z2ui5_cl_demo_app_457.clas.abap new file mode 100644 index 00000000..1803d4ca --- /dev/null +++ b/src/00/08/z2ui5_cl_demo_app_457.clas.abap @@ -0,0 +1,66 @@ +CLASS z2ui5_cl_demo_app_457 DEFINITION PUBLIC. + + PUBLIC SECTION. + INTERFACES z2ui5_if_app. + + DATA date_iso TYPE string. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + + METHODS view_display. + + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_demo_app_457 IMPLEMENTATION. + + METHOD z2ui5_if_app~main. + + me->client = client. + IF client->check_on_init( ). + date_iso = `2026-07-20`. + view_display( ). + ENDIF. + + ENDMETHOD. + + + METHOD view_display. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + + " the minimal date-object case: DatePicker.dateValue is typed "object" + " and demands a real JS Date - a plain string binding crashes view + " creation. Formatter.DateCreateObject converts the model's ISO string + " at this one binding; the model itself keeps the plain string (the + " Text below proves it). + view->_generic_property( VALUE #( n = `core:require` + v = `{Formatter: 'z2ui5/model/formatter'}` ) ). + + DATA(page) = view->shell( + )->page( + title = `abap2UI5 - Formatter - Date object minimal` + navbuttonpress = client->_event_nav_app_leave( ) + shownavbutton = client->check_app_prev_stack( ) ). + + page->message_strip( + text = `dateValue is an object-typed property: the ISO string from the model becomes a ` && + `real JS Date via Formatter.DateCreateObject - only at this binding, the model ` && + `stays a plain string.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + + page->vbox( `sapUiSmallMargin` + )->date_picker( displayformat = `long` + datevalue = `{ path: '/DATE_ISO', formatter: 'Formatter.DateCreateObject' }` + )->text( text = `Model value (unchanged string): {/DATE_ISO}` + class = `sapUiTinyMarginTop` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + +ENDCLASS. diff --git a/src/00/08/z2ui5_cl_demo_app_457.clas.xml b/src/00/08/z2ui5_cl_demo_app_457.clas.xml new file mode 100644 index 00000000..9e086c73 --- /dev/null +++ b/src/00/08/z2ui5_cl_demo_app_457.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_DEMO_APP_457 + E + Formatter - Date object minimal (DatePicker) + 1 + X + X + X + + + + diff --git a/src/00/z2ui5_cl_sample_app_000.clas.abap b/src/00/z2ui5_cl_sample_app_000.clas.abap index d5576abb..11f4c65b 100644 --- a/src/00/z2ui5_cl_sample_app_000.clas.abap +++ b/src/00/z2ui5_cl_sample_app_000.clas.abap @@ -307,6 +307,7 @@ CLASS z2ui5_cl_sample_app_000 IMPLEMENTATION. ( group = `framework - new (beta)` header = `Control Call` sub = `Panel setExpanded` app = `z2ui5_cl_demo_app_448` ) ( group = `framework - new (beta)` header = `Control Call` sub = `PDFViewer open` app = `z2ui5_cl_demo_app_449` ) ( group = `framework - new (beta)` header = `Custom Control` sub = `MultiInput Validator` app = `z2ui5_cl_demo_app_451` ) + ( group = `framework - new (beta)` header = `Formatter` sub = `Date object minimal (DatePicker)` app = `z2ui5_cl_demo_app_457` ) ( group = `framework - new (beta)` header = `Formatter` sub = `Date objects for PlanningCalendar` app = `z2ui5_cl_demo_app_456` ) ( group = `framework - new (beta)` header = `Formatter` sub = `demo kit pack` app = `z2ui5_cl_demo_app_453` ) ( group = `framework - new (beta)` header = `Formatter` sub = `weightState via core require` app = `z2ui5_cl_demo_app_450` ) From 33dfaa05368b7947fb0ebcaefb798ba27638cb65 Mon Sep 17 00:00:00 2001 From: oblomov Date: Sat, 18 Jul 2026 12:38:37 +0000 Subject: [PATCH 05/49] fix --- src/00/08/z2ui5_cl_demo_app_456.clas.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/00/08/z2ui5_cl_demo_app_456.clas.xml b/src/00/08/z2ui5_cl_demo_app_456.clas.xml index b5f02d78..a4f0240a 100644 --- a/src/00/08/z2ui5_cl_demo_app_456.clas.xml +++ b/src/00/08/z2ui5_cl_demo_app_456.clas.xml @@ -1,4 +1,4 @@ - + From 134903f3e8f62c5457b512a2616e01dae2cf6cfc Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 18 Jul 2026 12:48:03 +0000 Subject: [PATCH 06/49] Add beta sample 458: automatic validation via the message> model An Integer-typed two-way binding plus a list bound to {message>/} - the new framework wiring collects failed control validations automatically (valueState included) and clears them on valid input; the sample has no event handling at all. Overview catalog regenerated. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_018JnhapjtGyzgxzuzUoeeXW --- src/00/08/z2ui5_cl_demo_app_458.clas.abap | 68 +++++++++++++++++++++++ src/00/08/z2ui5_cl_demo_app_458.clas.xml | 16 ++++++ src/00/z2ui5_cl_sample_app_000.clas.abap | 1 + 3 files changed, 85 insertions(+) create mode 100644 src/00/08/z2ui5_cl_demo_app_458.clas.abap create mode 100644 src/00/08/z2ui5_cl_demo_app_458.clas.xml diff --git a/src/00/08/z2ui5_cl_demo_app_458.clas.abap b/src/00/08/z2ui5_cl_demo_app_458.clas.abap new file mode 100644 index 00000000..7b9a5c51 --- /dev/null +++ b/src/00/08/z2ui5_cl_demo_app_458.clas.abap @@ -0,0 +1,68 @@ +CLASS z2ui5_cl_demo_app_458 DEFINITION PUBLIC. + + PUBLIC SECTION. + INTERFACES z2ui5_if_app. + + DATA amount TYPE i. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + + METHODS view_display. + + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_demo_app_458 IMPLEMENTATION. + + METHOD z2ui5_if_app~main. + + me->client = client. + IF client->check_on_init( ). + amount = 42. + view_display( ). + ENDIF. + + ENDMETHOD. + + + METHOD view_display. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + + DATA(page) = view->shell( + )->page( + title = `abap2UI5 - Message Model - automatic validation` + navbuttonpress = client->_event_nav_app_leave( ) + shownavbutton = client->check_app_prev_stack( ) ). + + page->message_strip( + text = `Type letters into the amount field and press Enter: the failed Integer ` && + `validation is collected AUTOMATICALLY into the message> model (no app code, ` && + `no roundtrip), renders in the list below and sets the field's valueState. ` && + `A valid number clears it again.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + + " the Integer type on the two-way binding is what triggers the client- + " side validation; the framework's message> model catches its errors + page->vbox( `sapUiSmallMargin` + )->label( `Amount (integer only)` + )->input( width = `12rem` + value = |\{ path: '{ client->_bind_edit( val = amount path = abap_true ) }', | && + |type: 'sap.ui.model.type.Integer' \}| ). + + page->list( headertext = `Validation messages ({message>/})` + items = `{message>/}` + nodatatext = `no validation errors` + class = `sapUiSmallMargin` + )->standard_list_item( title = `{message>message}` + info = `{message>type}` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + +ENDCLASS. diff --git a/src/00/08/z2ui5_cl_demo_app_458.clas.xml b/src/00/08/z2ui5_cl_demo_app_458.clas.xml new file mode 100644 index 00000000..0cc9acc9 --- /dev/null +++ b/src/00/08/z2ui5_cl_demo_app_458.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_DEMO_APP_458 + E + Message Model - automatic validation + 1 + X + X + X + + + + diff --git a/src/00/z2ui5_cl_sample_app_000.clas.abap b/src/00/z2ui5_cl_sample_app_000.clas.abap index 11f4c65b..70953df3 100644 --- a/src/00/z2ui5_cl_sample_app_000.clas.abap +++ b/src/00/z2ui5_cl_sample_app_000.clas.abap @@ -311,6 +311,7 @@ CLASS z2ui5_cl_sample_app_000 IMPLEMENTATION. ( group = `framework - new (beta)` header = `Formatter` sub = `Date objects for PlanningCalendar` app = `z2ui5_cl_demo_app_456` ) ( group = `framework - new (beta)` header = `Formatter` sub = `demo kit pack` app = `z2ui5_cl_demo_app_453` ) ( group = `framework - new (beta)` header = `Formatter` sub = `weightState via core require` app = `z2ui5_cl_demo_app_450` ) + ( group = `framework - new (beta)` header = `Message Model` sub = `automatic validation` app = `z2ui5_cl_demo_app_458` ) ( group = `obsolete` header = `follow_up_action with JS` sub = `` app = `z2ui5_cl_demo_app_309_0` ) ( group = `obsolete` header = `landing page` sub = `` app = `z2ui5_cl_demo_app_000` ) ( group = `obsolete` header = `obsolete` sub = `custom control UploadSet` app = `z2ui5_cl_demo_app_354` ) From 95c40d30418b7c305a27e01d4cd66e3444a8e0fd Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 18 Jul 2026 12:52:27 +0000 Subject: [PATCH 07/49] Add sample 459: Table drag-and-drop reorder via resolved event args framework - action (01/02): a sap.m.Table with a dnd:DragDropInfo (dropPosition Between); the drop event ships dragged/drop index and position through client-side resolved $-args (the shipped app-307 pattern), ABAP reorders the table and view_model_update refreshes the list - no new framework feature needed. The DragDropInfo goes through _generic because the typed builder method lacks dropPosition. View structure verified headless (DragDropInfo attached, rows render). Also documents the clas.xml UTF-8 BOM convention in AGENTS.md (two human BOM fixes today). Overview catalog regenerated. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_018JnhapjtGyzgxzuzUoeeXW --- AGENTS.md | 4 + src/01/02/z2ui5_cl_demo_app_459.clas.abap | 128 ++++++++++++++++++++++ src/01/02/z2ui5_cl_demo_app_459.clas.xml | 16 +++ src/01/z2ui5_cl_sample_app_001.clas.abap | 1 + 4 files changed, 149 insertions(+) create mode 100644 src/01/02/z2ui5_cl_demo_app_459.clas.abap create mode 100644 src/01/02/z2ui5_cl_demo_app_459.clas.xml diff --git a/AGENTS.md b/AGENTS.md index 9f027f7d..40098190 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -302,6 +302,10 @@ All serialized files (`.abap`, `.xml`, and any other abapGit-managed file types) must conform to the abapGit file format: - **Encoding**: UTF-8 (with optional BOM: `xEF BB BF`) - **Line endings**: LF (`x0A`) only — never CRLF +- **abapGit `*.clas.xml` sidecars start with the UTF-8 BOM** (`EF BB BF` before + `client = client. + IF client->check_on_init( ). + t_products = VALUE #( + ( name = `Notebook Basic 15` category = `Laptops` ) + ( name = `Notebook Basic 17` category = `Laptops` ) + ( name = `Ergo Screen E-I` category = `Screens` ) + ( name = `Flat Basic` category = `Screens` ) + ( name = `Comfort Easy` category = `PDAs` ) + ( name = `ITelO Vault` category = `PDAs` ) ). + view_display( ). + ELSE. + on_event( ). + ENDIF. + + ENDMETHOD. + + + METHOD on_event. + + CASE client->get( )-event. + + WHEN `REORDER`. + " the three event args arrive resolved client-side from the drop + " event: dragged row index, drop target index (both 0-based) and + " the drop position (Before/After) + TRY. + DATA(lv_from) = CONV i( client->get_event_arg( ) ) + 1. + DATA(lv_to) = CONV i( client->get_event_arg( 2 ) ) + 1. + DATA(lv_pos) = client->get_event_arg( 3 ). + DATA(ls_row) = t_products[ lv_from ]. + CATCH cx_root. + RETURN. + ENDTRY. + DELETE t_products INDEX lv_from. + IF lv_from < lv_to. + lv_to = lv_to - 1. + ENDIF. + IF lv_pos = `Before`. + INSERT ls_row INTO t_products INDEX lv_to. + ELSE. + INSERT ls_row INTO t_products INDEX lv_to + 1. + ENDIF. + client->view_model_update( ). + + ENDCASE. + + ENDMETHOD. + + + METHOD view_display. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + + DATA(page) = view->shell( + )->page( + title = `abap2UI5 - Drag and Drop - Table reorder` + navbuttonpress = client->_event_nav_app_leave( ) + shownavbutton = client->check_app_prev_stack( ) ). + + page->message_strip( + text = `Drag a row and drop it between two others: the dnd:DragDropInfo drop event ` && + `sends the dragged/drop indexes and the drop position to the backend, ABAP ` && + `reorders the table, view_model_update refreshes the list.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + + DATA(tab) = page->table( id = `reorderTable` + items = client->_bind_edit( t_products ) ). + + " dragDropConfig is a plain sap.m aggregation here (ns = ``); the + " DragDropInfo goes through _generic because the typed builder method + " has no dropPosition parameter + tab->drag_drop_config( ns = `` + )->_generic( + name = `DragDropInfo` + ns = `dnd` + t_prop = VALUE #( ( n = `sourceAggregation` v = `items` ) + ( n = `targetAggregation` v = `items` ) + ( n = `dropPosition` v = `Between` ) + ( n = `drop` v = client->_event( + val = `REORDER` + t_arg = VALUE #( + ( `${$parameters>/draggedControl/oParent}.indexOfItem(${$parameters>/draggedControl})` ) + ( `${$parameters>/droppedControl/oParent}.indexOfItem(${$parameters>/droppedControl})` ) + ( `${$parameters>/dropPosition}` ) ) ) ) ) ). + + tab->columns( + )->column( )->text( `Product` )->get_parent( + )->column( )->text( `Category` )->get_parent( ). + + tab->items( + )->column_list_item( + )->cells( + )->text( `{NAME}` + )->text( `{CATEGORY}` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + +ENDCLASS. diff --git a/src/01/02/z2ui5_cl_demo_app_459.clas.xml b/src/01/02/z2ui5_cl_demo_app_459.clas.xml new file mode 100644 index 00000000..7493b36f --- /dev/null +++ b/src/01/02/z2ui5_cl_demo_app_459.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_DEMO_APP_459 + E + Drag and Drop - Table reorder via event args + 1 + X + X + X + + + + diff --git a/src/01/z2ui5_cl_sample_app_001.clas.abap b/src/01/z2ui5_cl_sample_app_001.clas.abap index af137001..8a38df72 100644 --- a/src/01/z2ui5_cl_sample_app_001.clas.abap +++ b/src/01/z2ui5_cl_sample_app_001.clas.abap @@ -244,6 +244,7 @@ CLASS z2ui5_cl_sample_app_001 IMPLEMENTATION. ( group = `framework - action` header = `Action` sub = `control_call_by_id` app = `z2ui5_cl_demo_app_447` ) ( group = `framework - action` header = `Browser` sub = `Logout` app = `z2ui5_cl_demo_app_361` ) ( group = `framework - action` header = `Browser` sub = `Title` app = `z2ui5_cl_demo_app_125` ) + ( group = `framework - action` header = `Drag and Drop` sub = `Table reorder via event args` app = `z2ui5_cl_demo_app_459` ) ( group = `framework - action` header = `Focus I` sub = `Set Focus in Textfield` app = `z2ui5_cl_demo_app_133` ) ( group = `framework - action` header = `Focus II` sub = `Jump with the focus` app = `z2ui5_cl_demo_app_189` ) ( group = `framework - action` header = `Image Editor` sub = `Edit in Popup and return PNG` app = `z2ui5_cl_demo_app_383` ) From 4c39ec23dba53f540bc40565398f390dcb3abf6f Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 18 Jul 2026 12:52:57 +0000 Subject: [PATCH 08/49] Fix abaplint omit_parameter_name in sample 459 Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_018JnhapjtGyzgxzuzUoeeXW --- src/01/02/z2ui5_cl_demo_app_459.clas.abap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/01/02/z2ui5_cl_demo_app_459.clas.abap b/src/01/02/z2ui5_cl_demo_app_459.clas.abap index 3921a3bf..3d634c00 100644 --- a/src/01/02/z2ui5_cl_demo_app_459.clas.abap +++ b/src/01/02/z2ui5_cl_demo_app_459.clas.abap @@ -97,7 +97,7 @@ CLASS z2ui5_cl_demo_app_459 IMPLEMENTATION. " dragDropConfig is a plain sap.m aggregation here (ns = ``); the " DragDropInfo goes through _generic because the typed builder method " has no dropPosition parameter - tab->drag_drop_config( ns = `` + tab->drag_drop_config( `` )->_generic( name = `DragDropInfo` ns = `dnd` From 2c3cab102d23a8994210fb35d9b77a5817766b46 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 18 Jul 2026 13:13:01 +0000 Subject: [PATCH 09/49] Fix unbound binding paths in 456/457, use _bind_edit everywhere 456 (PlanningCalendar) and 457 (DatePicker) referenced hardcoded model paths that were never registered through a bind call - the frontend received no data for them, which surfaced as "Date must be a JavaScript or UI5Date date object" on the object-typed startDate (live find). The paths now come from client->_bind_edit( path = abap_true ) inline; 450, 453, 454 and 455 switched from one-way _bind to _bind_edit. Rule recorded in AGENTS.md: binding paths always come from a bind call, never hardcoded. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_018JnhapjtGyzgxzuzUoeeXW --- AGENTS.md | 10 ++++++++++ src/00/08/z2ui5_cl_demo_app_450.clas.abap | 2 +- src/00/08/z2ui5_cl_demo_app_453.clas.abap | 2 +- src/00/08/z2ui5_cl_demo_app_454.clas.abap | 2 +- src/00/08/z2ui5_cl_demo_app_455.clas.abap | 2 +- src/00/08/z2ui5_cl_demo_app_456.clas.abap | 8 ++++++-- src/00/08/z2ui5_cl_demo_app_457.clas.abap | 7 +++++-- 7 files changed, 25 insertions(+), 8 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 40098190..982912a4 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -576,6 +576,16 @@ header_title->_generic( )->link( text = `Home` ). ``` +**Binding paths always come from a bind call — never hardcode them.** Every +model value a view references must be registered through +`client->_bind_edit( )` (use `_bind_edit`, not the one-way `_bind`): a +hand-written path (`{/START_DATE}`, or `{ path: '/START_DATE', ... }` in a +raw binding-info string) is NOT part of the serialized model — the frontend +receives no data for it and typed/object properties crash on the missing +value (human find 2026-07-18 in samples 456/457). Compose raw binding-info +strings with the bare path from +`client->_bind_edit( val = x path = abap_true )`. + Key rules for `_generic( )`: - `_generic( name = ... ns = ... t_prop = ... )` adds one element and navigates **into** it; typed methods continue the chain below it. diff --git a/src/00/08/z2ui5_cl_demo_app_450.clas.abap b/src/00/08/z2ui5_cl_demo_app_450.clas.abap index cabdad96..7a5a3330 100644 --- a/src/00/08/z2ui5_cl_demo_app_450.clas.abap +++ b/src/00/08/z2ui5_cl_demo_app_450.clas.abap @@ -61,7 +61,7 @@ CLASS z2ui5_cl_demo_app_450 IMPLEMENTATION. class = `sapUiSmallMargin` ). DATA(tab) = page->table( id = `productTable` - items = client->_bind( t_products ) ). + items = client->_bind_edit( t_products ) ). tab->columns( )->column( )->text( `Product` )->get_parent( diff --git a/src/00/08/z2ui5_cl_demo_app_453.clas.abap b/src/00/08/z2ui5_cl_demo_app_453.clas.abap index 4c618bac..7fedd6d0 100644 --- a/src/00/08/z2ui5_cl_demo_app_453.clas.abap +++ b/src/00/08/z2ui5_cl_demo_app_453.clas.abap @@ -74,7 +74,7 @@ CLASS z2ui5_cl_demo_app_453 IMPLEMENTATION. class = `sapUiSmallMargin` ). DATA(tab) = page->table( id = `productTable` - items = client->_bind( t_products ) ). + items = client->_bind_edit( t_products ) ). tab->columns( )->column( )->text( `Product` )->get_parent( diff --git a/src/00/08/z2ui5_cl_demo_app_454.clas.abap b/src/00/08/z2ui5_cl_demo_app_454.clas.abap index 11cf90a1..1fea1aa3 100644 --- a/src/00/08/z2ui5_cl_demo_app_454.clas.abap +++ b/src/00/08/z2ui5_cl_demo_app_454.clas.abap @@ -100,7 +100,7 @@ CLASS z2ui5_cl_demo_app_454 IMPLEMENTATION. page->list( id = `productList` headertext = `Products` - items = client->_bind( t_products ) + items = client->_bind_edit( t_products ) class = `sapUiSmallMargin` )->standard_list_item( title = `{NAME}` info = `{CATEGORY}` ). diff --git a/src/00/08/z2ui5_cl_demo_app_455.clas.abap b/src/00/08/z2ui5_cl_demo_app_455.clas.abap index 9cf324d2..29195f92 100644 --- a/src/00/08/z2ui5_cl_demo_app_455.clas.abap +++ b/src/00/08/z2ui5_cl_demo_app_455.clas.abap @@ -73,7 +73,7 @@ CLASS z2ui5_cl_demo_app_455 IMPLEMENTATION. page->list( id = `productList` headertext = `Products` - items = client->_bind( t_products ) + items = client->_bind_edit( t_products ) class = `sapUiSmallMargin` )->standard_list_item( title = `{NAME}` info = `{CATEGORY}` ). diff --git a/src/00/08/z2ui5_cl_demo_app_456.clas.abap b/src/00/08/z2ui5_cl_demo_app_456.clas.abap index c57e49dc..def16689 100644 --- a/src/00/08/z2ui5_cl_demo_app_456.clas.abap +++ b/src/00/08/z2ui5_cl_demo_app_456.clas.abap @@ -78,11 +78,15 @@ CLASS z2ui5_cl_demo_app_456 IMPLEMENTATION. showicon = abap_true class = `sapUiSmallMargin` ). + " the startDate path must come from _bind_edit - a hardcoded binding + " path is never registered in the model, the frontend then receives no + " data and the formatter passes a non-Date into the object property page->planning_calendar( id = `PC1` class = `sapUiSmallMargin` - startdate = `{ path: '/START_DATE', formatter: 'Formatter.DateCreateObject' }` - rows = client->_bind( t_people ) + startdate = |\{ path: '{ client->_bind_edit( val = start_date path = abap_true ) }', | && + |formatter: 'Formatter.DateCreateObject' \}| + rows = client->_bind_edit( t_people ) )->rows( )->planning_calendar_row( title = `{NAME}` diff --git a/src/00/08/z2ui5_cl_demo_app_457.clas.abap b/src/00/08/z2ui5_cl_demo_app_457.clas.abap index 1803d4ca..15f99780 100644 --- a/src/00/08/z2ui5_cl_demo_app_457.clas.abap +++ b/src/00/08/z2ui5_cl_demo_app_457.clas.abap @@ -53,10 +53,13 @@ CLASS z2ui5_cl_demo_app_457 IMPLEMENTATION. showicon = abap_true class = `sapUiSmallMargin` ). + " the path must come from _bind_edit - a hardcoded binding path is never + " registered in the model and the frontend receives no data for it page->vbox( `sapUiSmallMargin` )->date_picker( displayformat = `long` - datevalue = `{ path: '/DATE_ISO', formatter: 'Formatter.DateCreateObject' }` - )->text( text = `Model value (unchanged string): {/DATE_ISO}` + datevalue = |\{ path: '{ client->_bind_edit( val = date_iso path = abap_true ) }', | && + |formatter: 'Formatter.DateCreateObject' \}| + )->text( text = |Model value (unchanged string): { client->_bind_edit( date_iso ) }| class = `sapUiTinyMarginTop` ). client->view_display( view->stringify( ) ). From 26d6ec02d497629fe1f9ca089852d989ab7faa90 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 18 Jul 2026 13:16:02 +0000 Subject: [PATCH 10/49] Move sample 459 (Table DnD reorder) to framework - new (beta) No rename needed (FOLDER_LOGIC=PREFIX); both overview catalogs regenerated - the tile moved from sample_app_001 (framework - action) to sample_app_000 (framework - new (beta)). Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_018JnhapjtGyzgxzuzUoeeXW --- src/{01/02 => 00/08}/z2ui5_cl_demo_app_459.clas.abap | 0 src/{01/02 => 00/08}/z2ui5_cl_demo_app_459.clas.xml | 0 src/00/z2ui5_cl_sample_app_000.clas.abap | 1 + src/01/z2ui5_cl_sample_app_001.clas.abap | 1 - 4 files changed, 1 insertion(+), 1 deletion(-) rename src/{01/02 => 00/08}/z2ui5_cl_demo_app_459.clas.abap (100%) rename src/{01/02 => 00/08}/z2ui5_cl_demo_app_459.clas.xml (100%) diff --git a/src/01/02/z2ui5_cl_demo_app_459.clas.abap b/src/00/08/z2ui5_cl_demo_app_459.clas.abap similarity index 100% rename from src/01/02/z2ui5_cl_demo_app_459.clas.abap rename to src/00/08/z2ui5_cl_demo_app_459.clas.abap diff --git a/src/01/02/z2ui5_cl_demo_app_459.clas.xml b/src/00/08/z2ui5_cl_demo_app_459.clas.xml similarity index 100% rename from src/01/02/z2ui5_cl_demo_app_459.clas.xml rename to src/00/08/z2ui5_cl_demo_app_459.clas.xml diff --git a/src/00/z2ui5_cl_sample_app_000.clas.abap b/src/00/z2ui5_cl_sample_app_000.clas.abap index 70953df3..8e424c7d 100644 --- a/src/00/z2ui5_cl_sample_app_000.clas.abap +++ b/src/00/z2ui5_cl_sample_app_000.clas.abap @@ -307,6 +307,7 @@ CLASS z2ui5_cl_sample_app_000 IMPLEMENTATION. ( group = `framework - new (beta)` header = `Control Call` sub = `Panel setExpanded` app = `z2ui5_cl_demo_app_448` ) ( group = `framework - new (beta)` header = `Control Call` sub = `PDFViewer open` app = `z2ui5_cl_demo_app_449` ) ( group = `framework - new (beta)` header = `Custom Control` sub = `MultiInput Validator` app = `z2ui5_cl_demo_app_451` ) + ( group = `framework - new (beta)` header = `Drag and Drop` sub = `Table reorder via event args` app = `z2ui5_cl_demo_app_459` ) ( group = `framework - new (beta)` header = `Formatter` sub = `Date object minimal (DatePicker)` app = `z2ui5_cl_demo_app_457` ) ( group = `framework - new (beta)` header = `Formatter` sub = `Date objects for PlanningCalendar` app = `z2ui5_cl_demo_app_456` ) ( group = `framework - new (beta)` header = `Formatter` sub = `demo kit pack` app = `z2ui5_cl_demo_app_453` ) diff --git a/src/01/z2ui5_cl_sample_app_001.clas.abap b/src/01/z2ui5_cl_sample_app_001.clas.abap index 8a38df72..af137001 100644 --- a/src/01/z2ui5_cl_sample_app_001.clas.abap +++ b/src/01/z2ui5_cl_sample_app_001.clas.abap @@ -244,7 +244,6 @@ CLASS z2ui5_cl_sample_app_001 IMPLEMENTATION. ( group = `framework - action` header = `Action` sub = `control_call_by_id` app = `z2ui5_cl_demo_app_447` ) ( group = `framework - action` header = `Browser` sub = `Logout` app = `z2ui5_cl_demo_app_361` ) ( group = `framework - action` header = `Browser` sub = `Title` app = `z2ui5_cl_demo_app_125` ) - ( group = `framework - action` header = `Drag and Drop` sub = `Table reorder via event args` app = `z2ui5_cl_demo_app_459` ) ( group = `framework - action` header = `Focus I` sub = `Set Focus in Textfield` app = `z2ui5_cl_demo_app_133` ) ( group = `framework - action` header = `Focus II` sub = `Jump with the focus` app = `z2ui5_cl_demo_app_189` ) ( group = `framework - action` header = `Image Editor` sub = `Edit in Popup and return PNG` app = `z2ui5_cl_demo_app_383` ) From e7d2e1e33cf563eb36eb0c4f6bc5fea225eb0efb Mon Sep 17 00:00:00 2001 From: oblomov Date: Sat, 18 Jul 2026 13:26:19 +0000 Subject: [PATCH 11/49] fix --- src/00/08/z2ui5_cl_demo_app_454.clas.abap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/00/08/z2ui5_cl_demo_app_454.clas.abap b/src/00/08/z2ui5_cl_demo_app_454.clas.abap index 1fea1aa3..a6edd374 100644 --- a/src/00/08/z2ui5_cl_demo_app_454.clas.abap +++ b/src/00/08/z2ui5_cl_demo_app_454.clas.abap @@ -96,7 +96,7 @@ CLASS z2ui5_cl_demo_app_454 IMPLEMENTATION. )->button( text = `Sort descending` icon = `sap-icon://sort-descending` press = client->_event( `SORT_DESC` ) - class = `sapUiTinyMarginBegin` ) ). + class = `sapUiTinyMarginBegin` ). page->list( id = `productList` headertext = `Products` From 5c96279a04a38a95b3051621660544089995b0bf Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 18 Jul 2026 13:28:55 +0000 Subject: [PATCH 12/49] Add tree model samples 460-462 (plain, drag and drop, popup) framework - new (beta): three samples showing nested ABAP tables as sap.m.Tree models. - 460 Tree - nested model: three NODES levels serialize into nested JSON arrays and bind directly, no flattening - 461 Tree - drag and drop: DragDropInfo (dropPosition On) ships both binding context paths via client-side resolved $-args; ABAP moves the node between the nested tables and view_model_update refreshes - 462 Tree - inside a popup: the same nested table bound in a Dialog via factory_popup, closed client-side (cs_event-popup_close) Verified headless against the OpenUI5 runtime: three levels render and expand, the DnD config attaches, context paths arrive as /T_NODES/n/NODES/m - the exact format the 461 parser expects. Overview catalog regenerated. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_018JnhapjtGyzgxzuzUoeeXW --- src/00/08/z2ui5_cl_demo_app_460.clas.abap | 81 ++++++++++++++ src/00/08/z2ui5_cl_demo_app_460.clas.xml | 16 +++ src/00/08/z2ui5_cl_demo_app_461.clas.abap | 128 ++++++++++++++++++++++ src/00/08/z2ui5_cl_demo_app_461.clas.xml | 16 +++ src/00/08/z2ui5_cl_demo_app_462.clas.abap | 115 +++++++++++++++++++ src/00/08/z2ui5_cl_demo_app_462.clas.xml | 16 +++ src/00/z2ui5_cl_sample_app_000.clas.abap | 3 + 7 files changed, 375 insertions(+) create mode 100644 src/00/08/z2ui5_cl_demo_app_460.clas.abap create mode 100644 src/00/08/z2ui5_cl_demo_app_460.clas.xml create mode 100644 src/00/08/z2ui5_cl_demo_app_461.clas.abap create mode 100644 src/00/08/z2ui5_cl_demo_app_461.clas.xml create mode 100644 src/00/08/z2ui5_cl_demo_app_462.clas.abap create mode 100644 src/00/08/z2ui5_cl_demo_app_462.clas.xml diff --git a/src/00/08/z2ui5_cl_demo_app_460.clas.abap b/src/00/08/z2ui5_cl_demo_app_460.clas.abap new file mode 100644 index 00000000..b4b0824e --- /dev/null +++ b/src/00/08/z2ui5_cl_demo_app_460.clas.abap @@ -0,0 +1,81 @@ +CLASS z2ui5_cl_demo_app_460 DEFINITION PUBLIC. + + PUBLIC SECTION. + INTERFACES z2ui5_if_app. + + TYPES: + BEGIN OF ty_s_node_level3, + text TYPE string, + END OF ty_s_node_level3, + ty_t_node_level3 TYPE STANDARD TABLE OF ty_s_node_level3 WITH EMPTY KEY, + BEGIN OF ty_s_node_level2, + text TYPE string, + nodes TYPE ty_t_node_level3, + END OF ty_s_node_level2, + ty_t_node_level2 TYPE STANDARD TABLE OF ty_s_node_level2 WITH EMPTY KEY, + BEGIN OF ty_s_node_level1, + text TYPE string, + nodes TYPE ty_t_node_level2, + END OF ty_s_node_level1. + DATA t_nodes TYPE STANDARD TABLE OF ty_s_node_level1 WITH EMPTY KEY. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + + METHODS view_display. + + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_demo_app_460 IMPLEMENTATION. + + METHOD z2ui5_if_app~main. + + me->client = client. + IF client->check_on_init( ). + t_nodes = VALUE #( + ( text = `Documents` nodes = VALUE #( + ( text = `Projects` nodes = VALUE #( + ( text = `Roadmap.docx` ) + ( text = `Budget.xlsx` ) ) ) + ( text = `Reports` nodes = VALUE #( + ( text = `Q1.pdf` ) + ( text = `Q2.pdf` ) ) ) ) ) + ( text = `Pictures` nodes = VALUE #( + ( text = `Vacation` nodes = VALUE #( + ( text = `Beach.jpg` ) ) ) ) ) + ( text = `Music` ) ). + view_display( ). + ENDIF. + + ENDMETHOD. + + + METHOD view_display. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + + DATA(page) = view->shell( + )->page( + title = `abap2UI5 - Tree - nested model` + navbuttonpress = client->_event_nav_app_leave( ) + shownavbutton = client->check_app_prev_stack( ) ). + + page->message_strip( + text = `A nested ABAP table (three levels of NODES) serializes into nested JSON arrays; ` && + `sap.m.Tree binds them directly - no flattening, no extra code.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + + page->tree( id = `tree1` + headertext = `Files` + items = client->_bind_edit( t_nodes ) + )->standard_tree_item( title = `{TEXT}` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + +ENDCLASS. diff --git a/src/00/08/z2ui5_cl_demo_app_460.clas.xml b/src/00/08/z2ui5_cl_demo_app_460.clas.xml new file mode 100644 index 00000000..8cd03e0d --- /dev/null +++ b/src/00/08/z2ui5_cl_demo_app_460.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_DEMO_APP_460 + E + Tree - nested model + 1 + X + X + X + + + + diff --git a/src/00/08/z2ui5_cl_demo_app_461.clas.abap b/src/00/08/z2ui5_cl_demo_app_461.clas.abap new file mode 100644 index 00000000..733d310c --- /dev/null +++ b/src/00/08/z2ui5_cl_demo_app_461.clas.abap @@ -0,0 +1,128 @@ +CLASS z2ui5_cl_demo_app_461 DEFINITION PUBLIC. + + PUBLIC SECTION. + INTERFACES z2ui5_if_app. + + TYPES: + BEGIN OF ty_s_child, + text TYPE string, + END OF ty_s_child, + ty_t_child TYPE STANDARD TABLE OF ty_s_child WITH EMPTY KEY, + BEGIN OF ty_s_root, + text TYPE string, + nodes TYPE ty_t_child, + END OF ty_s_root. + DATA t_nodes TYPE STANDARD TABLE OF ty_s_root WITH EMPTY KEY. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + + METHODS view_display. + METHODS on_event. + + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_demo_app_461 IMPLEMENTATION. + + METHOD z2ui5_if_app~main. + + me->client = client. + IF client->check_on_init( ). + t_nodes = VALUE #( + ( text = `Inbox` nodes = VALUE #( + ( text = `Invoice.pdf` ) + ( text = `Contract.docx` ) ) ) + ( text = `Archive` nodes = VALUE #( + ( text = `Old_Report.pdf` ) ) ) + ( text = `Trash` ) ). + view_display( ). + ELSE. + on_event( ). + ENDIF. + + ENDMETHOD. + + + METHOD on_event. + + CASE client->get( )-event. + + WHEN `MOVE_NODE`. + " both event args arrive resolved client-side: the binding context + " paths of the dragged and the drop target item, e.g. + " /T_NODES/0/NODES/1 (a file) and /T_NODES/2 (a folder) + SPLIT client->get_event_arg( ) AT `/` INTO TABLE DATA(lt_drag). + SPLIT client->get_event_arg( 2 ) AT `/` INTO TABLE DATA(lt_drop). + IF lines( lt_drag ) <> 5 OR lines( lt_drop ) <> 3. + client->message_toast_display( `drop a file onto a folder` ). + RETURN. + ENDIF. + TRY. + DATA(lv_from_root) = CONV i( lt_drag[ 3 ] ) + 1. + DATA(lv_from_child) = CONV i( lt_drag[ 5 ] ) + 1. + DATA(lv_to_root) = CONV i( lt_drop[ 3 ] ) + 1. + DATA(ls_child) = t_nodes[ lv_from_root ]-nodes[ lv_from_child ]. + CATCH cx_root. + RETURN. + ENDTRY. + ASSIGN t_nodes[ lv_from_root ] TO FIELD-SYMBOL(). + IF sy-subrc <> 0. + RETURN. + ENDIF. + ASSIGN t_nodes[ lv_to_root ] TO FIELD-SYMBOL(). + IF sy-subrc <> 0. + RETURN. + ENDIF. + DELETE -nodes INDEX lv_from_child. + APPEND ls_child TO -nodes. + client->view_model_update( ). + + ENDCASE. + + ENDMETHOD. + + + METHOD view_display. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + + DATA(page) = view->shell( + )->page( + title = `abap2UI5 - Tree - drag and drop` + navbuttonpress = client->_event_nav_app_leave( ) + shownavbutton = client->check_app_prev_stack( ) ). + + page->message_strip( + text = `Drag a file onto another folder: the drop event ships the binding context ` && + `paths of both tree items, ABAP moves the node inside the nested table and ` && + `view_model_update refreshes the tree.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + + DATA(tree) = page->tree( id = `tree1` + headertext = `Folders` + items = client->_bind_edit( t_nodes ) ). + + tree->drag_drop_config( `` + )->_generic( + name = `DragDropInfo` + ns = `dnd` + t_prop = VALUE #( ( n = `sourceAggregation` v = `items` ) + ( n = `targetAggregation` v = `items` ) + ( n = `dropPosition` v = `On` ) + ( n = `drop` v = client->_event( + val = `MOVE_NODE` + t_arg = VALUE #( + ( `${$parameters>/draggedControl}.getBindingContext().getPath()` ) + ( `${$parameters>/droppedControl}.getBindingContext().getPath()` ) ) ) ) ) ). + + tree->standard_tree_item( title = `{TEXT}` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + +ENDCLASS. diff --git a/src/00/08/z2ui5_cl_demo_app_461.clas.xml b/src/00/08/z2ui5_cl_demo_app_461.clas.xml new file mode 100644 index 00000000..71ba15c4 --- /dev/null +++ b/src/00/08/z2ui5_cl_demo_app_461.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_DEMO_APP_461 + E + Tree - drag and drop between folders + 1 + X + X + X + + + + diff --git a/src/00/08/z2ui5_cl_demo_app_462.clas.abap b/src/00/08/z2ui5_cl_demo_app_462.clas.abap new file mode 100644 index 00000000..c9b41165 --- /dev/null +++ b/src/00/08/z2ui5_cl_demo_app_462.clas.abap @@ -0,0 +1,115 @@ +CLASS z2ui5_cl_demo_app_462 DEFINITION PUBLIC. + + PUBLIC SECTION. + INTERFACES z2ui5_if_app. + + TYPES: + BEGIN OF ty_s_node_level3, + text TYPE string, + END OF ty_s_node_level3, + ty_t_node_level3 TYPE STANDARD TABLE OF ty_s_node_level3 WITH EMPTY KEY, + BEGIN OF ty_s_node_level2, + text TYPE string, + nodes TYPE ty_t_node_level3, + END OF ty_s_node_level2, + ty_t_node_level2 TYPE STANDARD TABLE OF ty_s_node_level2 WITH EMPTY KEY, + BEGIN OF ty_s_node_level1, + text TYPE string, + nodes TYPE ty_t_node_level2, + END OF ty_s_node_level1. + DATA t_nodes TYPE STANDARD TABLE OF ty_s_node_level1 WITH EMPTY KEY. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + + METHODS view_display. + METHODS on_event. + METHODS popup_display. + + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_demo_app_462 IMPLEMENTATION. + + METHOD z2ui5_if_app~main. + + me->client = client. + IF client->check_on_init( ). + t_nodes = VALUE #( + ( text = `Sales` nodes = VALUE #( + ( text = `Orders` nodes = VALUE #( + ( text = `4711 - Notebook Basic` ) + ( text = `4712 - Ergo Screen` ) ) ) + ( text = `Quotations` nodes = VALUE #( + ( text = `Q-001 - ITelO Vault` ) ) ) ) ) + ( text = `Purchasing` nodes = VALUE #( + ( text = `Suppliers` nodes = VALUE #( + ( text = `Very Best Screens` ) ) ) ) ) ). + view_display( ). + ELSE. + on_event( ). + ENDIF. + + ENDMETHOD. + + + METHOD on_event. + + CASE client->get( )-event. + + WHEN `OPEN_POPUP`. + popup_display( ). + + ENDCASE. + + ENDMETHOD. + + + METHOD popup_display. + + DATA(popup) = z2ui5_cl_xml_view=>factory_popup( ). + DATA(dialog) = popup->dialog( `abap2UI5 - Tree in a dialog` ). + + " the popup view slot gets its own copy of the model - the nested table + " bound here renders in the dialog exactly like in a main view + dialog->tree( headertext = `Documents` + items = client->_bind_edit( t_nodes ) + )->standard_tree_item( title = `{TEXT}` ). + + dialog->buttons( + )->button( text = `Close` + press = client->_event_client( client->cs_event-popup_close ) ). + + client->popup_display( popup->stringify( ) ). + + ENDMETHOD. + + + METHOD view_display. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + + DATA(page) = view->shell( + )->page( + title = `abap2UI5 - Tree - inside a popup` + navbuttonpress = client->_event_nav_app_leave( ) + shownavbutton = client->check_app_prev_stack( ) ). + + page->message_strip( + text = `The button opens a Dialog whose content is a sap.m.Tree over the same nested ` && + `ABAP table - tree binding works in every view slot, popups included.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + + page->vbox( `sapUiSmallMargin` + )->button( text = `Open tree popup` + icon = `sap-icon://tree` + press = client->_event( `OPEN_POPUP` ) ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + +ENDCLASS. diff --git a/src/00/08/z2ui5_cl_demo_app_462.clas.xml b/src/00/08/z2ui5_cl_demo_app_462.clas.xml new file mode 100644 index 00000000..89bf0968 --- /dev/null +++ b/src/00/08/z2ui5_cl_demo_app_462.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_DEMO_APP_462 + E + Tree - inside a popup dialog + 1 + X + X + X + + + + diff --git a/src/00/z2ui5_cl_sample_app_000.clas.abap b/src/00/z2ui5_cl_sample_app_000.clas.abap index 8e424c7d..fc7eda5a 100644 --- a/src/00/z2ui5_cl_sample_app_000.clas.abap +++ b/src/00/z2ui5_cl_sample_app_000.clas.abap @@ -313,6 +313,9 @@ CLASS z2ui5_cl_sample_app_000 IMPLEMENTATION. ( group = `framework - new (beta)` header = `Formatter` sub = `demo kit pack` app = `z2ui5_cl_demo_app_453` ) ( group = `framework - new (beta)` header = `Formatter` sub = `weightState via core require` app = `z2ui5_cl_demo_app_450` ) ( group = `framework - new (beta)` header = `Message Model` sub = `automatic validation` app = `z2ui5_cl_demo_app_458` ) + ( group = `framework - new (beta)` header = `Tree` sub = `drag and drop between folders` app = `z2ui5_cl_demo_app_461` ) + ( group = `framework - new (beta)` header = `Tree` sub = `inside a popup dialog` app = `z2ui5_cl_demo_app_462` ) + ( group = `framework - new (beta)` header = `Tree` sub = `nested model` app = `z2ui5_cl_demo_app_460` ) ( group = `obsolete` header = `follow_up_action with JS` sub = `` app = `z2ui5_cl_demo_app_309_0` ) ( group = `obsolete` header = `landing page` sub = `` app = `z2ui5_cl_demo_app_000` ) ( group = `obsolete` header = `obsolete` sub = `custom control UploadSet` app = `z2ui5_cl_demo_app_354` ) From cd01cfa1fc4f91ea8cbc64d413979e9d2024d66b Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 18 Jul 2026 14:20:18 +0000 Subject: [PATCH 13/49] Move sample 383 to only non-openui5 or higher UI5 1.71 (00/02) Both overview catalogs regenerated - the tile moved from sample_app_001 to sample_app_000. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_018JnhapjtGyzgxzuzUoeeXW --- src/{01 => 00}/02/z2ui5_cl_demo_app_383.clas.abap | 0 src/{01 => 00}/02/z2ui5_cl_demo_app_383.clas.xml | 0 src/00/z2ui5_cl_sample_app_000.clas.abap | 1 + src/01/z2ui5_cl_sample_app_001.clas.abap | 1 - 4 files changed, 1 insertion(+), 1 deletion(-) rename src/{01 => 00}/02/z2ui5_cl_demo_app_383.clas.abap (100%) rename src/{01 => 00}/02/z2ui5_cl_demo_app_383.clas.xml (100%) diff --git a/src/01/02/z2ui5_cl_demo_app_383.clas.abap b/src/00/02/z2ui5_cl_demo_app_383.clas.abap similarity index 100% rename from src/01/02/z2ui5_cl_demo_app_383.clas.abap rename to src/00/02/z2ui5_cl_demo_app_383.clas.abap diff --git a/src/01/02/z2ui5_cl_demo_app_383.clas.xml b/src/00/02/z2ui5_cl_demo_app_383.clas.xml similarity index 100% rename from src/01/02/z2ui5_cl_demo_app_383.clas.xml rename to src/00/02/z2ui5_cl_demo_app_383.clas.xml diff --git a/src/00/z2ui5_cl_sample_app_000.clas.abap b/src/00/z2ui5_cl_sample_app_000.clas.abap index fc7eda5a..5ba68ed2 100644 --- a/src/00/z2ui5_cl_sample_app_000.clas.abap +++ b/src/00/z2ui5_cl_sample_app_000.clas.abap @@ -190,6 +190,7 @@ CLASS z2ui5_cl_sample_app_000 IMPLEMENTATION. ( group = `only non-openui5 or higher UI5 1.71` header = `control` sub = `Badge (since 1.80)` app = `z2ui5_cl_demo_app_063` ) ( group = `only non-openui5 or higher UI5 1.71` header = `Expandable Text (since 1.87)` sub = `` app = `z2ui5_cl_demo_app_301` ) ( group = `only non-openui5 or higher UI5 1.71` header = `Harvey Chart` sub = `` app = `z2ui5_cl_demo_app_308` ) + ( group = `only non-openui5 or higher UI5 1.71` header = `Image Editor` sub = `Edit in Popup and return PNG` app = `z2ui5_cl_demo_app_383` ) ( group = `only non-openui5 or higher UI5 1.71` header = `MapContainer` sub = `` app = `z2ui5_cl_demo_app_444` ) ( group = `only non-openui5 or higher UI5 1.71` header = `messages` sub = `illustrated (since 1.98)` app = `z2ui5_cl_demo_app_033` ) ( group = `only non-openui5 or higher UI5 1.71` header = `more` sub = `map container` app = `z2ui5_cl_demo_app_123` ) diff --git a/src/01/z2ui5_cl_sample_app_001.clas.abap b/src/01/z2ui5_cl_sample_app_001.clas.abap index af137001..fec0e1f1 100644 --- a/src/01/z2ui5_cl_sample_app_001.clas.abap +++ b/src/01/z2ui5_cl_sample_app_001.clas.abap @@ -246,7 +246,6 @@ CLASS z2ui5_cl_sample_app_001 IMPLEMENTATION. ( group = `framework - action` header = `Browser` sub = `Title` app = `z2ui5_cl_demo_app_125` ) ( group = `framework - action` header = `Focus I` sub = `Set Focus in Textfield` app = `z2ui5_cl_demo_app_133` ) ( group = `framework - action` header = `Focus II` sub = `Jump with the focus` app = `z2ui5_cl_demo_app_189` ) - ( group = `framework - action` header = `Image Editor` sub = `Edit in Popup and return PNG` app = `z2ui5_cl_demo_app_383` ) ( group = `framework - action` header = `Input` sub = `Clipboard` app = `z2ui5_cl_demo_app_325` ) ( group = `framework - action` header = `Input` sub = `Hide/show Soft Keyboard` app = `z2ui5_cl_demo_app_352` ) ( group = `framework - action` header = `Scroll I` sub = `Scroll to position` app = `z2ui5_cl_demo_app_362` ) From efcc6a3db3a451365c149c6ce0f688a5072abada Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 18 Jul 2026 14:21:56 +0000 Subject: [PATCH 14/49] Fix 461 node-move parser: context paths carry the /XX/ model prefix The binding context paths of two-way bound items arrive as /XX/T_NODES/0/NODES/1 (debugger find) - the parser expected them without the two-way model prefix and always hit the not-supported toast. It now parses from the END of the path and validates the segment names, so any prefix depth works. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_018JnhapjtGyzgxzuzUoeeXW --- src/00/08/z2ui5_cl_demo_app_461.clas.abap | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/00/08/z2ui5_cl_demo_app_461.clas.abap b/src/00/08/z2ui5_cl_demo_app_461.clas.abap index 733d310c..e0b016b5 100644 --- a/src/00/08/z2ui5_cl_demo_app_461.clas.abap +++ b/src/00/08/z2ui5_cl_demo_app_461.clas.abap @@ -51,18 +51,24 @@ CLASS z2ui5_cl_demo_app_461 IMPLEMENTATION. WHEN `MOVE_NODE`. " both event args arrive resolved client-side: the binding context - " paths of the dragged and the drop target item, e.g. - " /T_NODES/0/NODES/1 (a file) and /T_NODES/2 (a folder) + " paths of the dragged and the drop target item. The two-way model + " prefixes them with /XX/, e.g. /XX/T_NODES/0/NODES/1 (a file) and + " /XX/T_NODES/2 (a folder) - so parse from the END of the path SPLIT client->get_event_arg( ) AT `/` INTO TABLE DATA(lt_drag). SPLIT client->get_event_arg( 2 ) AT `/` INTO TABLE DATA(lt_drop). - IF lines( lt_drag ) <> 5 OR lines( lt_drop ) <> 3. + DATA(lv_drag_lines) = lines( lt_drag ). + DATA(lv_drop_lines) = lines( lt_drop ). + IF lv_drag_lines < 4 OR lv_drop_lines < 2 + OR VALUE #( lt_drag[ lv_drag_lines - 1 ] OPTIONAL ) <> `NODES` + OR VALUE #( lt_drag[ lv_drag_lines - 3 ] OPTIONAL ) <> `T_NODES` + OR VALUE #( lt_drop[ lv_drop_lines - 1 ] OPTIONAL ) <> `T_NODES`. client->message_toast_display( `drop a file onto a folder` ). RETURN. ENDIF. TRY. - DATA(lv_from_root) = CONV i( lt_drag[ 3 ] ) + 1. - DATA(lv_from_child) = CONV i( lt_drag[ 5 ] ) + 1. - DATA(lv_to_root) = CONV i( lt_drop[ 3 ] ) + 1. + DATA(lv_from_root) = CONV i( lt_drag[ lv_drag_lines - 2 ] ) + 1. + DATA(lv_from_child) = CONV i( lt_drag[ lv_drag_lines ] ) + 1. + DATA(lv_to_root) = CONV i( lt_drop[ lv_drop_lines ] ) + 1. DATA(ls_child) = t_nodes[ lv_from_root ]-nodes[ lv_from_child ]. CATCH cx_root. RETURN. From 212e75b3965570400e0315d8023c067e24cec1a8 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 18 Jul 2026 14:25:47 +0000 Subject: [PATCH 15/49] 462: preserve the tree expand state across popup open/close The dialog tree gets the invisible z2ui5.cc.Tree companion (tree_id), which snapshots the expand state before every roundtrip and re-applies it after rendering. Closing therefore goes through a backend event (popup_destroy) instead of the client-side popup_close - the snapshot runs while the dialog still exists. Reopening shows the same nodes expanded. Requires the cc Tree slot-resolution fix from the abap2UI5 branch (the companion previously only searched the MAIN slot). Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_018JnhapjtGyzgxzuzUoeeXW --- src/00/08/z2ui5_cl_demo_app_462.clas.abap | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/00/08/z2ui5_cl_demo_app_462.clas.abap b/src/00/08/z2ui5_cl_demo_app_462.clas.abap index c9b41165..beb567a9 100644 --- a/src/00/08/z2ui5_cl_demo_app_462.clas.abap +++ b/src/00/08/z2ui5_cl_demo_app_462.clas.abap @@ -61,6 +61,13 @@ CLASS z2ui5_cl_demo_app_462 IMPLEMENTATION. WHEN `OPEN_POPUP`. popup_display( ). + WHEN `CLOSE_POPUP`. + " closing goes through the backend ON PURPOSE: the z2ui5.cc.Tree + " companion snapshots the expand state right before every roundtrip, + " so this event captures it while the dialog still exists - a pure + " client-side popup_close would skip the snapshot + client->popup_destroy( ). + ENDCASE. ENDMETHOD. @@ -73,13 +80,19 @@ CLASS z2ui5_cl_demo_app_462 IMPLEMENTATION. " the popup view slot gets its own copy of the model - the nested table " bound here renders in the dialog exactly like in a main view - dialog->tree( headertext = `Documents` + dialog->tree( id = `treePopup` + headertext = `Documents` items = client->_bind_edit( t_nodes ) )->standard_tree_item( title = `{TEXT}` ). + " invisible companion: snapshots the tree's expand state before each + " roundtrip and re-applies it after rendering - reopening the dialog + " shows the same nodes expanded as when it was closed + dialog->_z2ui5( )->tree( `treePopup` ). + dialog->buttons( )->button( text = `Close` - press = client->_event_client( client->cs_event-popup_close ) ). + press = client->_event( `CLOSE_POPUP` ) ). client->popup_display( popup->stringify( ) ). @@ -97,8 +110,9 @@ CLASS z2ui5_cl_demo_app_462 IMPLEMENTATION. shownavbutton = client->check_app_prev_stack( ) ). page->message_strip( - text = `The button opens a Dialog whose content is a sap.m.Tree over the same nested ` && - `ABAP table - tree binding works in every view slot, popups included.` + text = `The button opens a Dialog whose content is a sap.m.Tree over a nested ABAP ` && + `table. Expand some nodes, close and reopen: the z2ui5.cc.Tree companion ` && + `preserves the expand state across the roundtrips.` type = `Information` showicon = abap_true class = `sapUiSmallMargin` ). From 7289719097535661b022146759f6e0224a3a970b Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 18 Jul 2026 14:27:49 +0000 Subject: [PATCH 16/49] 461: preserve the tree expand state across node moves Same z2ui5.cc.Tree companion as 462. The move event now answers with a full view rebuild instead of view_model_update - the companion re-applies the snapshotted expand state only when it renders, a pure model refresh would leave the rebuilt tree binding collapsed. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_018JnhapjtGyzgxzuzUoeeXW --- src/00/08/z2ui5_cl_demo_app_461.clas.abap | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/00/08/z2ui5_cl_demo_app_461.clas.abap b/src/00/08/z2ui5_cl_demo_app_461.clas.abap index e0b016b5..16741346 100644 --- a/src/00/08/z2ui5_cl_demo_app_461.clas.abap +++ b/src/00/08/z2ui5_cl_demo_app_461.clas.abap @@ -83,7 +83,11 @@ CLASS z2ui5_cl_demo_app_461 IMPLEMENTATION. ENDIF. DELETE -nodes INDEX lv_from_child. APPEND ls_child TO -nodes. - client->view_model_update( ). + " full view rebuild instead of view_model_update: the z2ui5.cc.Tree + " companion re-applies the expand state (snapshotted before this + " roundtrip) only when it renders - a pure model refresh would leave + " the rebuilt tree binding collapsed + view_display( ). ENDCASE. @@ -127,6 +131,10 @@ CLASS z2ui5_cl_demo_app_461 IMPLEMENTATION. tree->standard_tree_item( title = `{TEXT}` ). + " invisible companion: preserves the tree's expand state across the + " move roundtrips (snapshot before the request, re-apply after render) + page->_z2ui5( )->tree( `tree1` ). + client->view_display( view->stringify( ) ). ENDMETHOD. From 7be17321a99a887919affa86666752b1b214b583 Mon Sep 17 00:00:00 2001 From: oblomov Date: Sat, 18 Jul 2026 14:50:42 +0000 Subject: [PATCH 17/49] fix --- src/00/08/z2ui5_cl_demo_app_451.clas.abap | 80 ------------------- src/00/08/z2ui5_cl_demo_app_451.clas.xml | 16 ---- .../01}/z2ui5_cl_demo_app_458.clas.abap | 0 .../01}/z2ui5_cl_demo_app_458.clas.xml | 2 +- .../02}/z2ui5_cl_demo_app_450.clas.abap | 0 .../02}/z2ui5_cl_demo_app_450.clas.xml | 0 .../02}/z2ui5_cl_demo_app_453.clas.abap | 0 .../02}/z2ui5_cl_demo_app_453.clas.xml | 0 .../02}/z2ui5_cl_demo_app_454.clas.abap | 0 .../02}/z2ui5_cl_demo_app_454.clas.xml | 0 .../02}/z2ui5_cl_demo_app_455.clas.abap | 0 .../02}/z2ui5_cl_demo_app_455.clas.xml | 0 .../02}/z2ui5_cl_demo_app_456.clas.abap | 0 .../02}/z2ui5_cl_demo_app_456.clas.xml | 0 .../02}/z2ui5_cl_demo_app_457.clas.abap | 0 .../02}/z2ui5_cl_demo_app_457.clas.xml | 0 .../06}/z2ui5_cl_demo_app_448.clas.abap | 0 .../06}/z2ui5_cl_demo_app_448.clas.xml | 2 +- .../06}/z2ui5_cl_demo_app_449.clas.abap | 0 .../06}/z2ui5_cl_demo_app_449.clas.xml | 2 +- .../06}/z2ui5_cl_demo_app_459.clas.abap | 0 .../06}/z2ui5_cl_demo_app_459.clas.xml | 2 +- .../06}/z2ui5_cl_demo_app_460.clas.abap | 0 .../06}/z2ui5_cl_demo_app_460.clas.xml | 2 +- .../06}/z2ui5_cl_demo_app_461.clas.abap | 0 .../06}/z2ui5_cl_demo_app_461.clas.xml | 2 +- .../06}/z2ui5_cl_demo_app_462.clas.abap | 0 .../06}/z2ui5_cl_demo_app_462.clas.xml | 2 +- 28 files changed, 7 insertions(+), 103 deletions(-) delete mode 100644 src/00/08/z2ui5_cl_demo_app_451.clas.abap delete mode 100644 src/00/08/z2ui5_cl_demo_app_451.clas.xml rename src/{00/08 => 01/01}/z2ui5_cl_demo_app_458.clas.abap (100%) rename src/{00/08 => 01/01}/z2ui5_cl_demo_app_458.clas.xml (87%) rename src/{00/08 => 01/02}/z2ui5_cl_demo_app_450.clas.abap (100%) rename src/{00/08 => 01/02}/z2ui5_cl_demo_app_450.clas.xml (100%) rename src/{00/08 => 01/02}/z2ui5_cl_demo_app_453.clas.abap (100%) rename src/{00/08 => 01/02}/z2ui5_cl_demo_app_453.clas.xml (100%) rename src/{00/08 => 01/02}/z2ui5_cl_demo_app_454.clas.abap (100%) rename src/{00/08 => 01/02}/z2ui5_cl_demo_app_454.clas.xml (100%) rename src/{00/08 => 01/02}/z2ui5_cl_demo_app_455.clas.abap (100%) rename src/{00/08 => 01/02}/z2ui5_cl_demo_app_455.clas.xml (100%) rename src/{00/08 => 01/02}/z2ui5_cl_demo_app_456.clas.abap (100%) rename src/{00/08 => 01/02}/z2ui5_cl_demo_app_456.clas.xml (100%) rename src/{00/08 => 01/02}/z2ui5_cl_demo_app_457.clas.abap (100%) rename src/{00/08 => 01/02}/z2ui5_cl_demo_app_457.clas.xml (100%) rename src/{00/08 => 01/06}/z2ui5_cl_demo_app_448.clas.abap (100%) rename src/{00/08 => 01/06}/z2ui5_cl_demo_app_448.clas.xml (88%) rename src/{00/08 => 01/06}/z2ui5_cl_demo_app_449.clas.abap (100%) rename src/{00/08 => 01/06}/z2ui5_cl_demo_app_449.clas.xml (88%) rename src/{00/08 => 01/06}/z2ui5_cl_demo_app_459.clas.abap (100%) rename src/{00/08 => 01/06}/z2ui5_cl_demo_app_459.clas.xml (86%) rename src/{00/08 => 01/06}/z2ui5_cl_demo_app_460.clas.abap (100%) rename src/{00/08 => 01/06}/z2ui5_cl_demo_app_460.clas.xml (90%) rename src/{00/08 => 01/06}/z2ui5_cl_demo_app_461.clas.abap (100%) rename src/{00/08 => 01/06}/z2ui5_cl_demo_app_461.clas.xml (87%) rename src/{00/08 => 01/06}/z2ui5_cl_demo_app_462.clas.abap (100%) rename src/{00/08 => 01/06}/z2ui5_cl_demo_app_462.clas.xml (89%) diff --git a/src/00/08/z2ui5_cl_demo_app_451.clas.abap b/src/00/08/z2ui5_cl_demo_app_451.clas.abap deleted file mode 100644 index 04373e47..00000000 --- a/src/00/08/z2ui5_cl_demo_app_451.clas.abap +++ /dev/null @@ -1,80 +0,0 @@ -CLASS z2ui5_cl_demo_app_451 DEFINITION PUBLIC. - - PUBLIC SECTION. - INTERFACES z2ui5_if_app. - - TYPES: - BEGIN OF ty_s_token, - key TYPE string, - text TYPE string, - END OF ty_s_token. - DATA t_tokens TYPE STANDARD TABLE OF ty_s_token WITH EMPTY KEY. - DATA t_tokens_added TYPE STANDARD TABLE OF ty_s_token WITH EMPTY KEY. - DATA t_tokens_removed TYPE STANDARD TABLE OF ty_s_token WITH EMPTY KEY. - - PROTECTED SECTION. - DATA client TYPE REF TO z2ui5_if_client. - - METHODS view_display. - - PRIVATE SECTION. -ENDCLASS. - - -CLASS z2ui5_cl_demo_app_451 IMPLEMENTATION. - - METHOD z2ui5_if_app~main. - - me->client = client. - IF client->check_on_init( ). - t_tokens = VALUE #( ( key = `0001` text = `Token 1` ) - ( key = `0002` text = `Token 2` ) ). - view_display( ). - ELSEIF client->check_on_event( `UPDATE_BACKEND` ). - " added/removed tokens arrive in the bound tables via the companion's change event - client->view_model_update( ). - ENDIF. - - ENDMETHOD. - - - METHOD view_display. - - DATA(view) = z2ui5_cl_xml_view=>factory( ). - - DATA(page) = view->shell( - )->page( - title = `abap2UI5 - Custom Control - MultiInput Validator` - navbuttonpress = client->_event_nav_app_leave( ) - shownavbutton = client->check_app_prev_stack( ) ). - - page->message_strip( - text = `The invisible companion control z2ui5.cc.MultiInputExt installs the ` && - `free-text validator: type any text and press Enter to create a token.` - type = `Information` - showicon = abap_true - class = `sapUiSmallMargin` ). - - " the companion references the MultiInput by id and adds the validator - " (free text + Enter -> new Token), mirroring token changes to the backend - page->_z2ui5( )->multiinput_ext( - multiinputid = `myInput` - addedtokens = client->_bind_edit( t_tokens_added ) - removedtokens = client->_bind_edit( t_tokens_removed ) - change = client->_event( `UPDATE_BACKEND` ) ). - - page->multi_input( - id = `myInput` - width = `20em` - showvaluehelp = abap_false - class = `sapUiSmallMargin` - tokens = client->_bind_edit( t_tokens ) - )->tokens( - )->token( key = `{KEY}` - text = `{TEXT}` ). - - client->view_display( view->stringify( ) ). - - ENDMETHOD. - -ENDCLASS. diff --git a/src/00/08/z2ui5_cl_demo_app_451.clas.xml b/src/00/08/z2ui5_cl_demo_app_451.clas.xml deleted file mode 100644 index 814c2482..00000000 --- a/src/00/08/z2ui5_cl_demo_app_451.clas.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - Z2UI5_CL_DEMO_APP_451 - E - Custom Control - MultiInput Validator - 1 - X - X - X - - - - diff --git a/src/00/08/z2ui5_cl_demo_app_458.clas.abap b/src/01/01/z2ui5_cl_demo_app_458.clas.abap similarity index 100% rename from src/00/08/z2ui5_cl_demo_app_458.clas.abap rename to src/01/01/z2ui5_cl_demo_app_458.clas.abap diff --git a/src/00/08/z2ui5_cl_demo_app_458.clas.xml b/src/01/01/z2ui5_cl_demo_app_458.clas.xml similarity index 87% rename from src/00/08/z2ui5_cl_demo_app_458.clas.xml rename to src/01/01/z2ui5_cl_demo_app_458.clas.xml index 0cc9acc9..aa4708fa 100644 --- a/src/00/08/z2ui5_cl_demo_app_458.clas.xml +++ b/src/01/01/z2ui5_cl_demo_app_458.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_458 E - Message Model - automatic validation + Message - Message Model 1 X X diff --git a/src/00/08/z2ui5_cl_demo_app_450.clas.abap b/src/01/02/z2ui5_cl_demo_app_450.clas.abap similarity index 100% rename from src/00/08/z2ui5_cl_demo_app_450.clas.abap rename to src/01/02/z2ui5_cl_demo_app_450.clas.abap diff --git a/src/00/08/z2ui5_cl_demo_app_450.clas.xml b/src/01/02/z2ui5_cl_demo_app_450.clas.xml similarity index 100% rename from src/00/08/z2ui5_cl_demo_app_450.clas.xml rename to src/01/02/z2ui5_cl_demo_app_450.clas.xml diff --git a/src/00/08/z2ui5_cl_demo_app_453.clas.abap b/src/01/02/z2ui5_cl_demo_app_453.clas.abap similarity index 100% rename from src/00/08/z2ui5_cl_demo_app_453.clas.abap rename to src/01/02/z2ui5_cl_demo_app_453.clas.abap diff --git a/src/00/08/z2ui5_cl_demo_app_453.clas.xml b/src/01/02/z2ui5_cl_demo_app_453.clas.xml similarity index 100% rename from src/00/08/z2ui5_cl_demo_app_453.clas.xml rename to src/01/02/z2ui5_cl_demo_app_453.clas.xml diff --git a/src/00/08/z2ui5_cl_demo_app_454.clas.abap b/src/01/02/z2ui5_cl_demo_app_454.clas.abap similarity index 100% rename from src/00/08/z2ui5_cl_demo_app_454.clas.abap rename to src/01/02/z2ui5_cl_demo_app_454.clas.abap diff --git a/src/00/08/z2ui5_cl_demo_app_454.clas.xml b/src/01/02/z2ui5_cl_demo_app_454.clas.xml similarity index 100% rename from src/00/08/z2ui5_cl_demo_app_454.clas.xml rename to src/01/02/z2ui5_cl_demo_app_454.clas.xml diff --git a/src/00/08/z2ui5_cl_demo_app_455.clas.abap b/src/01/02/z2ui5_cl_demo_app_455.clas.abap similarity index 100% rename from src/00/08/z2ui5_cl_demo_app_455.clas.abap rename to src/01/02/z2ui5_cl_demo_app_455.clas.abap diff --git a/src/00/08/z2ui5_cl_demo_app_455.clas.xml b/src/01/02/z2ui5_cl_demo_app_455.clas.xml similarity index 100% rename from src/00/08/z2ui5_cl_demo_app_455.clas.xml rename to src/01/02/z2ui5_cl_demo_app_455.clas.xml diff --git a/src/00/08/z2ui5_cl_demo_app_456.clas.abap b/src/01/02/z2ui5_cl_demo_app_456.clas.abap similarity index 100% rename from src/00/08/z2ui5_cl_demo_app_456.clas.abap rename to src/01/02/z2ui5_cl_demo_app_456.clas.abap diff --git a/src/00/08/z2ui5_cl_demo_app_456.clas.xml b/src/01/02/z2ui5_cl_demo_app_456.clas.xml similarity index 100% rename from src/00/08/z2ui5_cl_demo_app_456.clas.xml rename to src/01/02/z2ui5_cl_demo_app_456.clas.xml diff --git a/src/00/08/z2ui5_cl_demo_app_457.clas.abap b/src/01/02/z2ui5_cl_demo_app_457.clas.abap similarity index 100% rename from src/00/08/z2ui5_cl_demo_app_457.clas.abap rename to src/01/02/z2ui5_cl_demo_app_457.clas.abap diff --git a/src/00/08/z2ui5_cl_demo_app_457.clas.xml b/src/01/02/z2ui5_cl_demo_app_457.clas.xml similarity index 100% rename from src/00/08/z2ui5_cl_demo_app_457.clas.xml rename to src/01/02/z2ui5_cl_demo_app_457.clas.xml diff --git a/src/00/08/z2ui5_cl_demo_app_448.clas.abap b/src/01/06/z2ui5_cl_demo_app_448.clas.abap similarity index 100% rename from src/00/08/z2ui5_cl_demo_app_448.clas.abap rename to src/01/06/z2ui5_cl_demo_app_448.clas.abap diff --git a/src/00/08/z2ui5_cl_demo_app_448.clas.xml b/src/01/06/z2ui5_cl_demo_app_448.clas.xml similarity index 88% rename from src/00/08/z2ui5_cl_demo_app_448.clas.xml rename to src/01/06/z2ui5_cl_demo_app_448.clas.xml index de0a95cf..03ec3ead 100644 --- a/src/00/08/z2ui5_cl_demo_app_448.clas.xml +++ b/src/01/06/z2ui5_cl_demo_app_448.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_448 E - Control Call - Panel setExpanded + sap.m.Panel (A) - setExpanded 1 X X diff --git a/src/00/08/z2ui5_cl_demo_app_449.clas.abap b/src/01/06/z2ui5_cl_demo_app_449.clas.abap similarity index 100% rename from src/00/08/z2ui5_cl_demo_app_449.clas.abap rename to src/01/06/z2ui5_cl_demo_app_449.clas.abap diff --git a/src/00/08/z2ui5_cl_demo_app_449.clas.xml b/src/01/06/z2ui5_cl_demo_app_449.clas.xml similarity index 88% rename from src/00/08/z2ui5_cl_demo_app_449.clas.xml rename to src/01/06/z2ui5_cl_demo_app_449.clas.xml index dfc889a1..b6340228 100644 --- a/src/00/08/z2ui5_cl_demo_app_449.clas.xml +++ b/src/01/06/z2ui5_cl_demo_app_449.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_449 E - Control Call - PDFViewer open + sap.m.PDFViewer (A) 1 X X diff --git a/src/00/08/z2ui5_cl_demo_app_459.clas.abap b/src/01/06/z2ui5_cl_demo_app_459.clas.abap similarity index 100% rename from src/00/08/z2ui5_cl_demo_app_459.clas.abap rename to src/01/06/z2ui5_cl_demo_app_459.clas.abap diff --git a/src/00/08/z2ui5_cl_demo_app_459.clas.xml b/src/01/06/z2ui5_cl_demo_app_459.clas.xml similarity index 86% rename from src/00/08/z2ui5_cl_demo_app_459.clas.xml rename to src/01/06/z2ui5_cl_demo_app_459.clas.xml index 7493b36f..3b0d7507 100644 --- a/src/00/08/z2ui5_cl_demo_app_459.clas.xml +++ b/src/01/06/z2ui5_cl_demo_app_459.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_459 E - Drag and Drop - Table reorder via event args + sap.m.Table - Drag and Drop 1 X X diff --git a/src/00/08/z2ui5_cl_demo_app_460.clas.abap b/src/01/06/z2ui5_cl_demo_app_460.clas.abap similarity index 100% rename from src/00/08/z2ui5_cl_demo_app_460.clas.abap rename to src/01/06/z2ui5_cl_demo_app_460.clas.abap diff --git a/src/00/08/z2ui5_cl_demo_app_460.clas.xml b/src/01/06/z2ui5_cl_demo_app_460.clas.xml similarity index 90% rename from src/00/08/z2ui5_cl_demo_app_460.clas.xml rename to src/01/06/z2ui5_cl_demo_app_460.clas.xml index 8cd03e0d..405578ef 100644 --- a/src/00/08/z2ui5_cl_demo_app_460.clas.xml +++ b/src/01/06/z2ui5_cl_demo_app_460.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_460 E - Tree - nested model + sap.m.Tree 1 X X diff --git a/src/00/08/z2ui5_cl_demo_app_461.clas.abap b/src/01/06/z2ui5_cl_demo_app_461.clas.abap similarity index 100% rename from src/00/08/z2ui5_cl_demo_app_461.clas.abap rename to src/01/06/z2ui5_cl_demo_app_461.clas.abap diff --git a/src/00/08/z2ui5_cl_demo_app_461.clas.xml b/src/01/06/z2ui5_cl_demo_app_461.clas.xml similarity index 87% rename from src/00/08/z2ui5_cl_demo_app_461.clas.xml rename to src/01/06/z2ui5_cl_demo_app_461.clas.xml index 71ba15c4..86608652 100644 --- a/src/00/08/z2ui5_cl_demo_app_461.clas.xml +++ b/src/01/06/z2ui5_cl_demo_app_461.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_461 E - Tree - drag and drop between folders + sap.m.Tree - Drag and Drop 1 X X diff --git a/src/00/08/z2ui5_cl_demo_app_462.clas.abap b/src/01/06/z2ui5_cl_demo_app_462.clas.abap similarity index 100% rename from src/00/08/z2ui5_cl_demo_app_462.clas.abap rename to src/01/06/z2ui5_cl_demo_app_462.clas.abap diff --git a/src/00/08/z2ui5_cl_demo_app_462.clas.xml b/src/01/06/z2ui5_cl_demo_app_462.clas.xml similarity index 89% rename from src/00/08/z2ui5_cl_demo_app_462.clas.xml rename to src/01/06/z2ui5_cl_demo_app_462.clas.xml index 89bf0968..f926962a 100644 --- a/src/00/08/z2ui5_cl_demo_app_462.clas.xml +++ b/src/01/06/z2ui5_cl_demo_app_462.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_462 E - Tree - inside a popup dialog + sap.m.Tree - Inside Popup 1 X X From 90455d78d3a305a1be8a3a9bb3476338e0d0ff5c Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 18 Jul 2026 14:53:38 +0000 Subject: [PATCH 18/49] Regenerate overviews after graduation; keep 454/455 in beta Both overview catalogs regenerated for the graduated samples (450, 453, 456-462 moved out of framework - new (beta) upstream). 454 and 455 move BACK to 00/08: they call binding_call_by_id / cs_event-binding_call, which exist only on the abap2UI5 feature branch - src/01 is syntax-checked against the abap2UI5 main dependency (src/00 is in noIssues), so they graduate only once the framework branch is merged. abaplint back to 0 issues. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_018JnhapjtGyzgxzuzUoeeXW --- src/{01/02 => 00/08}/z2ui5_cl_demo_app_454.clas.abap | 0 src/{01/02 => 00/08}/z2ui5_cl_demo_app_454.clas.xml | 0 src/{01/02 => 00/08}/z2ui5_cl_demo_app_455.clas.abap | 0 src/{01/02 => 00/08}/z2ui5_cl_demo_app_455.clas.xml | 0 src/00/z2ui5_cl_sample_app_000.clas.abap | 12 ------------ src/01/z2ui5_cl_sample_app_001.clas.abap | 11 +++++++++++ 6 files changed, 11 insertions(+), 12 deletions(-) rename src/{01/02 => 00/08}/z2ui5_cl_demo_app_454.clas.abap (100%) rename src/{01/02 => 00/08}/z2ui5_cl_demo_app_454.clas.xml (100%) rename src/{01/02 => 00/08}/z2ui5_cl_demo_app_455.clas.abap (100%) rename src/{01/02 => 00/08}/z2ui5_cl_demo_app_455.clas.xml (100%) diff --git a/src/01/02/z2ui5_cl_demo_app_454.clas.abap b/src/00/08/z2ui5_cl_demo_app_454.clas.abap similarity index 100% rename from src/01/02/z2ui5_cl_demo_app_454.clas.abap rename to src/00/08/z2ui5_cl_demo_app_454.clas.abap diff --git a/src/01/02/z2ui5_cl_demo_app_454.clas.xml b/src/00/08/z2ui5_cl_demo_app_454.clas.xml similarity index 100% rename from src/01/02/z2ui5_cl_demo_app_454.clas.xml rename to src/00/08/z2ui5_cl_demo_app_454.clas.xml diff --git a/src/01/02/z2ui5_cl_demo_app_455.clas.abap b/src/00/08/z2ui5_cl_demo_app_455.clas.abap similarity index 100% rename from src/01/02/z2ui5_cl_demo_app_455.clas.abap rename to src/00/08/z2ui5_cl_demo_app_455.clas.abap diff --git a/src/01/02/z2ui5_cl_demo_app_455.clas.xml b/src/00/08/z2ui5_cl_demo_app_455.clas.xml similarity index 100% rename from src/01/02/z2ui5_cl_demo_app_455.clas.xml rename to src/00/08/z2ui5_cl_demo_app_455.clas.xml diff --git a/src/00/z2ui5_cl_sample_app_000.clas.abap b/src/00/z2ui5_cl_sample_app_000.clas.abap index 5ba68ed2..8c4a1df7 100644 --- a/src/00/z2ui5_cl_sample_app_000.clas.abap +++ b/src/00/z2ui5_cl_sample_app_000.clas.abap @@ -305,18 +305,6 @@ CLASS z2ui5_cl_sample_app_000 IMPLEMENTATION. ( group = `experimental, TODO` header = `ViewSettingsDialog` sub = `` app = `z2ui5_cl_demo_app_099` ) ( group = `framework - new (beta)` header = `Binding Call` sub = `filter and sort via backend event` app = `z2ui5_cl_demo_app_454` ) ( group = `framework - new (beta)` header = `Binding Call` sub = `live filter without roundtrip` app = `z2ui5_cl_demo_app_455` ) - ( group = `framework - new (beta)` header = `Control Call` sub = `Panel setExpanded` app = `z2ui5_cl_demo_app_448` ) - ( group = `framework - new (beta)` header = `Control Call` sub = `PDFViewer open` app = `z2ui5_cl_demo_app_449` ) - ( group = `framework - new (beta)` header = `Custom Control` sub = `MultiInput Validator` app = `z2ui5_cl_demo_app_451` ) - ( group = `framework - new (beta)` header = `Drag and Drop` sub = `Table reorder via event args` app = `z2ui5_cl_demo_app_459` ) - ( group = `framework - new (beta)` header = `Formatter` sub = `Date object minimal (DatePicker)` app = `z2ui5_cl_demo_app_457` ) - ( group = `framework - new (beta)` header = `Formatter` sub = `Date objects for PlanningCalendar` app = `z2ui5_cl_demo_app_456` ) - ( group = `framework - new (beta)` header = `Formatter` sub = `demo kit pack` app = `z2ui5_cl_demo_app_453` ) - ( group = `framework - new (beta)` header = `Formatter` sub = `weightState via core require` app = `z2ui5_cl_demo_app_450` ) - ( group = `framework - new (beta)` header = `Message Model` sub = `automatic validation` app = `z2ui5_cl_demo_app_458` ) - ( group = `framework - new (beta)` header = `Tree` sub = `drag and drop between folders` app = `z2ui5_cl_demo_app_461` ) - ( group = `framework - new (beta)` header = `Tree` sub = `inside a popup dialog` app = `z2ui5_cl_demo_app_462` ) - ( group = `framework - new (beta)` header = `Tree` sub = `nested model` app = `z2ui5_cl_demo_app_460` ) ( group = `obsolete` header = `follow_up_action with JS` sub = `` app = `z2ui5_cl_demo_app_309_0` ) ( group = `obsolete` header = `landing page` sub = `` app = `z2ui5_cl_demo_app_000` ) ( group = `obsolete` header = `obsolete` sub = `custom control UploadSet` app = `z2ui5_cl_demo_app_354` ) diff --git a/src/01/z2ui5_cl_sample_app_001.clas.abap b/src/01/z2ui5_cl_sample_app_001.clas.abap index fec0e1f1..fcfadf54 100644 --- a/src/01/z2ui5_cl_sample_app_001.clas.abap +++ b/src/01/z2ui5_cl_sample_app_001.clas.abap @@ -219,6 +219,7 @@ CLASS z2ui5_cl_sample_app_001 IMPLEMENTATION. ( group = `framework - basics` header = `Event II` sub = `Additional Infos with t_args` app = `z2ui5_cl_demo_app_167` ) ( group = `framework - basics` header = `Event III` sub = `Facet Filter - T_arg with Objects` app = `z2ui5_cl_demo_app_197` ) ( group = `framework - basics` header = `Message` sub = `Backend` app = `z2ui5_cl_demo_app_008` ) + ( group = `framework - basics` header = `Message` sub = `Message Model` app = `z2ui5_cl_demo_app_458` ) ( group = `framework - basics` header = `Message` sub = `MessageBox` app = `z2ui5_cl_demo_app_382` ) ( group = `framework - basics` header = `Message` sub = `MessageToast` app = `z2ui5_cl_demo_app_381` ) ( group = `framework - basics` header = `Message` sub = `MessageView` app = `z2ui5_cl_demo_app_452` ) @@ -246,6 +247,10 @@ CLASS z2ui5_cl_sample_app_001 IMPLEMENTATION. ( group = `framework - action` header = `Browser` sub = `Title` app = `z2ui5_cl_demo_app_125` ) ( group = `framework - action` header = `Focus I` sub = `Set Focus in Textfield` app = `z2ui5_cl_demo_app_133` ) ( group = `framework - action` header = `Focus II` sub = `Jump with the focus` app = `z2ui5_cl_demo_app_189` ) + ( group = `framework - action` header = `Formatter` sub = `Date object minimal (DatePicker)` app = `z2ui5_cl_demo_app_457` ) + ( group = `framework - action` header = `Formatter` sub = `Date objects for PlanningCalendar` app = `z2ui5_cl_demo_app_456` ) + ( group = `framework - action` header = `Formatter` sub = `demo kit pack` app = `z2ui5_cl_demo_app_453` ) + ( group = `framework - action` header = `Formatter` sub = `weightState via core require` app = `z2ui5_cl_demo_app_450` ) ( group = `framework - action` header = `Input` sub = `Clipboard` app = `z2ui5_cl_demo_app_325` ) ( group = `framework - action` header = `Input` sub = `Hide/show Soft Keyboard` app = `z2ui5_cl_demo_app_352` ) ( group = `framework - action` header = `Scroll I` sub = `Scroll to position` app = `z2ui5_cl_demo_app_362` ) @@ -263,12 +268,18 @@ CLASS z2ui5_cl_sample_app_001 IMPLEMENTATION. ( group = `framework - extended Controls (CC and Action)` header = `CC CameraSelector` sub = `` app = `z2ui5_cl_demo_app_306` ) ( group = `framework - extended Controls (CC and Action)` header = `CC Data loss protection` sub = `` app = `z2ui5_cl_demo_app_279` ) ( group = `framework - use cases` header = `sap.m.List` sub = `Events & Visualization` app = `z2ui5_cl_demo_app_048` ) + ( group = `framework - use cases` header = `sap.m.Panel (A)` sub = `setExpanded` app = `z2ui5_cl_demo_app_448` ) + ( group = `framework - use cases` header = `sap.m.PDFViewer (A)` sub = `` app = `z2ui5_cl_demo_app_449` ) ( group = `framework - use cases` header = `sap.m.SearchField` sub = `Live Search` app = `z2ui5_cl_demo_app_059` ) ( group = `framework - use cases` header = `sap.m.SearchField` sub = `Search` app = `z2ui5_cl_demo_app_053` ) ( group = `framework - use cases` header = `sap.m.Table` sub = `Backend Filter` app = `z2ui5_cl_demo_app_045` ) + ( group = `framework - use cases` header = `sap.m.Table` sub = `Drag and Drop` app = `z2ui5_cl_demo_app_459` ) ( group = `framework - use cases` header = `sap.m.Table` sub = `Editable` app = `z2ui5_cl_demo_app_011` ) ( group = `framework - use cases` header = `sap.m.Table` sub = `Selection Modes: Single Select & Multi Select` app = `z2ui5_cl_demo_app_019` ) ( group = `framework - use cases` header = `sap.m.Table` sub = `Table with sap.m.ScrollContainer` app = `z2ui5_cl_demo_app_006` ) + ( group = `framework - use cases` header = `sap.m.Tree` sub = `` app = `z2ui5_cl_demo_app_460` ) + ( group = `framework - use cases` header = `sap.m.Tree` sub = `Drag and Drop` app = `z2ui5_cl_demo_app_461` ) + ( group = `framework - use cases` header = `sap.m.Tree` sub = `Inside Popup` app = `z2ui5_cl_demo_app_462` ) ( group = `framework - use cases` header = `sap.ui.Device` sub = `Device Model in views and popups` app = `z2ui5_cl_demo_app_445` ) ( group = `framework - use cases` header = `sap.ui.Table` sub = `Events on Cell Level` app = `z2ui5_cl_demo_app_160` ) ( group = `framework - use cases` header = `sap.ui.Table` sub = `Filtering` app = `z2ui5_cl_demo_app_143` ) From cb954b70a41eeac4cf17ec12c2a067fab0f6c152 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 18 Jul 2026 14:58:16 +0000 Subject: [PATCH 19/49] Graduate 454/455 to framework - action, pin lint dependency to branch 454 (Binding Call - filter and sort) and 455 (live filter) move to src/01/02 as requested. So the syntax check still resolves the new binding_call_by_id / cs_event-binding_call API, the abap2UI5 dependency in abaplint.jsonc and abap_cloud.jsonc is temporarily pinned to the claude/ui5-samples-ai-demokit-s5n5sg feature branch - REVERT the pin to the default branch once that abap2UI5 branch is merged. abap_702.jsonc keeps its 702 downport branch (the API reaches it via auto_downport after the merge; until then the 702 build flags 454/455). Overview catalogs regenerated. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_018JnhapjtGyzgxzuzUoeeXW --- .github/abaplint/abap_cloud.jsonc | 1 + abaplint.jsonc | 1 + src/00/z2ui5_cl_sample_app_000.clas.abap | 2 -- src/{00/08 => 01/02}/z2ui5_cl_demo_app_454.clas.abap | 0 src/{00/08 => 01/02}/z2ui5_cl_demo_app_454.clas.xml | 0 src/{00/08 => 01/02}/z2ui5_cl_demo_app_455.clas.abap | 0 src/{00/08 => 01/02}/z2ui5_cl_demo_app_455.clas.xml | 0 src/01/z2ui5_cl_sample_app_001.clas.abap | 2 ++ 8 files changed, 4 insertions(+), 2 deletions(-) rename src/{00/08 => 01/02}/z2ui5_cl_demo_app_454.clas.abap (100%) rename src/{00/08 => 01/02}/z2ui5_cl_demo_app_454.clas.xml (100%) rename src/{00/08 => 01/02}/z2ui5_cl_demo_app_455.clas.abap (100%) rename src/{00/08 => 01/02}/z2ui5_cl_demo_app_455.clas.xml (100%) diff --git a/.github/abaplint/abap_cloud.jsonc b/.github/abaplint/abap_cloud.jsonc index 1f3cdb21..f5ecdda2 100644 --- a/.github/abaplint/abap_cloud.jsonc +++ b/.github/abaplint/abap_cloud.jsonc @@ -10,6 +10,7 @@ }, { "url": "https://github.com/abap2UI5/abap2UI5", + "branch": "claude/ui5-samples-ai-demokit-s5n5sg", "folder": "/abap2UI5", "files": "/src/**/*.*" } diff --git a/abaplint.jsonc b/abaplint.jsonc index 420261b4..1058869e 100644 --- a/abaplint.jsonc +++ b/abaplint.jsonc @@ -13,6 +13,7 @@ }, { "url": "https://github.com/abap2UI5/abap2UI5", + "branch": "claude/ui5-samples-ai-demokit-s5n5sg", "folder": "/abap2UI5", "files": "/src/**/*.*" } diff --git a/src/00/z2ui5_cl_sample_app_000.clas.abap b/src/00/z2ui5_cl_sample_app_000.clas.abap index 8c4a1df7..064fa4b9 100644 --- a/src/00/z2ui5_cl_sample_app_000.clas.abap +++ b/src/00/z2ui5_cl_sample_app_000.clas.abap @@ -303,8 +303,6 @@ CLASS z2ui5_cl_sample_app_000 IMPLEMENTATION. ( group = `experimental, TODO` header = `Tree Table II` sub = `` app = `z2ui5_cl_demo_app_069` ) ( group = `experimental, TODO` header = `Tree Table III` sub = `Checkbox Binding per Node` app = `z2ui5_cl_demo_app_364` ) ( group = `experimental, TODO` header = `ViewSettingsDialog` sub = `` app = `z2ui5_cl_demo_app_099` ) - ( group = `framework - new (beta)` header = `Binding Call` sub = `filter and sort via backend event` app = `z2ui5_cl_demo_app_454` ) - ( group = `framework - new (beta)` header = `Binding Call` sub = `live filter without roundtrip` app = `z2ui5_cl_demo_app_455` ) ( group = `obsolete` header = `follow_up_action with JS` sub = `` app = `z2ui5_cl_demo_app_309_0` ) ( group = `obsolete` header = `landing page` sub = `` app = `z2ui5_cl_demo_app_000` ) ( group = `obsolete` header = `obsolete` sub = `custom control UploadSet` app = `z2ui5_cl_demo_app_354` ) diff --git a/src/00/08/z2ui5_cl_demo_app_454.clas.abap b/src/01/02/z2ui5_cl_demo_app_454.clas.abap similarity index 100% rename from src/00/08/z2ui5_cl_demo_app_454.clas.abap rename to src/01/02/z2ui5_cl_demo_app_454.clas.abap diff --git a/src/00/08/z2ui5_cl_demo_app_454.clas.xml b/src/01/02/z2ui5_cl_demo_app_454.clas.xml similarity index 100% rename from src/00/08/z2ui5_cl_demo_app_454.clas.xml rename to src/01/02/z2ui5_cl_demo_app_454.clas.xml diff --git a/src/00/08/z2ui5_cl_demo_app_455.clas.abap b/src/01/02/z2ui5_cl_demo_app_455.clas.abap similarity index 100% rename from src/00/08/z2ui5_cl_demo_app_455.clas.abap rename to src/01/02/z2ui5_cl_demo_app_455.clas.abap diff --git a/src/00/08/z2ui5_cl_demo_app_455.clas.xml b/src/01/02/z2ui5_cl_demo_app_455.clas.xml similarity index 100% rename from src/00/08/z2ui5_cl_demo_app_455.clas.xml rename to src/01/02/z2ui5_cl_demo_app_455.clas.xml diff --git a/src/01/z2ui5_cl_sample_app_001.clas.abap b/src/01/z2ui5_cl_sample_app_001.clas.abap index fcfadf54..0353a05f 100644 --- a/src/01/z2ui5_cl_sample_app_001.clas.abap +++ b/src/01/z2ui5_cl_sample_app_001.clas.abap @@ -243,6 +243,8 @@ CLASS z2ui5_cl_sample_app_001 IMPLEMENTATION. ( group = `framework - basics` header = `Templating II` sub = `Nested Views` app = `z2ui5_cl_demo_app_176` ) ( group = `framework - action` header = `Action` sub = `control_call` app = `z2ui5_cl_demo_app_446` ) ( group = `framework - action` header = `Action` sub = `control_call_by_id` app = `z2ui5_cl_demo_app_447` ) + ( group = `framework - action` header = `Binding Call` sub = `filter and sort via backend event` app = `z2ui5_cl_demo_app_454` ) + ( group = `framework - action` header = `Binding Call` sub = `live filter without roundtrip` app = `z2ui5_cl_demo_app_455` ) ( group = `framework - action` header = `Browser` sub = `Logout` app = `z2ui5_cl_demo_app_361` ) ( group = `framework - action` header = `Browser` sub = `Title` app = `z2ui5_cl_demo_app_125` ) ( group = `framework - action` header = `Focus I` sub = `Set Focus in Textfield` app = `z2ui5_cl_demo_app_133` ) From d3b1c5fa2e9d1da2f48c39f0836f5a1bd0d1902a Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 18 Jul 2026 17:57:28 +0000 Subject: [PATCH 20/49] Sample polish: 461 text + no-op drop guards (459/461) 461 message strip now describes the actual behavior (full redraw + cc.Tree keeps nodes expanded), not the view_model_update it does not use; a drop onto a file's own parent folder is a no-op. 459 guards a row dropped onto itself. No behavior change to the happy path. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_018JnhapjtGyzgxzuzUoeeXW --- src/01/06/z2ui5_cl_demo_app_459.clas.abap | 4 ++++ src/01/06/z2ui5_cl_demo_app_461.clas.abap | 6 +++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/01/06/z2ui5_cl_demo_app_459.clas.abap b/src/01/06/z2ui5_cl_demo_app_459.clas.abap index 3d634c00..4a23850a 100644 --- a/src/01/06/z2ui5_cl_demo_app_459.clas.abap +++ b/src/01/06/z2ui5_cl_demo_app_459.clas.abap @@ -57,6 +57,10 @@ CLASS z2ui5_cl_demo_app_459 IMPLEMENTATION. CATCH cx_root. RETURN. ENDTRY. + " dropping a row onto itself is a no-op + IF lv_from = lv_to. + RETURN. + ENDIF. DELETE t_products INDEX lv_from. IF lv_from < lv_to. lv_to = lv_to - 1. diff --git a/src/01/06/z2ui5_cl_demo_app_461.clas.abap b/src/01/06/z2ui5_cl_demo_app_461.clas.abap index 16741346..2152f67c 100644 --- a/src/01/06/z2ui5_cl_demo_app_461.clas.abap +++ b/src/01/06/z2ui5_cl_demo_app_461.clas.abap @@ -73,6 +73,10 @@ CLASS z2ui5_cl_demo_app_461 IMPLEMENTATION. CATCH cx_root. RETURN. ENDTRY. + " dropping a file onto its own parent folder is a no-op + IF lv_from_root = lv_to_root. + RETURN. + ENDIF. ASSIGN t_nodes[ lv_from_root ] TO FIELD-SYMBOL(). IF sy-subrc <> 0. RETURN. @@ -107,7 +111,7 @@ CLASS z2ui5_cl_demo_app_461 IMPLEMENTATION. page->message_strip( text = `Drag a file onto another folder: the drop event ships the binding context ` && `paths of both tree items, ABAP moves the node inside the nested table and ` && - `view_model_update refreshes the tree.` + `redraws the view - the z2ui5.cc.Tree companion keeps the expanded nodes open.` type = `Information` showicon = abap_true class = `sapUiSmallMargin` ). From ce59d1998c111271aedd7862f2c8afa79642ddaf Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 18 Jul 2026 19:02:06 +0000 Subject: [PATCH 21/49] Add sample 463: editable tree (CustomTreeItem + two-way Input) The fourth tree sample, next to 460-462 in framework - use cases: each node is a sap.m.CustomTreeItem holding an Input bound two-way to the node text, so renaming a node writes back into the nested ABAP table (the "Show model" button reads the roots back and toasts them). The z2ui5.cc.Tree companion preserves the expand state across the roundtrip. CustomTreeItem is built via _generic (no typed builder method). Editable rendering and two-way write-back verified headless against the OpenUI5 runtime. Overview catalog regenerated. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_018JnhapjtGyzgxzuzUoeeXW --- src/01/06/z2ui5_cl_demo_app_463.clas.abap | 116 ++++++++++++++++++++++ src/01/06/z2ui5_cl_demo_app_463.clas.xml | 16 +++ src/01/z2ui5_cl_sample_app_001.clas.abap | 1 + 3 files changed, 133 insertions(+) create mode 100644 src/01/06/z2ui5_cl_demo_app_463.clas.abap create mode 100644 src/01/06/z2ui5_cl_demo_app_463.clas.xml diff --git a/src/01/06/z2ui5_cl_demo_app_463.clas.abap b/src/01/06/z2ui5_cl_demo_app_463.clas.abap new file mode 100644 index 00000000..f1559cd9 --- /dev/null +++ b/src/01/06/z2ui5_cl_demo_app_463.clas.abap @@ -0,0 +1,116 @@ +CLASS z2ui5_cl_demo_app_463 DEFINITION PUBLIC. + + PUBLIC SECTION. + INTERFACES z2ui5_if_app. + + TYPES: + BEGIN OF ty_s_node_level3, + text TYPE string, + END OF ty_s_node_level3, + ty_t_node_level3 TYPE STANDARD TABLE OF ty_s_node_level3 WITH EMPTY KEY, + BEGIN OF ty_s_node_level2, + text TYPE string, + nodes TYPE ty_t_node_level3, + END OF ty_s_node_level2, + ty_t_node_level2 TYPE STANDARD TABLE OF ty_s_node_level2 WITH EMPTY KEY, + BEGIN OF ty_s_node_level1, + text TYPE string, + nodes TYPE ty_t_node_level2, + END OF ty_s_node_level1. + DATA t_nodes TYPE STANDARD TABLE OF ty_s_node_level1 WITH EMPTY KEY. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + + METHODS view_display. + METHODS on_event. + + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_demo_app_463 IMPLEMENTATION. + + METHOD z2ui5_if_app~main. + + me->client = client. + IF client->check_on_init( ). + t_nodes = VALUE #( + ( text = `Documents` nodes = VALUE #( + ( text = `Projects` nodes = VALUE #( + ( text = `Roadmap.docx` ) + ( text = `Budget.xlsx` ) ) ) + ( text = `Reports` nodes = VALUE #( + ( text = `Q1.pdf` ) ) ) ) ) + ( text = `Pictures` nodes = VALUE #( + ( text = `Vacation` nodes = VALUE #( + ( text = `Beach.jpg` ) ) ) ) ) ). + view_display( ). + ELSE. + on_event( ). + ENDIF. + + ENDMETHOD. + + + METHOD on_event. + + CASE client->get( )-event. + + WHEN `SHOW_MODEL`. + " the two-way bound inputs have already written the edits back into + " t_nodes before on_event runs - read the (possibly renamed) roots + " back and echo them, proving the round-trip + DATA(lv_roots) = ``. + LOOP AT t_nodes INTO DATA(ls_node). + lv_roots = |{ lv_roots }{ COND #( WHEN sy-tabix > 1 THEN `, ` ) }{ ls_node-text }|. + ENDLOOP. + client->message_toast_display( |Root nodes now: { lv_roots }| ). + + ENDCASE. + + ENDMETHOD. + + + METHOD view_display. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + + DATA(page) = view->shell( + )->page( + title = `abap2UI5 - Tree - editable nodes` + navbuttonpress = client->_event_nav_app_leave( ) + shownavbutton = client->check_app_prev_stack( ) ). + + page->message_strip( + text = `Each node is a CustomTreeItem holding an Input bound two-way to the node text. ` && + `Rename any node and press "Show model": the edits have already written back into ` && + `the nested ABAP table. The expand state is preserved across the roundtrip.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + + page->vbox( `sapUiSmallMargin` + )->button( text = `Show model` + icon = `sap-icon://show` + press = client->_event( `SHOW_MODEL` ) ). + + " CustomTreeItem is not a typed builder method - build it via _generic; + " its content aggregation holds the editable Input, bound two-way to + " {TEXT} because the items aggregation itself is bound with _bind_edit + DATA(tree) = page->tree( id = `tree1` + headertext = `Files (editable)` + items = client->_bind_edit( t_nodes ) ). + + tree->_generic( `CustomTreeItem` + )->content( + )->input( value = `{TEXT}` width = `24rem` ). + + " invisible companion: keeps the expanded nodes open across the roundtrip + page->_z2ui5( )->tree( `tree1` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + +ENDCLASS. diff --git a/src/01/06/z2ui5_cl_demo_app_463.clas.xml b/src/01/06/z2ui5_cl_demo_app_463.clas.xml new file mode 100644 index 00000000..7ccfb055 --- /dev/null +++ b/src/01/06/z2ui5_cl_demo_app_463.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_DEMO_APP_463 + E + Tree - editable nodes (CustomTreeItem) + 1 + X + X + X + + + + diff --git a/src/01/z2ui5_cl_sample_app_001.clas.abap b/src/01/z2ui5_cl_sample_app_001.clas.abap index 0353a05f..c21cb246 100644 --- a/src/01/z2ui5_cl_sample_app_001.clas.abap +++ b/src/01/z2ui5_cl_sample_app_001.clas.abap @@ -286,6 +286,7 @@ CLASS z2ui5_cl_sample_app_001 IMPLEMENTATION. ( group = `framework - use cases` header = `sap.ui.Table` sub = `Events on Cell Level` app = `z2ui5_cl_demo_app_160` ) ( group = `framework - use cases` header = `sap.ui.Table` sub = `Filtering` app = `z2ui5_cl_demo_app_143` ) ( group = `framework - use cases` header = `sap.ui.Table` sub = `Full Example` app = `z2ui5_cl_demo_app_070` ) + ( group = `framework - use cases` header = `Tree` sub = `editable nodes (CustomTreeItem)` app = `z2ui5_cl_demo_app_463` ) ( group = `controls - sap.m` header = `sap.m.ActionListItem` sub = `Use the Action List Item to trigger an action directly from a list` app = `z2ui5_cl_demo_app_216` ) ( group = `controls - sap.m` header = `sap.m.Breadcrumbs` sub = `Breadcrumbs sample with current page set as aggregation, resulting in a link` app = `z2ui5_cl_demo_app_292` ) ( group = `controls - sap.m` header = `sap.m.BusyIndicator` From 07d14847358ae58064a6fbf906e93f2834c2388c Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 18 Jul 2026 19:27:01 +0000 Subject: [PATCH 22/49] Add sample 464: trigger an unexpected error to test the error popup framework - use cases (01/06): two buttons that each surface an unhandled error so the new flow can be exercised live - a raised exception and a genuine runtime dump (divide by zero). Both propagate uncaught, the roundtrip returns HTTP 500 and the client shows the friendly "unexpected error" popup (Details -> DebugTool Error tab, Restart -> reload). Overview catalog regenerated. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_018JnhapjtGyzgxzuzUoeeXW --- src/01/06/z2ui5_cl_demo_app_464.clas.abap | 86 +++++++++++++++++++++++ src/01/06/z2ui5_cl_demo_app_464.clas.xml | 16 +++++ src/01/z2ui5_cl_sample_app_001.clas.abap | 1 + 3 files changed, 103 insertions(+) create mode 100644 src/01/06/z2ui5_cl_demo_app_464.clas.abap create mode 100644 src/01/06/z2ui5_cl_demo_app_464.clas.xml diff --git a/src/01/06/z2ui5_cl_demo_app_464.clas.abap b/src/01/06/z2ui5_cl_demo_app_464.clas.abap new file mode 100644 index 00000000..467ff060 --- /dev/null +++ b/src/01/06/z2ui5_cl_demo_app_464.clas.abap @@ -0,0 +1,86 @@ +CLASS z2ui5_cl_demo_app_464 DEFINITION PUBLIC. + + PUBLIC SECTION. + INTERFACES z2ui5_if_app. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + + METHODS view_display. + METHODS on_event. + + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_demo_app_464 IMPLEMENTATION. + + METHOD z2ui5_if_app~main. + + me->client = client. + IF client->check_on_init( ). + view_display( ). + ELSE. + on_event( ). + ENDIF. + + ENDMETHOD. + + + METHOD on_event. + + CASE client->get( )-event. + + WHEN `RAISE_EXCEPTION`. + " an uncaught exception from an event handler is NOT caught by the + " framework - it propagates to a real runtime error, the roundtrip + " comes back as HTTP 500 and the client shows the error popup + RAISE EXCEPTION TYPE z2ui5_cx_sample_error + EXPORTING val = `Intentional error to demonstrate the error popup`. + + WHEN `DIVIDE_BY_ZERO`. + " a genuine, unplanned runtime dump (CX_SY_ZERODIVIDE) - the same + " path: the app never handles it, so it surfaces in the popup + DATA(lv_zero) = 0. + DATA(lv_result) = 1 / lv_zero. + client->message_toast_display( |{ lv_result }| ). + + ENDCASE. + + ENDMETHOD. + + + METHOD view_display. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + + DATA(page) = view->shell( + )->page( + title = `abap2UI5 - Error Handling` + navbuttonpress = client->_event_nav_app_leave( ) + shownavbutton = client->check_app_prev_stack( ) ). + + page->message_strip( + text = `Trigger an unexpected error. The client shows a popup "An unexpected error ` && + `occurred" with two buttons: Details jumps into the DebugTool's Error tab (full ` && + `error text plus Retry/Refresh/Logout), Restart reloads the app. Open the ` && + `DebugTool any time with Ctrl+F12.` + type = `Warning` + showicon = abap_true + class = `sapUiSmallMargin` ). + + page->vbox( `sapUiSmallMargin` + )->button( text = `Raise an exception` + icon = `sap-icon://error` + type = `Reject` + press = client->_event( `RAISE_EXCEPTION` ) + )->button( text = `Trigger a runtime dump (divide by zero)` + icon = `sap-icon://alert` + press = client->_event( `DIVIDE_BY_ZERO` ) + class = `sapUiTinyMarginTop` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + +ENDCLASS. diff --git a/src/01/06/z2ui5_cl_demo_app_464.clas.xml b/src/01/06/z2ui5_cl_demo_app_464.clas.xml new file mode 100644 index 00000000..e584ae93 --- /dev/null +++ b/src/01/06/z2ui5_cl_demo_app_464.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_DEMO_APP_464 + E + Error Handling - unexpected error popup + 1 + X + X + X + + + + diff --git a/src/01/z2ui5_cl_sample_app_001.clas.abap b/src/01/z2ui5_cl_sample_app_001.clas.abap index c21cb246..882c2ad3 100644 --- a/src/01/z2ui5_cl_sample_app_001.clas.abap +++ b/src/01/z2ui5_cl_sample_app_001.clas.abap @@ -269,6 +269,7 @@ CLASS z2ui5_cl_sample_app_001 IMPLEMENTATION. ( group = `framework - extended Controls (CC and Action)` header = `C Multi Input` sub = `` app = `z2ui5_cl_demo_app_078` ) ( group = `framework - extended Controls (CC and Action)` header = `CC CameraSelector` sub = `` app = `z2ui5_cl_demo_app_306` ) ( group = `framework - extended Controls (CC and Action)` header = `CC Data loss protection` sub = `` app = `z2ui5_cl_demo_app_279` ) + ( group = `framework - use cases` header = `Error Handling` sub = `unexpected error popup` app = `z2ui5_cl_demo_app_464` ) ( group = `framework - use cases` header = `sap.m.List` sub = `Events & Visualization` app = `z2ui5_cl_demo_app_048` ) ( group = `framework - use cases` header = `sap.m.Panel (A)` sub = `setExpanded` app = `z2ui5_cl_demo_app_448` ) ( group = `framework - use cases` header = `sap.m.PDFViewer (A)` sub = `` app = `z2ui5_cl_demo_app_449` ) From fff02fdf8402466c8d9cc5660e0a4355d2567288 Mon Sep 17 00:00:00 2001 From: oblomov Date: Sun, 19 Jul 2026 10:49:27 +0000 Subject: [PATCH 23/49] fix samples --- src/01/01/z2ui5_cl_demo_app_001.clas.xml | 2 +- src/01/01/z2ui5_cl_demo_app_004.clas.xml | 2 +- src/01/01/z2ui5_cl_demo_app_008.clas.abap | 90 +------------------ src/01/01/z2ui5_cl_demo_app_008.clas.xml | 2 +- src/01/01/z2ui5_cl_demo_app_009.clas.xml | 2 +- src/01/01/z2ui5_cl_demo_app_012.clas.xml | 2 +- src/01/01/z2ui5_cl_demo_app_026.clas.xml | 2 +- src/01/01/z2ui5_cl_demo_app_052.clas.xml | 2 +- src/01/01/z2ui5_cl_demo_app_071.clas.xml | 2 +- src/01/01/z2ui5_cl_demo_app_081.clas.xml | 2 +- .../z2ui5_cl_demo_app_445.clas.abap | 0 .../{06 => 01}/z2ui5_cl_demo_app_445.clas.xml | 2 +- .../z2ui5_cl_demo_app_450.clas.abap | 0 .../{02 => 01}/z2ui5_cl_demo_app_450.clas.xml | 0 .../z2ui5_cl_demo_app_453.clas.abap | 0 .../{02 => 01}/z2ui5_cl_demo_app_453.clas.xml | 2 +- .../z2ui5_cl_demo_app_456.clas.abap | 0 .../{02 => 01}/z2ui5_cl_demo_app_456.clas.xml | 0 .../z2ui5_cl_demo_app_457.clas.abap | 0 .../{02 => 01}/z2ui5_cl_demo_app_457.clas.xml | 0 src/01/01/z2ui5_cl_demo_app_458.clas.xml | 2 +- src/01/02/z2ui5_cl_demo_app_454.clas.xml | 2 +- src/01/02/z2ui5_cl_demo_app_455.clas.xml | 2 +- src/01/06/z2ui5_cl_demo_app_006.clas.xml | 2 +- src/01/06/z2ui5_cl_demo_app_011.clas.xml | 2 +- src/01/06/z2ui5_cl_demo_app_019.clas.xml | 2 +- src/01/06/z2ui5_cl_demo_app_045.clas.xml | 2 +- src/01/06/z2ui5_cl_demo_app_048.clas.xml | 2 +- src/01/06/z2ui5_cl_demo_app_053.clas.xml | 2 +- src/01/06/z2ui5_cl_demo_app_059.clas.xml | 2 +- src/01/06/z2ui5_cl_demo_app_070.clas.xml | 2 +- src/01/06/z2ui5_cl_demo_app_143.clas.abap | 1 - src/01/06/z2ui5_cl_demo_app_143.clas.xml | 2 +- src/01/06/z2ui5_cl_demo_app_160.clas.xml | 2 +- src/01/06/z2ui5_cl_demo_app_448.clas.xml | 2 +- src/01/06/z2ui5_cl_demo_app_449.clas.xml | 2 +- src/01/06/z2ui5_cl_demo_app_459.clas.xml | 2 +- src/01/06/z2ui5_cl_demo_app_460.clas.xml | 2 +- src/01/06/z2ui5_cl_demo_app_461.clas.abap | 5 +- src/01/06/z2ui5_cl_demo_app_461.clas.xml | 2 +- src/01/06/z2ui5_cl_demo_app_462.clas.abap | 5 +- src/01/06/z2ui5_cl_demo_app_462.clas.xml | 2 +- src/01/06/z2ui5_cl_demo_app_463.clas.xml | 2 +- 43 files changed, 38 insertions(+), 125 deletions(-) rename src/01/{06 => 01}/z2ui5_cl_demo_app_445.clas.abap (100%) rename src/01/{06 => 01}/z2ui5_cl_demo_app_445.clas.xml (85%) rename src/01/{02 => 01}/z2ui5_cl_demo_app_450.clas.abap (100%) rename src/01/{02 => 01}/z2ui5_cl_demo_app_450.clas.xml (100%) rename src/01/{02 => 01}/z2ui5_cl_demo_app_453.clas.abap (100%) rename src/01/{02 => 01}/z2ui5_cl_demo_app_453.clas.xml (89%) rename src/01/{02 => 01}/z2ui5_cl_demo_app_456.clas.abap (100%) rename src/01/{02 => 01}/z2ui5_cl_demo_app_456.clas.xml (100%) rename src/01/{02 => 01}/z2ui5_cl_demo_app_457.clas.abap (100%) rename src/01/{02 => 01}/z2ui5_cl_demo_app_457.clas.xml (100%) diff --git a/src/01/01/z2ui5_cl_demo_app_001.clas.xml b/src/01/01/z2ui5_cl_demo_app_001.clas.xml index 99f37c11..51ca120d 100644 --- a/src/01/01/z2ui5_cl_demo_app_001.clas.xml +++ b/src/01/01/z2ui5_cl_demo_app_001.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_001 E - Binding I - Level Simple + Binding - Level Simple 1 X X diff --git a/src/01/01/z2ui5_cl_demo_app_004.clas.xml b/src/01/01/z2ui5_cl_demo_app_004.clas.xml index 3ae58909..3577c290 100644 --- a/src/01/01/z2ui5_cl_demo_app_004.clas.xml +++ b/src/01/01/z2ui5_cl_demo_app_004.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_004 E - Event I - Handle events & change the view + Event - Handle events & change the view 1 X X diff --git a/src/01/01/z2ui5_cl_demo_app_008.clas.abap b/src/01/01/z2ui5_cl_demo_app_008.clas.abap index 731d0163..1e4023f3 100644 --- a/src/01/01/z2ui5_cl_demo_app_008.clas.abap +++ b/src/01/01/z2ui5_cl_demo_app_008.clas.abap @@ -16,7 +16,7 @@ ENDCLASS. -CLASS Z2UI5_CL_DEMO_APP_008 IMPLEMENTATION. +CLASS z2ui5_cl_demo_app_008 IMPLEMENTATION. METHOD z2ui5_if_app~main. @@ -35,46 +35,6 @@ CLASS Z2UI5_CL_DEMO_APP_008 IMPLEMENTATION. METHOD on_event. CASE client->get( )-event. - WHEN `BUTTON_MESSAGE_BOX_CONFIRM`. - client->message_box_display( - text = `Approve purchase order 12345?` - type = `confirm` ). - WHEN `BUTTON_MESSAGE_BOX_ALERT`. - client->message_box_display( - text = `The quantity you have reported exceeds the quantity planned.` - type = `alert` ). - WHEN `BUTTON_MESSAGE_BOX_ERROR`. - client->message_box_display( - text = |Select a team in the "Development" area.{ cl_abap_char_utilities=>newline }"Marketing" isn't assigned to this area.| - type = `error` ). - WHEN `BUTTON_MESSAGE_BOX_INFO`. - client->message_box_display( `Your booking will be reserved for 24 hours.` ). - WHEN `BUTTON_MESSAGE_BOX_WARNING`. - client->message_box_display( - text = `The project schedule was last updated over a year ago.` - type = `warning` ). - WHEN `BUTTON_MESSAGE_BOX_SUCCESS`. - client->message_box_display( - text = `Project 1234567 was created and assigned to team "ABC".` - type = `success` ). - WHEN `BUTTON_MESSAGE_TOAST`. - client->message_toast_display( `this is a message toast` ). - WHEN `BUTTON_MESSAGE_TOAST2`. - client->message_toast_display( - text = `this is a message toast` - at = `left bottom` - offset = `0 -15` - animationtimingfunction = `ease-in` - class = `my-style` ). - WHEN `BUTTON_MESSAGE_STRIP_INFO`. - check_strip_active = abap_true. - strip_type = `Information`. - WHEN `BUTTON_MESSAGE_STRIP_ERROR`. - check_strip_active = abap_true. - strip_type = `Error`. - WHEN `BUTTON_MESSAGE_STRIP_SUCCESS`. - check_strip_active = abap_true. - strip_type = `Success`. WHEN `BUTTON_MESSAGE_BOX_SY`. DATA(ls_msg_sy) = z2ui5_cl_sample_context=>msg_get_by_msg( id = `NET` @@ -116,54 +76,6 @@ CLASS Z2UI5_CL_DEMO_APP_008 IMPLEMENTATION. type = strip_type ). ENDIF. - page->grid( `L6 M12 S12` - )->content( `layout` - )->simple_form( `Message Box` - )->content( `form` - )->button( - text = `Confirm` - press = client->_event( `BUTTON_MESSAGE_BOX_CONFIRM` ) - )->button( - text = `Alert` - press = client->_event( `BUTTON_MESSAGE_BOX_ALERT` ) - )->button( - text = `Error` - press = client->_event( `BUTTON_MESSAGE_BOX_ERROR` ) - )->button( - text = `Info` - press = client->_event( `BUTTON_MESSAGE_BOX_INFO` ) - )->button( - text = `Warning` - press = client->_event( `BUTTON_MESSAGE_BOX_WARNING` ) - )->button( - text = `Success` - press = client->_event( `BUTTON_MESSAGE_BOX_SUCCESS` ) ). - - page->grid( `L6 M12 S12` - )->content( `layout` - )->simple_form( `Message Strip` - )->content( `form` - )->button( - text = `success` - press = client->_event( `BUTTON_MESSAGE_STRIP_SUCCESS` ) - )->button( - text = `error` - press = client->_event( `BUTTON_MESSAGE_STRIP_ERROR` ) - )->button( - text = `information` - press = client->_event( `BUTTON_MESSAGE_STRIP_INFO` ) ). - - page->grid( `L6 M12 S12` - )->content( `layout` - )->simple_form( `Display` - )->content( `form` - )->button( - text = `Message Toast` - press = client->_event( `BUTTON_MESSAGE_TOAST` ) - )->button( - text = `Message Toast Customized` - press = client->_event( `BUTTON_MESSAGE_TOAST2` ) ). - page->grid( `L6 M12 S12` )->content( `layout` )->simple_form( `Message Box from ABAP Object` diff --git a/src/01/01/z2ui5_cl_demo_app_008.clas.xml b/src/01/01/z2ui5_cl_demo_app_008.clas.xml index 2253f95e..2d3a440f 100644 --- a/src/01/01/z2ui5_cl_demo_app_008.clas.xml +++ b/src/01/01/z2ui5_cl_demo_app_008.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_008 E - Message - Backend + Message - Backend Processing 1 X X diff --git a/src/01/01/z2ui5_cl_demo_app_009.clas.xml b/src/01/01/z2ui5_cl_demo_app_009.clas.xml index aa0e22f1..98dd25b7 100644 --- a/src/01/01/z2ui5_cl_demo_app_009.clas.xml +++ b/src/01/01/z2ui5_cl_demo_app_009.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_009 E - Popup II - Create Popup for Value Help + Popup - Value Help with Popups 1 X X diff --git a/src/01/01/z2ui5_cl_demo_app_012.clas.xml b/src/01/01/z2ui5_cl_demo_app_012.clas.xml index d0894b1e..8faca1ce 100644 --- a/src/01/01/z2ui5_cl_demo_app_012.clas.xml +++ b/src/01/01/z2ui5_cl_demo_app_012.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_012 E - Popup I - Different ways of calling Popups + Popup - Different ways of calling Popups 1 X X diff --git a/src/01/01/z2ui5_cl_demo_app_026.clas.xml b/src/01/01/z2ui5_cl_demo_app_026.clas.xml index 9dcc5715..815a35d3 100644 --- a/src/01/01/z2ui5_cl_demo_app_026.clas.xml +++ b/src/01/01/z2ui5_cl_demo_app_026.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_026 E - Popover I - Simple Example + Popover - Simple Example 1 X X diff --git a/src/01/01/z2ui5_cl_demo_app_052.clas.xml b/src/01/01/z2ui5_cl_demo_app_052.clas.xml index b1376120..07528128 100644 --- a/src/01/01/z2ui5_cl_demo_app_052.clas.xml +++ b/src/01/01/z2ui5_cl_demo_app_052.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_052 E - Popover II - Item Level of Table + Popover - Item Level of Table 1 X X diff --git a/src/01/01/z2ui5_cl_demo_app_071.clas.xml b/src/01/01/z2ui5_cl_demo_app_071.clas.xml index 9a257566..49c7770a 100644 --- a/src/01/01/z2ui5_cl_demo_app_071.clas.xml +++ b/src/01/01/z2ui5_cl_demo_app_071.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_071 E - More - Model Size Limit + ModelMore - Set Size Limit 1 X X diff --git a/src/01/01/z2ui5_cl_demo_app_081.clas.xml b/src/01/01/z2ui5_cl_demo_app_081.clas.xml index b3230af0..b62115ce 100644 --- a/src/01/01/z2ui5_cl_demo_app_081.clas.xml +++ b/src/01/01/z2ui5_cl_demo_app_081.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_081 E - Popover III - List to select in Popover + Popover - List to select in Popover 1 X X diff --git a/src/01/06/z2ui5_cl_demo_app_445.clas.abap b/src/01/01/z2ui5_cl_demo_app_445.clas.abap similarity index 100% rename from src/01/06/z2ui5_cl_demo_app_445.clas.abap rename to src/01/01/z2ui5_cl_demo_app_445.clas.abap diff --git a/src/01/06/z2ui5_cl_demo_app_445.clas.xml b/src/01/01/z2ui5_cl_demo_app_445.clas.xml similarity index 85% rename from src/01/06/z2ui5_cl_demo_app_445.clas.xml rename to src/01/01/z2ui5_cl_demo_app_445.clas.xml index 0a1649cc..7fd03531 100644 --- a/src/01/06/z2ui5_cl_demo_app_445.clas.xml +++ b/src/01/01/z2ui5_cl_demo_app_445.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_445 E - sap.ui.Device - Device Model in views and popups + Model - Device Model in views and popups 1 X X diff --git a/src/01/02/z2ui5_cl_demo_app_450.clas.abap b/src/01/01/z2ui5_cl_demo_app_450.clas.abap similarity index 100% rename from src/01/02/z2ui5_cl_demo_app_450.clas.abap rename to src/01/01/z2ui5_cl_demo_app_450.clas.abap diff --git a/src/01/02/z2ui5_cl_demo_app_450.clas.xml b/src/01/01/z2ui5_cl_demo_app_450.clas.xml similarity index 100% rename from src/01/02/z2ui5_cl_demo_app_450.clas.xml rename to src/01/01/z2ui5_cl_demo_app_450.clas.xml diff --git a/src/01/02/z2ui5_cl_demo_app_453.clas.abap b/src/01/01/z2ui5_cl_demo_app_453.clas.abap similarity index 100% rename from src/01/02/z2ui5_cl_demo_app_453.clas.abap rename to src/01/01/z2ui5_cl_demo_app_453.clas.abap diff --git a/src/01/02/z2ui5_cl_demo_app_453.clas.xml b/src/01/01/z2ui5_cl_demo_app_453.clas.xml similarity index 89% rename from src/01/02/z2ui5_cl_demo_app_453.clas.xml rename to src/01/01/z2ui5_cl_demo_app_453.clas.xml index 263c25aa..3717a00d 100644 --- a/src/01/02/z2ui5_cl_demo_app_453.clas.xml +++ b/src/01/01/z2ui5_cl_demo_app_453.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_453 E - Formatter - demo kit pack + Formatter - Simple 1 X X diff --git a/src/01/02/z2ui5_cl_demo_app_456.clas.abap b/src/01/01/z2ui5_cl_demo_app_456.clas.abap similarity index 100% rename from src/01/02/z2ui5_cl_demo_app_456.clas.abap rename to src/01/01/z2ui5_cl_demo_app_456.clas.abap diff --git a/src/01/02/z2ui5_cl_demo_app_456.clas.xml b/src/01/01/z2ui5_cl_demo_app_456.clas.xml similarity index 100% rename from src/01/02/z2ui5_cl_demo_app_456.clas.xml rename to src/01/01/z2ui5_cl_demo_app_456.clas.xml diff --git a/src/01/02/z2ui5_cl_demo_app_457.clas.abap b/src/01/01/z2ui5_cl_demo_app_457.clas.abap similarity index 100% rename from src/01/02/z2ui5_cl_demo_app_457.clas.abap rename to src/01/01/z2ui5_cl_demo_app_457.clas.abap diff --git a/src/01/02/z2ui5_cl_demo_app_457.clas.xml b/src/01/01/z2ui5_cl_demo_app_457.clas.xml similarity index 100% rename from src/01/02/z2ui5_cl_demo_app_457.clas.xml rename to src/01/01/z2ui5_cl_demo_app_457.clas.xml diff --git a/src/01/01/z2ui5_cl_demo_app_458.clas.xml b/src/01/01/z2ui5_cl_demo_app_458.clas.xml index aa4708fa..5d8a554d 100644 --- a/src/01/01/z2ui5_cl_demo_app_458.clas.xml +++ b/src/01/01/z2ui5_cl_demo_app_458.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_458 E - Message - Message Model + Model - Message Model 1 X X diff --git a/src/01/02/z2ui5_cl_demo_app_454.clas.xml b/src/01/02/z2ui5_cl_demo_app_454.clas.xml index affe49ab..c7327515 100644 --- a/src/01/02/z2ui5_cl_demo_app_454.clas.xml +++ b/src/01/02/z2ui5_cl_demo_app_454.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_454 E - Binding Call - filter and sort via backend event + List - Filter and sort via backend event (A) 1 X X diff --git a/src/01/02/z2ui5_cl_demo_app_455.clas.xml b/src/01/02/z2ui5_cl_demo_app_455.clas.xml index 89dd39bc..388beb29 100644 --- a/src/01/02/z2ui5_cl_demo_app_455.clas.xml +++ b/src/01/02/z2ui5_cl_demo_app_455.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_455 E - Binding Call - live filter without roundtrip + List - Live filter without backend (A) 1 X X diff --git a/src/01/06/z2ui5_cl_demo_app_006.clas.xml b/src/01/06/z2ui5_cl_demo_app_006.clas.xml index b146c8cd..e76588c6 100644 --- a/src/01/06/z2ui5_cl_demo_app_006.clas.xml +++ b/src/01/06/z2ui5_cl_demo_app_006.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_006 E - sap.m.Table - Table with sap.m.ScrollContainer + Table - Table with ScrollContainer 1 X X diff --git a/src/01/06/z2ui5_cl_demo_app_011.clas.xml b/src/01/06/z2ui5_cl_demo_app_011.clas.xml index ce56be9b..f4ec052b 100644 --- a/src/01/06/z2ui5_cl_demo_app_011.clas.xml +++ b/src/01/06/z2ui5_cl_demo_app_011.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_011 E - sap.m.Table - Editable + Table - Editable 1 X X diff --git a/src/01/06/z2ui5_cl_demo_app_019.clas.xml b/src/01/06/z2ui5_cl_demo_app_019.clas.xml index 08b6db75..2013f209 100644 --- a/src/01/06/z2ui5_cl_demo_app_019.clas.xml +++ b/src/01/06/z2ui5_cl_demo_app_019.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_019 E - sap.m.Table - Selection Modes: Single Select & Multi Select + Table - Selection Modes: Single Select & Multi Select 1 X X diff --git a/src/01/06/z2ui5_cl_demo_app_045.clas.xml b/src/01/06/z2ui5_cl_demo_app_045.clas.xml index 02c673f5..f6861c70 100644 --- a/src/01/06/z2ui5_cl_demo_app_045.clas.xml +++ b/src/01/06/z2ui5_cl_demo_app_045.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_045 E - sap.m.Table - Backend Filter + Table - Backend Filter 1 X X diff --git a/src/01/06/z2ui5_cl_demo_app_048.clas.xml b/src/01/06/z2ui5_cl_demo_app_048.clas.xml index da56ca1d..1b2d7c1e 100644 --- a/src/01/06/z2ui5_cl_demo_app_048.clas.xml +++ b/src/01/06/z2ui5_cl_demo_app_048.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_048 E - sap.m.List - Events & Visualization + List - Events & Visualization 1 X X diff --git a/src/01/06/z2ui5_cl_demo_app_053.clas.xml b/src/01/06/z2ui5_cl_demo_app_053.clas.xml index 9445e9c2..2b2334c8 100644 --- a/src/01/06/z2ui5_cl_demo_app_053.clas.xml +++ b/src/01/06/z2ui5_cl_demo_app_053.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_053 E - sap.m.SearchField - Search + Table - Search Backend 1 X X diff --git a/src/01/06/z2ui5_cl_demo_app_059.clas.xml b/src/01/06/z2ui5_cl_demo_app_059.clas.xml index 425271a4..18d4b5db 100644 --- a/src/01/06/z2ui5_cl_demo_app_059.clas.xml +++ b/src/01/06/z2ui5_cl_demo_app_059.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_059 E - sap.m.SearchField - Live Search + m.Table - Search Backend Live 1 X X diff --git a/src/01/06/z2ui5_cl_demo_app_070.clas.xml b/src/01/06/z2ui5_cl_demo_app_070.clas.xml index 3c724e9a..15d0523e 100644 --- a/src/01/06/z2ui5_cl_demo_app_070.clas.xml +++ b/src/01/06/z2ui5_cl_demo_app_070.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_070 E - sap.ui.Table - Full Example + ui.Table - Full Example 1 X X diff --git a/src/01/06/z2ui5_cl_demo_app_143.clas.abap b/src/01/06/z2ui5_cl_demo_app_143.clas.abap index e99be34d..05432c3e 100644 --- a/src/01/06/z2ui5_cl_demo_app_143.clas.abap +++ b/src/01/06/z2ui5_cl_demo_app_143.clas.abap @@ -30,7 +30,6 @@ CLASS z2ui5_cl_demo_app_143 IMPLEMENTATION. TRY. IF client->check_on_event( `ROW_ACTION_ITEM_ADD` ). - client->message_toast_display( `Something` ). client->view_model_update( ). ENDIF. diff --git a/src/01/06/z2ui5_cl_demo_app_143.clas.xml b/src/01/06/z2ui5_cl_demo_app_143.clas.xml index db16c53e..e74b077b 100644 --- a/src/01/06/z2ui5_cl_demo_app_143.clas.xml +++ b/src/01/06/z2ui5_cl_demo_app_143.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_143 E - sap.ui.Table - Filtering + ui.Table - Default Filtering 1 X X diff --git a/src/01/06/z2ui5_cl_demo_app_160.clas.xml b/src/01/06/z2ui5_cl_demo_app_160.clas.xml index 480d29ef..0c020951 100644 --- a/src/01/06/z2ui5_cl_demo_app_160.clas.xml +++ b/src/01/06/z2ui5_cl_demo_app_160.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_160 E - sap.ui.Table - Events on Cell Level + ui.Table - Events on Cell Level 1 X X diff --git a/src/01/06/z2ui5_cl_demo_app_448.clas.xml b/src/01/06/z2ui5_cl_demo_app_448.clas.xml index 03ec3ead..f288ddaf 100644 --- a/src/01/06/z2ui5_cl_demo_app_448.clas.xml +++ b/src/01/06/z2ui5_cl_demo_app_448.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_448 E - sap.m.Panel (A) - setExpanded + Action - Panel, setExpanded (A) 1 X X diff --git a/src/01/06/z2ui5_cl_demo_app_449.clas.xml b/src/01/06/z2ui5_cl_demo_app_449.clas.xml index b6340228..fb2039e6 100644 --- a/src/01/06/z2ui5_cl_demo_app_449.clas.xml +++ b/src/01/06/z2ui5_cl_demo_app_449.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_449 E - sap.m.PDFViewer (A) + Action - PDF Viewer Display (A) 1 X X diff --git a/src/01/06/z2ui5_cl_demo_app_459.clas.xml b/src/01/06/z2ui5_cl_demo_app_459.clas.xml index 3b0d7507..0890e300 100644 --- a/src/01/06/z2ui5_cl_demo_app_459.clas.xml +++ b/src/01/06/z2ui5_cl_demo_app_459.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_459 E - sap.m.Table - Drag and Drop + Table - Drag and Drop (A) 1 X X diff --git a/src/01/06/z2ui5_cl_demo_app_460.clas.xml b/src/01/06/z2ui5_cl_demo_app_460.clas.xml index 405578ef..6969e816 100644 --- a/src/01/06/z2ui5_cl_demo_app_460.clas.xml +++ b/src/01/06/z2ui5_cl_demo_app_460.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_460 E - sap.m.Tree + Tree - Simple 1 X X diff --git a/src/01/06/z2ui5_cl_demo_app_461.clas.abap b/src/01/06/z2ui5_cl_demo_app_461.clas.abap index 2152f67c..f1b397af 100644 --- a/src/01/06/z2ui5_cl_demo_app_461.clas.abap +++ b/src/01/06/z2ui5_cl_demo_app_461.clas.abap @@ -24,7 +24,9 @@ CLASS z2ui5_cl_demo_app_461 DEFINITION PUBLIC. ENDCLASS. -CLASS z2ui5_cl_demo_app_461 IMPLEMENTATION. + +CLASS Z2UI5_CL_DEMO_APP_461 IMPLEMENTATION. + METHOD z2ui5_if_app~main. @@ -142,5 +144,4 @@ CLASS z2ui5_cl_demo_app_461 IMPLEMENTATION. client->view_display( view->stringify( ) ). ENDMETHOD. - ENDCLASS. diff --git a/src/01/06/z2ui5_cl_demo_app_461.clas.xml b/src/01/06/z2ui5_cl_demo_app_461.clas.xml index 86608652..ab1e05d5 100644 --- a/src/01/06/z2ui5_cl_demo_app_461.clas.xml +++ b/src/01/06/z2ui5_cl_demo_app_461.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_461 E - sap.m.Tree - Drag and Drop + Tree - Drag and Drop 1 X X diff --git a/src/01/06/z2ui5_cl_demo_app_462.clas.abap b/src/01/06/z2ui5_cl_demo_app_462.clas.abap index beb567a9..1d16910f 100644 --- a/src/01/06/z2ui5_cl_demo_app_462.clas.abap +++ b/src/01/06/z2ui5_cl_demo_app_462.clas.abap @@ -30,7 +30,9 @@ CLASS z2ui5_cl_demo_app_462 DEFINITION PUBLIC. ENDCLASS. -CLASS z2ui5_cl_demo_app_462 IMPLEMENTATION. + +CLASS Z2UI5_CL_DEMO_APP_462 IMPLEMENTATION. + METHOD z2ui5_if_app~main. @@ -125,5 +127,4 @@ CLASS z2ui5_cl_demo_app_462 IMPLEMENTATION. client->view_display( view->stringify( ) ). ENDMETHOD. - ENDCLASS. diff --git a/src/01/06/z2ui5_cl_demo_app_462.clas.xml b/src/01/06/z2ui5_cl_demo_app_462.clas.xml index f926962a..d78c3b1b 100644 --- a/src/01/06/z2ui5_cl_demo_app_462.clas.xml +++ b/src/01/06/z2ui5_cl_demo_app_462.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_462 E - sap.m.Tree - Inside Popup + Tree - Inside Popup (C) 1 X X diff --git a/src/01/06/z2ui5_cl_demo_app_463.clas.xml b/src/01/06/z2ui5_cl_demo_app_463.clas.xml index 7ccfb055..abcc7c59 100644 --- a/src/01/06/z2ui5_cl_demo_app_463.clas.xml +++ b/src/01/06/z2ui5_cl_demo_app_463.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_463 E - Tree - editable nodes (CustomTreeItem) + Tree - Editable with Custom Item (C) 1 X X From 97c0c79b984764ffdc4a996d2fc650bc1d4ca7c4 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 19 Jul 2026 10:57:21 +0000 Subject: [PATCH 24/49] Merge framework subpackages into src/01/02 "framework - use cases" MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Consolidate the three framework sample packages into one: - 01/05 (framework - extended Controls) and 01/06 (framework - use cases) move into 01/02, which is renamed from "framework - action" to "framework - use cases" (42 samples total). - Class names are folder-independent (FOLDER_LOGIC=PREFIX), so no renames and navigation is unaffected. - Update the AGENTS.md §1 tree and the "where to file a demo" note to the single package; check-agents-structure passes. - Regenerate both overview catalogs (npm run launchpad); the sample_app_001 overview now shows one "framework - use cases" group. abaplint: 0 issues. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_018JnhapjtGyzgxzuzUoeeXW --- AGENTS.md | 8 +- src/01/02/package.devc.xml | 2 +- .../z2ui5_cl_demo_app_006.clas.abap | 0 .../{06 => 02}/z2ui5_cl_demo_app_006.clas.xml | 0 .../z2ui5_cl_demo_app_011.clas.abap | 0 .../{06 => 02}/z2ui5_cl_demo_app_011.clas.xml | 0 .../z2ui5_cl_demo_app_019.clas.abap | 0 .../{06 => 02}/z2ui5_cl_demo_app_019.clas.xml | 0 .../z2ui5_cl_demo_app_045.clas.abap | 0 .../{06 => 02}/z2ui5_cl_demo_app_045.clas.xml | 0 .../z2ui5_cl_demo_app_048.clas.abap | 0 .../{06 => 02}/z2ui5_cl_demo_app_048.clas.xml | 0 .../z2ui5_cl_demo_app_053.clas.abap | 0 .../{06 => 02}/z2ui5_cl_demo_app_053.clas.xml | 0 .../z2ui5_cl_demo_app_059.clas.abap | 0 .../{06 => 02}/z2ui5_cl_demo_app_059.clas.xml | 0 .../z2ui5_cl_demo_app_070.clas.abap | 0 .../{06 => 02}/z2ui5_cl_demo_app_070.clas.xml | 0 .../z2ui5_cl_demo_app_074.clas.abap | 0 .../{05 => 02}/z2ui5_cl_demo_app_074.clas.xml | 0 .../z2ui5_cl_demo_app_078.clas.abap | 0 .../{05 => 02}/z2ui5_cl_demo_app_078.clas.xml | 0 .../z2ui5_cl_demo_app_088.clas.abap | 0 .../{05 => 02}/z2ui5_cl_demo_app_088.clas.xml | 0 .../z2ui5_cl_demo_app_120.clas.abap | 0 .../{05 => 02}/z2ui5_cl_demo_app_120.clas.xml | 0 .../z2ui5_cl_demo_app_143.clas.abap | 0 .../{06 => 02}/z2ui5_cl_demo_app_143.clas.xml | 0 .../z2ui5_cl_demo_app_160.clas.abap | 0 .../{06 => 02}/z2ui5_cl_demo_app_160.clas.xml | 0 .../z2ui5_cl_demo_app_170.clas.abap | 0 .../{05 => 02}/z2ui5_cl_demo_app_170.clas.xml | 0 .../z2ui5_cl_demo_app_202.clas.abap | 0 .../{05 => 02}/z2ui5_cl_demo_app_202.clas.xml | 0 .../z2ui5_cl_demo_app_279.clas.abap | 0 .../{05 => 02}/z2ui5_cl_demo_app_279.clas.xml | 0 .../z2ui5_cl_demo_app_306.clas.abap | 0 .../{05 => 02}/z2ui5_cl_demo_app_306.clas.xml | 0 .../z2ui5_cl_demo_app_448.clas.abap | 0 .../{06 => 02}/z2ui5_cl_demo_app_448.clas.xml | 0 .../z2ui5_cl_demo_app_449.clas.abap | 0 .../{06 => 02}/z2ui5_cl_demo_app_449.clas.xml | 0 .../z2ui5_cl_demo_app_459.clas.abap | 0 .../{06 => 02}/z2ui5_cl_demo_app_459.clas.xml | 0 .../z2ui5_cl_demo_app_460.clas.abap | 0 .../{06 => 02}/z2ui5_cl_demo_app_460.clas.xml | 0 .../z2ui5_cl_demo_app_461.clas.abap | 0 .../{06 => 02}/z2ui5_cl_demo_app_461.clas.xml | 0 .../z2ui5_cl_demo_app_462.clas.abap | 0 .../{06 => 02}/z2ui5_cl_demo_app_462.clas.xml | 0 .../z2ui5_cl_demo_app_463.clas.abap | 0 .../{06 => 02}/z2ui5_cl_demo_app_463.clas.xml | 0 .../z2ui5_cl_demo_app_464.clas.abap | 0 .../{06 => 02}/z2ui5_cl_demo_app_464.clas.xml | 0 src/01/05/package.devc.xml | 10 -- src/01/06/package.devc.xml | 11 -- src/01/z2ui5_cl_sample_app_001.clas.abap | 112 +++++++++--------- 57 files changed, 60 insertions(+), 83 deletions(-) rename src/01/{06 => 02}/z2ui5_cl_demo_app_006.clas.abap (100%) rename src/01/{06 => 02}/z2ui5_cl_demo_app_006.clas.xml (100%) rename src/01/{06 => 02}/z2ui5_cl_demo_app_011.clas.abap (100%) rename src/01/{06 => 02}/z2ui5_cl_demo_app_011.clas.xml (100%) rename src/01/{06 => 02}/z2ui5_cl_demo_app_019.clas.abap (100%) rename src/01/{06 => 02}/z2ui5_cl_demo_app_019.clas.xml (100%) rename src/01/{06 => 02}/z2ui5_cl_demo_app_045.clas.abap (100%) rename src/01/{06 => 02}/z2ui5_cl_demo_app_045.clas.xml (100%) rename src/01/{06 => 02}/z2ui5_cl_demo_app_048.clas.abap (100%) rename src/01/{06 => 02}/z2ui5_cl_demo_app_048.clas.xml (100%) rename src/01/{06 => 02}/z2ui5_cl_demo_app_053.clas.abap (100%) rename src/01/{06 => 02}/z2ui5_cl_demo_app_053.clas.xml (100%) rename src/01/{06 => 02}/z2ui5_cl_demo_app_059.clas.abap (100%) rename src/01/{06 => 02}/z2ui5_cl_demo_app_059.clas.xml (100%) rename src/01/{06 => 02}/z2ui5_cl_demo_app_070.clas.abap (100%) rename src/01/{06 => 02}/z2ui5_cl_demo_app_070.clas.xml (100%) rename src/01/{05 => 02}/z2ui5_cl_demo_app_074.clas.abap (100%) rename src/01/{05 => 02}/z2ui5_cl_demo_app_074.clas.xml (100%) rename src/01/{05 => 02}/z2ui5_cl_demo_app_078.clas.abap (100%) rename src/01/{05 => 02}/z2ui5_cl_demo_app_078.clas.xml (100%) rename src/01/{05 => 02}/z2ui5_cl_demo_app_088.clas.abap (100%) rename src/01/{05 => 02}/z2ui5_cl_demo_app_088.clas.xml (100%) rename src/01/{05 => 02}/z2ui5_cl_demo_app_120.clas.abap (100%) rename src/01/{05 => 02}/z2ui5_cl_demo_app_120.clas.xml (100%) rename src/01/{06 => 02}/z2ui5_cl_demo_app_143.clas.abap (100%) rename src/01/{06 => 02}/z2ui5_cl_demo_app_143.clas.xml (100%) rename src/01/{06 => 02}/z2ui5_cl_demo_app_160.clas.abap (100%) rename src/01/{06 => 02}/z2ui5_cl_demo_app_160.clas.xml (100%) rename src/01/{05 => 02}/z2ui5_cl_demo_app_170.clas.abap (100%) rename src/01/{05 => 02}/z2ui5_cl_demo_app_170.clas.xml (100%) rename src/01/{05 => 02}/z2ui5_cl_demo_app_202.clas.abap (100%) rename src/01/{05 => 02}/z2ui5_cl_demo_app_202.clas.xml (100%) rename src/01/{05 => 02}/z2ui5_cl_demo_app_279.clas.abap (100%) rename src/01/{05 => 02}/z2ui5_cl_demo_app_279.clas.xml (100%) rename src/01/{05 => 02}/z2ui5_cl_demo_app_306.clas.abap (100%) rename src/01/{05 => 02}/z2ui5_cl_demo_app_306.clas.xml (100%) rename src/01/{06 => 02}/z2ui5_cl_demo_app_448.clas.abap (100%) rename src/01/{06 => 02}/z2ui5_cl_demo_app_448.clas.xml (100%) rename src/01/{06 => 02}/z2ui5_cl_demo_app_449.clas.abap (100%) rename src/01/{06 => 02}/z2ui5_cl_demo_app_449.clas.xml (100%) rename src/01/{06 => 02}/z2ui5_cl_demo_app_459.clas.abap (100%) rename src/01/{06 => 02}/z2ui5_cl_demo_app_459.clas.xml (100%) rename src/01/{06 => 02}/z2ui5_cl_demo_app_460.clas.abap (100%) rename src/01/{06 => 02}/z2ui5_cl_demo_app_460.clas.xml (100%) rename src/01/{06 => 02}/z2ui5_cl_demo_app_461.clas.abap (100%) rename src/01/{06 => 02}/z2ui5_cl_demo_app_461.clas.xml (100%) rename src/01/{06 => 02}/z2ui5_cl_demo_app_462.clas.abap (100%) rename src/01/{06 => 02}/z2ui5_cl_demo_app_462.clas.xml (100%) rename src/01/{06 => 02}/z2ui5_cl_demo_app_463.clas.abap (100%) rename src/01/{06 => 02}/z2ui5_cl_demo_app_463.clas.xml (100%) rename src/01/{06 => 02}/z2ui5_cl_demo_app_464.clas.abap (100%) rename src/01/{06 => 02}/z2ui5_cl_demo_app_464.clas.xml (100%) delete mode 100644 src/01/05/package.devc.xml delete mode 100644 src/01/06/package.devc.xml diff --git a/AGENTS.md b/AGENTS.md index 982912a4..ee3d00ba 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -34,9 +34,7 @@ apps directly in `src/` root** — every sample sits in a categorised subpackage src/ ├── 01/ "basic" cloud-ready & downportable — survives every build │ ├── 01/ framework - basics -│ ├── 02/ framework - action -│ ├── 05/ framework - extended Controls (CC and Action) -│ ├── 06/ framework - use cases +│ ├── 02/ framework - use cases framework actions, custom controls and use cases │ └── 08/ controls - UI5 Demo Kit 1:1 rebuilds of UI5 demo kit samples, split by library │ ├── 00/ controls - sap.m │ ├── 01/ controls - sap.uxap @@ -84,8 +82,8 @@ truncated to the 60-character DESCRIPT limit). The **full, untruncated** description is kept as additional ABAP Doc lines below the URL line; the overview generator prefers those lines as the tile `sub` (§4). Demos that have no demo kit original do not belong in `01/08` — file them in -the framework packages (`01/05` for custom-control/action demos, `01/06` for -use cases) or, when a restriction applies, in the matching `src/00` category. +the framework package (`01/02`, actions / custom controls / use cases) or, +when a restriction applies, in the matching `src/00` category. Machine-generated demo kit ports that have not been manually reviewed do not live in this repository — they are collected in the separate api repository diff --git a/src/01/02/package.devc.xml b/src/01/02/package.devc.xml index 6ba1b092..26b016e1 100644 --- a/src/01/02/package.devc.xml +++ b/src/01/02/package.devc.xml @@ -3,7 +3,7 @@ - framework - action + framework - use cases diff --git a/src/01/06/z2ui5_cl_demo_app_006.clas.abap b/src/01/02/z2ui5_cl_demo_app_006.clas.abap similarity index 100% rename from src/01/06/z2ui5_cl_demo_app_006.clas.abap rename to src/01/02/z2ui5_cl_demo_app_006.clas.abap diff --git a/src/01/06/z2ui5_cl_demo_app_006.clas.xml b/src/01/02/z2ui5_cl_demo_app_006.clas.xml similarity index 100% rename from src/01/06/z2ui5_cl_demo_app_006.clas.xml rename to src/01/02/z2ui5_cl_demo_app_006.clas.xml diff --git a/src/01/06/z2ui5_cl_demo_app_011.clas.abap b/src/01/02/z2ui5_cl_demo_app_011.clas.abap similarity index 100% rename from src/01/06/z2ui5_cl_demo_app_011.clas.abap rename to src/01/02/z2ui5_cl_demo_app_011.clas.abap diff --git a/src/01/06/z2ui5_cl_demo_app_011.clas.xml b/src/01/02/z2ui5_cl_demo_app_011.clas.xml similarity index 100% rename from src/01/06/z2ui5_cl_demo_app_011.clas.xml rename to src/01/02/z2ui5_cl_demo_app_011.clas.xml diff --git a/src/01/06/z2ui5_cl_demo_app_019.clas.abap b/src/01/02/z2ui5_cl_demo_app_019.clas.abap similarity index 100% rename from src/01/06/z2ui5_cl_demo_app_019.clas.abap rename to src/01/02/z2ui5_cl_demo_app_019.clas.abap diff --git a/src/01/06/z2ui5_cl_demo_app_019.clas.xml b/src/01/02/z2ui5_cl_demo_app_019.clas.xml similarity index 100% rename from src/01/06/z2ui5_cl_demo_app_019.clas.xml rename to src/01/02/z2ui5_cl_demo_app_019.clas.xml diff --git a/src/01/06/z2ui5_cl_demo_app_045.clas.abap b/src/01/02/z2ui5_cl_demo_app_045.clas.abap similarity index 100% rename from src/01/06/z2ui5_cl_demo_app_045.clas.abap rename to src/01/02/z2ui5_cl_demo_app_045.clas.abap diff --git a/src/01/06/z2ui5_cl_demo_app_045.clas.xml b/src/01/02/z2ui5_cl_demo_app_045.clas.xml similarity index 100% rename from src/01/06/z2ui5_cl_demo_app_045.clas.xml rename to src/01/02/z2ui5_cl_demo_app_045.clas.xml diff --git a/src/01/06/z2ui5_cl_demo_app_048.clas.abap b/src/01/02/z2ui5_cl_demo_app_048.clas.abap similarity index 100% rename from src/01/06/z2ui5_cl_demo_app_048.clas.abap rename to src/01/02/z2ui5_cl_demo_app_048.clas.abap diff --git a/src/01/06/z2ui5_cl_demo_app_048.clas.xml b/src/01/02/z2ui5_cl_demo_app_048.clas.xml similarity index 100% rename from src/01/06/z2ui5_cl_demo_app_048.clas.xml rename to src/01/02/z2ui5_cl_demo_app_048.clas.xml diff --git a/src/01/06/z2ui5_cl_demo_app_053.clas.abap b/src/01/02/z2ui5_cl_demo_app_053.clas.abap similarity index 100% rename from src/01/06/z2ui5_cl_demo_app_053.clas.abap rename to src/01/02/z2ui5_cl_demo_app_053.clas.abap diff --git a/src/01/06/z2ui5_cl_demo_app_053.clas.xml b/src/01/02/z2ui5_cl_demo_app_053.clas.xml similarity index 100% rename from src/01/06/z2ui5_cl_demo_app_053.clas.xml rename to src/01/02/z2ui5_cl_demo_app_053.clas.xml diff --git a/src/01/06/z2ui5_cl_demo_app_059.clas.abap b/src/01/02/z2ui5_cl_demo_app_059.clas.abap similarity index 100% rename from src/01/06/z2ui5_cl_demo_app_059.clas.abap rename to src/01/02/z2ui5_cl_demo_app_059.clas.abap diff --git a/src/01/06/z2ui5_cl_demo_app_059.clas.xml b/src/01/02/z2ui5_cl_demo_app_059.clas.xml similarity index 100% rename from src/01/06/z2ui5_cl_demo_app_059.clas.xml rename to src/01/02/z2ui5_cl_demo_app_059.clas.xml diff --git a/src/01/06/z2ui5_cl_demo_app_070.clas.abap b/src/01/02/z2ui5_cl_demo_app_070.clas.abap similarity index 100% rename from src/01/06/z2ui5_cl_demo_app_070.clas.abap rename to src/01/02/z2ui5_cl_demo_app_070.clas.abap diff --git a/src/01/06/z2ui5_cl_demo_app_070.clas.xml b/src/01/02/z2ui5_cl_demo_app_070.clas.xml similarity index 100% rename from src/01/06/z2ui5_cl_demo_app_070.clas.xml rename to src/01/02/z2ui5_cl_demo_app_070.clas.xml diff --git a/src/01/05/z2ui5_cl_demo_app_074.clas.abap b/src/01/02/z2ui5_cl_demo_app_074.clas.abap similarity index 100% rename from src/01/05/z2ui5_cl_demo_app_074.clas.abap rename to src/01/02/z2ui5_cl_demo_app_074.clas.abap diff --git a/src/01/05/z2ui5_cl_demo_app_074.clas.xml b/src/01/02/z2ui5_cl_demo_app_074.clas.xml similarity index 100% rename from src/01/05/z2ui5_cl_demo_app_074.clas.xml rename to src/01/02/z2ui5_cl_demo_app_074.clas.xml diff --git a/src/01/05/z2ui5_cl_demo_app_078.clas.abap b/src/01/02/z2ui5_cl_demo_app_078.clas.abap similarity index 100% rename from src/01/05/z2ui5_cl_demo_app_078.clas.abap rename to src/01/02/z2ui5_cl_demo_app_078.clas.abap diff --git a/src/01/05/z2ui5_cl_demo_app_078.clas.xml b/src/01/02/z2ui5_cl_demo_app_078.clas.xml similarity index 100% rename from src/01/05/z2ui5_cl_demo_app_078.clas.xml rename to src/01/02/z2ui5_cl_demo_app_078.clas.xml diff --git a/src/01/05/z2ui5_cl_demo_app_088.clas.abap b/src/01/02/z2ui5_cl_demo_app_088.clas.abap similarity index 100% rename from src/01/05/z2ui5_cl_demo_app_088.clas.abap rename to src/01/02/z2ui5_cl_demo_app_088.clas.abap diff --git a/src/01/05/z2ui5_cl_demo_app_088.clas.xml b/src/01/02/z2ui5_cl_demo_app_088.clas.xml similarity index 100% rename from src/01/05/z2ui5_cl_demo_app_088.clas.xml rename to src/01/02/z2ui5_cl_demo_app_088.clas.xml diff --git a/src/01/05/z2ui5_cl_demo_app_120.clas.abap b/src/01/02/z2ui5_cl_demo_app_120.clas.abap similarity index 100% rename from src/01/05/z2ui5_cl_demo_app_120.clas.abap rename to src/01/02/z2ui5_cl_demo_app_120.clas.abap diff --git a/src/01/05/z2ui5_cl_demo_app_120.clas.xml b/src/01/02/z2ui5_cl_demo_app_120.clas.xml similarity index 100% rename from src/01/05/z2ui5_cl_demo_app_120.clas.xml rename to src/01/02/z2ui5_cl_demo_app_120.clas.xml diff --git a/src/01/06/z2ui5_cl_demo_app_143.clas.abap b/src/01/02/z2ui5_cl_demo_app_143.clas.abap similarity index 100% rename from src/01/06/z2ui5_cl_demo_app_143.clas.abap rename to src/01/02/z2ui5_cl_demo_app_143.clas.abap diff --git a/src/01/06/z2ui5_cl_demo_app_143.clas.xml b/src/01/02/z2ui5_cl_demo_app_143.clas.xml similarity index 100% rename from src/01/06/z2ui5_cl_demo_app_143.clas.xml rename to src/01/02/z2ui5_cl_demo_app_143.clas.xml diff --git a/src/01/06/z2ui5_cl_demo_app_160.clas.abap b/src/01/02/z2ui5_cl_demo_app_160.clas.abap similarity index 100% rename from src/01/06/z2ui5_cl_demo_app_160.clas.abap rename to src/01/02/z2ui5_cl_demo_app_160.clas.abap diff --git a/src/01/06/z2ui5_cl_demo_app_160.clas.xml b/src/01/02/z2ui5_cl_demo_app_160.clas.xml similarity index 100% rename from src/01/06/z2ui5_cl_demo_app_160.clas.xml rename to src/01/02/z2ui5_cl_demo_app_160.clas.xml diff --git a/src/01/05/z2ui5_cl_demo_app_170.clas.abap b/src/01/02/z2ui5_cl_demo_app_170.clas.abap similarity index 100% rename from src/01/05/z2ui5_cl_demo_app_170.clas.abap rename to src/01/02/z2ui5_cl_demo_app_170.clas.abap diff --git a/src/01/05/z2ui5_cl_demo_app_170.clas.xml b/src/01/02/z2ui5_cl_demo_app_170.clas.xml similarity index 100% rename from src/01/05/z2ui5_cl_demo_app_170.clas.xml rename to src/01/02/z2ui5_cl_demo_app_170.clas.xml diff --git a/src/01/05/z2ui5_cl_demo_app_202.clas.abap b/src/01/02/z2ui5_cl_demo_app_202.clas.abap similarity index 100% rename from src/01/05/z2ui5_cl_demo_app_202.clas.abap rename to src/01/02/z2ui5_cl_demo_app_202.clas.abap diff --git a/src/01/05/z2ui5_cl_demo_app_202.clas.xml b/src/01/02/z2ui5_cl_demo_app_202.clas.xml similarity index 100% rename from src/01/05/z2ui5_cl_demo_app_202.clas.xml rename to src/01/02/z2ui5_cl_demo_app_202.clas.xml diff --git a/src/01/05/z2ui5_cl_demo_app_279.clas.abap b/src/01/02/z2ui5_cl_demo_app_279.clas.abap similarity index 100% rename from src/01/05/z2ui5_cl_demo_app_279.clas.abap rename to src/01/02/z2ui5_cl_demo_app_279.clas.abap diff --git a/src/01/05/z2ui5_cl_demo_app_279.clas.xml b/src/01/02/z2ui5_cl_demo_app_279.clas.xml similarity index 100% rename from src/01/05/z2ui5_cl_demo_app_279.clas.xml rename to src/01/02/z2ui5_cl_demo_app_279.clas.xml diff --git a/src/01/05/z2ui5_cl_demo_app_306.clas.abap b/src/01/02/z2ui5_cl_demo_app_306.clas.abap similarity index 100% rename from src/01/05/z2ui5_cl_demo_app_306.clas.abap rename to src/01/02/z2ui5_cl_demo_app_306.clas.abap diff --git a/src/01/05/z2ui5_cl_demo_app_306.clas.xml b/src/01/02/z2ui5_cl_demo_app_306.clas.xml similarity index 100% rename from src/01/05/z2ui5_cl_demo_app_306.clas.xml rename to src/01/02/z2ui5_cl_demo_app_306.clas.xml diff --git a/src/01/06/z2ui5_cl_demo_app_448.clas.abap b/src/01/02/z2ui5_cl_demo_app_448.clas.abap similarity index 100% rename from src/01/06/z2ui5_cl_demo_app_448.clas.abap rename to src/01/02/z2ui5_cl_demo_app_448.clas.abap diff --git a/src/01/06/z2ui5_cl_demo_app_448.clas.xml b/src/01/02/z2ui5_cl_demo_app_448.clas.xml similarity index 100% rename from src/01/06/z2ui5_cl_demo_app_448.clas.xml rename to src/01/02/z2ui5_cl_demo_app_448.clas.xml diff --git a/src/01/06/z2ui5_cl_demo_app_449.clas.abap b/src/01/02/z2ui5_cl_demo_app_449.clas.abap similarity index 100% rename from src/01/06/z2ui5_cl_demo_app_449.clas.abap rename to src/01/02/z2ui5_cl_demo_app_449.clas.abap diff --git a/src/01/06/z2ui5_cl_demo_app_449.clas.xml b/src/01/02/z2ui5_cl_demo_app_449.clas.xml similarity index 100% rename from src/01/06/z2ui5_cl_demo_app_449.clas.xml rename to src/01/02/z2ui5_cl_demo_app_449.clas.xml diff --git a/src/01/06/z2ui5_cl_demo_app_459.clas.abap b/src/01/02/z2ui5_cl_demo_app_459.clas.abap similarity index 100% rename from src/01/06/z2ui5_cl_demo_app_459.clas.abap rename to src/01/02/z2ui5_cl_demo_app_459.clas.abap diff --git a/src/01/06/z2ui5_cl_demo_app_459.clas.xml b/src/01/02/z2ui5_cl_demo_app_459.clas.xml similarity index 100% rename from src/01/06/z2ui5_cl_demo_app_459.clas.xml rename to src/01/02/z2ui5_cl_demo_app_459.clas.xml diff --git a/src/01/06/z2ui5_cl_demo_app_460.clas.abap b/src/01/02/z2ui5_cl_demo_app_460.clas.abap similarity index 100% rename from src/01/06/z2ui5_cl_demo_app_460.clas.abap rename to src/01/02/z2ui5_cl_demo_app_460.clas.abap diff --git a/src/01/06/z2ui5_cl_demo_app_460.clas.xml b/src/01/02/z2ui5_cl_demo_app_460.clas.xml similarity index 100% rename from src/01/06/z2ui5_cl_demo_app_460.clas.xml rename to src/01/02/z2ui5_cl_demo_app_460.clas.xml diff --git a/src/01/06/z2ui5_cl_demo_app_461.clas.abap b/src/01/02/z2ui5_cl_demo_app_461.clas.abap similarity index 100% rename from src/01/06/z2ui5_cl_demo_app_461.clas.abap rename to src/01/02/z2ui5_cl_demo_app_461.clas.abap diff --git a/src/01/06/z2ui5_cl_demo_app_461.clas.xml b/src/01/02/z2ui5_cl_demo_app_461.clas.xml similarity index 100% rename from src/01/06/z2ui5_cl_demo_app_461.clas.xml rename to src/01/02/z2ui5_cl_demo_app_461.clas.xml diff --git a/src/01/06/z2ui5_cl_demo_app_462.clas.abap b/src/01/02/z2ui5_cl_demo_app_462.clas.abap similarity index 100% rename from src/01/06/z2ui5_cl_demo_app_462.clas.abap rename to src/01/02/z2ui5_cl_demo_app_462.clas.abap diff --git a/src/01/06/z2ui5_cl_demo_app_462.clas.xml b/src/01/02/z2ui5_cl_demo_app_462.clas.xml similarity index 100% rename from src/01/06/z2ui5_cl_demo_app_462.clas.xml rename to src/01/02/z2ui5_cl_demo_app_462.clas.xml diff --git a/src/01/06/z2ui5_cl_demo_app_463.clas.abap b/src/01/02/z2ui5_cl_demo_app_463.clas.abap similarity index 100% rename from src/01/06/z2ui5_cl_demo_app_463.clas.abap rename to src/01/02/z2ui5_cl_demo_app_463.clas.abap diff --git a/src/01/06/z2ui5_cl_demo_app_463.clas.xml b/src/01/02/z2ui5_cl_demo_app_463.clas.xml similarity index 100% rename from src/01/06/z2ui5_cl_demo_app_463.clas.xml rename to src/01/02/z2ui5_cl_demo_app_463.clas.xml diff --git a/src/01/06/z2ui5_cl_demo_app_464.clas.abap b/src/01/02/z2ui5_cl_demo_app_464.clas.abap similarity index 100% rename from src/01/06/z2ui5_cl_demo_app_464.clas.abap rename to src/01/02/z2ui5_cl_demo_app_464.clas.abap diff --git a/src/01/06/z2ui5_cl_demo_app_464.clas.xml b/src/01/02/z2ui5_cl_demo_app_464.clas.xml similarity index 100% rename from src/01/06/z2ui5_cl_demo_app_464.clas.xml rename to src/01/02/z2ui5_cl_demo_app_464.clas.xml diff --git a/src/01/05/package.devc.xml b/src/01/05/package.devc.xml deleted file mode 100644 index 331d8b63..00000000 --- a/src/01/05/package.devc.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - framework - extended Controls (CC and Action) - - - - diff --git a/src/01/06/package.devc.xml b/src/01/06/package.devc.xml deleted file mode 100644 index 4dca2796..00000000 --- a/src/01/06/package.devc.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - framework - use cases - X - - - - diff --git a/src/01/z2ui5_cl_sample_app_001.clas.abap b/src/01/z2ui5_cl_sample_app_001.clas.abap index 882c2ad3..331202f3 100644 --- a/src/01/z2ui5_cl_sample_app_001.clas.abap +++ b/src/01/z2ui5_cl_sample_app_001.clas.abap @@ -209,85 +209,85 @@ CLASS z2ui5_cl_sample_app_001 IMPLEMENTATION. METHOD get_catalog. result = VALUE #( - ( group = `framework - basics` header = `Binding I` sub = `Level Simple` app = `z2ui5_cl_demo_app_001` ) + ( group = `framework - basics` header = `Binding` sub = `Level Simple` app = `z2ui5_cl_demo_app_001` ) ( group = `framework - basics` header = `Binding II` sub = `Level Structure/Component` app = `z2ui5_cl_demo_app_166` ) ( group = `framework - basics` header = `Binding III` sub = `Level Table/Cell` app = `z2ui5_cl_demo_app_144` ) ( group = `framework - basics` header = `Binding IV` sub = `Expression Binding` app = `z2ui5_cl_demo_app_027` ) ( group = `framework - basics` header = `Binding V` sub = `Formatting Integers, Decimals, Dates & Time` app = `z2ui5_cl_demo_app_047` ) ( group = `framework - basics` header = `Binding VII` sub = `Formatting Currencies` app = `z2ui5_cl_demo_app_067` ) - ( group = `framework - basics` header = `Event I` sub = `Handle events & change the view` app = `z2ui5_cl_demo_app_004` ) + ( group = `framework - basics` header = `Event` sub = `Handle events & change the view` app = `z2ui5_cl_demo_app_004` ) ( group = `framework - basics` header = `Event II` sub = `Additional Infos with t_args` app = `z2ui5_cl_demo_app_167` ) ( group = `framework - basics` header = `Event III` sub = `Facet Filter - T_arg with Objects` app = `z2ui5_cl_demo_app_197` ) - ( group = `framework - basics` header = `Message` sub = `Backend` app = `z2ui5_cl_demo_app_008` ) - ( group = `framework - basics` header = `Message` sub = `Message Model` app = `z2ui5_cl_demo_app_458` ) + ( group = `framework - basics` header = `Formatter` sub = `Date object minimal (DatePicker)` app = `z2ui5_cl_demo_app_457` ) + ( group = `framework - basics` header = `Formatter` sub = `Date objects for PlanningCalendar` app = `z2ui5_cl_demo_app_456` ) + ( group = `framework - basics` header = `Formatter` sub = `Simple` app = `z2ui5_cl_demo_app_453` ) + ( group = `framework - basics` header = `Formatter` sub = `weightState via core require` app = `z2ui5_cl_demo_app_450` ) + ( group = `framework - basics` header = `Message` sub = `Backend Processing` app = `z2ui5_cl_demo_app_008` ) ( group = `framework - basics` header = `Message` sub = `MessageBox` app = `z2ui5_cl_demo_app_382` ) ( group = `framework - basics` header = `Message` sub = `MessageToast` app = `z2ui5_cl_demo_app_381` ) ( group = `framework - basics` header = `Message` sub = `MessageView` app = `z2ui5_cl_demo_app_452` ) + ( group = `framework - basics` header = `Model` sub = `Device Model in views and popups` app = `z2ui5_cl_demo_app_445` ) + ( group = `framework - basics` header = `Model` sub = `Message Model` app = `z2ui5_cl_demo_app_458` ) + ( group = `framework - basics` header = `ModelMore` sub = `Set Size Limit` app = `z2ui5_cl_demo_app_071` ) ( group = `framework - basics` header = `More` sub = `Call and leave to apps` app = `z2ui5_cl_demo_app_024` ) ( group = `framework - basics` header = `More` sub = `Generic Data Reference` app = `z2ui5_cl_demo_app_061` ) - ( group = `framework - basics` header = `More` sub = `Model Size Limit` app = `z2ui5_cl_demo_app_071` ) ( group = `framework - basics` header = `More` sub = `Read Frontend Infos` app = `z2ui5_cl_demo_app_122` ) ( group = `framework - basics` header = `More` sub = `Require Object in XML View` app = `z2ui5_cl_demo_app_163` ) ( group = `framework - basics` header = `Nested Views I` sub = `Basic Example` app = `z2ui5_cl_demo_app_065` ) ( group = `framework - basics` header = `Nested Views II` sub = `Head & Item Table` app = `z2ui5_cl_demo_app_097` ) ( group = `framework - basics` header = `Nested Views III` sub = `Head & Item Table & Detail` app = `z2ui5_cl_demo_app_098` ) ( group = `framework - basics` header = `Nested Views IV` sub = `Sub-App` app = `z2ui5_cl_demo_app_104` ) - ( group = `framework - basics` header = `Popover I` sub = `Simple Example` app = `z2ui5_cl_demo_app_026` ) - ( group = `framework - basics` header = `Popover II` sub = `Item Level of Table` app = `z2ui5_cl_demo_app_052` ) - ( group = `framework - basics` header = `Popover III` sub = `List to select in Popover` app = `z2ui5_cl_demo_app_081` ) + ( group = `framework - basics` header = `Popover` sub = `Item Level of Table` app = `z2ui5_cl_demo_app_052` ) + ( group = `framework - basics` header = `Popover` sub = `List to select in Popover` app = `z2ui5_cl_demo_app_081` ) + ( group = `framework - basics` header = `Popover` sub = `Simple Example` app = `z2ui5_cl_demo_app_026` ) ( group = `framework - basics` header = `Popover IV` sub = `with Quick View` app = `z2ui5_cl_demo_app_109` ) - ( group = `framework - basics` header = `Popup I` sub = `Different ways of calling Popups` app = `z2ui5_cl_demo_app_012` ) - ( group = `framework - basics` header = `Popup II` sub = `Create Popup for Value Help` app = `z2ui5_cl_demo_app_009` ) + ( group = `framework - basics` header = `Popup` sub = `Different ways of calling Popups` app = `z2ui5_cl_demo_app_012` ) + ( group = `framework - basics` header = `Popup` sub = `Value Help with Popups` app = `z2ui5_cl_demo_app_009` ) ( group = `framework - basics` header = `Popup III` sub = `Popup in Popup - Backend Stack Handling` app = `z2ui5_cl_demo_app_161` ) ( group = `framework - basics` header = `Templating I` sub = `Basic Example` app = `z2ui5_cl_demo_app_173` ) ( group = `framework - basics` header = `Templating II` sub = `Nested Views` app = `z2ui5_cl_demo_app_176` ) - ( group = `framework - action` header = `Action` sub = `control_call` app = `z2ui5_cl_demo_app_446` ) - ( group = `framework - action` header = `Action` sub = `control_call_by_id` app = `z2ui5_cl_demo_app_447` ) - ( group = `framework - action` header = `Binding Call` sub = `filter and sort via backend event` app = `z2ui5_cl_demo_app_454` ) - ( group = `framework - action` header = `Binding Call` sub = `live filter without roundtrip` app = `z2ui5_cl_demo_app_455` ) - ( group = `framework - action` header = `Browser` sub = `Logout` app = `z2ui5_cl_demo_app_361` ) - ( group = `framework - action` header = `Browser` sub = `Title` app = `z2ui5_cl_demo_app_125` ) - ( group = `framework - action` header = `Focus I` sub = `Set Focus in Textfield` app = `z2ui5_cl_demo_app_133` ) - ( group = `framework - action` header = `Focus II` sub = `Jump with the focus` app = `z2ui5_cl_demo_app_189` ) - ( group = `framework - action` header = `Formatter` sub = `Date object minimal (DatePicker)` app = `z2ui5_cl_demo_app_457` ) - ( group = `framework - action` header = `Formatter` sub = `Date objects for PlanningCalendar` app = `z2ui5_cl_demo_app_456` ) - ( group = `framework - action` header = `Formatter` sub = `demo kit pack` app = `z2ui5_cl_demo_app_453` ) - ( group = `framework - action` header = `Formatter` sub = `weightState via core require` app = `z2ui5_cl_demo_app_450` ) - ( group = `framework - action` header = `Input` sub = `Clipboard` app = `z2ui5_cl_demo_app_325` ) - ( group = `framework - action` header = `Input` sub = `Hide/show Soft Keyboard` app = `z2ui5_cl_demo_app_352` ) - ( group = `framework - action` header = `Scroll I` sub = `Scroll to position` app = `z2ui5_cl_demo_app_362` ) - ( group = `framework - action` header = `Scroll II` sub = `Scroll into view` app = `z2ui5_cl_demo_app_363` ) - ( group = `framework - action` header = `Timer I` sub = `Wait n MS and call again the server` app = `z2ui5_cl_demo_app_028` ) - ( group = `framework - action` header = `Timer II` sub = `Loading Indicator with WAIT UP Backend` app = `z2ui5_cl_demo_app_064` ) - ( group = `framework - action` header = `URL I` sub = `New Tab Open an URL in a new tab` app = `z2ui5_cl_demo_app_073` ) - ( group = `framework - action` header = `URL II` sub = `Open Telephon, Email usw` app = `z2ui5_cl_demo_app_316` ) - ( group = `framework - extended Controls (CC and Action)` header = `A Nav Container` sub = `` app = `z2ui5_cl_demo_app_088` ) - ( group = `framework - extended Controls (CC and Action)` header = `A Nav Container` sub = `Popup` app = `z2ui5_cl_demo_app_170` ) - ( group = `framework - extended Controls (CC and Action)` header = `A Wizard Control` sub = `` app = `z2ui5_cl_demo_app_202` ) - ( group = `framework - extended Controls (CC and Action)` header = `C File Uploader` sub = `` app = `z2ui5_cl_demo_app_074` ) - ( group = `framework - extended Controls (CC and Action)` header = `C Geoloaction` sub = `` app = `z2ui5_cl_demo_app_120` ) - ( group = `framework - extended Controls (CC and Action)` header = `C Multi Input` sub = `` app = `z2ui5_cl_demo_app_078` ) - ( group = `framework - extended Controls (CC and Action)` header = `CC CameraSelector` sub = `` app = `z2ui5_cl_demo_app_306` ) - ( group = `framework - extended Controls (CC and Action)` header = `CC Data loss protection` sub = `` app = `z2ui5_cl_demo_app_279` ) + ( group = `framework - use cases` header = `A Nav Container` sub = `` app = `z2ui5_cl_demo_app_088` ) + ( group = `framework - use cases` header = `A Nav Container` sub = `Popup` app = `z2ui5_cl_demo_app_170` ) + ( group = `framework - use cases` header = `A Wizard Control` sub = `` app = `z2ui5_cl_demo_app_202` ) + ( group = `framework - use cases` header = `Action` sub = `control_call` app = `z2ui5_cl_demo_app_446` ) + ( group = `framework - use cases` header = `Action` sub = `control_call_by_id` app = `z2ui5_cl_demo_app_447` ) + ( group = `framework - use cases` header = `Action` sub = `Panel, setExpanded (A)` app = `z2ui5_cl_demo_app_448` ) + ( group = `framework - use cases` header = `Action` sub = `PDF Viewer Display (A)` app = `z2ui5_cl_demo_app_449` ) + ( group = `framework - use cases` header = `Browser` sub = `Logout` app = `z2ui5_cl_demo_app_361` ) + ( group = `framework - use cases` header = `Browser` sub = `Title` app = `z2ui5_cl_demo_app_125` ) + ( group = `framework - use cases` header = `C File Uploader` sub = `` app = `z2ui5_cl_demo_app_074` ) + ( group = `framework - use cases` header = `C Geoloaction` sub = `` app = `z2ui5_cl_demo_app_120` ) + ( group = `framework - use cases` header = `C Multi Input` sub = `` app = `z2ui5_cl_demo_app_078` ) + ( group = `framework - use cases` header = `CC CameraSelector` sub = `` app = `z2ui5_cl_demo_app_306` ) + ( group = `framework - use cases` header = `CC Data loss protection` sub = `` app = `z2ui5_cl_demo_app_279` ) ( group = `framework - use cases` header = `Error Handling` sub = `unexpected error popup` app = `z2ui5_cl_demo_app_464` ) - ( group = `framework - use cases` header = `sap.m.List` sub = `Events & Visualization` app = `z2ui5_cl_demo_app_048` ) - ( group = `framework - use cases` header = `sap.m.Panel (A)` sub = `setExpanded` app = `z2ui5_cl_demo_app_448` ) - ( group = `framework - use cases` header = `sap.m.PDFViewer (A)` sub = `` app = `z2ui5_cl_demo_app_449` ) - ( group = `framework - use cases` header = `sap.m.SearchField` sub = `Live Search` app = `z2ui5_cl_demo_app_059` ) - ( group = `framework - use cases` header = `sap.m.SearchField` sub = `Search` app = `z2ui5_cl_demo_app_053` ) - ( group = `framework - use cases` header = `sap.m.Table` sub = `Backend Filter` app = `z2ui5_cl_demo_app_045` ) - ( group = `framework - use cases` header = `sap.m.Table` sub = `Drag and Drop` app = `z2ui5_cl_demo_app_459` ) - ( group = `framework - use cases` header = `sap.m.Table` sub = `Editable` app = `z2ui5_cl_demo_app_011` ) - ( group = `framework - use cases` header = `sap.m.Table` sub = `Selection Modes: Single Select & Multi Select` app = `z2ui5_cl_demo_app_019` ) - ( group = `framework - use cases` header = `sap.m.Table` sub = `Table with sap.m.ScrollContainer` app = `z2ui5_cl_demo_app_006` ) - ( group = `framework - use cases` header = `sap.m.Tree` sub = `` app = `z2ui5_cl_demo_app_460` ) - ( group = `framework - use cases` header = `sap.m.Tree` sub = `Drag and Drop` app = `z2ui5_cl_demo_app_461` ) - ( group = `framework - use cases` header = `sap.m.Tree` sub = `Inside Popup` app = `z2ui5_cl_demo_app_462` ) - ( group = `framework - use cases` header = `sap.ui.Device` sub = `Device Model in views and popups` app = `z2ui5_cl_demo_app_445` ) - ( group = `framework - use cases` header = `sap.ui.Table` sub = `Events on Cell Level` app = `z2ui5_cl_demo_app_160` ) - ( group = `framework - use cases` header = `sap.ui.Table` sub = `Filtering` app = `z2ui5_cl_demo_app_143` ) - ( group = `framework - use cases` header = `sap.ui.Table` sub = `Full Example` app = `z2ui5_cl_demo_app_070` ) - ( group = `framework - use cases` header = `Tree` sub = `editable nodes (CustomTreeItem)` app = `z2ui5_cl_demo_app_463` ) + ( group = `framework - use cases` header = `Focus I` sub = `Set Focus in Textfield` app = `z2ui5_cl_demo_app_133` ) + ( group = `framework - use cases` header = `Focus II` sub = `Jump with the focus` app = `z2ui5_cl_demo_app_189` ) + ( group = `framework - use cases` header = `Input` sub = `Clipboard` app = `z2ui5_cl_demo_app_325` ) + ( group = `framework - use cases` header = `Input` sub = `Hide/show Soft Keyboard` app = `z2ui5_cl_demo_app_352` ) + ( group = `framework - use cases` header = `List` sub = `Events & Visualization` app = `z2ui5_cl_demo_app_048` ) + ( group = `framework - use cases` header = `List` sub = `Filter and sort via backend event (A)` app = `z2ui5_cl_demo_app_454` ) + ( group = `framework - use cases` header = `List` sub = `Live filter without backend (A)` app = `z2ui5_cl_demo_app_455` ) + ( group = `framework - use cases` header = `m.Table` sub = `Search Backend Live` app = `z2ui5_cl_demo_app_059` ) + ( group = `framework - use cases` header = `Scroll I` sub = `Scroll to position` app = `z2ui5_cl_demo_app_362` ) + ( group = `framework - use cases` header = `Scroll II` sub = `Scroll into view` app = `z2ui5_cl_demo_app_363` ) + ( group = `framework - use cases` header = `Table` sub = `Backend Filter` app = `z2ui5_cl_demo_app_045` ) + ( group = `framework - use cases` header = `Table` sub = `Drag and Drop (A)` app = `z2ui5_cl_demo_app_459` ) + ( group = `framework - use cases` header = `Table` sub = `Editable` app = `z2ui5_cl_demo_app_011` ) + ( group = `framework - use cases` header = `Table` sub = `Search Backend` app = `z2ui5_cl_demo_app_053` ) + ( group = `framework - use cases` header = `Table` sub = `Selection Modes: Single Select & Multi Select` app = `z2ui5_cl_demo_app_019` ) + ( group = `framework - use cases` header = `Table` sub = `Table with ScrollContainer` app = `z2ui5_cl_demo_app_006` ) + ( group = `framework - use cases` header = `Timer I` sub = `Wait n MS and call again the server` app = `z2ui5_cl_demo_app_028` ) + ( group = `framework - use cases` header = `Timer II` sub = `Loading Indicator with WAIT UP Backend` app = `z2ui5_cl_demo_app_064` ) + ( group = `framework - use cases` header = `Tree` sub = `Drag and Drop` app = `z2ui5_cl_demo_app_461` ) + ( group = `framework - use cases` header = `Tree` sub = `Editable with Custom Item (C)` app = `z2ui5_cl_demo_app_463` ) + ( group = `framework - use cases` header = `Tree` sub = `Inside Popup (C)` app = `z2ui5_cl_demo_app_462` ) + ( group = `framework - use cases` header = `Tree` sub = `Simple` app = `z2ui5_cl_demo_app_460` ) + ( group = `framework - use cases` header = `ui.Table` sub = `Default Filtering` app = `z2ui5_cl_demo_app_143` ) + ( group = `framework - use cases` header = `ui.Table` sub = `Events on Cell Level` app = `z2ui5_cl_demo_app_160` ) + ( group = `framework - use cases` header = `ui.Table` sub = `Full Example` app = `z2ui5_cl_demo_app_070` ) + ( group = `framework - use cases` header = `URL I` sub = `New Tab Open an URL in a new tab` app = `z2ui5_cl_demo_app_073` ) + ( group = `framework - use cases` header = `URL II` sub = `Open Telephon, Email usw` app = `z2ui5_cl_demo_app_316` ) ( group = `controls - sap.m` header = `sap.m.ActionListItem` sub = `Use the Action List Item to trigger an action directly from a list` app = `z2ui5_cl_demo_app_216` ) ( group = `controls - sap.m` header = `sap.m.Breadcrumbs` sub = `Breadcrumbs sample with current page set as aggregation, resulting in a link` app = `z2ui5_cl_demo_app_292` ) ( group = `controls - sap.m` header = `sap.m.BusyIndicator` From 30d42e896190a70d6d355fcd8269c21006850aac Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 19 Jul 2026 11:05:56 +0000 Subject: [PATCH 25/49] Move the "under construction" strip to the extended overview The "This overview is still under construction / classic overview" message strip now lives on the extended overview (sample_app_000) instead of the basic one (sample_app_001). sample_app_000 gains the class_exists( ) guard (mirroring sample_app_001) so the strip's link to the classic overview app only renders when z2ui5_cl_demo_app_000 is present. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_018JnhapjtGyzgxzuzUoeeXW --- src/00/z2ui5_cl_sample_app_000.clas.abap | 28 ++++++++++++++++++++++++ src/01/z2ui5_cl_sample_app_001.clas.abap | 10 --------- 2 files changed, 28 insertions(+), 10 deletions(-) diff --git a/src/00/z2ui5_cl_sample_app_000.clas.abap b/src/00/z2ui5_cl_sample_app_000.clas.abap index 064fa4b9..1896f752 100644 --- a/src/00/z2ui5_cl_sample_app_000.clas.abap +++ b/src/00/z2ui5_cl_sample_app_000.clas.abap @@ -35,6 +35,11 @@ CLASS z2ui5_cl_sample_app_000 DEFINITION PUBLIC. METHODS get_catalog RETURNING VALUE(result) TYPE ty_t_tile. + METHODS class_exists + IMPORTING + name TYPE clike + RETURNING + VALUE(result) TYPE abap_bool. METHODS block_widths IMPORTING t_catalog TYPE ty_t_tile @@ -124,6 +129,16 @@ CLASS z2ui5_cl_sample_app_000 IMPLEMENTATION. press = client->_event_client( val = client->cs_event-open_new_tab t_arg = VALUE #( ( url_standard ) ) ) ). + IF class_exists( `Z2UI5_CL_DEMO_APP_000` ) = abap_true. + DATA(url) = |{ client->get( )-s_config-origin }{ client->get( )-s_config-pathname }?app_start=z2ui5_cl_demo_app_000|. + page->message_strip( + type = `Warning` + showicon = abap_true + enableformattedtext = abap_true + class = `sapUiSmallMarginBottom` + text = |This overview is still under construction. Click here to open the classic overview.| ). + ENDIF. + DATA(prev_group) = ``. DATA(prev_base) = ``. @@ -176,6 +191,19 @@ CLASS z2ui5_cl_sample_app_000 IMPLEMENTATION. ENDMETHOD. + METHOD class_exists. + + TRY. + DATA li_app TYPE REF TO z2ui5_if_app. + CREATE OBJECT li_app TYPE (name). + result = xsdbool( li_app IS BOUND ). + CATCH cx_root. + result = abap_false. + ENDTRY. + + ENDMETHOD. + + METHOD get_catalog. result = VALUE #( diff --git a/src/01/z2ui5_cl_sample_app_001.clas.abap b/src/01/z2ui5_cl_sample_app_001.clas.abap index 331202f3..d2cd0642 100644 --- a/src/01/z2ui5_cl_sample_app_001.clas.abap +++ b/src/01/z2ui5_cl_sample_app_001.clas.abap @@ -131,16 +131,6 @@ CLASS z2ui5_cl_sample_app_001 IMPLEMENTATION. t_arg = VALUE #( ( url_restricted ) ) ) ). ENDIF. - IF class_exists( `Z2UI5_CL_DEMO_APP_000` ) = abap_true. - DATA(url) = |{ client->get( )-s_config-origin }{ client->get( )-s_config-pathname }?app_start=z2ui5_cl_demo_app_000|. - page->message_strip( - type = `Warning` - showicon = abap_true - enableformattedtext = abap_true - class = `sapUiSmallMarginBottom` - text = |This overview is still under construction. Click here to open the classic overview.| ). - ENDIF. - DATA(prev_group) = ``. DATA(prev_base) = ``. From fea548976a9a47cfecf6acdde5c6d9397d30eaa1 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 19 Jul 2026 11:14:14 +0000 Subject: [PATCH 26/49] Controls overview: drop namespace, truncate sub, blank line only on letter change MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Make the controls section (01/08 demo-kit rebuilds) of the overview compact: - Generator strips the namespace prefix from the header (sap.m.Switch -> Switch; the group heading already names the namespace) and truncates the description to one line (CONTROLS_SUB_MAX, word-boundary, + " ...") so it never wraps. - New block_base( ) drives the blank-line grouping: in controls groups a block is all consecutive controls sharing the same first letter, so a blank line separates letter groups only (Button, ButtonGroup | Carousel); elsewhere the existing Roman-numeral base is kept. Added to both overview apps to keep them identical in shape. - Document the rules in AGENTS.md (§3 block_base, §4 controls header/sub). Regenerated both catalogs; abaplint 0 issues. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_018JnhapjtGyzgxzuzUoeeXW --- AGENTS.md | 22 +- scripts/generate-launchpad.js | 29 ++- src/00/z2ui5_cl_sample_app_000.clas.abap | 29 ++- src/01/z2ui5_cl_sample_app_001.clas.abap | 279 +++++++++++------------ 4 files changed, 207 insertions(+), 152 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index ee3d00ba..2d6b493f 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -156,13 +156,16 @@ catalog correct. Within a group, `view_display( )` also inserts a **blank line between blocks**: consecutive tiles whose `header` shares the same base name form one block, and a new block (first row gets `sapUiSmallMarginTop`) starts when the base changes. -The base is the header with a trailing Roman numeral removed (`header_base( )`), -so `Binding`, `Binding I` … `Binding VIII` render as one block, then a gap, then -the `Event` block, and so on. All links of a block share the same width — the -estimated render width of the widest header in the block plus roughly one -space, precomputed by `block_widths( )` / `header_width( )` — so the `sub` -descriptions of a block line up exactly underneath each other in one column, -directly next to the links. +The base comes from `block_base( )`: in the **controls section** (groups whose +CTEXT starts with `controls -`) it is the header's **first letter**, so a blank +line separates letter groups only (`Button`, `ButtonGroup` render together, then +a gap before `Carousel`); everywhere else it is the header with a trailing Roman +numeral removed (`header_base( )`), so `Binding`, `Binding I` … `Binding VIII` +render as one block, then a gap, then the `Event` block, and so on. All links of +a block share the same width — the estimated render width of the widest header in +the block plus roughly one space, precomputed by `block_widths( )` / +`header_width( )` — so the `sub` descriptions of a block line up exactly +underneath each other in one column, directly next to the links. `z2ui5_cl_demo_app_000` is the old "classic" overview app (now under `00/99`, obsolete); `sample_app_001` links to it via a message strip. Do not extend it. @@ -214,6 +217,11 @@ line: before is `header`, the part after is `sub` (which may itself contain ` - `). - No ` - ` at all → `header` = the whole DESCRIPT, `sub` = empty. - Unescape XML entities (`&` → `&`, etc.) when copying into the ABAP literal. +- **Controls section only** (groups whose CTEXT starts with `controls -`): the + generator drops the namespace prefix from `header` (`sap.m.Switch` → `Switch` + — the group heading already names the namespace) and truncates `sub` to one + line (`CONTROLS_SUB_MAX` characters, backed off to a word boundary, `+ " ..."`) + so the overview never wraps. When regenerating, **re-read every class's ``** — the descriptions are maintained on the classes and change there, so never carry `header`/`sub` over diff --git a/scripts/generate-launchpad.js b/scripts/generate-launchpad.js index e301b8aa..1ce102bd 100644 --- a/scripts/generate-launchpad.js +++ b/scripts/generate-launchpad.js @@ -63,6 +63,25 @@ function splitDescript(d) { return i === -1 ? { header: t, sub: '' } : { header: t.slice(0, i), sub: t.slice(i + 3) }; } +// Controls-section tiles (the 01/08 demo-kit rebuilds) are shown without their +// namespace prefix - the group heading already states it (sap.m, sap.uxap, …) - +// and with a one-line, truncated description so the overview never wraps. +const CONTROLS_SUB_MAX = 90; + +// keep only the entity name after the last dot: sap.m.Switch -> Switch +function stripNamespace(header) { + return header.replace(/^.*\./, ''); +} + +// cut to CONTROLS_SUB_MAX, backing off to the last word boundary, + " ..." +function truncateSub(sub) { + if (sub.length <= CONTROLS_SUB_MAX) return sub; + let cut = sub.slice(0, CONTROLS_SUB_MAX); + const space = cut.lastIndexOf(' '); + if (space > CONTROLS_SUB_MAX * 0.6) cut = cut.slice(0, space); + return `${cut.replace(/[\s.,;:]+$/, '')} ...`; +} + // --- 1. scan -------------------------------------------------------------- const ctextCache = {}; function groupOf(dir) { @@ -109,9 +128,17 @@ for (const abap of walk(SRC)) { } if (header.trim().toUpperCase() === 'ZZZ') { hidden++; continue; } + + const group = groupOf(path.dirname(abap)); + // controls section: drop the namespace prefix and truncate the description + if (group.startsWith('controls -')) { + header = stripNamespace(header); + sub = truncateSub(sub); + } + if ((header + sub).includes('`')) throw new Error(`backtick in DESCRIPT of ${cls}`); - tiles[area].push({ subnum, group: groupOf(path.dirname(abap)), header, sub, app: cls }); + tiles[area].push({ subnum, group, header, sub, app: cls }); } // --- 2. sort -------------------------------------------------------------- diff --git a/src/00/z2ui5_cl_sample_app_000.clas.abap b/src/00/z2ui5_cl_sample_app_000.clas.abap index 1896f752..ad3035b2 100644 --- a/src/00/z2ui5_cl_sample_app_000.clas.abap +++ b/src/00/z2ui5_cl_sample_app_000.clas.abap @@ -55,6 +55,12 @@ CLASS z2ui5_cl_sample_app_000 DEFINITION PUBLIC. header TYPE string RETURNING VALUE(result) TYPE string. + METHODS block_base + IMPORTING + group TYPE string + header TYPE string + RETURNING + VALUE(result) TYPE string. PRIVATE SECTION. ENDCLASS. @@ -144,7 +150,8 @@ CLASS z2ui5_cl_sample_app_000 IMPLEMENTATION. LOOP AT t_catalog INTO DATA(tile). - DATA(base) = header_base( tile-header ). + DATA(base) = block_base( group = tile-group + header = tile-header ). DATA(new_block) = abap_false. IF tile-group <> prev_group. @@ -362,7 +369,8 @@ CLASS z2ui5_cl_sample_app_000 IMPLEMENTATION. LOOP AT t_catalog INTO DATA(tile). - DATA(base) = header_base( tile-header ). + DATA(base) = block_base( group = tile-group + header = tile-header ). READ TABLE result ASSIGNING FIELD-SYMBOL() WITH KEY group = tile-group base = base. @@ -421,5 +429,22 @@ CLASS z2ui5_cl_sample_app_000 IMPLEMENTATION. ENDMETHOD. + + METHOD block_base. + + " In the controls section a block groups all controls that share the same + " first letter, so a blank line separates letter groups only (Button, + " ButtonGroup | Carousel). Elsewhere a block is the header without its + " trailing Roman numeral (Binding, Binding II, ...). + IF group CP `controls -*`. + result = to_upper( substring( val = header + off = 0 + len = 1 ) ). + ELSE. + result = header_base( header ). + ENDIF. + + ENDMETHOD. + ENDCLASS. diff --git a/src/01/z2ui5_cl_sample_app_001.clas.abap b/src/01/z2ui5_cl_sample_app_001.clas.abap index d2cd0642..074688cf 100644 --- a/src/01/z2ui5_cl_sample_app_001.clas.abap +++ b/src/01/z2ui5_cl_sample_app_001.clas.abap @@ -55,6 +55,12 @@ CLASS z2ui5_cl_sample_app_001 DEFINITION PUBLIC. header TYPE string RETURNING VALUE(result) TYPE string. + METHODS block_base + IMPORTING + group TYPE string + header TYPE string + RETURNING + VALUE(result) TYPE string. PRIVATE SECTION. ENDCLASS. @@ -136,7 +142,8 @@ CLASS z2ui5_cl_sample_app_001 IMPLEMENTATION. LOOP AT t_catalog INTO DATA(tile). - DATA(base) = header_base( tile-header ). + DATA(base) = block_base( group = tile-group + header = tile-header ). DATA(new_block) = abap_false. IF tile-group <> prev_group. @@ -278,146 +285,116 @@ CLASS z2ui5_cl_sample_app_001 IMPLEMENTATION. ( group = `framework - use cases` header = `ui.Table` sub = `Full Example` app = `z2ui5_cl_demo_app_070` ) ( group = `framework - use cases` header = `URL I` sub = `New Tab Open an URL in a new tab` app = `z2ui5_cl_demo_app_073` ) ( group = `framework - use cases` header = `URL II` sub = `Open Telephon, Email usw` app = `z2ui5_cl_demo_app_316` ) - ( group = `controls - sap.m` header = `sap.m.ActionListItem` sub = `Use the Action List Item to trigger an action directly from a list` app = `z2ui5_cl_demo_app_216` ) - ( group = `controls - sap.m` header = `sap.m.Breadcrumbs` sub = `Breadcrumbs sample with current page set as aggregation, resulting in a link` app = `z2ui5_cl_demo_app_292` ) - ( group = `controls - sap.m` header = `sap.m.BusyIndicator` - sub = `The Busy Indicator signals that some operation is going on and that the user must wait. It does not block the current UI screen so other operations could be triggered in parallel.` - app = `z2ui5_cl_demo_app_215` ) - ( group = `controls - sap.m` header = `sap.m.Button` sub = `Buttons trigger user actions and come in a variety of shapes and colors. Placing a button on a page header or footer changes its appearance.` app = `z2ui5_cl_demo_app_259` ) - ( group = `controls - sap.m` header = `sap.m.Carousel` sub = `A sample of a Carousel that contains images.` app = `z2ui5_cl_demo_app_371` ) - ( group = `controls - sap.m` header = `sap.m.CheckBox` sub = `Checkboxes allow users to select a subset of options. If you want to offer an off/on setting you should use the Switch control instead.` app = `z2ui5_cl_demo_app_239` ) - ( group = `controls - sap.m` header = `sap.m.ComboBox` sub = `Suggestions wrap automatically when longer then the dropdown width` app = `z2ui5_cl_demo_app_229` ) - ( group = `controls - sap.m` header = `sap.m.DatePicker` sub = `This example shows different DatePicker value states.` app = `z2ui5_cl_demo_app_294` ) - ( group = `controls - sap.m` header = `sap.m.DateRangeSelection` sub = `This example shows different DateRangeSelection value states.` app = `z2ui5_cl_demo_app_295` ) - ( group = `controls - sap.m` header = `sap.m.DateTimePicker` sub = `Value States` app = `z2ui5_cl_demo_app_377` ) - ( group = `controls - sap.m` header = `sap.m.FeedContent` sub = `Shows the tile containing the text of the feed, a subheader, and a numeric value.` app = `z2ui5_cl_demo_app_275` ) - ( group = `controls - sap.m` header = `sap.m.FeedInput` sub = `` app = `z2ui5_cl_demo_app_114` ) - ( group = `controls - sap.m` header = `sap.m.FeedInput` sub = `This sample shows a standalone feed input with different settings.` app = `z2ui5_cl_demo_app_283` ) - ( group = `controls - sap.m` header = `sap.m.FeedListItem` sub = `This sample shows you how to build a complete feed user interface by combining a FeedInput with a list of FeedListItems.` app = `z2ui5_cl_demo_app_101` ) - ( group = `controls - sap.m` header = `sap.m.FlexBox` sub = `Flex Box items can be placed in different areas using the justifyContent and alignItem properties.` app = `z2ui5_cl_demo_app_205` ) - ( group = `controls - sap.m` header = `sap.m.FlexBox` - sub = `Flex items can be rendered differently. By default, they are wrapped in a div element. Optionally, the bare controls can be rendered directly. This can affect the resulting layout.` - app = `z2ui5_cl_demo_app_252` ) - ( group = `controls - sap.m` header = `sap.m.FlexBox` sub = `In this Flex Box the items are aligned at opposing ends of the container with justifyContent set to 'SpaceBetween'.` app = `z2ui5_cl_demo_app_218` ) - ( group = `controls - sap.m` header = `sap.m.FlexBox` sub = `You can influence the direction and order of elements in horizontal and vertical Flex Box controls with the direction property.` app = `z2ui5_cl_demo_app_245` ) - ( group = `controls - sap.m` header = `sap.m.FormattedText` sub = `The control can be used for embedding formatted HTML text into your application.` app = `z2ui5_cl_demo_app_015` ) - ( group = `controls - sap.m` header = `sap.m.GenericTag` sub = `Previews of the GenericTag control based on combinations of different sets of properties.` app = `z2ui5_cl_demo_app_257` ) - ( group = `controls - sap.m` header = `sap.m.GenericTile` sub = `Shows Feed Tile and News Tile samples that can contain feed content, news content, and a footer.` app = `z2ui5_cl_demo_app_278` ) - ( group = `controls - sap.m` header = `sap.m.GenericTile` sub = `Shows Monitor Tile samples that can contain header, subheader, icon, key value, unit, and a footer.` app = `z2ui5_cl_demo_app_276` ) - ( group = `controls - sap.m` header = `sap.m.GenericTile` sub = `Shows the GenericTile while it is loading, if loading fails, and in disabled status.` app = `z2ui5_cl_demo_app_281` ) - ( group = `controls - sap.m` header = `sap.m.HeaderContainer` sub = `The Header Container with a vertical layout and with divider lines.` app = `z2ui5_cl_demo_app_280` ) - ( group = `controls - sap.m` header = `sap.m.IconTabBar` sub = `In this example, the Icon Tab Bar is used to apply filters on a table and display the count of the items for each view.` app = `z2ui5_cl_demo_app_368` ) - ( group = `controls - sap.m` header = `sap.m.IconTabBar` sub = `In this example, the Icon Tab Bar tabs display icons only.` app = `z2ui5_cl_demo_app_221` ) - ( group = `controls - sap.m` header = `sap.m.IconTabBar` sub = `In this example, the Icon Tab Bar tabs display text and corresponding count.` app = `z2ui5_cl_demo_app_222` ) - ( group = `controls - sap.m` header = `sap.m.IconTabBar` sub = `In this example, the Icon Tab Bar tabs display text only.` app = `z2ui5_cl_demo_app_224` ) - ( group = `controls - sap.m` header = `sap.m.IconTabBar` sub = `In this example, the Icon Tab Bar tabs display the text and the count in one line.` app = `z2ui5_cl_demo_app_223` ) - ( group = `controls - sap.m` header = `sap.m.IconTabBar` sub = `This is an example how to use separators in the Icon Tab Bar. You can choose an icon as a separator or use the default vertical line.` app = `z2ui5_cl_demo_app_225` ) - ( group = `controls - sap.m` header = `sap.m.IconTabBar` sub = `This sample illustrates nested tabs with or without own content in their root-level tab.` app = `z2ui5_cl_demo_app_226` ) - ( group = `controls - sap.m` header = `sap.m.IconTabHeader` sub = `Icon Tab Header used standalone, outside of Icon Tab Bar.` app = `z2ui5_cl_demo_app_214` ) - ( group = `controls - sap.m` header = `sap.m.Image` sub = `Images are faster than words and attract people's attention. Images can also have an active state or be used in SVG format.` app = `z2ui5_cl_demo_app_379` ) - ( group = `controls - sap.m` header = `sap.m.ImageContent` sub = `Shows ImageContent that can include an icon, a profile image, or a logo with a tooltip.` app = `z2ui5_cl_demo_app_271` ) - ( group = `controls - sap.m` header = `sap.m.Input` - sub = `Input type corresponds to the type attribute of the HTML input tag. On touch devices, it controls the keyboard layout. On desktop, the effect of this setting is browser dependent.` - app = `z2ui5_cl_demo_app_210` ) - ( group = `controls - sap.m` header = `sap.m.Input` sub = `Suggestions wrap automatically when longer then the dropdown width` app = `z2ui5_cl_demo_app_246` ) - ( group = `controls - sap.m` header = `sap.m.Input` sub = `This sample illustrates the usage of the description with input fields, e.g. description for units of measurements and currencies.` app = `z2ui5_cl_demo_app_251` ) - ( group = `controls - sap.m` header = `sap.m.Input` sub = `To make sure the password is not shown as clear text you set the 'type' of an input control to 'Password'.` app = `z2ui5_cl_demo_app_213` ) - ( group = `controls - sap.m` header = `sap.m.InputListItem` sub = `Use the Input List Item on phones to build form like user interfaces.` app = `z2ui5_cl_demo_app_219` ) - ( group = `controls - sap.m` header = `sap.m.Label` sub = `Labels are helpful when you need to describe some other UI control.` app = `z2ui5_cl_demo_app_051` ) - ( group = `controls - sap.m` header = `sap.m.LightBox` sub = `Displays several image thumbnails. Clicking on each of them will open a LightBox.` app = `z2ui5_cl_demo_app_273` ) - ( group = `controls - sap.m` header = `sap.m.Link` sub = `Here are some links. Typically links are used in user interfaces to trigger navigation to related content inside or outside of the current application.` app = `z2ui5_cl_demo_app_293` ) - ( group = `controls - sap.m` header = `sap.m.MaskInput` - sub = `The sap.m.MaskInput control allows users to easily enter data in a certain format and in a fixed- width input (for example: date, time, credit card number, and others).` - app = `z2ui5_cl_demo_app_110` ) - ( group = `controls - sap.m` header = `sap.m.MenuButton` sub = `This control is used to open a menu in both desktop and mobile.` app = `z2ui5_cl_demo_app_372` ) - ( group = `controls - sap.m` header = `sap.m.MessageStrip` sub = `A sample MessageStrip that shows status messages with additional formatting.` app = `z2ui5_cl_demo_app_291` ) - ( group = `controls - sap.m` header = `sap.m.MessageStrip` sub = `MessageStrip for showing status messages.` app = `z2ui5_cl_demo_app_238` ) - ( group = `controls - sap.m` header = `sap.m.MessageView` sub = `A sample with Message View and inside a Dialog and grouping of items` app = `z2ui5_cl_demo_app_038` ) - ( group = `controls - sap.m` header = `sap.m.MultiComboBox` sub = `` app = `z2ui5_cl_demo_app_140` ) - ( group = `controls - sap.m` header = `sap.m.MultiComboBox` sub = `Suggestions wrap automatically when longer then the dropdown width` app = `z2ui5_cl_demo_app_233` ) - ( group = `controls - sap.m` header = `sap.m.MultiInput` sub = `Suggestions wrap automatically when longer then the dropdown width` app = `z2ui5_cl_demo_app_232` ) - ( group = `controls - sap.m` header = `sap.m.MultiInput` sub = `This sample illustrates the different value states of the sap.m.MultiInput control.` app = `z2ui5_cl_demo_app_267` ) - ( group = `controls - sap.m` header = `sap.m.NewsContent` sub = `This control is used to display the news content text and subheader in a tile.` app = `z2ui5_cl_demo_app_261` ) - ( group = `controls - sap.m` header = `sap.m.NotificationListItem` sub = `A list item suitable for showing notifications to the user.` app = `z2ui5_cl_demo_app_375` ) - ( group = `controls - sap.m` header = `sap.m.NumericContent` sub = `Shows NumericContent including an icon.` app = `z2ui5_cl_demo_app_263` ) - ( group = `controls - sap.m` header = `sap.m.NumericContent` - sub = `Shows NumericContent including numbers, units of measurement, and status arrows indicating a trend. The numbers can be colored according to their meaning.` - app = `z2ui5_cl_demo_app_262` ) - ( group = `controls - sap.m` header = `sap.m.NumericContent` sub = `This is an example of the NumericContent that contains no margins, so the control is aligned to the left and to the top without any margins.` app = `z2ui5_cl_demo_app_228` ) - ( group = `controls - sap.m` header = `sap.m.ObjectAttribute` sub = `This is an example of Object Attribute used inside Table.` app = `z2ui5_cl_demo_app_302` ) - ( group = `controls - sap.m` header = `sap.m.ObjectHeader` - sub = `An Object Header can set shape of the image by using 'imageShape' property. The shapes could be Square (by default) and Circle. Note: This example shows the image inside ObjectHeader with the responsive property set to true. On phone i` && - `n portrait mode, the image is hidden.` - app = `z2ui5_cl_demo_app_272` ) - ( group = `controls - sap.m` header = `sap.m.ObjectListItem` sub = `This sample shows the different states of an Object List Item, which can be set using the markers aggregation.` app = `z2ui5_cl_demo_app_290` ) - ( group = `controls - sap.m` header = `sap.m.ObjectMarker` sub = `The ObjectMarker is a small building block representing an object by an icon or text and icon. Often it is used in a table.` app = `z2ui5_cl_demo_app_289` ) - ( group = `controls - sap.m` header = `sap.m.ObjectNumber` sub = `inside a Table` app = `z2ui5_cl_demo_app_369` ) - ( group = `controls - sap.m` header = `sap.m.ObjectStatus` sub = `The object status is a small building block representing a status with a semantic color.` app = `z2ui5_cl_demo_app_300` ) - ( group = `controls - sap.m` header = `sap.m.OverflowToolbar` sub = `OverflowToolbar and Toolbar are often used for left/right alignment. This is easily achieved with ToolbarSpacer.` app = `z2ui5_cl_demo_app_250` ) - ( group = `controls - sap.m` header = `sap.m.OverflowToolbar` sub = `The sap.m.Title control can be used to place a title inside an OverflowToolbar/Toolbar.` app = `z2ui5_cl_demo_app_217` ) - ( group = `controls - sap.m` header = `sap.m.Page` - sub = `Each screen of a mobile application is typically represented by a 'Page' consisting of a header, a scrollable content area and optionally a footer. The standard header offers a navigation button and a title. Alternatively you can provi` && - `de a customer header. Gernerally you should use Toolbars in the Page. If you need a centered title you may use a Bar.` - app = `z2ui5_cl_demo_app_227` ) - ( group = `controls - sap.m` header = `sap.m.Page` sub = `Header, Sub-Header & Footer` app = `z2ui5_cl_demo_app_366` ) - ( group = `controls - sap.m` header = `sap.m.Panel` sub = `Panels are helpful to group custom content. They can be decorated with header and info toolbars.` app = `z2ui5_cl_demo_app_378` ) - ( group = `controls - sap.m` header = `sap.m.ProgressIndicator` sub = `Shows the progress of a process in a graphical way. To indicate the progress, the inside of the ProgressIndicator is filled with a color.` app = `z2ui5_cl_demo_app_022` ) - ( group = `controls - sap.m` header = `sap.m.RadioButton` - sub = `Typically the Radio Button is used by other controls. E.g. the List uses it for the single selection. But you can also use the Radio Buttons control directly, to allow selection of exactly one of multiple options.` - app = `z2ui5_cl_demo_app_207` ) - ( group = `controls - sap.m` header = `sap.m.RadioButtonGroup` sub = `A wrapper for a group of radio buttons.` app = `z2ui5_cl_demo_app_208` ) - ( group = `controls - sap.m` header = `sap.m.RangeSlider` sub = `` app = `z2ui5_cl_demo_app_005` ) - ( group = `controls - sap.m` header = `sap.m.RatingIndicator` sub = `A Rating Indicator can be used to both indicate and/or rate content.` app = `z2ui5_cl_demo_app_220` ) - ( group = `controls - sap.m` header = `sap.m.SearchField` sub = `Use the Search Field to let the user enter a search string and trigger the search process.` app = `z2ui5_cl_demo_app_296` ) - ( group = `controls - sap.m` header = `sap.m.SegmentedButton` sub = `Segmented Button used in Input List Item component` app = `z2ui5_cl_demo_app_230` ) - ( group = `controls - sap.m` header = `sap.m.Select` sub = `Illustrates how the text in items wrap.` app = `z2ui5_cl_demo_app_299` ) - ( group = `controls - sap.m` header = `sap.m.Select` sub = `Illustrates the usage of a Select in header, footer and content of a page. Note the different display options.` app = `z2ui5_cl_demo_app_288` ) - ( group = `controls - sap.m` header = `sap.m.Select` sub = `Illustrates the usage of a Select with icons` app = `z2ui5_cl_demo_app_297` ) - ( group = `controls - sap.m` header = `sap.m.Select` sub = `Visualizes the validation state of the control, for example, Error, Warning and Success.` app = `z2ui5_cl_demo_app_298` ) - ( group = `controls - sap.m` header = `sap.m.Slider` sub = `With the Slider a user can choose a value from a numerical range.` app = `z2ui5_cl_demo_app_237` ) - ( group = `controls - sap.m` header = `sap.m.SlideTile` sub = `Shows Generic Tile with the 2x1 frame type displayed as sliding tiles.` app = `z2ui5_cl_demo_app_274` ) - ( group = `controls - sap.m` header = `sap.m.SplitContainer` sub = `Master & Detail Pages` app = `z2ui5_cl_demo_app_374` ) - ( group = `controls - sap.m` header = `sap.m.StandardListItem` - sub = `This sample demonstrates the wrapping behavior of the title text and the description text. In desktop mode, the character limit is set to 300 characters, whereas in the phone mode, the character limit is set to 100 characters.` - app = `z2ui5_cl_demo_app_287` ) - ( group = `controls - sap.m` header = `sap.m.StepInput` sub = `This example shows different StepInput value states.` app = `z2ui5_cl_demo_app_264` ) - ( group = `controls - sap.m` header = `sap.m.Switch` sub = `"Some say it is only a switch, I say it is one of the most stylish controls in the universe of mobile UI controls." (unknown developer)` app = `z2ui5_cl_demo_app_240` ) - ( group = `controls - sap.m` header = `sap.m.Text` sub = `The Text control has a property to limit the number of lines for wrapping texts.` app = `z2ui5_cl_demo_app_206` ) - ( group = `controls - sap.m` header = `sap.m.Text` sub = `with class -Standard Margins - Negative Margins` app = `z2ui5_cl_demo_app_243` ) - ( group = `controls - sap.m` header = `sap.m.TextArea` sub = `Since 1.38 the growing property of sap.m.TextArea gives the ability of a control to automatically grow and shrink dynamically with its content.` app = `z2ui5_cl_demo_app_236` ) - ( group = `controls - sap.m` header = `sap.m.TextArea` sub = `This sample illustrates the different value states of the sap.m.TextArea control.` app = `z2ui5_cl_demo_app_234` ) - ( group = `controls - sap.m` header = `sap.m.TileContent` sub = `Shows the universal container for different content types and context information in the footer area.` app = `z2ui5_cl_demo_app_241` ) - ( group = `controls - sap.m` header = `sap.m.TimePicker` sub = `Formats & Steps` app = `z2ui5_cl_demo_app_376` ) - ( group = `controls - sap.m` header = `sap.m.ToggleButton` sub = `Toggle Buttons can be toggled between pressed and normal state.` app = `z2ui5_cl_demo_app_266` ) - ( group = `controls - sap.m` header = `sap.m.Toolbar` sub = `Toolbar handles overflow by shrinking items. OverflowToolbar provides an overflow menu. Bar is able to perfectly center a text if nothing overflows.` app = `z2ui5_cl_demo_app_235` ) - ( group = `controls - sap.uxap` header = `sap.uxap.ObjectPageLayout` - sub = `Object Page sample showing a layout with subsection titles on top. This is the default layout. The sample also shows the 'Edit header' button in the Header Content area.` - app = `z2ui5_cl_demo_app_017` ) - ( group = `controls - sap.uxap` header = `sap.uxap.ObjectPageLayout` sub = `ObjectPage sample that demonstrates the combination of header facets and showTitle properties of sections and subsections.` app = `z2ui5_cl_demo_app_330` ) - ( group = `controls - sap.uxap` header = `sap.uxap.ObjectPageLayout` sub = `ObjectPage sample with Header Container` app = `z2ui5_cl_demo_app_303` ) - ( group = `controls - sap.f` header = `sap.f.Card` sub = `This sample illustrates how to specify the predefined header and the content of the Card control.` app = `z2ui5_cl_demo_app_181` ) - ( group = `controls - sap.f` header = `sap.f.DynamicPage` - sub = `Dynamic Page freestyle example with a responsive sap.m.Table in the content area, showing that each control can be placed in the title and the header content areas.` - app = `z2ui5_cl_demo_app_030` ) - ( group = `controls - sap.f` header = `sap.f.GridList` sub = `This sample represents GridList with enabled Drag and Drop functionality.` app = `z2ui5_cl_demo_app_307` ) - ( group = `controls - sap.ui.core` header = `sap.ui.core.HTML` sub = `With the HTML controls you can easily embed any kind of HTML content into your UI5 mobile application.` app = `z2ui5_cl_demo_app_242` ) - ( group = `controls - sap.ui.core` header = `sap.ui.core.InvisibleText` - sub = `Many controls provide the associations ariaLabelledBy and ariaDescribedBy for accessibility purposes. The InvisibleText control can be used by application to provide hidden texts on the UI which can be referenced via these associations` && - `.` - app = `z2ui5_cl_demo_app_282` ) - ( group = `controls - sap.ui.layout` header = `sap.ui.Grid` sub = `Split View in different Areas` app = `z2ui5_cl_demo_app_367` ) - ( group = `controls - sap.ui.layout` header = `sap.ui.layout.ResponsiveSplitter` - sub = `ResponsiveSplitter is used to visually divide the content of its parent. It consists of PaneContainers that further agregate other PaneContainers and SplitPanes. SplitPanes can be moved to the pagination when a minimum width of their p` && - `arent is reached.` - app = `z2ui5_cl_demo_app_103` ) - ( group = `controls - sap.ui.layout` header = `sap.ui.layout.Splitter` sub = `Nested Splitter example with 7 content areas` app = `z2ui5_cl_demo_app_260` ) - ( group = `controls - sap.ui.layout` header = `sap.ui.layout.Splitter` sub = `Simple splitter example with three content areas` app = `z2ui5_cl_demo_app_249` ) - ( group = `controls - sap.ui.layout` header = `sap.ui.layout.Splitter` sub = `Simple splitter example with two content areas` app = `z2ui5_cl_demo_app_247` ) - ( group = `controls - sap.ui.layout` header = `sap.ui.layout.Splitter` sub = `Simple splitter example with two content areas that cannot be resized` app = `z2ui5_cl_demo_app_248` ) - ( group = `controls - sap.tnt` header = `sap.tnt.InfoLabel` sub = `InfoLabel with all available color schemes` app = `z2ui5_cl_demo_app_209` ) - ( group = `controls - sap.tnt` header = `sap.tnt.NavigationList` sub = `simple` app = `z2ui5_cl_demo_app_258` ) - ( group = `controls - sap.ui.codeeditor` header = `sap.ui.codeeditor.CodeEditor` sub = `` app = `z2ui5_cl_demo_app_265` ) - ( group = `controls - sap.ui.unified` header = `sap.ui.unified.ColorPicker` sub = `` app = `z2ui5_cl_demo_app_270` ) ). + ( group = `controls - sap.m` header = `ActionListItem` sub = `Use the Action List Item to trigger an action directly from a list` app = `z2ui5_cl_demo_app_216` ) + ( group = `controls - sap.m` header = `Breadcrumbs` sub = `Breadcrumbs sample with current page set as aggregation, resulting in a link` app = `z2ui5_cl_demo_app_292` ) + ( group = `controls - sap.m` header = `BusyIndicator` sub = `The Busy Indicator signals that some operation is going on and that the user must wait ...` app = `z2ui5_cl_demo_app_215` ) + ( group = `controls - sap.m` header = `Button` sub = `Buttons trigger user actions and come in a variety of shapes and colors. Placing a button ...` app = `z2ui5_cl_demo_app_259` ) + ( group = `controls - sap.m` header = `Carousel` sub = `A sample of a Carousel that contains images.` app = `z2ui5_cl_demo_app_371` ) + ( group = `controls - sap.m` header = `CheckBox` sub = `Checkboxes allow users to select a subset of options. If you want to offer an off/on ...` app = `z2ui5_cl_demo_app_239` ) + ( group = `controls - sap.m` header = `ComboBox` sub = `Suggestions wrap automatically when longer then the dropdown width` app = `z2ui5_cl_demo_app_229` ) + ( group = `controls - sap.m` header = `DatePicker` sub = `This example shows different DatePicker value states.` app = `z2ui5_cl_demo_app_294` ) + ( group = `controls - sap.m` header = `DateRangeSelection` sub = `This example shows different DateRangeSelection value states.` app = `z2ui5_cl_demo_app_295` ) + ( group = `controls - sap.m` header = `DateTimePicker` sub = `Value States` app = `z2ui5_cl_demo_app_377` ) + ( group = `controls - sap.m` header = `FeedContent` sub = `Shows the tile containing the text of the feed, a subheader, and a numeric value.` app = `z2ui5_cl_demo_app_275` ) + ( group = `controls - sap.m` header = `FeedInput` sub = `` app = `z2ui5_cl_demo_app_114` ) + ( group = `controls - sap.m` header = `FeedInput` sub = `This sample shows a standalone feed input with different settings.` app = `z2ui5_cl_demo_app_283` ) + ( group = `controls - sap.m` header = `FeedListItem` sub = `This sample shows you how to build a complete feed user interface by combining a ...` app = `z2ui5_cl_demo_app_101` ) + ( group = `controls - sap.m` header = `FlexBox` sub = `Flex Box items can be placed in different areas using the justifyContent and alignItem ...` app = `z2ui5_cl_demo_app_205` ) + ( group = `controls - sap.m` header = `FlexBox` sub = `Flex items can be rendered differently. By default, they are wrapped in a div element ...` app = `z2ui5_cl_demo_app_252` ) + ( group = `controls - sap.m` header = `FlexBox` sub = `In this Flex Box the items are aligned at opposing ends of the container with ...` app = `z2ui5_cl_demo_app_218` ) + ( group = `controls - sap.m` header = `FlexBox` sub = `You can influence the direction and order of elements in horizontal and vertical Flex Box ...` app = `z2ui5_cl_demo_app_245` ) + ( group = `controls - sap.m` header = `FormattedText` sub = `The control can be used for embedding formatted HTML text into your application.` app = `z2ui5_cl_demo_app_015` ) + ( group = `controls - sap.m` header = `GenericTag` sub = `Previews of the GenericTag control based on combinations of different sets of properties.` app = `z2ui5_cl_demo_app_257` ) + ( group = `controls - sap.m` header = `GenericTile` sub = `Shows Feed Tile and News Tile samples that can contain feed content, news content, and a ...` app = `z2ui5_cl_demo_app_278` ) + ( group = `controls - sap.m` header = `GenericTile` sub = `Shows Monitor Tile samples that can contain header, subheader, icon, key value, unit, and ...` app = `z2ui5_cl_demo_app_276` ) + ( group = `controls - sap.m` header = `GenericTile` sub = `Shows the GenericTile while it is loading, if loading fails, and in disabled status.` app = `z2ui5_cl_demo_app_281` ) + ( group = `controls - sap.m` header = `HeaderContainer` sub = `The Header Container with a vertical layout and with divider lines.` app = `z2ui5_cl_demo_app_280` ) + ( group = `controls - sap.m` header = `IconTabBar` sub = `In this example, the Icon Tab Bar is used to apply filters on a table and display the ...` app = `z2ui5_cl_demo_app_368` ) + ( group = `controls - sap.m` header = `IconTabBar` sub = `In this example, the Icon Tab Bar tabs display icons only.` app = `z2ui5_cl_demo_app_221` ) + ( group = `controls - sap.m` header = `IconTabBar` sub = `In this example, the Icon Tab Bar tabs display text and corresponding count.` app = `z2ui5_cl_demo_app_222` ) + ( group = `controls - sap.m` header = `IconTabBar` sub = `In this example, the Icon Tab Bar tabs display text only.` app = `z2ui5_cl_demo_app_224` ) + ( group = `controls - sap.m` header = `IconTabBar` sub = `In this example, the Icon Tab Bar tabs display the text and the count in one line.` app = `z2ui5_cl_demo_app_223` ) + ( group = `controls - sap.m` header = `IconTabBar` sub = `This is an example how to use separators in the Icon Tab Bar. You can choose an icon as a ...` app = `z2ui5_cl_demo_app_225` ) + ( group = `controls - sap.m` header = `IconTabBar` sub = `This sample illustrates nested tabs with or without own content in their root-level tab.` app = `z2ui5_cl_demo_app_226` ) + ( group = `controls - sap.m` header = `IconTabHeader` sub = `Icon Tab Header used standalone, outside of Icon Tab Bar.` app = `z2ui5_cl_demo_app_214` ) + ( group = `controls - sap.m` header = `Image` sub = `Images are faster than words and attract people's attention. Images can also have an ...` app = `z2ui5_cl_demo_app_379` ) + ( group = `controls - sap.m` header = `ImageContent` sub = `Shows ImageContent that can include an icon, a profile image, or a logo with a tooltip.` app = `z2ui5_cl_demo_app_271` ) + ( group = `controls - sap.m` header = `Input` sub = `Input type corresponds to the type attribute of the HTML input tag. On touch devices, it ...` app = `z2ui5_cl_demo_app_210` ) + ( group = `controls - sap.m` header = `Input` sub = `Suggestions wrap automatically when longer then the dropdown width` app = `z2ui5_cl_demo_app_246` ) + ( group = `controls - sap.m` header = `Input` sub = `This sample illustrates the usage of the description with input fields, e.g. description ...` app = `z2ui5_cl_demo_app_251` ) + ( group = `controls - sap.m` header = `Input` sub = `To make sure the password is not shown as clear text you set the 'type' of an input ...` app = `z2ui5_cl_demo_app_213` ) + ( group = `controls - sap.m` header = `InputListItem` sub = `Use the Input List Item on phones to build form like user interfaces.` app = `z2ui5_cl_demo_app_219` ) + ( group = `controls - sap.m` header = `Label` sub = `Labels are helpful when you need to describe some other UI control.` app = `z2ui5_cl_demo_app_051` ) + ( group = `controls - sap.m` header = `LightBox` sub = `Displays several image thumbnails. Clicking on each of them will open a LightBox.` app = `z2ui5_cl_demo_app_273` ) + ( group = `controls - sap.m` header = `Link` sub = `Here are some links. Typically links are used in user interfaces to trigger navigation to ...` app = `z2ui5_cl_demo_app_293` ) + ( group = `controls - sap.m` header = `MaskInput` sub = `The sap.m.MaskInput control allows users to easily enter data in a certain format and in ...` app = `z2ui5_cl_demo_app_110` ) + ( group = `controls - sap.m` header = `MenuButton` sub = `This control is used to open a menu in both desktop and mobile.` app = `z2ui5_cl_demo_app_372` ) + ( group = `controls - sap.m` header = `MessageStrip` sub = `A sample MessageStrip that shows status messages with additional formatting.` app = `z2ui5_cl_demo_app_291` ) + ( group = `controls - sap.m` header = `MessageStrip` sub = `MessageStrip for showing status messages.` app = `z2ui5_cl_demo_app_238` ) + ( group = `controls - sap.m` header = `MessageView` sub = `A sample with Message View and inside a Dialog and grouping of items` app = `z2ui5_cl_demo_app_038` ) + ( group = `controls - sap.m` header = `MultiComboBox` sub = `` app = `z2ui5_cl_demo_app_140` ) + ( group = `controls - sap.m` header = `MultiComboBox` sub = `Suggestions wrap automatically when longer then the dropdown width` app = `z2ui5_cl_demo_app_233` ) + ( group = `controls - sap.m` header = `MultiInput` sub = `Suggestions wrap automatically when longer then the dropdown width` app = `z2ui5_cl_demo_app_232` ) + ( group = `controls - sap.m` header = `MultiInput` sub = `This sample illustrates the different value states of the sap.m.MultiInput control.` app = `z2ui5_cl_demo_app_267` ) + ( group = `controls - sap.m` header = `NewsContent` sub = `This control is used to display the news content text and subheader in a tile.` app = `z2ui5_cl_demo_app_261` ) + ( group = `controls - sap.m` header = `NotificationListItem` sub = `A list item suitable for showing notifications to the user.` app = `z2ui5_cl_demo_app_375` ) + ( group = `controls - sap.m` header = `NumericContent` sub = `Shows NumericContent including an icon.` app = `z2ui5_cl_demo_app_263` ) + ( group = `controls - sap.m` header = `NumericContent` sub = `Shows NumericContent including numbers, units of measurement, and status arrows ...` app = `z2ui5_cl_demo_app_262` ) + ( group = `controls - sap.m` header = `NumericContent` sub = `This is an example of the NumericContent that contains no margins, so the control is ...` app = `z2ui5_cl_demo_app_228` ) + ( group = `controls - sap.m` header = `ObjectAttribute` sub = `This is an example of Object Attribute used inside Table.` app = `z2ui5_cl_demo_app_302` ) + ( group = `controls - sap.m` header = `ObjectHeader` sub = `An Object Header can set shape of the image by using 'imageShape' property. The shapes ...` app = `z2ui5_cl_demo_app_272` ) + ( group = `controls - sap.m` header = `ObjectListItem` sub = `This sample shows the different states of an Object List Item, which can be set using the ...` app = `z2ui5_cl_demo_app_290` ) + ( group = `controls - sap.m` header = `ObjectMarker` sub = `The ObjectMarker is a small building block representing an object by an icon or text and ...` app = `z2ui5_cl_demo_app_289` ) + ( group = `controls - sap.m` header = `ObjectNumber` sub = `inside a Table` app = `z2ui5_cl_demo_app_369` ) + ( group = `controls - sap.m` header = `ObjectStatus` sub = `The object status is a small building block representing a status with a semantic color.` app = `z2ui5_cl_demo_app_300` ) + ( group = `controls - sap.m` header = `OverflowToolbar` sub = `OverflowToolbar and Toolbar are often used for left/right alignment. This is easily ...` app = `z2ui5_cl_demo_app_250` ) + ( group = `controls - sap.m` header = `OverflowToolbar` sub = `The sap.m.Title control can be used to place a title inside an OverflowToolbar/Toolbar.` app = `z2ui5_cl_demo_app_217` ) + ( group = `controls - sap.m` header = `Page` sub = `Each screen of a mobile application is typically represented by a 'Page' consisting of a ...` app = `z2ui5_cl_demo_app_227` ) + ( group = `controls - sap.m` header = `Page` sub = `Header, Sub-Header & Footer` app = `z2ui5_cl_demo_app_366` ) + ( group = `controls - sap.m` header = `Panel` sub = `Panels are helpful to group custom content. They can be decorated with header and info ...` app = `z2ui5_cl_demo_app_378` ) + ( group = `controls - sap.m` header = `ProgressIndicator` sub = `Shows the progress of a process in a graphical way. To indicate the progress, the inside ...` app = `z2ui5_cl_demo_app_022` ) + ( group = `controls - sap.m` header = `RadioButton` sub = `Typically the Radio Button is used by other controls. E.g. the List uses it for the ...` app = `z2ui5_cl_demo_app_207` ) + ( group = `controls - sap.m` header = `RadioButtonGroup` sub = `A wrapper for a group of radio buttons.` app = `z2ui5_cl_demo_app_208` ) + ( group = `controls - sap.m` header = `RangeSlider` sub = `` app = `z2ui5_cl_demo_app_005` ) + ( group = `controls - sap.m` header = `RatingIndicator` sub = `A Rating Indicator can be used to both indicate and/or rate content.` app = `z2ui5_cl_demo_app_220` ) + ( group = `controls - sap.m` header = `SearchField` sub = `Use the Search Field to let the user enter a search string and trigger the search process.` app = `z2ui5_cl_demo_app_296` ) + ( group = `controls - sap.m` header = `SegmentedButton` sub = `Segmented Button used in Input List Item component` app = `z2ui5_cl_demo_app_230` ) + ( group = `controls - sap.m` header = `Select` sub = `Illustrates how the text in items wrap.` app = `z2ui5_cl_demo_app_299` ) + ( group = `controls - sap.m` header = `Select` sub = `Illustrates the usage of a Select in header, footer and content of a page. Note the ...` app = `z2ui5_cl_demo_app_288` ) + ( group = `controls - sap.m` header = `Select` sub = `Illustrates the usage of a Select with icons` app = `z2ui5_cl_demo_app_297` ) + ( group = `controls - sap.m` header = `Select` sub = `Visualizes the validation state of the control, for example, Error, Warning and Success.` app = `z2ui5_cl_demo_app_298` ) + ( group = `controls - sap.m` header = `Slider` sub = `With the Slider a user can choose a value from a numerical range.` app = `z2ui5_cl_demo_app_237` ) + ( group = `controls - sap.m` header = `SlideTile` sub = `Shows Generic Tile with the 2x1 frame type displayed as sliding tiles.` app = `z2ui5_cl_demo_app_274` ) + ( group = `controls - sap.m` header = `SplitContainer` sub = `Master & Detail Pages` app = `z2ui5_cl_demo_app_374` ) + ( group = `controls - sap.m` header = `StandardListItem` sub = `This sample demonstrates the wrapping behavior of the title text and the description ...` app = `z2ui5_cl_demo_app_287` ) + ( group = `controls - sap.m` header = `StepInput` sub = `This example shows different StepInput value states.` app = `z2ui5_cl_demo_app_264` ) + ( group = `controls - sap.m` header = `Switch` sub = `"Some say it is only a switch, I say it is one of the most stylish controls in the ...` app = `z2ui5_cl_demo_app_240` ) + ( group = `controls - sap.m` header = `Text` sub = `The Text control has a property to limit the number of lines for wrapping texts.` app = `z2ui5_cl_demo_app_206` ) + ( group = `controls - sap.m` header = `Text` sub = `with class -Standard Margins - Negative Margins` app = `z2ui5_cl_demo_app_243` ) + ( group = `controls - sap.m` header = `TextArea` sub = `Since 1.38 the growing property of sap.m.TextArea gives the ability of a control to ...` app = `z2ui5_cl_demo_app_236` ) + ( group = `controls - sap.m` header = `TextArea` sub = `This sample illustrates the different value states of the sap.m.TextArea control.` app = `z2ui5_cl_demo_app_234` ) + ( group = `controls - sap.m` header = `TileContent` sub = `Shows the universal container for different content types and context information in the ...` app = `z2ui5_cl_demo_app_241` ) + ( group = `controls - sap.m` header = `TimePicker` sub = `Formats & Steps` app = `z2ui5_cl_demo_app_376` ) + ( group = `controls - sap.m` header = `ToggleButton` sub = `Toggle Buttons can be toggled between pressed and normal state.` app = `z2ui5_cl_demo_app_266` ) + ( group = `controls - sap.m` header = `Toolbar` sub = `Toolbar handles overflow by shrinking items. OverflowToolbar provides an overflow menu ...` app = `z2ui5_cl_demo_app_235` ) + ( group = `controls - sap.uxap` header = `ObjectPageLayout` sub = `Object Page sample showing a layout with subsection titles on top. This is the default ...` app = `z2ui5_cl_demo_app_017` ) + ( group = `controls - sap.uxap` header = `ObjectPageLayout` sub = `ObjectPage sample that demonstrates the combination of header facets and showTitle ...` app = `z2ui5_cl_demo_app_330` ) + ( group = `controls - sap.uxap` header = `ObjectPageLayout` sub = `ObjectPage sample with Header Container` app = `z2ui5_cl_demo_app_303` ) + ( group = `controls - sap.f` header = `Card` sub = `This sample illustrates how to specify the predefined header and the content of the Card ...` app = `z2ui5_cl_demo_app_181` ) + ( group = `controls - sap.f` header = `DynamicPage` sub = `Dynamic Page freestyle example with a responsive sap.m.Table in the content area, showing ...` app = `z2ui5_cl_demo_app_030` ) + ( group = `controls - sap.f` header = `GridList` sub = `This sample represents GridList with enabled Drag and Drop functionality.` app = `z2ui5_cl_demo_app_307` ) + ( group = `controls - sap.ui.core` header = `HTML` sub = `With the HTML controls you can easily embed any kind of HTML content into your UI5 mobile ...` app = `z2ui5_cl_demo_app_242` ) + ( group = `controls - sap.ui.core` header = `InvisibleText` sub = `Many controls provide the associations ariaLabelledBy and ariaDescribedBy for ...` app = `z2ui5_cl_demo_app_282` ) + ( group = `controls - sap.ui.layout` header = `Grid` sub = `Split View in different Areas` app = `z2ui5_cl_demo_app_367` ) + ( group = `controls - sap.ui.layout` header = `ResponsiveSplitter` sub = `ResponsiveSplitter is used to visually divide the content of its parent. It consists of ...` app = `z2ui5_cl_demo_app_103` ) + ( group = `controls - sap.ui.layout` header = `Splitter` sub = `Nested Splitter example with 7 content areas` app = `z2ui5_cl_demo_app_260` ) + ( group = `controls - sap.ui.layout` header = `Splitter` sub = `Simple splitter example with three content areas` app = `z2ui5_cl_demo_app_249` ) + ( group = `controls - sap.ui.layout` header = `Splitter` sub = `Simple splitter example with two content areas` app = `z2ui5_cl_demo_app_247` ) + ( group = `controls - sap.ui.layout` header = `Splitter` sub = `Simple splitter example with two content areas that cannot be resized` app = `z2ui5_cl_demo_app_248` ) + ( group = `controls - sap.tnt` header = `InfoLabel` sub = `InfoLabel with all available color schemes` app = `z2ui5_cl_demo_app_209` ) + ( group = `controls - sap.tnt` header = `NavigationList` sub = `simple` app = `z2ui5_cl_demo_app_258` ) + ( group = `controls - sap.ui.codeeditor` header = `CodeEditor` sub = `` app = `z2ui5_cl_demo_app_265` ) + ( group = `controls - sap.ui.unified` header = `ColorPicker` sub = `` app = `z2ui5_cl_demo_app_270` ) ). ENDMETHOD. @@ -426,7 +403,8 @@ CLASS z2ui5_cl_sample_app_001 IMPLEMENTATION. LOOP AT t_catalog INTO DATA(tile). - DATA(base) = header_base( tile-header ). + DATA(base) = block_base( group = tile-group + header = tile-header ). READ TABLE result ASSIGNING FIELD-SYMBOL() WITH KEY group = tile-group base = base. @@ -485,4 +463,21 @@ CLASS z2ui5_cl_sample_app_001 IMPLEMENTATION. ENDMETHOD. + + METHOD block_base. + + " In the controls section a block groups all controls that share the same + " first letter, so a blank line separates letter groups only (Button, + " ButtonGroup | Carousel). Elsewhere a block is the header without its + " trailing Roman numeral (Binding, Binding II, ...). + IF group CP `controls -*`. + result = to_upper( substring( val = header + off = 0 + len = 1 ) ). + ELSE. + result = header_base( header ). + ENDIF. + + ENDMETHOD. + ENDCLASS. From 8f89f00f199e18da7b04f3fc10f635ebb589f793 Mon Sep 17 00:00:00 2001 From: oblomov Date: Sun, 19 Jul 2026 11:37:12 +0000 Subject: [PATCH 27/49] fix samples --- src/01/01/package.devc.xml | 2 +- src/01/01/z2ui5_cl_demo_app_027.clas.abap | 5 +++-- src/01/01/z2ui5_cl_demo_app_027.clas.xml | 2 +- src/01/01/z2ui5_cl_demo_app_047.clas.xml | 2 +- src/01/01/z2ui5_cl_demo_app_071.clas.xml | 2 +- src/01/01/z2ui5_cl_demo_app_097.clas.xml | 2 +- src/01/01/z2ui5_cl_demo_app_098.clas.xml | 2 +- src/01/01/z2ui5_cl_demo_app_104.clas.xml | 2 +- src/01/01/z2ui5_cl_demo_app_109.clas.xml | 2 +- src/01/01/z2ui5_cl_demo_app_144.clas.xml | 2 +- src/01/01/z2ui5_cl_demo_app_161.clas.xml | 2 +- src/01/01/z2ui5_cl_demo_app_166.clas.xml | 2 +- src/01/01/z2ui5_cl_demo_app_176.clas.xml | 2 +- src/01/{02 => 01}/z2ui5_cl_demo_app_446.clas.abap | 0 src/01/{02 => 01}/z2ui5_cl_demo_app_446.clas.xml | 0 src/01/{02 => 01}/z2ui5_cl_demo_app_447.clas.abap | 0 src/01/{02 => 01}/z2ui5_cl_demo_app_447.clas.xml | 0 src/01/02/package.devc.xml | 2 +- src/01/02/z2ui5_cl_demo_app_059.clas.abap | 2 +- src/01/02/z2ui5_cl_demo_app_059.clas.xml | 2 +- src/01/02/z2ui5_cl_demo_app_074.clas.xml | 2 +- src/01/02/z2ui5_cl_demo_app_078.clas.xml | 2 +- src/01/02/z2ui5_cl_demo_app_088.clas.xml | 2 +- src/01/02/z2ui5_cl_demo_app_120.clas.xml | 2 +- src/01/02/z2ui5_cl_demo_app_361.clas.xml | 2 +- src/01/08/package.devc.xml | 2 +- 26 files changed, 24 insertions(+), 23 deletions(-) rename src/01/{02 => 01}/z2ui5_cl_demo_app_446.clas.abap (100%) rename src/01/{02 => 01}/z2ui5_cl_demo_app_446.clas.xml (100%) rename src/01/{02 => 01}/z2ui5_cl_demo_app_447.clas.abap (100%) rename src/01/{02 => 01}/z2ui5_cl_demo_app_447.clas.xml (100%) diff --git a/src/01/01/package.devc.xml b/src/01/01/package.devc.xml index 836f126a..8b1c1b50 100644 --- a/src/01/01/package.devc.xml +++ b/src/01/01/package.devc.xml @@ -3,7 +3,7 @@ - framework - basics + Basics diff --git a/src/01/01/z2ui5_cl_demo_app_027.clas.abap b/src/01/01/z2ui5_cl_demo_app_027.clas.abap index 9d38e721..56963804 100644 --- a/src/01/01/z2ui5_cl_demo_app_027.clas.abap +++ b/src/01/01/z2ui5_cl_demo_app_027.clas.abap @@ -21,7 +21,9 @@ CLASS z2ui5_cl_demo_app_027 DEFINITION PUBLIC. ENDCLASS. -CLASS z2ui5_cl_demo_app_027 IMPLEMENTATION. + +CLASS Z2UI5_CL_DEMO_APP_027 IMPLEMENTATION. + METHOD z2ui5_if_app~main. @@ -110,5 +112,4 @@ CLASS z2ui5_cl_demo_app_027 IMPLEMENTATION. client->view_display( view->stringify( ) ). ENDMETHOD. - ENDCLASS. diff --git a/src/01/01/z2ui5_cl_demo_app_027.clas.xml b/src/01/01/z2ui5_cl_demo_app_027.clas.xml index 4f821a46..c837eafa 100644 --- a/src/01/01/z2ui5_cl_demo_app_027.clas.xml +++ b/src/01/01/z2ui5_cl_demo_app_027.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_027 E - Binding IV - Expression Binding + Binding - Expression Binding 1 X X diff --git a/src/01/01/z2ui5_cl_demo_app_047.clas.xml b/src/01/01/z2ui5_cl_demo_app_047.clas.xml index 8f849f74..57f3551d 100644 --- a/src/01/01/z2ui5_cl_demo_app_047.clas.xml +++ b/src/01/01/z2ui5_cl_demo_app_047.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_047 E - Binding V - Formatting Integers, Decimals, Dates & Time + Binding - Formatting Integers, Decimals, Dates & Time 1 X X diff --git a/src/01/01/z2ui5_cl_demo_app_071.clas.xml b/src/01/01/z2ui5_cl_demo_app_071.clas.xml index 49c7770a..a693d1ec 100644 --- a/src/01/01/z2ui5_cl_demo_app_071.clas.xml +++ b/src/01/01/z2ui5_cl_demo_app_071.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_071 E - ModelMore - Set Size Limit + Model - Set Size Limit 1 X X diff --git a/src/01/01/z2ui5_cl_demo_app_097.clas.xml b/src/01/01/z2ui5_cl_demo_app_097.clas.xml index 3b6f41c5..539e516f 100644 --- a/src/01/01/z2ui5_cl_demo_app_097.clas.xml +++ b/src/01/01/z2ui5_cl_demo_app_097.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_097 E - Nested Views II - Head & Item Table + Nested Views - Head & Item Table 1 X X diff --git a/src/01/01/z2ui5_cl_demo_app_098.clas.xml b/src/01/01/z2ui5_cl_demo_app_098.clas.xml index 0cb8e175..9ff12845 100644 --- a/src/01/01/z2ui5_cl_demo_app_098.clas.xml +++ b/src/01/01/z2ui5_cl_demo_app_098.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_098 E - Nested Views III - Head & Item Table & Detail + Nested Views - Head & Item Table & Detail 1 X X diff --git a/src/01/01/z2ui5_cl_demo_app_104.clas.xml b/src/01/01/z2ui5_cl_demo_app_104.clas.xml index c52a9f33..a338246c 100644 --- a/src/01/01/z2ui5_cl_demo_app_104.clas.xml +++ b/src/01/01/z2ui5_cl_demo_app_104.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_104 E - Nested Views IV - Sub-App + Nested Views - Sub-App 1 X X diff --git a/src/01/01/z2ui5_cl_demo_app_109.clas.xml b/src/01/01/z2ui5_cl_demo_app_109.clas.xml index 92cd23aa..f6eb4031 100644 --- a/src/01/01/z2ui5_cl_demo_app_109.clas.xml +++ b/src/01/01/z2ui5_cl_demo_app_109.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_109 E - Popover IV - with Quick View + Popover - with Quick View 1 X X diff --git a/src/01/01/z2ui5_cl_demo_app_144.clas.xml b/src/01/01/z2ui5_cl_demo_app_144.clas.xml index d87fd264..d2daef13 100644 --- a/src/01/01/z2ui5_cl_demo_app_144.clas.xml +++ b/src/01/01/z2ui5_cl_demo_app_144.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_144 E - Binding III - Level Table/Cell + Binding - Level Table/Cell 1 X X diff --git a/src/01/01/z2ui5_cl_demo_app_161.clas.xml b/src/01/01/z2ui5_cl_demo_app_161.clas.xml index b02211c0..5b854ef3 100644 --- a/src/01/01/z2ui5_cl_demo_app_161.clas.xml +++ b/src/01/01/z2ui5_cl_demo_app_161.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_161 E - Popup III - Popup in Popup - Backend Stack Handling + Popup - Popup in Popup - Backend Stack Handling 1 X X diff --git a/src/01/01/z2ui5_cl_demo_app_166.clas.xml b/src/01/01/z2ui5_cl_demo_app_166.clas.xml index 7b60aea3..2c38b35a 100644 --- a/src/01/01/z2ui5_cl_demo_app_166.clas.xml +++ b/src/01/01/z2ui5_cl_demo_app_166.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_166 E - Binding II - Level Structure/Component + Binding - Level Structure/Component 1 X X diff --git a/src/01/01/z2ui5_cl_demo_app_176.clas.xml b/src/01/01/z2ui5_cl_demo_app_176.clas.xml index d164b69e..1b4b1fcb 100644 --- a/src/01/01/z2ui5_cl_demo_app_176.clas.xml +++ b/src/01/01/z2ui5_cl_demo_app_176.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_176 E - Templating II - Nested Views + Templating - Nested Views 1 X X diff --git a/src/01/02/z2ui5_cl_demo_app_446.clas.abap b/src/01/01/z2ui5_cl_demo_app_446.clas.abap similarity index 100% rename from src/01/02/z2ui5_cl_demo_app_446.clas.abap rename to src/01/01/z2ui5_cl_demo_app_446.clas.abap diff --git a/src/01/02/z2ui5_cl_demo_app_446.clas.xml b/src/01/01/z2ui5_cl_demo_app_446.clas.xml similarity index 100% rename from src/01/02/z2ui5_cl_demo_app_446.clas.xml rename to src/01/01/z2ui5_cl_demo_app_446.clas.xml diff --git a/src/01/02/z2ui5_cl_demo_app_447.clas.abap b/src/01/01/z2ui5_cl_demo_app_447.clas.abap similarity index 100% rename from src/01/02/z2ui5_cl_demo_app_447.clas.abap rename to src/01/01/z2ui5_cl_demo_app_447.clas.abap diff --git a/src/01/02/z2ui5_cl_demo_app_447.clas.xml b/src/01/01/z2ui5_cl_demo_app_447.clas.xml similarity index 100% rename from src/01/02/z2ui5_cl_demo_app_447.clas.xml rename to src/01/01/z2ui5_cl_demo_app_447.clas.xml diff --git a/src/01/02/package.devc.xml b/src/01/02/package.devc.xml index 26b016e1..bf0c3f6b 100644 --- a/src/01/02/package.devc.xml +++ b/src/01/02/package.devc.xml @@ -3,7 +3,7 @@ - framework - use cases + Extended diff --git a/src/01/02/z2ui5_cl_demo_app_059.clas.abap b/src/01/02/z2ui5_cl_demo_app_059.clas.abap index 4f0588b3..46450995 100644 --- a/src/01/02/z2ui5_cl_demo_app_059.clas.abap +++ b/src/01/02/z2ui5_cl_demo_app_059.clas.abap @@ -28,7 +28,7 @@ ENDCLASS. -CLASS z2ui5_cl_demo_app_059 IMPLEMENTATION. +CLASS Z2UI5_CL_DEMO_APP_059 IMPLEMENTATION. METHOD z2ui5_if_app~main. diff --git a/src/01/02/z2ui5_cl_demo_app_059.clas.xml b/src/01/02/z2ui5_cl_demo_app_059.clas.xml index 18d4b5db..82daeaaf 100644 --- a/src/01/02/z2ui5_cl_demo_app_059.clas.xml +++ b/src/01/02/z2ui5_cl_demo_app_059.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_059 E - m.Table - Search Backend Live + Table - Search Backend Live 1 X X diff --git a/src/01/02/z2ui5_cl_demo_app_074.clas.xml b/src/01/02/z2ui5_cl_demo_app_074.clas.xml index c3aab250..52b54619 100644 --- a/src/01/02/z2ui5_cl_demo_app_074.clas.xml +++ b/src/01/02/z2ui5_cl_demo_app_074.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_074 E - C File Uploader + Custom Control - File Uploader (C) 1 X X diff --git a/src/01/02/z2ui5_cl_demo_app_078.clas.xml b/src/01/02/z2ui5_cl_demo_app_078.clas.xml index 9d378b3c..1b0739ef 100644 --- a/src/01/02/z2ui5_cl_demo_app_078.clas.xml +++ b/src/01/02/z2ui5_cl_demo_app_078.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_078 E - C Multi Input + Custom Control - Multi Input (C) 1 X X diff --git a/src/01/02/z2ui5_cl_demo_app_088.clas.xml b/src/01/02/z2ui5_cl_demo_app_088.clas.xml index 0fa0779c..c8a771a2 100644 --- a/src/01/02/z2ui5_cl_demo_app_088.clas.xml +++ b/src/01/02/z2ui5_cl_demo_app_088.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_088 E - A Nav Container + Custom Control - Nav Container 1 X X diff --git a/src/01/02/z2ui5_cl_demo_app_120.clas.xml b/src/01/02/z2ui5_cl_demo_app_120.clas.xml index 14da555e..66108075 100644 --- a/src/01/02/z2ui5_cl_demo_app_120.clas.xml +++ b/src/01/02/z2ui5_cl_demo_app_120.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_120 E - C Geoloaction + Custom Control - Geoloaction 1 X X diff --git a/src/01/02/z2ui5_cl_demo_app_361.clas.xml b/src/01/02/z2ui5_cl_demo_app_361.clas.xml index 8058bb5c..8d3a6a01 100644 --- a/src/01/02/z2ui5_cl_demo_app_361.clas.xml +++ b/src/01/02/z2ui5_cl_demo_app_361.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_361 E - Browser - Logout + Browser - Logout (A) 1 X X diff --git a/src/01/08/package.devc.xml b/src/01/08/package.devc.xml index 2411217b..1570e58e 100644 --- a/src/01/08/package.devc.xml +++ b/src/01/08/package.devc.xml @@ -3,7 +3,7 @@ - controls - UI5 Demo Kit + Control Library From ea0e6271abee9cb188133c3eb6d068c81bd137c3 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 19 Jul 2026 11:40:16 +0000 Subject: [PATCH 28/49] Regenerate overviews for renamed subpackages (Basics / Extended / Control Library) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sync the AGENTS.md §1 tree to the renamed src/01 CTEXTs and regenerate the overview catalogs so the group headings match. abaplint 0 issues. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_018JnhapjtGyzgxzuzUoeeXW --- AGENTS.md | 6 +- src/01/z2ui5_cl_sample_app_001.clas.abap | 158 +++++++++++------------ 2 files changed, 82 insertions(+), 82 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 2d6b493f..57bdfe49 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -33,9 +33,9 @@ apps directly in `src/` root** — every sample sits in a categorised subpackage ``` src/ ├── 01/ "basic" cloud-ready & downportable — survives every build -│ ├── 01/ framework - basics -│ ├── 02/ framework - use cases framework actions, custom controls and use cases -│ └── 08/ controls - UI5 Demo Kit 1:1 rebuilds of UI5 demo kit samples, split by library +│ ├── 01/ Basics +│ ├── 02/ Extended framework actions, custom controls and use cases +│ └── 08/ Control Library 1:1 rebuilds of UI5 demo kit samples, split by library │ ├── 00/ controls - sap.m │ ├── 01/ controls - sap.uxap │ ├── 02/ controls - sap.f diff --git a/src/01/z2ui5_cl_sample_app_001.clas.abap b/src/01/z2ui5_cl_sample_app_001.clas.abap index 074688cf..9ddd6480 100644 --- a/src/01/z2ui5_cl_sample_app_001.clas.abap +++ b/src/01/z2ui5_cl_sample_app_001.clas.abap @@ -206,85 +206,85 @@ CLASS z2ui5_cl_sample_app_001 IMPLEMENTATION. METHOD get_catalog. result = VALUE #( - ( group = `framework - basics` header = `Binding` sub = `Level Simple` app = `z2ui5_cl_demo_app_001` ) - ( group = `framework - basics` header = `Binding II` sub = `Level Structure/Component` app = `z2ui5_cl_demo_app_166` ) - ( group = `framework - basics` header = `Binding III` sub = `Level Table/Cell` app = `z2ui5_cl_demo_app_144` ) - ( group = `framework - basics` header = `Binding IV` sub = `Expression Binding` app = `z2ui5_cl_demo_app_027` ) - ( group = `framework - basics` header = `Binding V` sub = `Formatting Integers, Decimals, Dates & Time` app = `z2ui5_cl_demo_app_047` ) - ( group = `framework - basics` header = `Binding VII` sub = `Formatting Currencies` app = `z2ui5_cl_demo_app_067` ) - ( group = `framework - basics` header = `Event` sub = `Handle events & change the view` app = `z2ui5_cl_demo_app_004` ) - ( group = `framework - basics` header = `Event II` sub = `Additional Infos with t_args` app = `z2ui5_cl_demo_app_167` ) - ( group = `framework - basics` header = `Event III` sub = `Facet Filter - T_arg with Objects` app = `z2ui5_cl_demo_app_197` ) - ( group = `framework - basics` header = `Formatter` sub = `Date object minimal (DatePicker)` app = `z2ui5_cl_demo_app_457` ) - ( group = `framework - basics` header = `Formatter` sub = `Date objects for PlanningCalendar` app = `z2ui5_cl_demo_app_456` ) - ( group = `framework - basics` header = `Formatter` sub = `Simple` app = `z2ui5_cl_demo_app_453` ) - ( group = `framework - basics` header = `Formatter` sub = `weightState via core require` app = `z2ui5_cl_demo_app_450` ) - ( group = `framework - basics` header = `Message` sub = `Backend Processing` app = `z2ui5_cl_demo_app_008` ) - ( group = `framework - basics` header = `Message` sub = `MessageBox` app = `z2ui5_cl_demo_app_382` ) - ( group = `framework - basics` header = `Message` sub = `MessageToast` app = `z2ui5_cl_demo_app_381` ) - ( group = `framework - basics` header = `Message` sub = `MessageView` app = `z2ui5_cl_demo_app_452` ) - ( group = `framework - basics` header = `Model` sub = `Device Model in views and popups` app = `z2ui5_cl_demo_app_445` ) - ( group = `framework - basics` header = `Model` sub = `Message Model` app = `z2ui5_cl_demo_app_458` ) - ( group = `framework - basics` header = `ModelMore` sub = `Set Size Limit` app = `z2ui5_cl_demo_app_071` ) - ( group = `framework - basics` header = `More` sub = `Call and leave to apps` app = `z2ui5_cl_demo_app_024` ) - ( group = `framework - basics` header = `More` sub = `Generic Data Reference` app = `z2ui5_cl_demo_app_061` ) - ( group = `framework - basics` header = `More` sub = `Read Frontend Infos` app = `z2ui5_cl_demo_app_122` ) - ( group = `framework - basics` header = `More` sub = `Require Object in XML View` app = `z2ui5_cl_demo_app_163` ) - ( group = `framework - basics` header = `Nested Views I` sub = `Basic Example` app = `z2ui5_cl_demo_app_065` ) - ( group = `framework - basics` header = `Nested Views II` sub = `Head & Item Table` app = `z2ui5_cl_demo_app_097` ) - ( group = `framework - basics` header = `Nested Views III` sub = `Head & Item Table & Detail` app = `z2ui5_cl_demo_app_098` ) - ( group = `framework - basics` header = `Nested Views IV` sub = `Sub-App` app = `z2ui5_cl_demo_app_104` ) - ( group = `framework - basics` header = `Popover` sub = `Item Level of Table` app = `z2ui5_cl_demo_app_052` ) - ( group = `framework - basics` header = `Popover` sub = `List to select in Popover` app = `z2ui5_cl_demo_app_081` ) - ( group = `framework - basics` header = `Popover` sub = `Simple Example` app = `z2ui5_cl_demo_app_026` ) - ( group = `framework - basics` header = `Popover IV` sub = `with Quick View` app = `z2ui5_cl_demo_app_109` ) - ( group = `framework - basics` header = `Popup` sub = `Different ways of calling Popups` app = `z2ui5_cl_demo_app_012` ) - ( group = `framework - basics` header = `Popup` sub = `Value Help with Popups` app = `z2ui5_cl_demo_app_009` ) - ( group = `framework - basics` header = `Popup III` sub = `Popup in Popup - Backend Stack Handling` app = `z2ui5_cl_demo_app_161` ) - ( group = `framework - basics` header = `Templating I` sub = `Basic Example` app = `z2ui5_cl_demo_app_173` ) - ( group = `framework - basics` header = `Templating II` sub = `Nested Views` app = `z2ui5_cl_demo_app_176` ) - ( group = `framework - use cases` header = `A Nav Container` sub = `` app = `z2ui5_cl_demo_app_088` ) - ( group = `framework - use cases` header = `A Nav Container` sub = `Popup` app = `z2ui5_cl_demo_app_170` ) - ( group = `framework - use cases` header = `A Wizard Control` sub = `` app = `z2ui5_cl_demo_app_202` ) - ( group = `framework - use cases` header = `Action` sub = `control_call` app = `z2ui5_cl_demo_app_446` ) - ( group = `framework - use cases` header = `Action` sub = `control_call_by_id` app = `z2ui5_cl_demo_app_447` ) - ( group = `framework - use cases` header = `Action` sub = `Panel, setExpanded (A)` app = `z2ui5_cl_demo_app_448` ) - ( group = `framework - use cases` header = `Action` sub = `PDF Viewer Display (A)` app = `z2ui5_cl_demo_app_449` ) - ( group = `framework - use cases` header = `Browser` sub = `Logout` app = `z2ui5_cl_demo_app_361` ) - ( group = `framework - use cases` header = `Browser` sub = `Title` app = `z2ui5_cl_demo_app_125` ) - ( group = `framework - use cases` header = `C File Uploader` sub = `` app = `z2ui5_cl_demo_app_074` ) - ( group = `framework - use cases` header = `C Geoloaction` sub = `` app = `z2ui5_cl_demo_app_120` ) - ( group = `framework - use cases` header = `C Multi Input` sub = `` app = `z2ui5_cl_demo_app_078` ) - ( group = `framework - use cases` header = `CC CameraSelector` sub = `` app = `z2ui5_cl_demo_app_306` ) - ( group = `framework - use cases` header = `CC Data loss protection` sub = `` app = `z2ui5_cl_demo_app_279` ) - ( group = `framework - use cases` header = `Error Handling` sub = `unexpected error popup` app = `z2ui5_cl_demo_app_464` ) - ( group = `framework - use cases` header = `Focus I` sub = `Set Focus in Textfield` app = `z2ui5_cl_demo_app_133` ) - ( group = `framework - use cases` header = `Focus II` sub = `Jump with the focus` app = `z2ui5_cl_demo_app_189` ) - ( group = `framework - use cases` header = `Input` sub = `Clipboard` app = `z2ui5_cl_demo_app_325` ) - ( group = `framework - use cases` header = `Input` sub = `Hide/show Soft Keyboard` app = `z2ui5_cl_demo_app_352` ) - ( group = `framework - use cases` header = `List` sub = `Events & Visualization` app = `z2ui5_cl_demo_app_048` ) - ( group = `framework - use cases` header = `List` sub = `Filter and sort via backend event (A)` app = `z2ui5_cl_demo_app_454` ) - ( group = `framework - use cases` header = `List` sub = `Live filter without backend (A)` app = `z2ui5_cl_demo_app_455` ) - ( group = `framework - use cases` header = `m.Table` sub = `Search Backend Live` app = `z2ui5_cl_demo_app_059` ) - ( group = `framework - use cases` header = `Scroll I` sub = `Scroll to position` app = `z2ui5_cl_demo_app_362` ) - ( group = `framework - use cases` header = `Scroll II` sub = `Scroll into view` app = `z2ui5_cl_demo_app_363` ) - ( group = `framework - use cases` header = `Table` sub = `Backend Filter` app = `z2ui5_cl_demo_app_045` ) - ( group = `framework - use cases` header = `Table` sub = `Drag and Drop (A)` app = `z2ui5_cl_demo_app_459` ) - ( group = `framework - use cases` header = `Table` sub = `Editable` app = `z2ui5_cl_demo_app_011` ) - ( group = `framework - use cases` header = `Table` sub = `Search Backend` app = `z2ui5_cl_demo_app_053` ) - ( group = `framework - use cases` header = `Table` sub = `Selection Modes: Single Select & Multi Select` app = `z2ui5_cl_demo_app_019` ) - ( group = `framework - use cases` header = `Table` sub = `Table with ScrollContainer` app = `z2ui5_cl_demo_app_006` ) - ( group = `framework - use cases` header = `Timer I` sub = `Wait n MS and call again the server` app = `z2ui5_cl_demo_app_028` ) - ( group = `framework - use cases` header = `Timer II` sub = `Loading Indicator with WAIT UP Backend` app = `z2ui5_cl_demo_app_064` ) - ( group = `framework - use cases` header = `Tree` sub = `Drag and Drop` app = `z2ui5_cl_demo_app_461` ) - ( group = `framework - use cases` header = `Tree` sub = `Editable with Custom Item (C)` app = `z2ui5_cl_demo_app_463` ) - ( group = `framework - use cases` header = `Tree` sub = `Inside Popup (C)` app = `z2ui5_cl_demo_app_462` ) - ( group = `framework - use cases` header = `Tree` sub = `Simple` app = `z2ui5_cl_demo_app_460` ) - ( group = `framework - use cases` header = `ui.Table` sub = `Default Filtering` app = `z2ui5_cl_demo_app_143` ) - ( group = `framework - use cases` header = `ui.Table` sub = `Events on Cell Level` app = `z2ui5_cl_demo_app_160` ) - ( group = `framework - use cases` header = `ui.Table` sub = `Full Example` app = `z2ui5_cl_demo_app_070` ) - ( group = `framework - use cases` header = `URL I` sub = `New Tab Open an URL in a new tab` app = `z2ui5_cl_demo_app_073` ) - ( group = `framework - use cases` header = `URL II` sub = `Open Telephon, Email usw` app = `z2ui5_cl_demo_app_316` ) + ( group = `Basics` header = `Action` sub = `control_call` app = `z2ui5_cl_demo_app_446` ) + ( group = `Basics` header = `Action` sub = `control_call_by_id` app = `z2ui5_cl_demo_app_447` ) + ( group = `Basics` header = `Binding` sub = `Expression Binding` app = `z2ui5_cl_demo_app_027` ) + ( group = `Basics` header = `Binding` sub = `Formatting Integers, Decimals, Dates & Time` app = `z2ui5_cl_demo_app_047` ) + ( group = `Basics` header = `Binding` sub = `Level Simple` app = `z2ui5_cl_demo_app_001` ) + ( group = `Basics` header = `Binding` sub = `Level Structure/Component` app = `z2ui5_cl_demo_app_166` ) + ( group = `Basics` header = `Binding` sub = `Level Table/Cell` app = `z2ui5_cl_demo_app_144` ) + ( group = `Basics` header = `Binding VII` sub = `Formatting Currencies` app = `z2ui5_cl_demo_app_067` ) + ( group = `Basics` header = `Event` sub = `Handle events & change the view` app = `z2ui5_cl_demo_app_004` ) + ( group = `Basics` header = `Event II` sub = `Additional Infos with t_args` app = `z2ui5_cl_demo_app_167` ) + ( group = `Basics` header = `Event III` sub = `Facet Filter - T_arg with Objects` app = `z2ui5_cl_demo_app_197` ) + ( group = `Basics` header = `Formatter` sub = `Date object minimal (DatePicker)` app = `z2ui5_cl_demo_app_457` ) + ( group = `Basics` header = `Formatter` sub = `Date objects for PlanningCalendar` app = `z2ui5_cl_demo_app_456` ) + ( group = `Basics` header = `Formatter` sub = `Simple` app = `z2ui5_cl_demo_app_453` ) + ( group = `Basics` header = `Formatter` sub = `weightState via core require` app = `z2ui5_cl_demo_app_450` ) + ( group = `Basics` header = `Message` sub = `Backend Processing` app = `z2ui5_cl_demo_app_008` ) + ( group = `Basics` header = `Message` sub = `MessageBox` app = `z2ui5_cl_demo_app_382` ) + ( group = `Basics` header = `Message` sub = `MessageToast` app = `z2ui5_cl_demo_app_381` ) + ( group = `Basics` header = `Message` sub = `MessageView` app = `z2ui5_cl_demo_app_452` ) + ( group = `Basics` header = `Model` sub = `Device Model in views and popups` app = `z2ui5_cl_demo_app_445` ) + ( group = `Basics` header = `Model` sub = `Message Model` app = `z2ui5_cl_demo_app_458` ) + ( group = `Basics` header = `Model` sub = `Set Size Limit` app = `z2ui5_cl_demo_app_071` ) + ( group = `Basics` header = `More` sub = `Call and leave to apps` app = `z2ui5_cl_demo_app_024` ) + ( group = `Basics` header = `More` sub = `Generic Data Reference` app = `z2ui5_cl_demo_app_061` ) + ( group = `Basics` header = `More` sub = `Read Frontend Infos` app = `z2ui5_cl_demo_app_122` ) + ( group = `Basics` header = `More` sub = `Require Object in XML View` app = `z2ui5_cl_demo_app_163` ) + ( group = `Basics` header = `Nested Views` sub = `Head & Item Table` app = `z2ui5_cl_demo_app_097` ) + ( group = `Basics` header = `Nested Views` sub = `Head & Item Table & Detail` app = `z2ui5_cl_demo_app_098` ) + ( group = `Basics` header = `Nested Views` sub = `Sub-App` app = `z2ui5_cl_demo_app_104` ) + ( group = `Basics` header = `Nested Views I` sub = `Basic Example` app = `z2ui5_cl_demo_app_065` ) + ( group = `Basics` header = `Popover` sub = `Item Level of Table` app = `z2ui5_cl_demo_app_052` ) + ( group = `Basics` header = `Popover` sub = `List to select in Popover` app = `z2ui5_cl_demo_app_081` ) + ( group = `Basics` header = `Popover` sub = `Simple Example` app = `z2ui5_cl_demo_app_026` ) + ( group = `Basics` header = `Popover` sub = `with Quick View` app = `z2ui5_cl_demo_app_109` ) + ( group = `Basics` header = `Popup` sub = `Different ways of calling Popups` app = `z2ui5_cl_demo_app_012` ) + ( group = `Basics` header = `Popup` sub = `Popup in Popup - Backend Stack Handling` app = `z2ui5_cl_demo_app_161` ) + ( group = `Basics` header = `Popup` sub = `Value Help with Popups` app = `z2ui5_cl_demo_app_009` ) + ( group = `Basics` header = `Templating` sub = `Nested Views` app = `z2ui5_cl_demo_app_176` ) + ( group = `Basics` header = `Templating I` sub = `Basic Example` app = `z2ui5_cl_demo_app_173` ) + ( group = `Extended` header = `A Nav Container` sub = `Popup` app = `z2ui5_cl_demo_app_170` ) + ( group = `Extended` header = `A Wizard Control` sub = `` app = `z2ui5_cl_demo_app_202` ) + ( group = `Extended` header = `Action` sub = `Panel, setExpanded (A)` app = `z2ui5_cl_demo_app_448` ) + ( group = `Extended` header = `Action` sub = `PDF Viewer Display (A)` app = `z2ui5_cl_demo_app_449` ) + ( group = `Extended` header = `Browser` sub = `Logout (A)` app = `z2ui5_cl_demo_app_361` ) + ( group = `Extended` header = `Browser` sub = `Title` app = `z2ui5_cl_demo_app_125` ) + ( group = `Extended` header = `CC CameraSelector` sub = `` app = `z2ui5_cl_demo_app_306` ) + ( group = `Extended` header = `CC Data loss protection` sub = `` app = `z2ui5_cl_demo_app_279` ) + ( group = `Extended` header = `Custom Control` sub = `File Uploader (C)` app = `z2ui5_cl_demo_app_074` ) + ( group = `Extended` header = `Custom Control` sub = `Geoloaction` app = `z2ui5_cl_demo_app_120` ) + ( group = `Extended` header = `Custom Control` sub = `Multi Input (C)` app = `z2ui5_cl_demo_app_078` ) + ( group = `Extended` header = `Custom Control` sub = `Nav Container` app = `z2ui5_cl_demo_app_088` ) + ( group = `Extended` header = `Error Handling` sub = `unexpected error popup` app = `z2ui5_cl_demo_app_464` ) + ( group = `Extended` header = `Focus I` sub = `Set Focus in Textfield` app = `z2ui5_cl_demo_app_133` ) + ( group = `Extended` header = `Focus II` sub = `Jump with the focus` app = `z2ui5_cl_demo_app_189` ) + ( group = `Extended` header = `Input` sub = `Clipboard` app = `z2ui5_cl_demo_app_325` ) + ( group = `Extended` header = `Input` sub = `Hide/show Soft Keyboard` app = `z2ui5_cl_demo_app_352` ) + ( group = `Extended` header = `List` sub = `Events & Visualization` app = `z2ui5_cl_demo_app_048` ) + ( group = `Extended` header = `List` sub = `Filter and sort via backend event (A)` app = `z2ui5_cl_demo_app_454` ) + ( group = `Extended` header = `List` sub = `Live filter without backend (A)` app = `z2ui5_cl_demo_app_455` ) + ( group = `Extended` header = `Scroll I` sub = `Scroll to position` app = `z2ui5_cl_demo_app_362` ) + ( group = `Extended` header = `Scroll II` sub = `Scroll into view` app = `z2ui5_cl_demo_app_363` ) + ( group = `Extended` header = `Table` sub = `Backend Filter` app = `z2ui5_cl_demo_app_045` ) + ( group = `Extended` header = `Table` sub = `Drag and Drop (A)` app = `z2ui5_cl_demo_app_459` ) + ( group = `Extended` header = `Table` sub = `Editable` app = `z2ui5_cl_demo_app_011` ) + ( group = `Extended` header = `Table` sub = `Search Backend` app = `z2ui5_cl_demo_app_053` ) + ( group = `Extended` header = `Table` sub = `Search Backend Live` app = `z2ui5_cl_demo_app_059` ) + ( group = `Extended` header = `Table` sub = `Selection Modes: Single Select & Multi Select` app = `z2ui5_cl_demo_app_019` ) + ( group = `Extended` header = `Table` sub = `Table with ScrollContainer` app = `z2ui5_cl_demo_app_006` ) + ( group = `Extended` header = `Timer I` sub = `Wait n MS and call again the server` app = `z2ui5_cl_demo_app_028` ) + ( group = `Extended` header = `Timer II` sub = `Loading Indicator with WAIT UP Backend` app = `z2ui5_cl_demo_app_064` ) + ( group = `Extended` header = `Tree` sub = `Drag and Drop` app = `z2ui5_cl_demo_app_461` ) + ( group = `Extended` header = `Tree` sub = `Editable with Custom Item (C)` app = `z2ui5_cl_demo_app_463` ) + ( group = `Extended` header = `Tree` sub = `Inside Popup (C)` app = `z2ui5_cl_demo_app_462` ) + ( group = `Extended` header = `Tree` sub = `Simple` app = `z2ui5_cl_demo_app_460` ) + ( group = `Extended` header = `ui.Table` sub = `Default Filtering` app = `z2ui5_cl_demo_app_143` ) + ( group = `Extended` header = `ui.Table` sub = `Events on Cell Level` app = `z2ui5_cl_demo_app_160` ) + ( group = `Extended` header = `ui.Table` sub = `Full Example` app = `z2ui5_cl_demo_app_070` ) + ( group = `Extended` header = `URL I` sub = `New Tab Open an URL in a new tab` app = `z2ui5_cl_demo_app_073` ) + ( group = `Extended` header = `URL II` sub = `Open Telephon, Email usw` app = `z2ui5_cl_demo_app_316` ) ( group = `controls - sap.m` header = `ActionListItem` sub = `Use the Action List Item to trigger an action directly from a list` app = `z2ui5_cl_demo_app_216` ) ( group = `controls - sap.m` header = `Breadcrumbs` sub = `Breadcrumbs sample with current page set as aggregation, resulting in a link` app = `z2ui5_cl_demo_app_292` ) ( group = `controls - sap.m` header = `BusyIndicator` sub = `The Busy Indicator signals that some operation is going on and that the user must wait ...` app = `z2ui5_cl_demo_app_215` ) From 158e325c2b6a317f42a53964d81cfa2dbef3a8fa Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 19 Jul 2026 11:40:49 +0000 Subject: [PATCH 29/49] Move the Error Handling sample (464) to Basics git mv z2ui5_cl_demo_app_464 from 01/02 (Extended) to 01/01 (Basics) and regenerate the overview catalogs. abaplint 0 issues. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_018JnhapjtGyzgxzuzUoeeXW --- src/01/{02 => 01}/z2ui5_cl_demo_app_464.clas.abap | 0 src/01/{02 => 01}/z2ui5_cl_demo_app_464.clas.xml | 0 src/01/z2ui5_cl_sample_app_001.clas.abap | 2 +- 3 files changed, 1 insertion(+), 1 deletion(-) rename src/01/{02 => 01}/z2ui5_cl_demo_app_464.clas.abap (100%) rename src/01/{02 => 01}/z2ui5_cl_demo_app_464.clas.xml (100%) diff --git a/src/01/02/z2ui5_cl_demo_app_464.clas.abap b/src/01/01/z2ui5_cl_demo_app_464.clas.abap similarity index 100% rename from src/01/02/z2ui5_cl_demo_app_464.clas.abap rename to src/01/01/z2ui5_cl_demo_app_464.clas.abap diff --git a/src/01/02/z2ui5_cl_demo_app_464.clas.xml b/src/01/01/z2ui5_cl_demo_app_464.clas.xml similarity index 100% rename from src/01/02/z2ui5_cl_demo_app_464.clas.xml rename to src/01/01/z2ui5_cl_demo_app_464.clas.xml diff --git a/src/01/z2ui5_cl_sample_app_001.clas.abap b/src/01/z2ui5_cl_sample_app_001.clas.abap index 9ddd6480..0d4f5964 100644 --- a/src/01/z2ui5_cl_sample_app_001.clas.abap +++ b/src/01/z2ui5_cl_sample_app_001.clas.abap @@ -214,6 +214,7 @@ CLASS z2ui5_cl_sample_app_001 IMPLEMENTATION. ( group = `Basics` header = `Binding` sub = `Level Structure/Component` app = `z2ui5_cl_demo_app_166` ) ( group = `Basics` header = `Binding` sub = `Level Table/Cell` app = `z2ui5_cl_demo_app_144` ) ( group = `Basics` header = `Binding VII` sub = `Formatting Currencies` app = `z2ui5_cl_demo_app_067` ) + ( group = `Basics` header = `Error Handling` sub = `unexpected error popup` app = `z2ui5_cl_demo_app_464` ) ( group = `Basics` header = `Event` sub = `Handle events & change the view` app = `z2ui5_cl_demo_app_004` ) ( group = `Basics` header = `Event II` sub = `Additional Infos with t_args` app = `z2ui5_cl_demo_app_167` ) ( group = `Basics` header = `Event III` sub = `Facet Filter - T_arg with Objects` app = `z2ui5_cl_demo_app_197` ) @@ -257,7 +258,6 @@ CLASS z2ui5_cl_sample_app_001 IMPLEMENTATION. ( group = `Extended` header = `Custom Control` sub = `Geoloaction` app = `z2ui5_cl_demo_app_120` ) ( group = `Extended` header = `Custom Control` sub = `Multi Input (C)` app = `z2ui5_cl_demo_app_078` ) ( group = `Extended` header = `Custom Control` sub = `Nav Container` app = `z2ui5_cl_demo_app_088` ) - ( group = `Extended` header = `Error Handling` sub = `unexpected error popup` app = `z2ui5_cl_demo_app_464` ) ( group = `Extended` header = `Focus I` sub = `Set Focus in Textfield` app = `z2ui5_cl_demo_app_133` ) ( group = `Extended` header = `Focus II` sub = `Jump with the focus` app = `z2ui5_cl_demo_app_189` ) ( group = `Extended` header = `Input` sub = `Clipboard` app = `z2ui5_cl_demo_app_325` ) From cd9c3dadb8cb3ea8f73fc4611c7c23fe68c8e02e Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 19 Jul 2026 11:48:59 +0000 Subject: [PATCH 30/49] Extended overview: info strip explaining Basic vs Extended compatibility MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace the "under construction" warning strip on sample_app_000 with an Information strip: the Basic samples target maximum compatibility (plain OpenUI5, every UI5 release since 1.71, ABAP Cloud and 7.02), while the Extended samples here can need a specific system, so each one's ABAP stack / UI5 release / other prerequisites must be checked. The classic-overview link is kept (appended when that app exists). Doc note in AGENTS.md §3 updated. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_018JnhapjtGyzgxzuzUoeeXW --- AGENTS.md | 3 ++- src/00/z2ui5_cl_sample_app_000.clas.abap | 19 +++++++++++++------ 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 57bdfe49..1abe544e 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -168,7 +168,8 @@ the block plus roughly one space, precomputed by `block_widths( )` / underneath each other in one column, directly next to the links. `z2ui5_cl_demo_app_000` is the old "classic" overview app (now under `00/99`, -obsolete); `sample_app_001` links to it via a message strip. Do not extend it. +obsolete); `sample_app_000` links to it from its info message strip. Do not +extend it. --- diff --git a/src/00/z2ui5_cl_sample_app_000.clas.abap b/src/00/z2ui5_cl_sample_app_000.clas.abap index ad3035b2..f0cb4d7c 100644 --- a/src/00/z2ui5_cl_sample_app_000.clas.abap +++ b/src/00/z2ui5_cl_sample_app_000.clas.abap @@ -135,16 +135,23 @@ CLASS z2ui5_cl_sample_app_000 IMPLEMENTATION. press = client->_event_client( val = client->cs_event-open_new_tab t_arg = VALUE #( ( url_standard ) ) ) ). + DATA(info) = |The Basic samples are written for maximum compatibility - | && + |plain OpenUI5, every UI5 release since 1.71 and both ABAP Cloud and 7.02. | && + |The Extended samples here can need a specific system, so check per sample | && + |which ABAP stack (ABAP Cloud / on-premise), UI5 release and other prerequisites it requires.|. + IF class_exists( `Z2UI5_CL_DEMO_APP_000` ) = abap_true. DATA(url) = |{ client->get( )-s_config-origin }{ client->get( )-s_config-pathname }?app_start=z2ui5_cl_demo_app_000|. - page->message_strip( - type = `Warning` - showicon = abap_true - enableformattedtext = abap_true - class = `sapUiSmallMarginBottom` - text = |This overview is still under construction. Click here to open the classic overview.| ). + info = |{ info } Click here for the classic overview.|. ENDIF. + page->message_strip( + type = `Information` + showicon = abap_true + enableformattedtext = abap_true + class = `sapUiSmallMarginBottom` + text = info ). + DATA(prev_group) = ``. DATA(prev_base) = ``. From f839ac39c959409829bf4e623ad7c5b29131c39f Mon Sep 17 00:00:00 2001 From: oblomov Date: Sun, 19 Jul 2026 11:58:36 +0000 Subject: [PATCH 31/49] fix --- src/01/01/z2ui5_cl_demo_app_067.clas.abap | 5 +++-- src/01/01/z2ui5_cl_demo_app_067.clas.xml | 2 +- src/01/01/z2ui5_cl_demo_app_167.clas.abap | 5 +++-- src/01/01/z2ui5_cl_demo_app_167.clas.xml | 2 +- src/01/01/z2ui5_cl_demo_app_173.clas.abap | 5 +++-- src/01/01/z2ui5_cl_demo_app_173.clas.xml | 2 +- src/01/01/z2ui5_cl_demo_app_197.clas.xml | 2 +- src/01/01/z2ui5_cl_demo_app_464.clas.xml | 2 +- src/01/02/z2ui5_cl_demo_app_074.clas.xml | 2 +- src/01/02/z2ui5_cl_demo_app_078.clas.xml | 2 +- src/01/02/z2ui5_cl_demo_app_088.clas.xml | 2 +- src/01/02/z2ui5_cl_demo_app_120.clas.xml | 2 +- src/01/02/z2ui5_cl_demo_app_170.clas.xml | 2 +- src/01/02/z2ui5_cl_demo_app_202.clas.xml | 2 +- src/01/02/z2ui5_cl_demo_app_279.clas.xml | 2 +- src/01/02/z2ui5_cl_demo_app_306.clas.xml | 2 +- src/01/02/z2ui5_cl_demo_app_448.clas.xml | 2 +- src/01/02/z2ui5_cl_demo_app_449.clas.xml | 2 +- 18 files changed, 24 insertions(+), 21 deletions(-) diff --git a/src/01/01/z2ui5_cl_demo_app_067.clas.abap b/src/01/01/z2ui5_cl_demo_app_067.clas.abap index c5213d66..429843ac 100644 --- a/src/01/01/z2ui5_cl_demo_app_067.clas.abap +++ b/src/01/01/z2ui5_cl_demo_app_067.clas.abap @@ -12,7 +12,9 @@ CLASS z2ui5_cl_demo_app_067 DEFINITION PUBLIC. ENDCLASS. -CLASS z2ui5_cl_demo_app_067 IMPLEMENTATION. + +CLASS Z2UI5_CL_DEMO_APP_067 IMPLEMENTATION. + METHOD z2ui5_if_app~main. @@ -106,5 +108,4 @@ CLASS z2ui5_cl_demo_app_067 IMPLEMENTATION. client->view_display( page->stringify( ) ). ENDMETHOD. - ENDCLASS. diff --git a/src/01/01/z2ui5_cl_demo_app_067.clas.xml b/src/01/01/z2ui5_cl_demo_app_067.clas.xml index 0b62721d..1ff19cbc 100644 --- a/src/01/01/z2ui5_cl_demo_app_067.clas.xml +++ b/src/01/01/z2ui5_cl_demo_app_067.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_067 E - Binding VII - Formatting Currencies + Binding - Formatting Currencies 1 X X diff --git a/src/01/01/z2ui5_cl_demo_app_167.clas.abap b/src/01/01/z2ui5_cl_demo_app_167.clas.abap index a6fb89e5..5365996c 100644 --- a/src/01/01/z2ui5_cl_demo_app_167.clas.abap +++ b/src/01/01/z2ui5_cl_demo_app_167.clas.abap @@ -14,7 +14,9 @@ CLASS z2ui5_cl_demo_app_167 DEFINITION PUBLIC. ENDCLASS. -CLASS z2ui5_cl_demo_app_167 IMPLEMENTATION. + +CLASS Z2UI5_CL_DEMO_APP_167 IMPLEMENTATION. + METHOD set_view. @@ -73,5 +75,4 @@ CLASS z2ui5_cl_demo_app_167 IMPLEMENTATION. client->view_model_update( ). ENDMETHOD. - ENDCLASS. diff --git a/src/01/01/z2ui5_cl_demo_app_167.clas.xml b/src/01/01/z2ui5_cl_demo_app_167.clas.xml index 04b32354..e8db9b4f 100644 --- a/src/01/01/z2ui5_cl_demo_app_167.clas.xml +++ b/src/01/01/z2ui5_cl_demo_app_167.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_167 E - Event II - Additional Infos with t_args + Event - Additional Infos with t_args 1 X X diff --git a/src/01/01/z2ui5_cl_demo_app_173.clas.abap b/src/01/01/z2ui5_cl_demo_app_173.clas.abap index 91f4a0d1..e6d92eb1 100644 --- a/src/01/01/z2ui5_cl_demo_app_173.clas.abap +++ b/src/01/01/z2ui5_cl_demo_app_173.clas.abap @@ -32,7 +32,9 @@ CLASS z2ui5_cl_demo_app_173 DEFINITION PUBLIC. ENDCLASS. -CLASS z2ui5_cl_demo_app_173 IMPLEMENTATION. + +CLASS Z2UI5_CL_DEMO_APP_173 IMPLEMENTATION. + METHOD view_display. @@ -101,5 +103,4 @@ CLASS z2ui5_cl_demo_app_173 IMPLEMENTATION. ENDCASE. ENDMETHOD. - ENDCLASS. diff --git a/src/01/01/z2ui5_cl_demo_app_173.clas.xml b/src/01/01/z2ui5_cl_demo_app_173.clas.xml index 7ba5170e..726c1b63 100644 --- a/src/01/01/z2ui5_cl_demo_app_173.clas.xml +++ b/src/01/01/z2ui5_cl_demo_app_173.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_173 E - Templating I - Basic Example + Templating - Basic Example 1 X X diff --git a/src/01/01/z2ui5_cl_demo_app_197.clas.xml b/src/01/01/z2ui5_cl_demo_app_197.clas.xml index be0cfeb2..54c26248 100644 --- a/src/01/01/z2ui5_cl_demo_app_197.clas.xml +++ b/src/01/01/z2ui5_cl_demo_app_197.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_197 E - Event III - Facet Filter - T_arg with Objects + Event - Facet Filter T_arg with Objects 1 X X diff --git a/src/01/01/z2ui5_cl_demo_app_464.clas.xml b/src/01/01/z2ui5_cl_demo_app_464.clas.xml index e584ae93..ca839fe3 100644 --- a/src/01/01/z2ui5_cl_demo_app_464.clas.xml +++ b/src/01/01/z2ui5_cl_demo_app_464.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_464 E - Error Handling - unexpected error popup + More - Error Handling 1 X X diff --git a/src/01/02/z2ui5_cl_demo_app_074.clas.xml b/src/01/02/z2ui5_cl_demo_app_074.clas.xml index 52b54619..d5a7ba09 100644 --- a/src/01/02/z2ui5_cl_demo_app_074.clas.xml +++ b/src/01/02/z2ui5_cl_demo_app_074.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_074 E - Custom Control - File Uploader (C) + More - File Uploader (C) 1 X X diff --git a/src/01/02/z2ui5_cl_demo_app_078.clas.xml b/src/01/02/z2ui5_cl_demo_app_078.clas.xml index 1b0739ef..91f52f34 100644 --- a/src/01/02/z2ui5_cl_demo_app_078.clas.xml +++ b/src/01/02/z2ui5_cl_demo_app_078.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_078 E - Custom Control - Multi Input (C) + More - Multi Input (C) 1 X X diff --git a/src/01/02/z2ui5_cl_demo_app_088.clas.xml b/src/01/02/z2ui5_cl_demo_app_088.clas.xml index c8a771a2..5c8a6e1b 100644 --- a/src/01/02/z2ui5_cl_demo_app_088.clas.xml +++ b/src/01/02/z2ui5_cl_demo_app_088.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_088 E - Custom Control - Nav Container + NavContainer - Simple (A) 1 X X diff --git a/src/01/02/z2ui5_cl_demo_app_120.clas.xml b/src/01/02/z2ui5_cl_demo_app_120.clas.xml index 66108075..b08257cd 100644 --- a/src/01/02/z2ui5_cl_demo_app_120.clas.xml +++ b/src/01/02/z2ui5_cl_demo_app_120.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_120 E - Custom Control - Geoloaction + More - Geoloaction (C) 1 X X diff --git a/src/01/02/z2ui5_cl_demo_app_170.clas.xml b/src/01/02/z2ui5_cl_demo_app_170.clas.xml index 0541c78e..769134ea 100644 --- a/src/01/02/z2ui5_cl_demo_app_170.clas.xml +++ b/src/01/02/z2ui5_cl_demo_app_170.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_170 E - A Nav Container - Popup + NavContainer - Popup (A) 1 X X diff --git a/src/01/02/z2ui5_cl_demo_app_202.clas.xml b/src/01/02/z2ui5_cl_demo_app_202.clas.xml index ec47e6f7..15c0121e 100644 --- a/src/01/02/z2ui5_cl_demo_app_202.clas.xml +++ b/src/01/02/z2ui5_cl_demo_app_202.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_202 E - A Wizard Control + More - Wizard Control (A) 1 X X diff --git a/src/01/02/z2ui5_cl_demo_app_279.clas.xml b/src/01/02/z2ui5_cl_demo_app_279.clas.xml index c9bd3942..240ba10b 100644 --- a/src/01/02/z2ui5_cl_demo_app_279.clas.xml +++ b/src/01/02/z2ui5_cl_demo_app_279.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_279 E - CC Data loss protection + More - Data Loss Protection (C) 1 X X diff --git a/src/01/02/z2ui5_cl_demo_app_306.clas.xml b/src/01/02/z2ui5_cl_demo_app_306.clas.xml index fa60465e..df8138bb 100644 --- a/src/01/02/z2ui5_cl_demo_app_306.clas.xml +++ b/src/01/02/z2ui5_cl_demo_app_306.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_306 E - CC CameraSelector + More - CameraSelector (C) 1 X X diff --git a/src/01/02/z2ui5_cl_demo_app_448.clas.xml b/src/01/02/z2ui5_cl_demo_app_448.clas.xml index f288ddaf..68e6e50d 100644 --- a/src/01/02/z2ui5_cl_demo_app_448.clas.xml +++ b/src/01/02/z2ui5_cl_demo_app_448.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_448 E - Action - Panel, setExpanded (A) + More - Panel, setExpanded (A) 1 X X diff --git a/src/01/02/z2ui5_cl_demo_app_449.clas.xml b/src/01/02/z2ui5_cl_demo_app_449.clas.xml index fb2039e6..e566cbbb 100644 --- a/src/01/02/z2ui5_cl_demo_app_449.clas.xml +++ b/src/01/02/z2ui5_cl_demo_app_449.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_449 E - Action - PDF Viewer Display (A) + More - PDF Viewer Display (A) 1 X X From 72737a0b37abfd4af813026163c35486c0fa7c88 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 19 Jul 2026 11:59:49 +0000 Subject: [PATCH 32/49] Regenerate overview catalogs Pick up the latest class DESCRIPT changes in the sample_app_001 catalog. abaplint 0 issues. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_018JnhapjtGyzgxzuzUoeeXW --- src/01/z2ui5_cl_sample_app_001.clas.abap | 30 ++++++++++++------------ 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/01/z2ui5_cl_sample_app_001.clas.abap b/src/01/z2ui5_cl_sample_app_001.clas.abap index 0d4f5964..b99e299e 100644 --- a/src/01/z2ui5_cl_sample_app_001.clas.abap +++ b/src/01/z2ui5_cl_sample_app_001.clas.abap @@ -209,15 +209,14 @@ CLASS z2ui5_cl_sample_app_001 IMPLEMENTATION. ( group = `Basics` header = `Action` sub = `control_call` app = `z2ui5_cl_demo_app_446` ) ( group = `Basics` header = `Action` sub = `control_call_by_id` app = `z2ui5_cl_demo_app_447` ) ( group = `Basics` header = `Binding` sub = `Expression Binding` app = `z2ui5_cl_demo_app_027` ) + ( group = `Basics` header = `Binding` sub = `Formatting Currencies` app = `z2ui5_cl_demo_app_067` ) ( group = `Basics` header = `Binding` sub = `Formatting Integers, Decimals, Dates & Time` app = `z2ui5_cl_demo_app_047` ) ( group = `Basics` header = `Binding` sub = `Level Simple` app = `z2ui5_cl_demo_app_001` ) ( group = `Basics` header = `Binding` sub = `Level Structure/Component` app = `z2ui5_cl_demo_app_166` ) ( group = `Basics` header = `Binding` sub = `Level Table/Cell` app = `z2ui5_cl_demo_app_144` ) - ( group = `Basics` header = `Binding VII` sub = `Formatting Currencies` app = `z2ui5_cl_demo_app_067` ) - ( group = `Basics` header = `Error Handling` sub = `unexpected error popup` app = `z2ui5_cl_demo_app_464` ) + ( group = `Basics` header = `Event` sub = `Additional Infos with t_args` app = `z2ui5_cl_demo_app_167` ) + ( group = `Basics` header = `Event` sub = `Facet Filter T_arg with Objects` app = `z2ui5_cl_demo_app_197` ) ( group = `Basics` header = `Event` sub = `Handle events & change the view` app = `z2ui5_cl_demo_app_004` ) - ( group = `Basics` header = `Event II` sub = `Additional Infos with t_args` app = `z2ui5_cl_demo_app_167` ) - ( group = `Basics` header = `Event III` sub = `Facet Filter - T_arg with Objects` app = `z2ui5_cl_demo_app_197` ) ( group = `Basics` header = `Formatter` sub = `Date object minimal (DatePicker)` app = `z2ui5_cl_demo_app_457` ) ( group = `Basics` header = `Formatter` sub = `Date objects for PlanningCalendar` app = `z2ui5_cl_demo_app_456` ) ( group = `Basics` header = `Formatter` sub = `Simple` app = `z2ui5_cl_demo_app_453` ) @@ -230,6 +229,7 @@ CLASS z2ui5_cl_sample_app_001 IMPLEMENTATION. ( group = `Basics` header = `Model` sub = `Message Model` app = `z2ui5_cl_demo_app_458` ) ( group = `Basics` header = `Model` sub = `Set Size Limit` app = `z2ui5_cl_demo_app_071` ) ( group = `Basics` header = `More` sub = `Call and leave to apps` app = `z2ui5_cl_demo_app_024` ) + ( group = `Basics` header = `More` sub = `Error Handling` app = `z2ui5_cl_demo_app_464` ) ( group = `Basics` header = `More` sub = `Generic Data Reference` app = `z2ui5_cl_demo_app_061` ) ( group = `Basics` header = `More` sub = `Read Frontend Infos` app = `z2ui5_cl_demo_app_122` ) ( group = `Basics` header = `More` sub = `Require Object in XML View` app = `z2ui5_cl_demo_app_163` ) @@ -244,20 +244,10 @@ CLASS z2ui5_cl_sample_app_001 IMPLEMENTATION. ( group = `Basics` header = `Popup` sub = `Different ways of calling Popups` app = `z2ui5_cl_demo_app_012` ) ( group = `Basics` header = `Popup` sub = `Popup in Popup - Backend Stack Handling` app = `z2ui5_cl_demo_app_161` ) ( group = `Basics` header = `Popup` sub = `Value Help with Popups` app = `z2ui5_cl_demo_app_009` ) + ( group = `Basics` header = `Templating` sub = `Basic Example` app = `z2ui5_cl_demo_app_173` ) ( group = `Basics` header = `Templating` sub = `Nested Views` app = `z2ui5_cl_demo_app_176` ) - ( group = `Basics` header = `Templating I` sub = `Basic Example` app = `z2ui5_cl_demo_app_173` ) - ( group = `Extended` header = `A Nav Container` sub = `Popup` app = `z2ui5_cl_demo_app_170` ) - ( group = `Extended` header = `A Wizard Control` sub = `` app = `z2ui5_cl_demo_app_202` ) - ( group = `Extended` header = `Action` sub = `Panel, setExpanded (A)` app = `z2ui5_cl_demo_app_448` ) - ( group = `Extended` header = `Action` sub = `PDF Viewer Display (A)` app = `z2ui5_cl_demo_app_449` ) ( group = `Extended` header = `Browser` sub = `Logout (A)` app = `z2ui5_cl_demo_app_361` ) ( group = `Extended` header = `Browser` sub = `Title` app = `z2ui5_cl_demo_app_125` ) - ( group = `Extended` header = `CC CameraSelector` sub = `` app = `z2ui5_cl_demo_app_306` ) - ( group = `Extended` header = `CC Data loss protection` sub = `` app = `z2ui5_cl_demo_app_279` ) - ( group = `Extended` header = `Custom Control` sub = `File Uploader (C)` app = `z2ui5_cl_demo_app_074` ) - ( group = `Extended` header = `Custom Control` sub = `Geoloaction` app = `z2ui5_cl_demo_app_120` ) - ( group = `Extended` header = `Custom Control` sub = `Multi Input (C)` app = `z2ui5_cl_demo_app_078` ) - ( group = `Extended` header = `Custom Control` sub = `Nav Container` app = `z2ui5_cl_demo_app_088` ) ( group = `Extended` header = `Focus I` sub = `Set Focus in Textfield` app = `z2ui5_cl_demo_app_133` ) ( group = `Extended` header = `Focus II` sub = `Jump with the focus` app = `z2ui5_cl_demo_app_189` ) ( group = `Extended` header = `Input` sub = `Clipboard` app = `z2ui5_cl_demo_app_325` ) @@ -265,6 +255,16 @@ CLASS z2ui5_cl_sample_app_001 IMPLEMENTATION. ( group = `Extended` header = `List` sub = `Events & Visualization` app = `z2ui5_cl_demo_app_048` ) ( group = `Extended` header = `List` sub = `Filter and sort via backend event (A)` app = `z2ui5_cl_demo_app_454` ) ( group = `Extended` header = `List` sub = `Live filter without backend (A)` app = `z2ui5_cl_demo_app_455` ) + ( group = `Extended` header = `More` sub = `CameraSelector (C)` app = `z2ui5_cl_demo_app_306` ) + ( group = `Extended` header = `More` sub = `Data Loss Protection (C)` app = `z2ui5_cl_demo_app_279` ) + ( group = `Extended` header = `More` sub = `File Uploader (C)` app = `z2ui5_cl_demo_app_074` ) + ( group = `Extended` header = `More` sub = `Geoloaction (C)` app = `z2ui5_cl_demo_app_120` ) + ( group = `Extended` header = `More` sub = `Multi Input (C)` app = `z2ui5_cl_demo_app_078` ) + ( group = `Extended` header = `More` sub = `Panel, setExpanded (A)` app = `z2ui5_cl_demo_app_448` ) + ( group = `Extended` header = `More` sub = `PDF Viewer Display (A)` app = `z2ui5_cl_demo_app_449` ) + ( group = `Extended` header = `More` sub = `Wizard Control (A)` app = `z2ui5_cl_demo_app_202` ) + ( group = `Extended` header = `NavContainer` sub = `Popup (A)` app = `z2ui5_cl_demo_app_170` ) + ( group = `Extended` header = `NavContainer` sub = `Simple (A)` app = `z2ui5_cl_demo_app_088` ) ( group = `Extended` header = `Scroll I` sub = `Scroll to position` app = `z2ui5_cl_demo_app_362` ) ( group = `Extended` header = `Scroll II` sub = `Scroll into view` app = `z2ui5_cl_demo_app_363` ) ( group = `Extended` header = `Table` sub = `Backend Filter` app = `z2ui5_cl_demo_app_045` ) From 6f65fdf29196f28f62ee75eb26770940190dc5e0 Mon Sep 17 00:00:00 2001 From: oblomov Date: Sun, 19 Jul 2026 12:06:58 +0000 Subject: [PATCH 33/49] fix --- src/01/01/package.devc.xml | 2 +- src/01/01/z2ui5_cl_demo_app_065.clas.xml | 2 +- src/01/01/z2ui5_cl_demo_app_109.clas.xml | 2 +- src/01/01/z2ui5_cl_demo_app_446.clas.xml | 2 +- src/01/01/z2ui5_cl_demo_app_447.clas.xml | 2 +- src/01/01/z2ui5_cl_demo_app_450.clas.xml | 2 +- src/01/01/z2ui5_cl_demo_app_456.clas.xml | 2 +- src/01/01/z2ui5_cl_demo_app_457.clas.xml | 2 +- src/01/02/package.devc.xml | 2 +- src/01/02/z2ui5_cl_demo_app_028.clas.xml | 2 +- src/01/02/z2ui5_cl_demo_app_064.clas.xml | 2 +- src/01/02/z2ui5_cl_demo_app_073.clas.xml | 2 +- src/01/02/z2ui5_cl_demo_app_316.clas.xml | 2 +- src/01/02/z2ui5_cl_demo_app_362.clas.abap | 5 +++-- src/01/02/z2ui5_cl_demo_app_362.clas.xml | 2 +- src/01/02/z2ui5_cl_demo_app_363.clas.xml | 2 +- 16 files changed, 18 insertions(+), 17 deletions(-) diff --git a/src/01/01/package.devc.xml b/src/01/01/package.devc.xml index 8b1c1b50..63dfa3e7 100644 --- a/src/01/01/package.devc.xml +++ b/src/01/01/package.devc.xml @@ -3,7 +3,7 @@ - Basics + Basic I diff --git a/src/01/01/z2ui5_cl_demo_app_065.clas.xml b/src/01/01/z2ui5_cl_demo_app_065.clas.xml index 91fe7a38..32739041 100644 --- a/src/01/01/z2ui5_cl_demo_app_065.clas.xml +++ b/src/01/01/z2ui5_cl_demo_app_065.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_065 E - Nested Views I - Basic Example + Nested Views - Basic Example 1 X X diff --git a/src/01/01/z2ui5_cl_demo_app_109.clas.xml b/src/01/01/z2ui5_cl_demo_app_109.clas.xml index f6eb4031..087887c0 100644 --- a/src/01/01/z2ui5_cl_demo_app_109.clas.xml +++ b/src/01/01/z2ui5_cl_demo_app_109.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_109 E - Popover - with Quick View + Popover - Display Quick View 1 X X diff --git a/src/01/01/z2ui5_cl_demo_app_446.clas.xml b/src/01/01/z2ui5_cl_demo_app_446.clas.xml index 63cbc260..03fc995e 100644 --- a/src/01/01/z2ui5_cl_demo_app_446.clas.xml +++ b/src/01/01/z2ui5_cl_demo_app_446.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_446 E - Action - control_call + Action - Call Method of Object 1 X X diff --git a/src/01/01/z2ui5_cl_demo_app_447.clas.xml b/src/01/01/z2ui5_cl_demo_app_447.clas.xml index 7da6001a..0d6bdf3e 100644 --- a/src/01/01/z2ui5_cl_demo_app_447.clas.xml +++ b/src/01/01/z2ui5_cl_demo_app_447.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_447 E - Action - control_call_by_id + Action - Call Method of Object by ID 1 X X diff --git a/src/01/01/z2ui5_cl_demo_app_450.clas.xml b/src/01/01/z2ui5_cl_demo_app_450.clas.xml index 0761bd84..cfbab028 100644 --- a/src/01/01/z2ui5_cl_demo_app_450.clas.xml +++ b/src/01/01/z2ui5_cl_demo_app_450.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_450 E - Formatter - weightState via core require + Formatter - Use via core:require 1 X X diff --git a/src/01/01/z2ui5_cl_demo_app_456.clas.xml b/src/01/01/z2ui5_cl_demo_app_456.clas.xml index a4f0240a..4c88bda0 100644 --- a/src/01/01/z2ui5_cl_demo_app_456.clas.xml +++ b/src/01/01/z2ui5_cl_demo_app_456.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_456 E - Formatter - Date objects for PlanningCalendar + Formatter - Date Objects for PlanningCalendar 1 X X diff --git a/src/01/01/z2ui5_cl_demo_app_457.clas.xml b/src/01/01/z2ui5_cl_demo_app_457.clas.xml index 9e086c73..acbc0122 100644 --- a/src/01/01/z2ui5_cl_demo_app_457.clas.xml +++ b/src/01/01/z2ui5_cl_demo_app_457.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_457 E - Formatter - Date object minimal (DatePicker) + Formatter - Date Object for DatePicker 1 X X diff --git a/src/01/02/package.devc.xml b/src/01/02/package.devc.xml index bf0c3f6b..3515fd5d 100644 --- a/src/01/02/package.devc.xml +++ b/src/01/02/package.devc.xml @@ -3,7 +3,7 @@ - Extended + Basic II diff --git a/src/01/02/z2ui5_cl_demo_app_028.clas.xml b/src/01/02/z2ui5_cl_demo_app_028.clas.xml index 09165533..16030be5 100644 --- a/src/01/02/z2ui5_cl_demo_app_028.clas.xml +++ b/src/01/02/z2ui5_cl_demo_app_028.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_028 E - Timer I - Wait n MS and call again the server + Timer - Wait n MS and call again the server 1 X X diff --git a/src/01/02/z2ui5_cl_demo_app_064.clas.xml b/src/01/02/z2ui5_cl_demo_app_064.clas.xml index 8119672b..2cc8dd06 100644 --- a/src/01/02/z2ui5_cl_demo_app_064.clas.xml +++ b/src/01/02/z2ui5_cl_demo_app_064.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_064 E - Timer II - Loading Indicator with WAIT UP Backend + Timer - Loading Indicator with WAIT UP Backend 1 X X diff --git a/src/01/02/z2ui5_cl_demo_app_073.clas.xml b/src/01/02/z2ui5_cl_demo_app_073.clas.xml index 0b730c30..df1ce627 100644 --- a/src/01/02/z2ui5_cl_demo_app_073.clas.xml +++ b/src/01/02/z2ui5_cl_demo_app_073.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_073 E - URL I - New Tab Open an URL in a new tab + URL - New Tab Open an URL in a new tab 1 X X diff --git a/src/01/02/z2ui5_cl_demo_app_316.clas.xml b/src/01/02/z2ui5_cl_demo_app_316.clas.xml index 7e727251..00f65a67 100644 --- a/src/01/02/z2ui5_cl_demo_app_316.clas.xml +++ b/src/01/02/z2ui5_cl_demo_app_316.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_316 E - URL II - Open Telephon, Email usw + URL - Open Telephon, Email usw 1 X X diff --git a/src/01/02/z2ui5_cl_demo_app_362.clas.abap b/src/01/02/z2ui5_cl_demo_app_362.clas.abap index 8a1a7e20..c0a33335 100644 --- a/src/01/02/z2ui5_cl_demo_app_362.clas.abap +++ b/src/01/02/z2ui5_cl_demo_app_362.clas.abap @@ -24,7 +24,9 @@ CLASS z2ui5_cl_demo_app_362 DEFINITION PUBLIC. ENDCLASS. -CLASS z2ui5_cl_demo_app_362 IMPLEMENTATION. + +CLASS Z2UI5_CL_DEMO_APP_362 IMPLEMENTATION. + METHOD z2ui5_if_app~main. @@ -151,5 +153,4 @@ CLASS z2ui5_cl_demo_app_362 IMPLEMENTATION. client->view_display( view->stringify( ) ). ENDMETHOD. - ENDCLASS. diff --git a/src/01/02/z2ui5_cl_demo_app_362.clas.xml b/src/01/02/z2ui5_cl_demo_app_362.clas.xml index b7dfd1d1..f13abe38 100644 --- a/src/01/02/z2ui5_cl_demo_app_362.clas.xml +++ b/src/01/02/z2ui5_cl_demo_app_362.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_362 E - Scroll I - Scroll to position + Scroll - Scroll to position 1 X X diff --git a/src/01/02/z2ui5_cl_demo_app_363.clas.xml b/src/01/02/z2ui5_cl_demo_app_363.clas.xml index 58573282..d75e6a22 100644 --- a/src/01/02/z2ui5_cl_demo_app_363.clas.xml +++ b/src/01/02/z2ui5_cl_demo_app_363.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_363 E - Scroll II - Scroll into view + Scroll - Scroll into view 1 X X From 158f4bf56688d87e508141edffd36a76a1b0b444 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 19 Jul 2026 12:12:27 +0000 Subject: [PATCH 34/49] Extended overview: clarify info strip wording (basic vs extended samples) Reword the info message strip to explicitly distinguish the basic samples (maximum compatibility) from the extended samples (may need a specific system). Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_018JnhapjtGyzgxzuzUoeeXW --- src/00/z2ui5_cl_sample_app_000.clas.abap | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/00/z2ui5_cl_sample_app_000.clas.abap b/src/00/z2ui5_cl_sample_app_000.clas.abap index f0cb4d7c..75fdb711 100644 --- a/src/00/z2ui5_cl_sample_app_000.clas.abap +++ b/src/00/z2ui5_cl_sample_app_000.clas.abap @@ -135,9 +135,9 @@ CLASS z2ui5_cl_sample_app_000 IMPLEMENTATION. press = client->_event_client( val = client->cs_event-open_new_tab t_arg = VALUE #( ( url_standard ) ) ) ). - DATA(info) = |The Basic samples are written for maximum compatibility - | && + DATA(info) = |The basic samples are written for maximum compatibility - | && |plain OpenUI5, every UI5 release since 1.71 and both ABAP Cloud and 7.02. | && - |The Extended samples here can need a specific system, so check per sample | && + |The extended samples here can need a specific system, so check per sample | && |which ABAP stack (ABAP Cloud / on-premise), UI5 release and other prerequisites it requires.|. IF class_exists( `Z2UI5_CL_DEMO_APP_000` ) = abap_true. From cd81d8004db3e896af806e3eecc503ce906a5416 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 19 Jul 2026 12:14:43 +0000 Subject: [PATCH 35/49] Adopt subpackage renames: Basic I / Basic II MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sync the AGENTS.md §1 tree to the renamed src/01 CTEXTs (01/01 -> "Basic I", 01/02 -> "Basic II") and regenerate the overview catalogs so the group headings match. abaplint 0 issues. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_018JnhapjtGyzgxzuzUoeeXW --- AGENTS.md | 4 +- src/01/z2ui5_cl_sample_app_001.clas.abap | 158 +++++++++++------------ 2 files changed, 81 insertions(+), 81 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 1abe544e..690af635 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -33,8 +33,8 @@ apps directly in `src/` root** — every sample sits in a categorised subpackage ``` src/ ├── 01/ "basic" cloud-ready & downportable — survives every build -│ ├── 01/ Basics -│ ├── 02/ Extended framework actions, custom controls and use cases +│ ├── 01/ Basic I +│ ├── 02/ Basic II framework actions, custom controls and use cases │ └── 08/ Control Library 1:1 rebuilds of UI5 demo kit samples, split by library │ ├── 00/ controls - sap.m │ ├── 01/ controls - sap.uxap diff --git a/src/01/z2ui5_cl_sample_app_001.clas.abap b/src/01/z2ui5_cl_sample_app_001.clas.abap index b99e299e..b4a6a8bf 100644 --- a/src/01/z2ui5_cl_sample_app_001.clas.abap +++ b/src/01/z2ui5_cl_sample_app_001.clas.abap @@ -206,85 +206,85 @@ CLASS z2ui5_cl_sample_app_001 IMPLEMENTATION. METHOD get_catalog. result = VALUE #( - ( group = `Basics` header = `Action` sub = `control_call` app = `z2ui5_cl_demo_app_446` ) - ( group = `Basics` header = `Action` sub = `control_call_by_id` app = `z2ui5_cl_demo_app_447` ) - ( group = `Basics` header = `Binding` sub = `Expression Binding` app = `z2ui5_cl_demo_app_027` ) - ( group = `Basics` header = `Binding` sub = `Formatting Currencies` app = `z2ui5_cl_demo_app_067` ) - ( group = `Basics` header = `Binding` sub = `Formatting Integers, Decimals, Dates & Time` app = `z2ui5_cl_demo_app_047` ) - ( group = `Basics` header = `Binding` sub = `Level Simple` app = `z2ui5_cl_demo_app_001` ) - ( group = `Basics` header = `Binding` sub = `Level Structure/Component` app = `z2ui5_cl_demo_app_166` ) - ( group = `Basics` header = `Binding` sub = `Level Table/Cell` app = `z2ui5_cl_demo_app_144` ) - ( group = `Basics` header = `Event` sub = `Additional Infos with t_args` app = `z2ui5_cl_demo_app_167` ) - ( group = `Basics` header = `Event` sub = `Facet Filter T_arg with Objects` app = `z2ui5_cl_demo_app_197` ) - ( group = `Basics` header = `Event` sub = `Handle events & change the view` app = `z2ui5_cl_demo_app_004` ) - ( group = `Basics` header = `Formatter` sub = `Date object minimal (DatePicker)` app = `z2ui5_cl_demo_app_457` ) - ( group = `Basics` header = `Formatter` sub = `Date objects for PlanningCalendar` app = `z2ui5_cl_demo_app_456` ) - ( group = `Basics` header = `Formatter` sub = `Simple` app = `z2ui5_cl_demo_app_453` ) - ( group = `Basics` header = `Formatter` sub = `weightState via core require` app = `z2ui5_cl_demo_app_450` ) - ( group = `Basics` header = `Message` sub = `Backend Processing` app = `z2ui5_cl_demo_app_008` ) - ( group = `Basics` header = `Message` sub = `MessageBox` app = `z2ui5_cl_demo_app_382` ) - ( group = `Basics` header = `Message` sub = `MessageToast` app = `z2ui5_cl_demo_app_381` ) - ( group = `Basics` header = `Message` sub = `MessageView` app = `z2ui5_cl_demo_app_452` ) - ( group = `Basics` header = `Model` sub = `Device Model in views and popups` app = `z2ui5_cl_demo_app_445` ) - ( group = `Basics` header = `Model` sub = `Message Model` app = `z2ui5_cl_demo_app_458` ) - ( group = `Basics` header = `Model` sub = `Set Size Limit` app = `z2ui5_cl_demo_app_071` ) - ( group = `Basics` header = `More` sub = `Call and leave to apps` app = `z2ui5_cl_demo_app_024` ) - ( group = `Basics` header = `More` sub = `Error Handling` app = `z2ui5_cl_demo_app_464` ) - ( group = `Basics` header = `More` sub = `Generic Data Reference` app = `z2ui5_cl_demo_app_061` ) - ( group = `Basics` header = `More` sub = `Read Frontend Infos` app = `z2ui5_cl_demo_app_122` ) - ( group = `Basics` header = `More` sub = `Require Object in XML View` app = `z2ui5_cl_demo_app_163` ) - ( group = `Basics` header = `Nested Views` sub = `Head & Item Table` app = `z2ui5_cl_demo_app_097` ) - ( group = `Basics` header = `Nested Views` sub = `Head & Item Table & Detail` app = `z2ui5_cl_demo_app_098` ) - ( group = `Basics` header = `Nested Views` sub = `Sub-App` app = `z2ui5_cl_demo_app_104` ) - ( group = `Basics` header = `Nested Views I` sub = `Basic Example` app = `z2ui5_cl_demo_app_065` ) - ( group = `Basics` header = `Popover` sub = `Item Level of Table` app = `z2ui5_cl_demo_app_052` ) - ( group = `Basics` header = `Popover` sub = `List to select in Popover` app = `z2ui5_cl_demo_app_081` ) - ( group = `Basics` header = `Popover` sub = `Simple Example` app = `z2ui5_cl_demo_app_026` ) - ( group = `Basics` header = `Popover` sub = `with Quick View` app = `z2ui5_cl_demo_app_109` ) - ( group = `Basics` header = `Popup` sub = `Different ways of calling Popups` app = `z2ui5_cl_demo_app_012` ) - ( group = `Basics` header = `Popup` sub = `Popup in Popup - Backend Stack Handling` app = `z2ui5_cl_demo_app_161` ) - ( group = `Basics` header = `Popup` sub = `Value Help with Popups` app = `z2ui5_cl_demo_app_009` ) - ( group = `Basics` header = `Templating` sub = `Basic Example` app = `z2ui5_cl_demo_app_173` ) - ( group = `Basics` header = `Templating` sub = `Nested Views` app = `z2ui5_cl_demo_app_176` ) - ( group = `Extended` header = `Browser` sub = `Logout (A)` app = `z2ui5_cl_demo_app_361` ) - ( group = `Extended` header = `Browser` sub = `Title` app = `z2ui5_cl_demo_app_125` ) - ( group = `Extended` header = `Focus I` sub = `Set Focus in Textfield` app = `z2ui5_cl_demo_app_133` ) - ( group = `Extended` header = `Focus II` sub = `Jump with the focus` app = `z2ui5_cl_demo_app_189` ) - ( group = `Extended` header = `Input` sub = `Clipboard` app = `z2ui5_cl_demo_app_325` ) - ( group = `Extended` header = `Input` sub = `Hide/show Soft Keyboard` app = `z2ui5_cl_demo_app_352` ) - ( group = `Extended` header = `List` sub = `Events & Visualization` app = `z2ui5_cl_demo_app_048` ) - ( group = `Extended` header = `List` sub = `Filter and sort via backend event (A)` app = `z2ui5_cl_demo_app_454` ) - ( group = `Extended` header = `List` sub = `Live filter without backend (A)` app = `z2ui5_cl_demo_app_455` ) - ( group = `Extended` header = `More` sub = `CameraSelector (C)` app = `z2ui5_cl_demo_app_306` ) - ( group = `Extended` header = `More` sub = `Data Loss Protection (C)` app = `z2ui5_cl_demo_app_279` ) - ( group = `Extended` header = `More` sub = `File Uploader (C)` app = `z2ui5_cl_demo_app_074` ) - ( group = `Extended` header = `More` sub = `Geoloaction (C)` app = `z2ui5_cl_demo_app_120` ) - ( group = `Extended` header = `More` sub = `Multi Input (C)` app = `z2ui5_cl_demo_app_078` ) - ( group = `Extended` header = `More` sub = `Panel, setExpanded (A)` app = `z2ui5_cl_demo_app_448` ) - ( group = `Extended` header = `More` sub = `PDF Viewer Display (A)` app = `z2ui5_cl_demo_app_449` ) - ( group = `Extended` header = `More` sub = `Wizard Control (A)` app = `z2ui5_cl_demo_app_202` ) - ( group = `Extended` header = `NavContainer` sub = `Popup (A)` app = `z2ui5_cl_demo_app_170` ) - ( group = `Extended` header = `NavContainer` sub = `Simple (A)` app = `z2ui5_cl_demo_app_088` ) - ( group = `Extended` header = `Scroll I` sub = `Scroll to position` app = `z2ui5_cl_demo_app_362` ) - ( group = `Extended` header = `Scroll II` sub = `Scroll into view` app = `z2ui5_cl_demo_app_363` ) - ( group = `Extended` header = `Table` sub = `Backend Filter` app = `z2ui5_cl_demo_app_045` ) - ( group = `Extended` header = `Table` sub = `Drag and Drop (A)` app = `z2ui5_cl_demo_app_459` ) - ( group = `Extended` header = `Table` sub = `Editable` app = `z2ui5_cl_demo_app_011` ) - ( group = `Extended` header = `Table` sub = `Search Backend` app = `z2ui5_cl_demo_app_053` ) - ( group = `Extended` header = `Table` sub = `Search Backend Live` app = `z2ui5_cl_demo_app_059` ) - ( group = `Extended` header = `Table` sub = `Selection Modes: Single Select & Multi Select` app = `z2ui5_cl_demo_app_019` ) - ( group = `Extended` header = `Table` sub = `Table with ScrollContainer` app = `z2ui5_cl_demo_app_006` ) - ( group = `Extended` header = `Timer I` sub = `Wait n MS and call again the server` app = `z2ui5_cl_demo_app_028` ) - ( group = `Extended` header = `Timer II` sub = `Loading Indicator with WAIT UP Backend` app = `z2ui5_cl_demo_app_064` ) - ( group = `Extended` header = `Tree` sub = `Drag and Drop` app = `z2ui5_cl_demo_app_461` ) - ( group = `Extended` header = `Tree` sub = `Editable with Custom Item (C)` app = `z2ui5_cl_demo_app_463` ) - ( group = `Extended` header = `Tree` sub = `Inside Popup (C)` app = `z2ui5_cl_demo_app_462` ) - ( group = `Extended` header = `Tree` sub = `Simple` app = `z2ui5_cl_demo_app_460` ) - ( group = `Extended` header = `ui.Table` sub = `Default Filtering` app = `z2ui5_cl_demo_app_143` ) - ( group = `Extended` header = `ui.Table` sub = `Events on Cell Level` app = `z2ui5_cl_demo_app_160` ) - ( group = `Extended` header = `ui.Table` sub = `Full Example` app = `z2ui5_cl_demo_app_070` ) - ( group = `Extended` header = `URL I` sub = `New Tab Open an URL in a new tab` app = `z2ui5_cl_demo_app_073` ) - ( group = `Extended` header = `URL II` sub = `Open Telephon, Email usw` app = `z2ui5_cl_demo_app_316` ) + ( group = `Basic I` header = `Action` sub = `Call Method of Object` app = `z2ui5_cl_demo_app_446` ) + ( group = `Basic I` header = `Action` sub = `Call Method of Object by ID` app = `z2ui5_cl_demo_app_447` ) + ( group = `Basic I` header = `Binding` sub = `Expression Binding` app = `z2ui5_cl_demo_app_027` ) + ( group = `Basic I` header = `Binding` sub = `Formatting Currencies` app = `z2ui5_cl_demo_app_067` ) + ( group = `Basic I` header = `Binding` sub = `Formatting Integers, Decimals, Dates & Time` app = `z2ui5_cl_demo_app_047` ) + ( group = `Basic I` header = `Binding` sub = `Level Simple` app = `z2ui5_cl_demo_app_001` ) + ( group = `Basic I` header = `Binding` sub = `Level Structure/Component` app = `z2ui5_cl_demo_app_166` ) + ( group = `Basic I` header = `Binding` sub = `Level Table/Cell` app = `z2ui5_cl_demo_app_144` ) + ( group = `Basic I` header = `Event` sub = `Additional Infos with t_args` app = `z2ui5_cl_demo_app_167` ) + ( group = `Basic I` header = `Event` sub = `Facet Filter T_arg with Objects` app = `z2ui5_cl_demo_app_197` ) + ( group = `Basic I` header = `Event` sub = `Handle events & change the view` app = `z2ui5_cl_demo_app_004` ) + ( group = `Basic I` header = `Formatter` sub = `Date Object for DatePicker` app = `z2ui5_cl_demo_app_457` ) + ( group = `Basic I` header = `Formatter` sub = `Date Objects for PlanningCalendar` app = `z2ui5_cl_demo_app_456` ) + ( group = `Basic I` header = `Formatter` sub = `Simple` app = `z2ui5_cl_demo_app_453` ) + ( group = `Basic I` header = `Formatter` sub = `Use via core:require` app = `z2ui5_cl_demo_app_450` ) + ( group = `Basic I` header = `Message` sub = `Backend Processing` app = `z2ui5_cl_demo_app_008` ) + ( group = `Basic I` header = `Message` sub = `MessageBox` app = `z2ui5_cl_demo_app_382` ) + ( group = `Basic I` header = `Message` sub = `MessageToast` app = `z2ui5_cl_demo_app_381` ) + ( group = `Basic I` header = `Message` sub = `MessageView` app = `z2ui5_cl_demo_app_452` ) + ( group = `Basic I` header = `Model` sub = `Device Model in views and popups` app = `z2ui5_cl_demo_app_445` ) + ( group = `Basic I` header = `Model` sub = `Message Model` app = `z2ui5_cl_demo_app_458` ) + ( group = `Basic I` header = `Model` sub = `Set Size Limit` app = `z2ui5_cl_demo_app_071` ) + ( group = `Basic I` header = `More` sub = `Call and leave to apps` app = `z2ui5_cl_demo_app_024` ) + ( group = `Basic I` header = `More` sub = `Error Handling` app = `z2ui5_cl_demo_app_464` ) + ( group = `Basic I` header = `More` sub = `Generic Data Reference` app = `z2ui5_cl_demo_app_061` ) + ( group = `Basic I` header = `More` sub = `Read Frontend Infos` app = `z2ui5_cl_demo_app_122` ) + ( group = `Basic I` header = `More` sub = `Require Object in XML View` app = `z2ui5_cl_demo_app_163` ) + ( group = `Basic I` header = `Nested Views` sub = `Basic Example` app = `z2ui5_cl_demo_app_065` ) + ( group = `Basic I` header = `Nested Views` sub = `Head & Item Table` app = `z2ui5_cl_demo_app_097` ) + ( group = `Basic I` header = `Nested Views` sub = `Head & Item Table & Detail` app = `z2ui5_cl_demo_app_098` ) + ( group = `Basic I` header = `Nested Views` sub = `Sub-App` app = `z2ui5_cl_demo_app_104` ) + ( group = `Basic I` header = `Popover` sub = `Display Quick View` app = `z2ui5_cl_demo_app_109` ) + ( group = `Basic I` header = `Popover` sub = `Item Level of Table` app = `z2ui5_cl_demo_app_052` ) + ( group = `Basic I` header = `Popover` sub = `List to select in Popover` app = `z2ui5_cl_demo_app_081` ) + ( group = `Basic I` header = `Popover` sub = `Simple Example` app = `z2ui5_cl_demo_app_026` ) + ( group = `Basic I` header = `Popup` sub = `Different ways of calling Popups` app = `z2ui5_cl_demo_app_012` ) + ( group = `Basic I` header = `Popup` sub = `Popup in Popup - Backend Stack Handling` app = `z2ui5_cl_demo_app_161` ) + ( group = `Basic I` header = `Popup` sub = `Value Help with Popups` app = `z2ui5_cl_demo_app_009` ) + ( group = `Basic I` header = `Templating` sub = `Basic Example` app = `z2ui5_cl_demo_app_173` ) + ( group = `Basic I` header = `Templating` sub = `Nested Views` app = `z2ui5_cl_demo_app_176` ) + ( group = `Basic II` header = `Browser` sub = `Logout (A)` app = `z2ui5_cl_demo_app_361` ) + ( group = `Basic II` header = `Browser` sub = `Title` app = `z2ui5_cl_demo_app_125` ) + ( group = `Basic II` header = `Focus I` sub = `Set Focus in Textfield` app = `z2ui5_cl_demo_app_133` ) + ( group = `Basic II` header = `Focus II` sub = `Jump with the focus` app = `z2ui5_cl_demo_app_189` ) + ( group = `Basic II` header = `Input` sub = `Clipboard` app = `z2ui5_cl_demo_app_325` ) + ( group = `Basic II` header = `Input` sub = `Hide/show Soft Keyboard` app = `z2ui5_cl_demo_app_352` ) + ( group = `Basic II` header = `List` sub = `Events & Visualization` app = `z2ui5_cl_demo_app_048` ) + ( group = `Basic II` header = `List` sub = `Filter and sort via backend event (A)` app = `z2ui5_cl_demo_app_454` ) + ( group = `Basic II` header = `List` sub = `Live filter without backend (A)` app = `z2ui5_cl_demo_app_455` ) + ( group = `Basic II` header = `More` sub = `CameraSelector (C)` app = `z2ui5_cl_demo_app_306` ) + ( group = `Basic II` header = `More` sub = `Data Loss Protection (C)` app = `z2ui5_cl_demo_app_279` ) + ( group = `Basic II` header = `More` sub = `File Uploader (C)` app = `z2ui5_cl_demo_app_074` ) + ( group = `Basic II` header = `More` sub = `Geoloaction (C)` app = `z2ui5_cl_demo_app_120` ) + ( group = `Basic II` header = `More` sub = `Multi Input (C)` app = `z2ui5_cl_demo_app_078` ) + ( group = `Basic II` header = `More` sub = `Panel, setExpanded (A)` app = `z2ui5_cl_demo_app_448` ) + ( group = `Basic II` header = `More` sub = `PDF Viewer Display (A)` app = `z2ui5_cl_demo_app_449` ) + ( group = `Basic II` header = `More` sub = `Wizard Control (A)` app = `z2ui5_cl_demo_app_202` ) + ( group = `Basic II` header = `NavContainer` sub = `Popup (A)` app = `z2ui5_cl_demo_app_170` ) + ( group = `Basic II` header = `NavContainer` sub = `Simple (A)` app = `z2ui5_cl_demo_app_088` ) + ( group = `Basic II` header = `Scroll` sub = `Scroll into view` app = `z2ui5_cl_demo_app_363` ) + ( group = `Basic II` header = `Scroll` sub = `Scroll to position` app = `z2ui5_cl_demo_app_362` ) + ( group = `Basic II` header = `Table` sub = `Backend Filter` app = `z2ui5_cl_demo_app_045` ) + ( group = `Basic II` header = `Table` sub = `Drag and Drop (A)` app = `z2ui5_cl_demo_app_459` ) + ( group = `Basic II` header = `Table` sub = `Editable` app = `z2ui5_cl_demo_app_011` ) + ( group = `Basic II` header = `Table` sub = `Search Backend` app = `z2ui5_cl_demo_app_053` ) + ( group = `Basic II` header = `Table` sub = `Search Backend Live` app = `z2ui5_cl_demo_app_059` ) + ( group = `Basic II` header = `Table` sub = `Selection Modes: Single Select & Multi Select` app = `z2ui5_cl_demo_app_019` ) + ( group = `Basic II` header = `Table` sub = `Table with ScrollContainer` app = `z2ui5_cl_demo_app_006` ) + ( group = `Basic II` header = `Timer` sub = `Loading Indicator with WAIT UP Backend` app = `z2ui5_cl_demo_app_064` ) + ( group = `Basic II` header = `Timer` sub = `Wait n MS and call again the server` app = `z2ui5_cl_demo_app_028` ) + ( group = `Basic II` header = `Tree` sub = `Drag and Drop` app = `z2ui5_cl_demo_app_461` ) + ( group = `Basic II` header = `Tree` sub = `Editable with Custom Item (C)` app = `z2ui5_cl_demo_app_463` ) + ( group = `Basic II` header = `Tree` sub = `Inside Popup (C)` app = `z2ui5_cl_demo_app_462` ) + ( group = `Basic II` header = `Tree` sub = `Simple` app = `z2ui5_cl_demo_app_460` ) + ( group = `Basic II` header = `ui.Table` sub = `Default Filtering` app = `z2ui5_cl_demo_app_143` ) + ( group = `Basic II` header = `ui.Table` sub = `Events on Cell Level` app = `z2ui5_cl_demo_app_160` ) + ( group = `Basic II` header = `ui.Table` sub = `Full Example` app = `z2ui5_cl_demo_app_070` ) + ( group = `Basic II` header = `URL` sub = `New Tab Open an URL in a new tab` app = `z2ui5_cl_demo_app_073` ) + ( group = `Basic II` header = `URL` sub = `Open Telephon, Email usw` app = `z2ui5_cl_demo_app_316` ) ( group = `controls - sap.m` header = `ActionListItem` sub = `Use the Action List Item to trigger an action directly from a list` app = `z2ui5_cl_demo_app_216` ) ( group = `controls - sap.m` header = `Breadcrumbs` sub = `Breadcrumbs sample with current page set as aggregation, resulting in a link` app = `z2ui5_cl_demo_app_292` ) ( group = `controls - sap.m` header = `BusyIndicator` sub = `The Busy Indicator signals that some operation is going on and that the user must wait ...` app = `z2ui5_cl_demo_app_215` ) From 08463e1e742a84e4fa7f8b637d5cd454726a505d Mon Sep 17 00:00:00 2001 From: oblomov Date: Sun, 19 Jul 2026 12:21:09 +0000 Subject: [PATCH 36/49] fixes --- src/01/02/z2ui5_cl_demo_app_053.clas.xml | 2 +- src/01/02/z2ui5_cl_demo_app_059.clas.xml | 2 +- src/01/02/z2ui5_cl_demo_app_133.clas.abap | 5 +++-- src/01/02/z2ui5_cl_demo_app_133.clas.xml | 2 +- src/01/02/z2ui5_cl_demo_app_454.clas.abap | 5 +++-- src/01/02/z2ui5_cl_demo_app_454.clas.xml | 2 +- src/01/02/z2ui5_cl_demo_app_455.clas.abap | 5 +++-- src/01/02/z2ui5_cl_demo_app_455.clas.xml | 2 +- 8 files changed, 14 insertions(+), 11 deletions(-) diff --git a/src/01/02/z2ui5_cl_demo_app_053.clas.xml b/src/01/02/z2ui5_cl_demo_app_053.clas.xml index 2b2334c8..c9ae2f2a 100644 --- a/src/01/02/z2ui5_cl_demo_app_053.clas.xml +++ b/src/01/02/z2ui5_cl_demo_app_053.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_053 E - Table - Search Backend + Table - Search via Backend 1 X X diff --git a/src/01/02/z2ui5_cl_demo_app_059.clas.xml b/src/01/02/z2ui5_cl_demo_app_059.clas.xml index 82daeaaf..081a10ba 100644 --- a/src/01/02/z2ui5_cl_demo_app_059.clas.xml +++ b/src/01/02/z2ui5_cl_demo_app_059.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_059 E - Table - Search Backend Live + Table - Live Search via Backend 1 X X diff --git a/src/01/02/z2ui5_cl_demo_app_133.clas.abap b/src/01/02/z2ui5_cl_demo_app_133.clas.abap index 9d08e899..09c55b07 100644 --- a/src/01/02/z2ui5_cl_demo_app_133.clas.abap +++ b/src/01/02/z2ui5_cl_demo_app_133.clas.abap @@ -17,7 +17,9 @@ CLASS z2ui5_cl_demo_app_133 DEFINITION PUBLIC. ENDCLASS. -CLASS z2ui5_cl_demo_app_133 IMPLEMENTATION. + +CLASS Z2UI5_CL_DEMO_APP_133 IMPLEMENTATION. + METHOD view_display. @@ -82,5 +84,4 @@ CLASS z2ui5_cl_demo_app_133 IMPLEMENTATION. ENDCASE. ENDMETHOD. - ENDCLASS. diff --git a/src/01/02/z2ui5_cl_demo_app_133.clas.xml b/src/01/02/z2ui5_cl_demo_app_133.clas.xml index 7502e437..0ad7714b 100644 --- a/src/01/02/z2ui5_cl_demo_app_133.clas.xml +++ b/src/01/02/z2ui5_cl_demo_app_133.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_133 E - Focus I - Set Focus in Textfield + Focus - Set Focus in Textfield 1 X X diff --git a/src/01/02/z2ui5_cl_demo_app_454.clas.abap b/src/01/02/z2ui5_cl_demo_app_454.clas.abap index a6edd374..e51d071a 100644 --- a/src/01/02/z2ui5_cl_demo_app_454.clas.abap +++ b/src/01/02/z2ui5_cl_demo_app_454.clas.abap @@ -20,7 +20,9 @@ CLASS z2ui5_cl_demo_app_454 DEFINITION PUBLIC. ENDCLASS. -CLASS z2ui5_cl_demo_app_454 IMPLEMENTATION. + +CLASS Z2UI5_CL_DEMO_APP_454 IMPLEMENTATION. + METHOD z2ui5_if_app~main. @@ -108,5 +110,4 @@ CLASS z2ui5_cl_demo_app_454 IMPLEMENTATION. client->view_display( view->stringify( ) ). ENDMETHOD. - ENDCLASS. diff --git a/src/01/02/z2ui5_cl_demo_app_454.clas.xml b/src/01/02/z2ui5_cl_demo_app_454.clas.xml index c7327515..c1d37c46 100644 --- a/src/01/02/z2ui5_cl_demo_app_454.clas.xml +++ b/src/01/02/z2ui5_cl_demo_app_454.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_454 E - List - Filter and sort via backend event (A) + List - Frontend Filter/Sort via Backend Event (A) 1 X X diff --git a/src/01/02/z2ui5_cl_demo_app_455.clas.abap b/src/01/02/z2ui5_cl_demo_app_455.clas.abap index 29195f92..8dcea41e 100644 --- a/src/01/02/z2ui5_cl_demo_app_455.clas.abap +++ b/src/01/02/z2ui5_cl_demo_app_455.clas.abap @@ -19,7 +19,9 @@ CLASS z2ui5_cl_demo_app_455 DEFINITION PUBLIC. ENDCLASS. -CLASS z2ui5_cl_demo_app_455 IMPLEMENTATION. + +CLASS Z2UI5_CL_DEMO_APP_455 IMPLEMENTATION. + METHOD z2ui5_if_app~main. @@ -81,5 +83,4 @@ CLASS z2ui5_cl_demo_app_455 IMPLEMENTATION. client->view_display( view->stringify( ) ). ENDMETHOD. - ENDCLASS. diff --git a/src/01/02/z2ui5_cl_demo_app_455.clas.xml b/src/01/02/z2ui5_cl_demo_app_455.clas.xml index 388beb29..f3fa397e 100644 --- a/src/01/02/z2ui5_cl_demo_app_455.clas.xml +++ b/src/01/02/z2ui5_cl_demo_app_455.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_455 E - List - Live filter without backend (A) + List - Frontend Live Filter without Backend (A) 1 X X From 2bfc246c9fce5c217d09160d5b4f4106181b85f2 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 19 Jul 2026 12:32:29 +0000 Subject: [PATCH 37/49] Rename overview apps: sample_app_001->demo_app_g00, sample_app_000->sample_app_g01 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - z2ui5_cl_sample_app_001 (basic overview, src/01) -> z2ui5_cl_demo_app_g00 - z2ui5_cl_sample_app_000 (extended overview, src/00) -> z2ui5_cl_sample_app_g01 - Update every reference: the classes' own CLSNAME/definition, the two cross-navigation links (class_exists guard + app_start URLs), the generator TARGETS, and the AGENTS.md §3/§4 docs. - Since demo_app_g00 now shares the z2ui5_cl_demo_app* prefix the generator uses to find sample tiles, add an OVERVIEW_APPS skip so an overview never lists itself. Regenerated catalogs (334 tiles unchanged); abaplint 0 issues. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_018JnhapjtGyzgxzuzUoeeXW --- AGENTS.md | 16 ++++++++-------- scripts/generate-launchpad.js | 19 ++++++++++++++----- ...abap => z2ui5_cl_sample_app_g01.clas.abap} | 6 +++--- ...s.xml => z2ui5_cl_sample_app_g01.clas.xml} | 2 +- ...s.abap => z2ui5_cl_demo_app_g00.clas.abap} | 8 ++++---- ...las.xml => z2ui5_cl_demo_app_g00.clas.xml} | 2 +- 6 files changed, 31 insertions(+), 22 deletions(-) rename src/00/{z2ui5_cl_sample_app_000.clas.abap => z2ui5_cl_sample_app_g01.clas.abap} (99%) rename src/00/{z2ui5_cl_sample_app_000.clas.xml => z2ui5_cl_sample_app_g01.clas.xml} (90%) rename src/01/{z2ui5_cl_sample_app_001.clas.abap => z2ui5_cl_demo_app_g00.clas.abap} (99%) rename src/01/{z2ui5_cl_sample_app_001.clas.xml => z2ui5_cl_demo_app_g00.clas.xml} (90%) diff --git a/AGENTS.md b/AGENTS.md index 690af635..1a503c41 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -132,7 +132,7 @@ JS, not a test, finished and clean. "Old" is not enough (deprecated → `00/99`) ## 3. The two overview apps -`z2ui5_cl_sample_app_000` and `z2ui5_cl_sample_app_001` are **overview apps** — +`z2ui5_cl_sample_app_g01` and `z2ui5_cl_demo_app_g00` are **overview apps** — generated index pages that list all samples of an area. They are *not* Fiori Launchpad apps; do not confuse them with the launchpad samples in `src/00/03`, which are the demos that run inside a real Fiori Launchpad. @@ -141,8 +141,8 @@ There is **one overview app per top-level package**, and they cross-link: | App class | Lives in | Title | Mirrors | Button → other | |--------------------------|----------|----------------------------------|-------------|----------------| -| `z2ui5_cl_sample_app_001`| `src/01` | `abap2UI5 - Samples` | `src/01/**` | "Extended Samples" → `sample_app_000` | -| `z2ui5_cl_sample_app_000`| `src/00` | `abap2UI5 - Samples (restricted)`| `src/00/**` | "Basic Samples" → `sample_app_001` | +| `z2ui5_cl_demo_app_g00`| `src/01` | `abap2UI5 - Samples` | `src/01/**` | "Extended Samples" → `sample_app_g01` | +| `z2ui5_cl_sample_app_g01`| `src/00` | `abap2UI5 - Samples (restricted)`| `src/00/**` | "Basic Samples" → `demo_app_g00` | Both are identical in shape: a `get_catalog( )` method returning a flat table of tiles, and a `view_display( )` that loops the catalog, emitting an H3 section @@ -168,7 +168,7 @@ the block plus roughly one space, precomputed by `block_widths( )` / underneath each other in one column, directly next to the links. `z2ui5_cl_demo_app_000` is the old "classic" overview app (now under `00/99`, -obsolete); `sample_app_000` links to it from its info message strip. Do not +obsolete); `sample_app_g01` links to it from its info message strip. Do not extend it. --- @@ -230,8 +230,8 @@ from the old catalog. ### Generation rules -1. **One catalog per area.** Apps in `src/01/**` belong in `sample_app_001`; apps in - `src/00/**` belong in `sample_app_000`. Never list an app in the wrong overview app. +1. **One catalog per area.** Apps in `src/01/**` belong in `demo_app_g00`; apps in + `src/00/**` belong in `sample_app_g01`. Never list an app in the wrong overview app. 2. **Each app appears exactly once**, and every demo app physically present in an area is listed (no missing tiles) — **except hidden helper apps**: a class whose `` header is `ZZZ` (e.g. `ZZZ - called by SubApp I`) is only @@ -254,8 +254,8 @@ from the old catalog. untouched; only the tiles inside each group are ordered. 6. **Moving a subpackage = moving its whole tile group** between the two catalogs, inserted at the correct numeric slot (moving a subpackage from - `src/01` to `src/00` lifts its entire tile group out of `sample_app_001` - and into `sample_app_000`). + `src/01` to `src/00` lifts its entire tile group out of `demo_app_g00` + and into `sample_app_g01`). 7. After every change, verify: `get_catalog( )` and the folder tree agree — same apps, same group names (== CTEXT), same grouping, no app in the wrong overview, none missing. The safest way to regenerate is to rebuild each diff --git a/scripts/generate-launchpad.js b/scripts/generate-launchpad.js index 1ce102bd..ac36122d 100644 --- a/scripts/generate-launchpad.js +++ b/scripts/generate-launchpad.js @@ -1,8 +1,8 @@ #!/usr/bin/env node /* * Generates the two overview apps' catalogs from the folder tree. - * (These are the sample_app_000/001 index pages, not the Fiori Launchpad - * samples in src/00/03.) + * (These are the demo_app_g00 / sample_app_g01 index pages, not the Fiori + * Launchpad samples in src/00/03.) * * Job (see AGENTS.md §4): * 1. Scan every demo app class under src/ and read its abapGit @@ -14,7 +14,7 @@ * Apps whose header is "ZZZ" are helper apps (called only by other apps) * and are skipped. * 3. Rewrite the result = VALUE #( ... ) block of get_catalog( ) in the - * overview app of each area (src/01 -> sample_app_001, src/00 -> sample_app_000): + * overview app of each area (src/01 -> demo_app_g00, src/00 -> sample_app_g01): * - groups in folder-number order * - tiles within a group sorted by header, then sub, then app * @@ -29,10 +29,18 @@ const SRC = path.join(__dirname, '..', 'src'); // area (top-level package under src) -> overview app file const TARGETS = { - '01': path.join(SRC, '01', 'z2ui5_cl_sample_app_001.clas.abap'), - '00': path.join(SRC, '00', 'z2ui5_cl_sample_app_000.clas.abap'), + '01': path.join(SRC, '01', 'z2ui5_cl_demo_app_g00.clas.abap'), + '00': path.join(SRC, '00', 'z2ui5_cl_sample_app_g01.clas.abap'), }; +// The overview apps live under src/ too; the src/01 one (z2ui5_cl_demo_app_g00) +// even shares the demo-app class-name prefix. Skip both so an overview never +// lists itself as a tile. +const OVERVIEW_APPS = new Set([ + 'z2ui5_cl_demo_app_g00', + 'z2ui5_cl_sample_app_g01', +]); + function walk(dir, out = []) { for (const name of fs.readdirSync(dir)) { const full = path.join(dir, name); @@ -98,6 +106,7 @@ let hidden = 0; for (const abap of walk(SRC)) { if (!abap.endsWith('.clas.abap')) continue; const cls = path.basename(abap, '.clas.abap'); + if (OVERVIEW_APPS.has(cls)) continue; // an overview app is never a tile if (!cls.startsWith('z2ui5_cl_demo_app')) continue; const rel = path.relative(SRC, abap).split(path.sep); // [ area, ...subfolders, file ] diff --git a/src/00/z2ui5_cl_sample_app_000.clas.abap b/src/00/z2ui5_cl_sample_app_g01.clas.abap similarity index 99% rename from src/00/z2ui5_cl_sample_app_000.clas.abap rename to src/00/z2ui5_cl_sample_app_g01.clas.abap index 75fdb711..26c5cf78 100644 --- a/src/00/z2ui5_cl_sample_app_000.clas.abap +++ b/src/00/z2ui5_cl_sample_app_g01.clas.abap @@ -1,4 +1,4 @@ -CLASS z2ui5_cl_sample_app_000 DEFINITION PUBLIC. +CLASS z2ui5_cl_sample_app_g01 DEFINITION PUBLIC. PUBLIC SECTION. INTERFACES z2ui5_if_app. @@ -66,7 +66,7 @@ CLASS z2ui5_cl_sample_app_000 DEFINITION PUBLIC. ENDCLASS. -CLASS z2ui5_cl_sample_app_000 IMPLEMENTATION. +CLASS z2ui5_cl_sample_app_g01 IMPLEMENTATION. METHOD z2ui5_if_app~main. @@ -128,7 +128,7 @@ CLASS z2ui5_cl_sample_app_000 IMPLEMENTATION. navbuttonpress = client->_event_nav_app_leave( ) shownavbutton = client->check_app_prev_stack( ) ). - DATA(url_standard) = |{ client->get( )-s_config-origin }{ client->get( )-s_config-pathname }?app_start=z2ui5_cl_sample_app_001|. + DATA(url_standard) = |{ client->get( )-s_config-origin }{ client->get( )-s_config-pathname }?app_start=z2ui5_cl_demo_app_g00|. page->header_content( )->button( text = `Basic Samples` icon = `sap-icon://action` diff --git a/src/00/z2ui5_cl_sample_app_000.clas.xml b/src/00/z2ui5_cl_sample_app_g01.clas.xml similarity index 90% rename from src/00/z2ui5_cl_sample_app_000.clas.xml rename to src/00/z2ui5_cl_sample_app_g01.clas.xml index ab58cea0..c26404b4 100644 --- a/src/00/z2ui5_cl_sample_app_000.clas.xml +++ b/src/00/z2ui5_cl_sample_app_g01.clas.xml @@ -3,7 +3,7 @@ - Z2UI5_CL_SAMPLE_APP_000 + Z2UI5_CL_SAMPLE_APP_G01 E abap2UI5 - Samples Overview (restricted) 1 diff --git a/src/01/z2ui5_cl_sample_app_001.clas.abap b/src/01/z2ui5_cl_demo_app_g00.clas.abap similarity index 99% rename from src/01/z2ui5_cl_sample_app_001.clas.abap rename to src/01/z2ui5_cl_demo_app_g00.clas.abap index b4a6a8bf..dfe9218e 100644 --- a/src/01/z2ui5_cl_sample_app_001.clas.abap +++ b/src/01/z2ui5_cl_demo_app_g00.clas.abap @@ -1,4 +1,4 @@ -CLASS z2ui5_cl_sample_app_001 DEFINITION PUBLIC. +CLASS z2ui5_cl_demo_app_g00 DEFINITION PUBLIC. PUBLIC SECTION. INTERFACES z2ui5_if_app. @@ -66,7 +66,7 @@ CLASS z2ui5_cl_sample_app_001 DEFINITION PUBLIC. ENDCLASS. -CLASS z2ui5_cl_sample_app_001 IMPLEMENTATION. +CLASS z2ui5_cl_demo_app_g00 IMPLEMENTATION. METHOD z2ui5_if_app~main. @@ -128,8 +128,8 @@ CLASS z2ui5_cl_sample_app_001 IMPLEMENTATION. navbuttonpress = client->_event_nav_app_leave( ) shownavbutton = client->check_app_prev_stack( ) ). - IF class_exists( `Z2UI5_CL_SAMPLE_APP_000` ) = abap_true. - DATA(url_restricted) = |{ client->get( )-s_config-origin }{ client->get( )-s_config-pathname }?app_start=z2ui5_cl_sample_app_000|. + IF class_exists( `Z2UI5_CL_SAMPLE_APP_G01` ) = abap_true. + DATA(url_restricted) = |{ client->get( )-s_config-origin }{ client->get( )-s_config-pathname }?app_start=z2ui5_cl_sample_app_g01|. page->header_content( )->button( text = `Extended Samples` icon = `sap-icon://action` diff --git a/src/01/z2ui5_cl_sample_app_001.clas.xml b/src/01/z2ui5_cl_demo_app_g00.clas.xml similarity index 90% rename from src/01/z2ui5_cl_sample_app_001.clas.xml rename to src/01/z2ui5_cl_demo_app_g00.clas.xml index fa9d76ae..c81d192d 100644 --- a/src/01/z2ui5_cl_sample_app_001.clas.xml +++ b/src/01/z2ui5_cl_demo_app_g00.clas.xml @@ -3,7 +3,7 @@ - Z2UI5_CL_SAMPLE_APP_001 + Z2UI5_CL_DEMO_APP_G00 E abap2UI5 - Samples Overview (extension) 1 From 79293b88fe82928f76cb44de8403e37a8ed5c6da Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 19 Jul 2026 12:33:19 +0000 Subject: [PATCH 38/49] Regenerate basic overview catalog after DESCRIPT fixes Pick up the latest src/01/02 class DESCRIPT changes in the demo_app_g00 catalog. abaplint 0 issues. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_018JnhapjtGyzgxzuzUoeeXW --- src/01/z2ui5_cl_demo_app_g00.clas.abap | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/01/z2ui5_cl_demo_app_g00.clas.abap b/src/01/z2ui5_cl_demo_app_g00.clas.abap index dfe9218e..3e22ccf3 100644 --- a/src/01/z2ui5_cl_demo_app_g00.clas.abap +++ b/src/01/z2ui5_cl_demo_app_g00.clas.abap @@ -248,13 +248,13 @@ CLASS z2ui5_cl_demo_app_g00 IMPLEMENTATION. ( group = `Basic I` header = `Templating` sub = `Nested Views` app = `z2ui5_cl_demo_app_176` ) ( group = `Basic II` header = `Browser` sub = `Logout (A)` app = `z2ui5_cl_demo_app_361` ) ( group = `Basic II` header = `Browser` sub = `Title` app = `z2ui5_cl_demo_app_125` ) - ( group = `Basic II` header = `Focus I` sub = `Set Focus in Textfield` app = `z2ui5_cl_demo_app_133` ) + ( group = `Basic II` header = `Focus` sub = `Set Focus in Textfield` app = `z2ui5_cl_demo_app_133` ) ( group = `Basic II` header = `Focus II` sub = `Jump with the focus` app = `z2ui5_cl_demo_app_189` ) ( group = `Basic II` header = `Input` sub = `Clipboard` app = `z2ui5_cl_demo_app_325` ) ( group = `Basic II` header = `Input` sub = `Hide/show Soft Keyboard` app = `z2ui5_cl_demo_app_352` ) ( group = `Basic II` header = `List` sub = `Events & Visualization` app = `z2ui5_cl_demo_app_048` ) - ( group = `Basic II` header = `List` sub = `Filter and sort via backend event (A)` app = `z2ui5_cl_demo_app_454` ) - ( group = `Basic II` header = `List` sub = `Live filter without backend (A)` app = `z2ui5_cl_demo_app_455` ) + ( group = `Basic II` header = `List` sub = `Frontend Filter/Sort via Backend Event (A)` app = `z2ui5_cl_demo_app_454` ) + ( group = `Basic II` header = `List` sub = `Frontend Live Filter without Backend (A)` app = `z2ui5_cl_demo_app_455` ) ( group = `Basic II` header = `More` sub = `CameraSelector (C)` app = `z2ui5_cl_demo_app_306` ) ( group = `Basic II` header = `More` sub = `Data Loss Protection (C)` app = `z2ui5_cl_demo_app_279` ) ( group = `Basic II` header = `More` sub = `File Uploader (C)` app = `z2ui5_cl_demo_app_074` ) @@ -270,8 +270,8 @@ CLASS z2ui5_cl_demo_app_g00 IMPLEMENTATION. ( group = `Basic II` header = `Table` sub = `Backend Filter` app = `z2ui5_cl_demo_app_045` ) ( group = `Basic II` header = `Table` sub = `Drag and Drop (A)` app = `z2ui5_cl_demo_app_459` ) ( group = `Basic II` header = `Table` sub = `Editable` app = `z2ui5_cl_demo_app_011` ) - ( group = `Basic II` header = `Table` sub = `Search Backend` app = `z2ui5_cl_demo_app_053` ) - ( group = `Basic II` header = `Table` sub = `Search Backend Live` app = `z2ui5_cl_demo_app_059` ) + ( group = `Basic II` header = `Table` sub = `Live Search via Backend` app = `z2ui5_cl_demo_app_059` ) + ( group = `Basic II` header = `Table` sub = `Search via Backend` app = `z2ui5_cl_demo_app_053` ) ( group = `Basic II` header = `Table` sub = `Selection Modes: Single Select & Multi Select` app = `z2ui5_cl_demo_app_019` ) ( group = `Basic II` header = `Table` sub = `Table with ScrollContainer` app = `z2ui5_cl_demo_app_006` ) ( group = `Basic II` header = `Timer` sub = `Loading Indicator with WAIT UP Backend` app = `z2ui5_cl_demo_app_064` ) From 0599394f9fab750aedd8414eac83297c32d4bc10 Mon Sep 17 00:00:00 2001 From: oblomov Date: Sun, 19 Jul 2026 13:03:47 +0000 Subject: [PATCH 39/49] fix --- src/01/02/z2ui5_cl_demo_app_189.clas.abap | 5 +++-- src/01/02/z2ui5_cl_demo_app_189.clas.xml | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/01/02/z2ui5_cl_demo_app_189.clas.abap b/src/01/02/z2ui5_cl_demo_app_189.clas.abap index d290540f..859e650c 100644 --- a/src/01/02/z2ui5_cl_demo_app_189.clas.abap +++ b/src/01/02/z2ui5_cl_demo_app_189.clas.abap @@ -17,7 +17,9 @@ CLASS z2ui5_cl_demo_app_189 DEFINITION PUBLIC. ENDCLASS. -CLASS z2ui5_cl_demo_app_189 IMPLEMENTATION. + +CLASS Z2UI5_CL_DEMO_APP_189 IMPLEMENTATION. + METHOD dispatch. @@ -75,5 +77,4 @@ CLASS z2ui5_cl_demo_app_189 IMPLEMENTATION. dispatch( ). ENDMETHOD. - ENDCLASS. diff --git a/src/01/02/z2ui5_cl_demo_app_189.clas.xml b/src/01/02/z2ui5_cl_demo_app_189.clas.xml index 3fc7bfc1..285c842a 100644 --- a/src/01/02/z2ui5_cl_demo_app_189.clas.xml +++ b/src/01/02/z2ui5_cl_demo_app_189.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_189 E - Focus II - Jump with the focus + Focus - Jump with the focus 1 X X From 9cab59857d2aa289ddb840749cfd33d4f6909cb7 Mon Sep 17 00:00:00 2001 From: oblomov Date: Sun, 19 Jul 2026 13:37:01 +0000 Subject: [PATCH 40/49] fix --- src/00/{08 => 00}/package.devc.xml | 2 +- .../z2ui5_cl_demo_app_314.clas.abap | 0 .../{07 => 00}/z2ui5_cl_demo_app_314.clas.xml | 0 .../z2ui5_cl_demo_app_315.clas.abap | 0 .../{07 => 00}/z2ui5_cl_demo_app_315.clas.xml | 0 src/00/04/package.devc.xml | 10 -- .../z2ui5_cl_demo_app_076.clas.abap | 0 .../{04 => 07}/z2ui5_cl_demo_app_076.clas.xml | 0 .../z2ui5_cl_demo_app_179.clas.abap | 0 .../{04 => 07}/z2ui5_cl_demo_app_179.clas.xml | 0 src/00/07/z2ui5_cl_demo_app_370.clas.abap | 115 ------------------ src/00/07/z2ui5_cl_demo_app_370.clas.xml | 16 --- .../z2ui5_cl_demo_app_068.clas.abap | 0 .../{07 => 99}/z2ui5_cl_demo_app_068.clas.xml | 0 .../z2ui5_cl_demo_app_069.clas.abap | 0 .../{07 => 99}/z2ui5_cl_demo_app_069.clas.xml | 0 .../z2ui5_cl_demo_app_080.clas.abap | 0 .../{04 => 99}/z2ui5_cl_demo_app_080.clas.xml | 2 +- .../z2ui5_cl_demo_app_087.clas.abap | 0 .../{07 => 99}/z2ui5_cl_demo_app_087.clas.xml | 0 .../z2ui5_cl_demo_app_231.clas.abap | 0 .../{04 => 99}/z2ui5_cl_demo_app_231.clas.xml | 2 +- .../z2ui5_cl_demo_app_364.clas.abap | 0 .../{07 => 99}/z2ui5_cl_demo_app_364.clas.xml | 0 24 files changed, 3 insertions(+), 144 deletions(-) rename src/00/{08 => 00}/package.devc.xml (87%) rename src/00/{07 => 00}/z2ui5_cl_demo_app_314.clas.abap (100%) rename src/00/{07 => 00}/z2ui5_cl_demo_app_314.clas.xml (100%) rename src/00/{07 => 00}/z2ui5_cl_demo_app_315.clas.abap (100%) rename src/00/{07 => 00}/z2ui5_cl_demo_app_315.clas.xml (100%) delete mode 100644 src/00/04/package.devc.xml rename src/00/{04 => 07}/z2ui5_cl_demo_app_076.clas.abap (100%) rename src/00/{04 => 07}/z2ui5_cl_demo_app_076.clas.xml (100%) rename src/00/{04 => 07}/z2ui5_cl_demo_app_179.clas.abap (100%) rename src/00/{04 => 07}/z2ui5_cl_demo_app_179.clas.xml (100%) delete mode 100644 src/00/07/z2ui5_cl_demo_app_370.clas.abap delete mode 100644 src/00/07/z2ui5_cl_demo_app_370.clas.xml rename src/00/{07 => 99}/z2ui5_cl_demo_app_068.clas.abap (100%) rename src/00/{07 => 99}/z2ui5_cl_demo_app_068.clas.xml (100%) rename src/00/{07 => 99}/z2ui5_cl_demo_app_069.clas.abap (100%) rename src/00/{07 => 99}/z2ui5_cl_demo_app_069.clas.xml (100%) rename src/00/{04 => 99}/z2ui5_cl_demo_app_080.clas.abap (100%) rename src/00/{04 => 99}/z2ui5_cl_demo_app_080.clas.xml (83%) rename src/00/{07 => 99}/z2ui5_cl_demo_app_087.clas.abap (100%) rename src/00/{07 => 99}/z2ui5_cl_demo_app_087.clas.xml (100%) rename src/00/{04 => 99}/z2ui5_cl_demo_app_231.clas.abap (100%) rename src/00/{04 => 99}/z2ui5_cl_demo_app_231.clas.xml (83%) rename src/00/{07 => 99}/z2ui5_cl_demo_app_364.clas.abap (100%) rename src/00/{07 => 99}/z2ui5_cl_demo_app_364.clas.xml (100%) diff --git a/src/00/08/package.devc.xml b/src/00/00/package.devc.xml similarity index 87% rename from src/00/08/package.devc.xml rename to src/00/00/package.devc.xml index dcda5754..b977dbb4 100644 --- a/src/00/08/package.devc.xml +++ b/src/00/00/package.devc.xml @@ -3,7 +3,7 @@ - framework - new (beta) + extended X diff --git a/src/00/07/z2ui5_cl_demo_app_314.clas.abap b/src/00/00/z2ui5_cl_demo_app_314.clas.abap similarity index 100% rename from src/00/07/z2ui5_cl_demo_app_314.clas.abap rename to src/00/00/z2ui5_cl_demo_app_314.clas.abap diff --git a/src/00/07/z2ui5_cl_demo_app_314.clas.xml b/src/00/00/z2ui5_cl_demo_app_314.clas.xml similarity index 100% rename from src/00/07/z2ui5_cl_demo_app_314.clas.xml rename to src/00/00/z2ui5_cl_demo_app_314.clas.xml diff --git a/src/00/07/z2ui5_cl_demo_app_315.clas.abap b/src/00/00/z2ui5_cl_demo_app_315.clas.abap similarity index 100% rename from src/00/07/z2ui5_cl_demo_app_315.clas.abap rename to src/00/00/z2ui5_cl_demo_app_315.clas.abap diff --git a/src/00/07/z2ui5_cl_demo_app_315.clas.xml b/src/00/00/z2ui5_cl_demo_app_315.clas.xml similarity index 100% rename from src/00/07/z2ui5_cl_demo_app_315.clas.xml rename to src/00/00/z2ui5_cl_demo_app_315.clas.xml diff --git a/src/00/04/package.devc.xml b/src/00/04/package.devc.xml deleted file mode 100644 index 593e3d41..00000000 --- a/src/00/04/package.devc.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - use of z2ui5 - - - - diff --git a/src/00/04/z2ui5_cl_demo_app_076.clas.abap b/src/00/07/z2ui5_cl_demo_app_076.clas.abap similarity index 100% rename from src/00/04/z2ui5_cl_demo_app_076.clas.abap rename to src/00/07/z2ui5_cl_demo_app_076.clas.abap diff --git a/src/00/04/z2ui5_cl_demo_app_076.clas.xml b/src/00/07/z2ui5_cl_demo_app_076.clas.xml similarity index 100% rename from src/00/04/z2ui5_cl_demo_app_076.clas.xml rename to src/00/07/z2ui5_cl_demo_app_076.clas.xml diff --git a/src/00/04/z2ui5_cl_demo_app_179.clas.abap b/src/00/07/z2ui5_cl_demo_app_179.clas.abap similarity index 100% rename from src/00/04/z2ui5_cl_demo_app_179.clas.abap rename to src/00/07/z2ui5_cl_demo_app_179.clas.abap diff --git a/src/00/04/z2ui5_cl_demo_app_179.clas.xml b/src/00/07/z2ui5_cl_demo_app_179.clas.xml similarity index 100% rename from src/00/04/z2ui5_cl_demo_app_179.clas.xml rename to src/00/07/z2ui5_cl_demo_app_179.clas.xml diff --git a/src/00/07/z2ui5_cl_demo_app_370.clas.abap b/src/00/07/z2ui5_cl_demo_app_370.clas.abap deleted file mode 100644 index 4388f57a..00000000 --- a/src/00/07/z2ui5_cl_demo_app_370.clas.abap +++ /dev/null @@ -1,115 +0,0 @@ -CLASS z2ui5_cl_demo_app_370 DEFINITION PUBLIC. - - PUBLIC SECTION. - INTERFACES z2ui5_if_app. - - TYPES: - BEGIN OF ty_s_product, - productid TYPE string, - productname TYPE string, - suppliername TYPE string, - END OF ty_s_product. - DATA t_products TYPE STANDARD TABLE OF ty_s_product WITH EMPTY KEY. - - PROTECTED SECTION. - DATA client TYPE REF TO z2ui5_if_client. - - METHODS view_display. - METHODS on_event. - METHODS popover_display - IMPORTING - id TYPE string. - - PRIVATE SECTION. -ENDCLASS. - - - -CLASS Z2UI5_CL_DEMO_APP_370 IMPLEMENTATION. - - - METHOD z2ui5_if_app~main. - - me->client = client. - - IF client->check_on_init( ). - - t_products = VALUE #( - ( productid = `1` productname = `table` suppliername = `Company 1` ) - ( productid = `2` productname = `chair` suppliername = `Company 2` ) - ( productid = `3` productname = `sofa` suppliername = `Company 3` ) - ( productid = `4` productname = `computer` suppliername = `Company 4` ) - ( productid = `5` productname = `printer` suppliername = `Company 5` ) - ( productid = `6` productname = `table2` suppliername = `Company 6` ) ). - - view_display( ). - - ELSE. - on_event( ). - ENDIF. - - ENDMETHOD. - - - METHOD view_display. - - DATA(page) = z2ui5_cl_xml_view=>factory( )->shell( - )->page( - title = `abap2UI5 - Sample: Object Identifier inside a Table` - navbuttonpress = client->_event_nav_app_leave( ) - shownavbutton = client->check_app_prev_stack( ) ). - - page->header_content( - )->button( id = `button_hint_id` - icon = `sap-icon://hint` - tooltip = `Sample information` - press = client->_event( `CLICK_HINT_ICON` ) ). - - page->header_content( - )->link( - text = `UI5 Demo Kit` - target = `_blank` - href = `https://sapui5.hana.ondemand.com/sdk/#/entity/sap.m.ObjectIdentifier` ). - - page->table( client->_bind( t_products ) - )->columns( - )->column( - )->text( `Product` )->get_parent( - )->column( - )->text( `Supplier` )->get_parent( )->get_parent( - )->items( - )->column_list_item( - )->cells( - )->object_identifier( title = `{PRODUCTNAME}` - text = `{PRODUCTID}` - )->text( `{SUPPLIERNAME}` ). - - client->view_display( page->stringify( ) ). - - ENDMETHOD. - - - METHOD on_event. - - IF client->check_on_event( `CLICK_HINT_ICON` ). - popover_display( `button_hint_id` ). - ENDIF. - - ENDMETHOD. - - - METHOD popover_display. - - DATA(view) = z2ui5_cl_xml_view=>factory_popup( ). - view->quick_view( placement = `Bottom` - width = `auto` - )->quick_view_page( pageid = `sampleInformationId` - header = `Sample information` - description = `The object identifier is a display control that enables the user to easily identify a specific object. It shows a title and an additional text inside a table.` ). - - client->popover_display( - xml = view->stringify( ) - by_id = id ). - - ENDMETHOD. -ENDCLASS. diff --git a/src/00/07/z2ui5_cl_demo_app_370.clas.xml b/src/00/07/z2ui5_cl_demo_app_370.clas.xml deleted file mode 100644 index d9ac4c49..00000000 --- a/src/00/07/z2ui5_cl_demo_app_370.clas.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - Z2UI5_CL_DEMO_APP_370 - E - sap.m.ObjectIdentifier - inside a Table - 1 - X - X - X - - - - diff --git a/src/00/07/z2ui5_cl_demo_app_068.clas.abap b/src/00/99/z2ui5_cl_demo_app_068.clas.abap similarity index 100% rename from src/00/07/z2ui5_cl_demo_app_068.clas.abap rename to src/00/99/z2ui5_cl_demo_app_068.clas.abap diff --git a/src/00/07/z2ui5_cl_demo_app_068.clas.xml b/src/00/99/z2ui5_cl_demo_app_068.clas.xml similarity index 100% rename from src/00/07/z2ui5_cl_demo_app_068.clas.xml rename to src/00/99/z2ui5_cl_demo_app_068.clas.xml diff --git a/src/00/07/z2ui5_cl_demo_app_069.clas.abap b/src/00/99/z2ui5_cl_demo_app_069.clas.abap similarity index 100% rename from src/00/07/z2ui5_cl_demo_app_069.clas.abap rename to src/00/99/z2ui5_cl_demo_app_069.clas.abap diff --git a/src/00/07/z2ui5_cl_demo_app_069.clas.xml b/src/00/99/z2ui5_cl_demo_app_069.clas.xml similarity index 100% rename from src/00/07/z2ui5_cl_demo_app_069.clas.xml rename to src/00/99/z2ui5_cl_demo_app_069.clas.xml diff --git a/src/00/04/z2ui5_cl_demo_app_080.clas.abap b/src/00/99/z2ui5_cl_demo_app_080.clas.abap similarity index 100% rename from src/00/04/z2ui5_cl_demo_app_080.clas.abap rename to src/00/99/z2ui5_cl_demo_app_080.clas.abap diff --git a/src/00/04/z2ui5_cl_demo_app_080.clas.xml b/src/00/99/z2ui5_cl_demo_app_080.clas.xml similarity index 83% rename from src/00/04/z2ui5_cl_demo_app_080.clas.xml rename to src/00/99/z2ui5_cl_demo_app_080.clas.xml index c94eb6cd..d33852aa 100644 --- a/src/00/04/z2ui5_cl_demo_app_080.clas.xml +++ b/src/00/99/z2ui5_cl_demo_app_080.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_080 E - sap.m.PlanningCalendar - PlanningCalendar with single row se + sap.m.PlanningCalendar - use of z2ui5 1 X X diff --git a/src/00/07/z2ui5_cl_demo_app_087.clas.abap b/src/00/99/z2ui5_cl_demo_app_087.clas.abap similarity index 100% rename from src/00/07/z2ui5_cl_demo_app_087.clas.abap rename to src/00/99/z2ui5_cl_demo_app_087.clas.abap diff --git a/src/00/07/z2ui5_cl_demo_app_087.clas.xml b/src/00/99/z2ui5_cl_demo_app_087.clas.xml similarity index 100% rename from src/00/07/z2ui5_cl_demo_app_087.clas.xml rename to src/00/99/z2ui5_cl_demo_app_087.clas.xml diff --git a/src/00/04/z2ui5_cl_demo_app_231.clas.abap b/src/00/99/z2ui5_cl_demo_app_231.clas.abap similarity index 100% rename from src/00/04/z2ui5_cl_demo_app_231.clas.abap rename to src/00/99/z2ui5_cl_demo_app_231.clas.abap diff --git a/src/00/04/z2ui5_cl_demo_app_231.clas.xml b/src/00/99/z2ui5_cl_demo_app_231.clas.xml similarity index 83% rename from src/00/04/z2ui5_cl_demo_app_231.clas.xml rename to src/00/99/z2ui5_cl_demo_app_231.clas.xml index 7de9df52..32dc504b 100644 --- a/src/00/04/z2ui5_cl_demo_app_231.clas.xml +++ b/src/00/99/z2ui5_cl_demo_app_231.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_231 E - sap.m.DateRangeSelection - The Date Range Selection is an ex + sap.m.DateRangeSelection - use of z2ui5 1 X X diff --git a/src/00/07/z2ui5_cl_demo_app_364.clas.abap b/src/00/99/z2ui5_cl_demo_app_364.clas.abap similarity index 100% rename from src/00/07/z2ui5_cl_demo_app_364.clas.abap rename to src/00/99/z2ui5_cl_demo_app_364.clas.abap diff --git a/src/00/07/z2ui5_cl_demo_app_364.clas.xml b/src/00/99/z2ui5_cl_demo_app_364.clas.xml similarity index 100% rename from src/00/07/z2ui5_cl_demo_app_364.clas.xml rename to src/00/99/z2ui5_cl_demo_app_364.clas.xml From c4d4ba63accaf6e88c58d82e4f2c94edd30b2829 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 19 Jul 2026 13:41:25 +0000 Subject: [PATCH 41/49] Extended overview (g01): no blank lines between sample links MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Drop the inter-block sapUiSmallMarginTop gap in sample_app_g01's view_display so every sample lists directly under the previous one; keep the per-group H3 titles and the column alignment. Documented the basic/extended difference in AGENTS.md §3. abaplint 0 issues. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_018JnhapjtGyzgxzuzUoeeXW --- AGENTS.md | 6 +++++- src/00/z2ui5_cl_sample_app_g01.clas.abap | 13 +++---------- 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 1a503c41..143cc8cb 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -165,7 +165,11 @@ render as one block, then a gap, then the `Event` block, and so on. All links of a block share the same width — the estimated render width of the widest header in the block plus roughly one space, precomputed by `block_widths( )` / `header_width( )` — so the `sub` descriptions of a block line up exactly -underneath each other in one column, directly next to the links. +underneath each other in one column, directly next to the links. This +blank-line-between-blocks applies to the **basic** overview (`demo_app_g00`) +only; the **extended** overview (`sample_app_g01`) lists every sample directly +under the previous one (no inter-block blank line), keeping only the per-group +H3 titles and the column alignment. `z2ui5_cl_demo_app_000` is the old "classic" overview app (now under `00/99`, obsolete); `sample_app_g01` links to it from its info message strip. Do not diff --git a/src/00/z2ui5_cl_sample_app_g01.clas.abap b/src/00/z2ui5_cl_sample_app_g01.clas.abap index 26c5cf78..22dff8d7 100644 --- a/src/00/z2ui5_cl_sample_app_g01.clas.abap +++ b/src/00/z2ui5_cl_sample_app_g01.clas.abap @@ -153,13 +153,11 @@ CLASS z2ui5_cl_sample_app_g01 IMPLEMENTATION. text = info ). DATA(prev_group) = ``. - DATA(prev_base) = ``. LOOP AT t_catalog INTO DATA(tile). DATA(base) = block_base( group = tile-group header = tile-header ). - DATA(new_block) = abap_false. IF tile-group <> prev_group. page->title( @@ -167,22 +165,17 @@ CLASS z2ui5_cl_sample_app_g01 IMPLEMENTATION. level = `H3` class = `sapUiSmallMarginTop sapUiTinyMarginBottom` ). prev_group = tile-group. - - ELSEIF base <> prev_base. - new_block = abap_true. ENDIF. - prev_base = base. - " widest header of the block plus roughly one space, in 1/100 em DATA(tenths) = ( t_blocks[ group = tile-group base = base ]-width + 45 ) DIV 10. DATA(width) = |{ tenths DIV 10 }.{ tenths MOD 10 }em|. + " extended overview: every sample directly under the previous one, no + " blank line between blocks DATA(row) = page->hbox( alignitems = `Center` wrap = `Wrap` - class = COND #( WHEN new_block = abap_true - THEN `sapUiTinyMarginBegin sapUiSmallMarginTop` - ELSE `sapUiTinyMarginBegin` ) ). + class = `sapUiTinyMarginBegin` ). IF tile-sub IS INITIAL. row->link( From 14f8ad4115e32381ff45b08f200dc4ad58f12258 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 19 Jul 2026 13:47:33 +0000 Subject: [PATCH 42/49] Adopt src/00 restructuring + 445 description; regenerate overviews MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Sync AGENTS.md §1 tree to the reworked src/00 (new 00/00 "extended", removed 00/04 "use of z2ui5" and 00/08 "beta"); update the §2 restriction list and §4 ordering example accordingly. - Z2UI5_CL_DEMO_APP_445 DESCRIPT: "Model - Device Model in views and popups" -> "Model - Device Model". - Regenerate both overview catalogs. check:agents passes, abaplint 0 issues. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_018JnhapjtGyzgxzuzUoeeXW --- AGENTS.md | 20 +++++++++----------- src/00/z2ui5_cl_sample_app_g01.clas.abap | 21 ++++++++++----------- src/01/01/z2ui5_cl_demo_app_445.clas.xml | 2 +- src/01/z2ui5_cl_demo_app_g00.clas.abap | 4 ++-- 4 files changed, 22 insertions(+), 25 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 143cc8cb..9ba32e6b 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -45,14 +45,13 @@ src/ │ ├── 06/ controls - sap.ui.codeeditor │ └── 07/ controls - sap.ui.unified └── 00/ "extended" restricted / special-purpose — STRIPPED from cloud & 702 builds + ├── 00/ extended restricted samples without a more specific category ├── 01/ only non-abap-cloud on-premise-only ABAP (not ABAP Cloud ready) ├── 02/ only non-openui5 or higher UI5 1.71 SAPUI5-only controls (sap.suite.*, sap.ui.comp.*, VizFrame, …) or a control/property introduced after UI5 1.71 ├── 03/ only with launchpad runs only inside the Fiori Launchpad - ├── 04/ use of z2ui5 needs the z2ui5/Util frontend helper module in the view ├── 05/ only with javascript and css and html needs native JS / CSS / HTML ├── 06/ only testing test / scaffolding apps, not demos ├── 07/ experimental, TODO work-in-progress / not finished - ├── 08/ framework - new (beta) needs framework features not yet in a stable release └── 99/ obsolete superseded, or built on a deprecated UI5 control ``` @@ -115,12 +114,11 @@ The split is driven directly by the CI builds: 1. Needs on-premise-only ABAP (not Cloud) → `00/01` 2. Uses a SAPUI5-only control, **or** a control/property introduced after UI5 1.71 → `00/02` 3. Runs only inside the Launchpad → `00/03` - 4. Needs the `z2ui5/Util` frontend helper module in the view (`core:require {Helper:'z2ui5/Util'}`) → `00/04` - 5. Needs native JavaScript / CSS / HTML → `00/05` - 6. Test / scaffolding app → `00/06` - 7. Experimental / work-in-progress → `00/07` - 8. Needs framework features not yet in a stable release (beta) → `00/08` - 9. Deprecated control/property, or superseded → `00/99` + 4. Needs native JavaScript / CSS / HTML → `00/05` + 5. Test / scaffolding app → `00/06` + 6. Experimental / work-in-progress → `00/07` + 7. Deprecated control/property, or superseded → `00/99` + 8. Otherwise restricted, not fitting any category above → `00/00` ("extended") A sample qualifies for `src/01` **only if none** of the above restrictions apply: OpenUI5-compatible, ABAP-Cloud-ready, standalone, every control **and** @@ -245,11 +243,11 @@ from the old catalog. every tile's `group` to match. A tile's group must equal the CTEXT of the folder the class physically lives in — never a neighbouring category. 4. **Group blocks follow folder order.** Emit groups in ascending folder number - (`00/01` → `00/07` → `00/99`; `01/01` → `01/08/00` → `01/08/07`) so the + (`00/00` → `00/07` → `00/99`; `01/01` → `01/08/00` → `01/08/07`) so the on-screen order mirrors the tree; a nested subpackage forms its own group directly after its parent slot. When inserting a new group, place it at its - numeric slot (e.g. `use of z2ui5` = `00/04` goes **after** - `only with launchpad` (`00/03`) and **before** + numeric slot (e.g. `only with launchpad` = `00/03` goes **after** + `only non-openui5 or higher UI5 1.71` (`00/02`) and **before** `only with javascript and css and html` (`00/05`)). 5. **Within a group, sort tiles alphabetically (case-insensitive) by `header`, then by `sub`.** Sorting by `header` first keeps numbered series together and diff --git a/src/00/z2ui5_cl_sample_app_g01.clas.abap b/src/00/z2ui5_cl_sample_app_g01.clas.abap index 22dff8d7..f1327861 100644 --- a/src/00/z2ui5_cl_sample_app_g01.clas.abap +++ b/src/00/z2ui5_cl_sample_app_g01.clas.abap @@ -214,6 +214,8 @@ CLASS z2ui5_cl_sample_app_g01 IMPLEMENTATION. METHOD get_catalog. result = VALUE #( + ( group = `extended` header = `tab` sub = `different odata models` app = `z2ui5_cl_demo_app_315` ) + ( group = `extended` header = `tab` sub = `odata, device, http` app = `z2ui5_cl_demo_app_314` ) ( group = `only non-abap-cloud` header = `Conversion Exits` sub = `` app = `z2ui5_cl_demo_app_s_04` ) ( group = `only non-abap-cloud` header = `Generated APC WebSocket protocol impementation class` sub = `` app = `z2ui5_cl_demo_app_s_05_ws` ) ( group = `only non-abap-cloud` header = `Navigation with app state change v2` sub = `` app = `z2ui5_cl_demo_app_s_06` ) @@ -252,10 +254,6 @@ CLASS z2ui5_cl_sample_app_g01 IMPLEMENTATION. ( group = `only with launchpad` header = `launchpad II` sub = `Set Title` app = `z2ui5_cl_demo_app_lp_02` ) ( group = `only with launchpad` header = `Launchpad III` sub = `cross app navigation I` app = `z2ui5_cl_demo_app_lp_03` ) ( group = `only with launchpad` header = `Launchpad IV` sub = `cross app navigation II` app = `z2ui5_cl_demo_app_lp_04` ) - ( group = `use of z2ui5` header = `gantt` sub = `test` app = `z2ui5_cl_demo_app_076` ) - ( group = `use of z2ui5` header = `gantt II` sub = `` app = `z2ui5_cl_demo_app_179` ) - ( group = `use of z2ui5` header = `sap.m.DateRangeSelection` sub = `The Date Range Selection is an extension of the Date Picker Control and enables the user to select range of dates.` app = `z2ui5_cl_demo_app_231` ) - ( group = `use of z2ui5` header = `sap.m.PlanningCalendar` sub = `PlanningCalendar with single row selection that illustrates the built-in views.` app = `z2ui5_cl_demo_app_080` ) ( group = `only with javascript and css and html` header = `Cell Coloring` sub = `` app = `z2ui5_cl_demo_app_305` ) ( group = `only with javascript and css and html` header = `Change CSS` sub = `Send your own CSS to the frontend` app = `z2ui5_cl_demo_app_050` ) ( group = `only with javascript and css and html` header = `custom function in popup` sub = `` app = `z2ui5_cl_demo_app_141` ) @@ -322,21 +320,16 @@ CLASS z2ui5_cl_sample_app_g01 IMPLEMENTATION. ( group = `only testing` header = `Type Ref to Data Table with refresh` sub = `` app = `z2ui5_cl_demo_app_199` ) ( group = `only testing` header = `unit test` sub = `long variable` app = `z2ui5_cl_demo_app_138` ) ( group = `only testing` header = `ZZZ Data Object for Sample 328` sub = `` app = `z2ui5_cl_demo_app_329` ) + ( group = `experimental, TODO` header = `gantt` sub = `test` app = `z2ui5_cl_demo_app_076` ) + ( group = `experimental, TODO` header = `gantt II` sub = `` app = `z2ui5_cl_demo_app_179` ) ( group = `experimental, TODO` header = `History` sub = `` app = `z2ui5_cl_demo_app_139` ) ( group = `experimental, TODO` header = `Navigation` sub = `app state` app = `z2ui5_cl_demo_app_321` ) ( group = `experimental, TODO` header = `Navigation` sub = `app state share` app = `z2ui5_cl_demo_app_323` ) ( group = `experimental, TODO` header = `Navigation` sub = `push state` app = `z2ui5_cl_demo_app_322` ) ( group = `experimental, TODO` header = `Navigation with app state change v1 and locking` sub = `` app = `z2ui5_cl_demo_app_350` ) ( group = `experimental, TODO` header = `popups` sub = `p13n Dialog` app = `z2ui5_cl_demo_app_090` ) - ( group = `experimental, TODO` header = `sap.m.ObjectIdentifier` sub = `inside a Table` app = `z2ui5_cl_demo_app_370` ) ( group = `experimental, TODO` header = `selscreen` sub = `filter bar with variant management WIP` app = `z2ui5_cl_demo_app_111` ) ( group = `experimental, TODO` header = `Storage` sub = `Store data inside localStorage or sessionStorage` app = `z2ui5_cl_demo_app_327` ) - ( group = `experimental, TODO` header = `tab` sub = `cell copy` app = `z2ui5_cl_demo_app_087` ) - ( group = `experimental, TODO` header = `tab` sub = `different odata models` app = `z2ui5_cl_demo_app_315` ) - ( group = `experimental, TODO` header = `tab` sub = `odata, device, http` app = `z2ui5_cl_demo_app_314` ) - ( group = `experimental, TODO` header = `Tree Table I` sub = `Popup Select Entry` app = `z2ui5_cl_demo_app_068` ) - ( group = `experimental, TODO` header = `Tree Table II` sub = `` app = `z2ui5_cl_demo_app_069` ) - ( group = `experimental, TODO` header = `Tree Table III` sub = `Checkbox Binding per Node` app = `z2ui5_cl_demo_app_364` ) ( group = `experimental, TODO` header = `ViewSettingsDialog` sub = `` app = `z2ui5_cl_demo_app_099` ) ( group = `obsolete` header = `follow_up_action with JS` sub = `` app = `z2ui5_cl_demo_app_309_0` ) ( group = `obsolete` header = `landing page` sub = `` app = `z2ui5_cl_demo_app_000` ) @@ -359,7 +352,13 @@ CLASS z2ui5_cl_sample_app_g01 IMPLEMENTATION. ( group = `obsolete` header = `sap.m.ActionSheet` sub = `Action Sheet provides an easier way of showing a list of actions and allowing the user to select one. Title and Cancel button can be shown or hidden. Without an icon the entry will be left-aligned (see the last action in the list).` app = `z2ui5_cl_demo_app_373` ) + ( group = `obsolete` header = `sap.m.DateRangeSelection` sub = `The Date Range Selection is an extension of the Date Picker Control and enables the user to select range of dates.` app = `z2ui5_cl_demo_app_231` ) + ( group = `obsolete` header = `sap.m.PlanningCalendar` sub = `PlanningCalendar with single row selection that illustrates the built-in views.` app = `z2ui5_cl_demo_app_080` ) ( group = `obsolete` header = `Softkeyboard on/off` sub = `` app = `z2ui5_cl_demo_app_352_0` ) + ( group = `obsolete` header = `tab` sub = `cell copy` app = `z2ui5_cl_demo_app_087` ) + ( group = `obsolete` header = `Tree Table I` sub = `Popup Select Entry` app = `z2ui5_cl_demo_app_068` ) + ( group = `obsolete` header = `Tree Table II` sub = `` app = `z2ui5_cl_demo_app_069` ) + ( group = `obsolete` header = `Tree Table III` sub = `Checkbox Binding per Node` app = `z2ui5_cl_demo_app_364` ) ( group = `obsolete` header = `wizard` sub = `nextStep & subsequentSteps` app = `z2ui5_cl_demo_app_202_0` ) ). ENDMETHOD. diff --git a/src/01/01/z2ui5_cl_demo_app_445.clas.xml b/src/01/01/z2ui5_cl_demo_app_445.clas.xml index 7fd03531..7354e0b1 100644 --- a/src/01/01/z2ui5_cl_demo_app_445.clas.xml +++ b/src/01/01/z2ui5_cl_demo_app_445.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_445 E - Model - Device Model in views and popups + Model - Device Model 1 X X diff --git a/src/01/z2ui5_cl_demo_app_g00.clas.abap b/src/01/z2ui5_cl_demo_app_g00.clas.abap index 3e22ccf3..8c63225c 100644 --- a/src/01/z2ui5_cl_demo_app_g00.clas.abap +++ b/src/01/z2ui5_cl_demo_app_g00.clas.abap @@ -225,7 +225,7 @@ CLASS z2ui5_cl_demo_app_g00 IMPLEMENTATION. ( group = `Basic I` header = `Message` sub = `MessageBox` app = `z2ui5_cl_demo_app_382` ) ( group = `Basic I` header = `Message` sub = `MessageToast` app = `z2ui5_cl_demo_app_381` ) ( group = `Basic I` header = `Message` sub = `MessageView` app = `z2ui5_cl_demo_app_452` ) - ( group = `Basic I` header = `Model` sub = `Device Model in views and popups` app = `z2ui5_cl_demo_app_445` ) + ( group = `Basic I` header = `Model` sub = `Device Model` app = `z2ui5_cl_demo_app_445` ) ( group = `Basic I` header = `Model` sub = `Message Model` app = `z2ui5_cl_demo_app_458` ) ( group = `Basic I` header = `Model` sub = `Set Size Limit` app = `z2ui5_cl_demo_app_071` ) ( group = `Basic I` header = `More` sub = `Call and leave to apps` app = `z2ui5_cl_demo_app_024` ) @@ -248,8 +248,8 @@ CLASS z2ui5_cl_demo_app_g00 IMPLEMENTATION. ( group = `Basic I` header = `Templating` sub = `Nested Views` app = `z2ui5_cl_demo_app_176` ) ( group = `Basic II` header = `Browser` sub = `Logout (A)` app = `z2ui5_cl_demo_app_361` ) ( group = `Basic II` header = `Browser` sub = `Title` app = `z2ui5_cl_demo_app_125` ) + ( group = `Basic II` header = `Focus` sub = `Jump with the focus` app = `z2ui5_cl_demo_app_189` ) ( group = `Basic II` header = `Focus` sub = `Set Focus in Textfield` app = `z2ui5_cl_demo_app_133` ) - ( group = `Basic II` header = `Focus II` sub = `Jump with the focus` app = `z2ui5_cl_demo_app_189` ) ( group = `Basic II` header = `Input` sub = `Clipboard` app = `z2ui5_cl_demo_app_325` ) ( group = `Basic II` header = `Input` sub = `Hide/show Soft Keyboard` app = `z2ui5_cl_demo_app_352` ) ( group = `Basic II` header = `List` sub = `Events & Visualization` app = `z2ui5_cl_demo_app_048` ) From 8dc56c2b27dc4c99a9a0438b68d8b9f70f6c20db Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 19 Jul 2026 14:44:45 +0000 Subject: [PATCH 43/49] Samples 01/01 + 01/02: intro MessageStrips, A/C markers, tidy-ups - Add an explanatory intro MessageStrip (Information, showicon, sapUiSmallMargin) to every sample in 01/01 and 01/02 that lacked one, describing what it demos. - 01/02: append (C)/(A)/(A,C) markers to the DESCRIPT of samples that use a custom control (_z2ui5 / z2ui5 cc namespace) and/or a frontend action (_event_client, follow_up_action, control_call, binding_call, drag&drop). - Rename 073 -> "Browser - Open an URL in a new tab" and 316 -> "Browser - Open Telephon, Email usw". - Remove the unusual footer Back button from the MessageToast (381) and MessageBox (382) samples (the shell already has the nav-back button). - Regenerate both overview catalogs. abaplint 0 issues, structure check passes. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_018JnhapjtGyzgxzuzUoeeXW --- src/01/01/z2ui5_cl_demo_app_001.clas.abap | 38 +++++---- src/01/01/z2ui5_cl_demo_app_004.clas.abap | 7 ++ src/01/01/z2ui5_cl_demo_app_012.clas.abap | 7 ++ src/01/01/z2ui5_cl_demo_app_020.clas.abap | 35 +++++--- src/01/01/z2ui5_cl_demo_app_024.clas.abap | 14 +++- src/01/01/z2ui5_cl_demo_app_025.clas.abap | 7 ++ src/01/01/z2ui5_cl_demo_app_026.clas.abap | 14 +++- src/01/01/z2ui5_cl_demo_app_027.clas.abap | 18 +++-- src/01/01/z2ui5_cl_demo_app_047.clas.abap | 8 ++ src/01/01/z2ui5_cl_demo_app_052.clas.abap | 7 ++ src/01/01/z2ui5_cl_demo_app_061.clas.abap | 7 ++ src/01/01/z2ui5_cl_demo_app_065.clas.abap | 7 ++ src/01/01/z2ui5_cl_demo_app_067.clas.abap | 7 ++ src/01/01/z2ui5_cl_demo_app_071.clas.abap | 58 ++++++++------ src/01/01/z2ui5_cl_demo_app_081.clas.abap | 21 +++-- src/01/01/z2ui5_cl_demo_app_097.clas.abap | 7 ++ src/01/01/z2ui5_cl_demo_app_098.clas.abap | 7 ++ src/01/01/z2ui5_cl_demo_app_104.clas.abap | 7 ++ src/01/01/z2ui5_cl_demo_app_105.clas.abap | 7 ++ src/01/01/z2ui5_cl_demo_app_109.clas.abap | 21 +++-- src/01/01/z2ui5_cl_demo_app_112.clas.abap | 7 ++ src/01/01/z2ui5_cl_demo_app_122.clas.abap | 97 +++++++++++++---------- src/01/01/z2ui5_cl_demo_app_126.clas.abap | 7 ++ src/01/01/z2ui5_cl_demo_app_144.clas.abap | 7 ++ src/01/01/z2ui5_cl_demo_app_161.clas.abap | 18 +++-- src/01/01/z2ui5_cl_demo_app_163.clas.abap | 7 ++ src/01/01/z2ui5_cl_demo_app_166.clas.abap | 7 ++ src/01/01/z2ui5_cl_demo_app_167.clas.abap | 7 ++ src/01/01/z2ui5_cl_demo_app_173.clas.abap | 7 ++ src/01/01/z2ui5_cl_demo_app_176.clas.abap | 7 ++ src/01/01/z2ui5_cl_demo_app_197.clas.abap | 7 ++ src/01/01/z2ui5_cl_demo_app_381.clas.abap | 14 ++-- src/01/01/z2ui5_cl_demo_app_382.clas.abap | 11 ++- src/01/01/z2ui5_cl_demo_app_452.clas.abap | 7 ++ src/01/02/z2ui5_cl_demo_app_006.clas.abap | 7 ++ src/01/02/z2ui5_cl_demo_app_011.clas.abap | 7 ++ src/01/02/z2ui5_cl_demo_app_019.clas.abap | 7 ++ src/01/02/z2ui5_cl_demo_app_028.clas.abap | 7 ++ src/01/02/z2ui5_cl_demo_app_028.clas.xml | 2 +- src/01/02/z2ui5_cl_demo_app_045.clas.abap | 7 ++ src/01/02/z2ui5_cl_demo_app_048.clas.abap | 8 ++ src/01/02/z2ui5_cl_demo_app_053.clas.abap | 7 ++ src/01/02/z2ui5_cl_demo_app_059.clas.abap | 7 ++ src/01/02/z2ui5_cl_demo_app_064.clas.abap | 7 ++ src/01/02/z2ui5_cl_demo_app_064.clas.xml | 2 +- src/01/02/z2ui5_cl_demo_app_070.clas.abap | 7 ++ src/01/02/z2ui5_cl_demo_app_073.clas.abap | 33 +++++--- src/01/02/z2ui5_cl_demo_app_073.clas.xml | 2 +- src/01/02/z2ui5_cl_demo_app_074.clas.abap | 7 ++ src/01/02/z2ui5_cl_demo_app_078.clas.abap | 7 ++ src/01/02/z2ui5_cl_demo_app_088.clas.abap | 7 ++ src/01/02/z2ui5_cl_demo_app_120.clas.abap | 14 +++- src/01/02/z2ui5_cl_demo_app_125.clas.abap | 30 ++++--- src/01/02/z2ui5_cl_demo_app_125.clas.xml | 2 +- src/01/02/z2ui5_cl_demo_app_133.clas.abap | 20 +++-- src/01/02/z2ui5_cl_demo_app_133.clas.xml | 2 +- src/01/02/z2ui5_cl_demo_app_143.clas.abap | 7 ++ src/01/02/z2ui5_cl_demo_app_143.clas.xml | 2 +- src/01/02/z2ui5_cl_demo_app_160.clas.abap | 7 ++ src/01/02/z2ui5_cl_demo_app_170.clas.abap | 18 +++-- src/01/02/z2ui5_cl_demo_app_189.clas.abap | 6 ++ src/01/02/z2ui5_cl_demo_app_189.clas.xml | 2 +- src/01/02/z2ui5_cl_demo_app_279.clas.abap | 7 ++ src/01/02/z2ui5_cl_demo_app_306.clas.abap | 7 ++ src/01/02/z2ui5_cl_demo_app_316.clas.abap | 7 ++ src/01/02/z2ui5_cl_demo_app_316.clas.xml | 2 +- src/01/02/z2ui5_cl_demo_app_325.clas.abap | 21 +++-- src/01/02/z2ui5_cl_demo_app_325.clas.xml | 2 +- src/01/02/z2ui5_cl_demo_app_352.clas.abap | 7 ++ src/01/02/z2ui5_cl_demo_app_352.clas.xml | 2 +- src/01/02/z2ui5_cl_demo_app_362.clas.xml | 2 +- src/01/02/z2ui5_cl_demo_app_363.clas.xml | 2 +- src/01/02/z2ui5_cl_demo_app_461.clas.xml | 2 +- src/01/z2ui5_cl_demo_app_g00.clas.abap | 26 +++--- 74 files changed, 636 insertions(+), 206 deletions(-) diff --git a/src/01/01/z2ui5_cl_demo_app_001.clas.abap b/src/01/01/z2ui5_cl_demo_app_001.clas.abap index 4119c11c..16e21483 100644 --- a/src/01/01/z2ui5_cl_demo_app_001.clas.abap +++ b/src/01/01/z2ui5_cl_demo_app_001.clas.abap @@ -21,24 +21,32 @@ CLASS z2ui5_cl_demo_app_001 IMPLEMENTATION. quantity = `500`. DATA(view) = z2ui5_cl_xml_view=>factory( ). - view->shell( + DATA(page) = view->shell( )->page( title = `abap2UI5 - First Example` navbuttonpress = client->_event_nav_app_leave( ) - shownavbutton = client->check_app_prev_stack( ) - )->simple_form( - title = `Form Title` - editable = abap_true - )->content( `form` - )->label( `quantity` - )->input( client->_bind_edit( quantity ) - )->label( `product` - )->input( - value = product - enabled = abap_false - )->button( - text = `post` - press = client->_event( `BUTTON_POST` ) ). + shownavbutton = client->check_app_prev_stack( ) ). + + page->message_strip( + text = `The first abap2UI5 app: an editable quantity field bound two-way, a read-only ` && + `product field, and a button that sends both values to the server.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + + page->simple_form( + title = `Form Title` + editable = abap_true + )->content( `form` + )->label( `quantity` + )->input( client->_bind_edit( quantity ) + )->label( `product` + )->input( + value = product + enabled = abap_false + )->button( + text = `post` + press = client->_event( `BUTTON_POST` ) ). client->view_display( view->stringify( ) ). ELSEIF client->check_on_event( `BUTTON_POST` ). diff --git a/src/01/01/z2ui5_cl_demo_app_004.clas.abap b/src/01/01/z2ui5_cl_demo_app_004.clas.abap index 36425fca..43d5372c 100644 --- a/src/01/01/z2ui5_cl_demo_app_004.clas.abap +++ b/src/01/01/z2ui5_cl_demo_app_004.clas.abap @@ -70,6 +70,13 @@ CLASS z2ui5_cl_demo_app_004 IMPLEMENTATION. navbuttonpress = client->_event_nav_app_leave( ) shownavbutton = client->check_app_prev_stack( ) ). + page->message_strip( + text = `Controller basics: the buttons trigger a server roundtrip, restart the app, ` && + `switch to a second view, or raise an uncaught error.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + page->grid( `L6 M12 S12` )->content( `layout` )->simple_form( diff --git a/src/01/01/z2ui5_cl_demo_app_012.clas.abap b/src/01/01/z2ui5_cl_demo_app_012.clas.abap index c5ce174d..d99e9904 100644 --- a/src/01/01/z2ui5_cl_demo_app_012.clas.abap +++ b/src/01/01/z2ui5_cl_demo_app_012.clas.abap @@ -87,6 +87,13 @@ CLASS z2ui5_cl_demo_app_012 IMPLEMENTATION. navbuttonpress = client->_event_nav_app_leave( ) shownavbutton = client->check_app_prev_stack( ) ). + page->message_strip( + text = `Shows different ways to open a popup - inside the same app or as a sub-app - ` && + `and how the background view is kept, destroyed or re-rendered.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + DATA(grid) = page->grid( `L7 M12 S12` )->content( `layout` )->simple_form( `Popup in same App` )->content( `form` )->label( `Demo` diff --git a/src/01/01/z2ui5_cl_demo_app_020.clas.abap b/src/01/01/z2ui5_cl_demo_app_020.clas.abap index 4288a7fe..3358a0fc 100644 --- a/src/01/01/z2ui5_cl_demo_app_020.clas.abap +++ b/src/01/01/z2ui5_cl_demo_app_020.clas.abap @@ -49,19 +49,28 @@ CLASS z2ui5_cl_demo_app_020 IMPLEMENTATION. RETURN. ENDCASE. - client->popup_display( z2ui5_cl_xml_view=>factory_popup( - )->dialog( `abap2UI5 - Popup to decide` - )->vbox( - )->text( text )->get_parent( - )->buttons( - )->button( - text = cancel_text - press = client->_event( cancel_event ) - )->button( - text = confirm_text - press = client->_event( confirm_event ) - type = `Emphasized` - )->stringify( ) ). + DATA(popup) = z2ui5_cl_xml_view=>factory_popup( ). + DATA(dialog) = popup->dialog( `abap2UI5 - Popup to decide` ). + + dialog->message_strip( + text = `A reusable decision popup opened as a sub-app: its text, button labels and events ` && + `are passed in by the caller, and the pressed event is sent back.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + + dialog->vbox( + )->text( text )->get_parent( + )->buttons( + )->button( + text = cancel_text + press = client->_event( cancel_event ) + )->button( + text = confirm_text + press = client->_event( confirm_event ) + type = `Emphasized` ). + + client->popup_display( popup->stringify( ) ). ENDMETHOD. diff --git a/src/01/01/z2ui5_cl_demo_app_024.clas.abap b/src/01/01/z2ui5_cl_demo_app_024.clas.abap index e90455e7..1088512a 100644 --- a/src/01/01/z2ui5_cl_demo_app_024.clas.abap +++ b/src/01/01/z2ui5_cl_demo_app_024.clas.abap @@ -77,12 +77,20 @@ CLASS Z2UI5_CL_DEMO_APP_024 IMPLEMENTATION. METHOD view_display. DATA(view) = z2ui5_cl_xml_view=>factory( ). - view->shell( + DATA(page) = view->shell( )->page( title = `abap2UI5 - flow logic - APP 01` navbuttonpress = client->_event_nav_app_leave( ) - shownavbutton = client->check_app_prev_stack( ) - )->grid( `L6 M12 S12` + shownavbutton = client->check_app_prev_stack( ) ). + + page->message_strip( + text = `App-to-app navigation: calls a second app in different ways - open a view, raise ` && + `an event or pass data - and reads the input it returns.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + + page->grid( `L6 M12 S12` )->content( `layout` )->simple_form( `Controller` )->content( `form` diff --git a/src/01/01/z2ui5_cl_demo_app_025.clas.abap b/src/01/01/z2ui5_cl_demo_app_025.clas.abap index e7441102..4531cf19 100644 --- a/src/01/01/z2ui5_cl_demo_app_025.clas.abap +++ b/src/01/01/z2ui5_cl_demo_app_025.clas.abap @@ -80,6 +80,13 @@ CLASS z2ui5_cl_demo_app_025 IMPLEMENTATION. navbuttonpress = client->_event_nav_app_leave( ) shownavbutton = client->check_app_prev_stack( ) ). + page->message_strip( + text = `The second app in the app-to-app flow: it reads the caller's data, returns to it ` && + `optionally raising an event, and switches between two views.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + CASE show_view. WHEN `MAIN` OR ``. diff --git a/src/01/01/z2ui5_cl_demo_app_026.clas.abap b/src/01/01/z2ui5_cl_demo_app_026.clas.abap index d8aaf6b1..decd1723 100644 --- a/src/01/01/z2ui5_cl_demo_app_026.clas.abap +++ b/src/01/01/z2ui5_cl_demo_app_026.clas.abap @@ -81,12 +81,20 @@ CLASS z2ui5_cl_demo_app_026 IMPLEMENTATION. METHOD view_display. DATA(view) = z2ui5_cl_xml_view=>factory( ). - view->shell( + DATA(page) = view->shell( )->page( title = `abap2UI5 - Popover Examples` navbuttonpress = client->_event_nav_app_leave( ) - shownavbutton = client->check_app_prev_stack( ) - )->simple_form( `Popover` + shownavbutton = client->check_app_prev_stack( ) ). + + page->message_strip( + text = `Popover demo: choose a placement with the segmented button, then open a popover ` && + `anchored to a control, with confirm and cancel actions.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + + page->simple_form( `Popover` )->content( `form` )->title( `Input` )->label( `Link` diff --git a/src/01/01/z2ui5_cl_demo_app_027.clas.abap b/src/01/01/z2ui5_cl_demo_app_027.clas.abap index 56963804..7f8d8d6d 100644 --- a/src/01/01/z2ui5_cl_demo_app_027.clas.abap +++ b/src/01/01/z2ui5_cl_demo_app_027.clas.abap @@ -57,14 +57,22 @@ CLASS Z2UI5_CL_DEMO_APP_027 IMPLEMENTATION. bind_input52 = client->_bind( val = input52 path = abap_true ). DATA(view) = z2ui5_cl_xml_view=>factory( ). - DATA(form) = view->shell( + DATA(page) = view->shell( )->page( title = `abap2UI5 - Binding Syntax` navbuttonpress = client->_event_nav_app_leave( ) - shownavbutton = client->check_app_prev_stack( ) - )->simple_form( - title = `Binding Syntax` - editable = abap_true + shownavbutton = client->check_app_prev_stack( ) ). + + page->message_strip( + text = `Advanced binding syntax: expression binding, typed bindings, conditional enabling ` && + `with RegExp checks, and composite (parts) bindings.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + + DATA(form) = page->simple_form( + title = `Binding Syntax` + editable = abap_true )->content( `form` ). form->title( `Expression Binding` diff --git a/src/01/01/z2ui5_cl_demo_app_047.clas.abap b/src/01/01/z2ui5_cl_demo_app_047.clas.abap index dea4a054..e1389476 100644 --- a/src/01/01/z2ui5_cl_demo_app_047.clas.abap +++ b/src/01/01/z2ui5_cl_demo_app_047.clas.abap @@ -55,6 +55,14 @@ CLASS Z2UI5_CL_DEMO_APP_047 IMPLEMENTATION. title = `abap2UI5 - Integer and Decimals` navbuttonpress = client->_event_nav_app_leave( ) shownavbutton = client->check_app_prev_stack( ) ). + + page->message_strip( + text = `Numeric and date/time binding: integer and decimal fields use automatic type ` && + `conversion, buttons calculate the sums, and a growing table lists the values.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + page->simple_form( title = `Integer and Decimals` editable = abap_true )->content( `form` diff --git a/src/01/01/z2ui5_cl_demo_app_052.clas.abap b/src/01/01/z2ui5_cl_demo_app_052.clas.abap index e55e4907..9f2fe84d 100644 --- a/src/01/01/z2ui5_cl_demo_app_052.clas.abap +++ b/src/01/01/z2ui5_cl_demo_app_052.clas.abap @@ -72,6 +72,13 @@ CLASS z2ui5_cl_demo_app_052 IMPLEMENTATION. navbuttonpress = client->_event_nav_app_leave( ) shownavbutton = client->check_app_prev_stack( ) ). + page->message_strip( + text = `List report layout: a dynamic page with a table whose product links open a popover ` && + `showing details for the selected row.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + page = page->dynamic_page( headerexpanded = abap_true ). DATA(cont) = page->content( `f` ). diff --git a/src/01/01/z2ui5_cl_demo_app_061.clas.abap b/src/01/01/z2ui5_cl_demo_app_061.clas.abap index 6c864c9e..fbea1e82 100644 --- a/src/01/01/z2ui5_cl_demo_app_061.clas.abap +++ b/src/01/01/z2ui5_cl_demo_app_061.clas.abap @@ -30,6 +30,13 @@ CLASS Z2UI5_CL_DEMO_APP_061 IMPLEMENTATION. FIELD-SYMBOLS TYPE table. ASSIGN t_tab->* TO . + page->message_strip( + text = `A table typed dynamically at runtime via RTTI from a DDIC table type, with editable ` && + `multi-select rows bound directly to the dynamically created data.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + DATA(tab) = page->table( items = client->_bind_edit( ) mode = `MultiSelect` diff --git a/src/01/01/z2ui5_cl_demo_app_065.clas.abap b/src/01/01/z2ui5_cl_demo_app_065.clas.abap index 2fd41ced..9a345846 100644 --- a/src/01/01/z2ui5_cl_demo_app_065.clas.abap +++ b/src/01/01/z2ui5_cl_demo_app_065.clas.abap @@ -28,6 +28,13 @@ CLASS z2ui5_cl_demo_app_065 IMPLEMENTATION. )->link( )->get_parent( ). + page->message_strip( + text = `A main view with a nested view inside: the buttons re-render everything, only the ` && + `main view, only the nested view, or refresh just the nested view's model.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + page->content( )->button( text = `Rerender all` press = client->_event( `ALL` ) diff --git a/src/01/01/z2ui5_cl_demo_app_067.clas.abap b/src/01/01/z2ui5_cl_demo_app_067.clas.abap index 429843ac..52e32177 100644 --- a/src/01/01/z2ui5_cl_demo_app_067.clas.abap +++ b/src/01/01/z2ui5_cl_demo_app_067.clas.abap @@ -30,6 +30,13 @@ CLASS Z2UI5_CL_DEMO_APP_067 IMPLEMENTATION. navbuttonpress = client->_event_nav_app_leave( ) shownavbutton = client->check_app_prev_stack( ) ). + page->message_strip( + text = `Formats amounts with the sap.ui.model.type.Currency type and its format options, ` && + `and shows how to strip the leading zeros from a numeric field.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + page->simple_form( title = `Currency` editable = abap_true )->content( `form` diff --git a/src/01/01/z2ui5_cl_demo_app_071.clas.abap b/src/01/01/z2ui5_cl_demo_app_071.clas.abap index a37b6871..e77b9f4f 100644 --- a/src/01/01/z2ui5_cl_demo_app_071.clas.abap +++ b/src/01/01/z2ui5_cl_demo_app_071.clas.abap @@ -49,31 +49,39 @@ CLASS Z2UI5_CL_DEMO_APP_071 IMPLEMENTATION. ENDDO. DATA(view) = z2ui5_cl_xml_view=>factory( ). - client->view_display( view->shell( - )->page( - title = `abap2UI5 - First Example` - navbuttonpress = client->_event_nav_app_leave( ) - shownavbutton = client->check_app_prev_stack( ) - )->simple_form( title = `Form Title` editable = abap_true - )->content( `form` - )->title( `Input` - )->label( `Link` - )->label( `setSizeLimit` - )->input( value = client->_bind_edit( mv_set_size_limit ) - )->button( - text = `update size limit` - press = client->_event( val = `UPDATE` ) - )->label( `Number of Entries` - )->input( value = client->_bind_edit( mv_combo_number ) - )->button( - text = `update number entries` - press = client->_event( val = `UPDATE_MODEL` ) - )->label( `demo` - )->combobox( items = client->_bind( t_combo ) - )->item( key = `{KEY}` text = `{TEXT}` - )->get_parent( )->get_parent( - - )->stringify( ) ). + + DATA(page) = view->shell( + )->page( + title = `abap2UI5 - First Example` + navbuttonpress = client->_event_nav_app_leave( ) + shownavbutton = client->check_app_prev_stack( ) ). + + page->message_strip( + text = `A ComboBox bound to a large internal table: adjust the model's setSizeLimit to ` && + `control how many of the entries the control actually renders.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + + page->simple_form( title = `Form Title` editable = abap_true + )->content( `form` + )->title( `Input` + )->label( `Link` + )->label( `setSizeLimit` + )->input( client->_bind_edit( mv_set_size_limit ) + )->button( + text = `update size limit` + press = client->_event( val = `UPDATE` ) + )->label( `Number of Entries` + )->input( client->_bind_edit( mv_combo_number ) + )->button( + text = `update number entries` + press = client->_event( val = `UPDATE_MODEL` ) + )->label( `demo` + )->combobox( items = client->_bind( t_combo ) + )->item( key = `{KEY}` text = `{TEXT}` ). + + client->view_display( view->stringify( ) ). ENDMETHOD. ENDCLASS. diff --git a/src/01/01/z2ui5_cl_demo_app_081.clas.abap b/src/01/01/z2ui5_cl_demo_app_081.clas.abap index 3af7068d..1acc4a17 100644 --- a/src/01/01/z2ui5_cl_demo_app_081.clas.abap +++ b/src/01/01/z2ui5_cl_demo_app_081.clas.abap @@ -86,12 +86,21 @@ CLASS z2ui5_cl_demo_app_081 IMPLEMENTATION. METHOD view_display. DATA(view) = z2ui5_cl_xml_view=>factory( ). - view->shell( - )->page( - title = `abap2UI5 - Popover with List` - navbuttonpress = client->_event_nav_app_leave( ) - shownavbutton = client->check_app_prev_stack( ) - )->simple_form( `Popover` + + DATA(page) = view->shell( + )->page( + title = `abap2UI5 - Popover with List` + navbuttonpress = client->_event_nav_app_leave( ) + shownavbutton = client->check_app_prev_stack( ) ). + + page->message_strip( + text = `Opens a Popover anchored to a button, showing a selectable list inside it; the ` && + `segmented button chooses on which side the popover appears.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + + page->simple_form( `Popover` )->content( `form` )->title( `Input` )->label( `Link` diff --git a/src/01/01/z2ui5_cl_demo_app_097.clas.abap b/src/01/01/z2ui5_cl_demo_app_097.clas.abap index ec078e7d..55a661b8 100644 --- a/src/01/01/z2ui5_cl_demo_app_097.clas.abap +++ b/src/01/01/z2ui5_cl_demo_app_097.clas.abap @@ -77,6 +77,13 @@ CLASS z2ui5_cl_demo_app_097 IMPLEMENTATION. navbuttonpress = client->_event_nav_app_leave( ) shownavbutton = client->check_app_prev_stack( ) ). + page->message_strip( + text = `A master-detail screen built with FlexibleColumnLayout: select a list row and its ` && + `detail opens in a second column as a nested view with a table.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + DATA(col_layout) = page->flexible_column_layout( layout = client->_bind_edit( mv_layout ) id = `test` ). diff --git a/src/01/01/z2ui5_cl_demo_app_098.clas.abap b/src/01/01/z2ui5_cl_demo_app_098.clas.abap index bd2c8df1..13a75888 100644 --- a/src/01/01/z2ui5_cl_demo_app_098.clas.abap +++ b/src/01/01/z2ui5_cl_demo_app_098.clas.abap @@ -103,6 +103,13 @@ CLASS z2ui5_cl_demo_app_098 IMPLEMENTATION. navbuttonpress = client->_event_nav_app_leave( ) shownavbutton = client->check_app_prev_stack( ) ). + page->message_strip( + text = `A three-column FlexibleColumnLayout: select a row to open the detail column, then ` && + `navigate on to open a third, deeply nested column.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + DATA(col_layout) = page->flexible_column_layout( layout = client->_bind_edit( mv_layout ) id = `test` ). diff --git a/src/01/01/z2ui5_cl_demo_app_104.clas.abap b/src/01/01/z2ui5_cl_demo_app_104.clas.abap index 2fc85bdc..ad335ba0 100644 --- a/src/01/01/z2ui5_cl_demo_app_104.clas.abap +++ b/src/01/01/z2ui5_cl_demo_app_104.clas.abap @@ -86,6 +86,13 @@ CLASS z2ui5_cl_demo_app_104 IMPLEMENTATION. navbuttonpress = client->_event_nav_app_leave( ) shownavbutton = client->check_app_prev_stack( ) ). + page->message_strip( + text = `Selecting a list row instantiates another abap2UI5 app by its class name and ` && + `embeds that app's own view into the detail column.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + DATA(col_layout) = page->flexible_column_layout( layout = client->_bind_edit( mv_layout ) id = `test` ). diff --git a/src/01/01/z2ui5_cl_demo_app_105.clas.abap b/src/01/01/z2ui5_cl_demo_app_105.clas.abap index 8911b01b..3953893b 100644 --- a/src/01/01/z2ui5_cl_demo_app_105.clas.abap +++ b/src/01/01/z2ui5_cl_demo_app_105.clas.abap @@ -23,6 +23,13 @@ CLASS z2ui5_cl_demo_app_105 IMPLEMENTATION. METHOD view_display. + mo_view_parent->message_strip( + text = `This is sub-app class 1: it has no page of its own - its view is injected into ` && + `a column of the calling parent app through a shared view reference.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + mo_view_parent->input( value = client->_bind_edit( mv_class_1 ) placeholder = `Input From Class 1` ). diff --git a/src/01/01/z2ui5_cl_demo_app_109.clas.abap b/src/01/01/z2ui5_cl_demo_app_109.clas.abap index 95d2641e..bfc77e8f 100644 --- a/src/01/01/z2ui5_cl_demo_app_109.clas.abap +++ b/src/01/01/z2ui5_cl_demo_app_109.clas.abap @@ -67,12 +67,21 @@ CLASS z2ui5_cl_demo_app_109 IMPLEMENTATION. METHOD view_display. DATA(view) = z2ui5_cl_xml_view=>factory( ). - view->shell( - )->page( - title = `abap2UI5 - Popover Quickview Examples` - navbuttonpress = client->_event_nav_app_leave( ) - shownavbutton = client->check_app_prev_stack( ) - )->simple_form( `QuickView Popover` + + DATA(page) = view->shell( + )->page( + title = `abap2UI5 - Popover Quickview Examples` + navbuttonpress = client->_event_nav_app_leave( ) + shownavbutton = client->check_app_prev_stack( ) ). + + page->message_strip( + text = `Opens a QuickView popover, a compact contact card with grouped fields and links, ` && + `anchored to a button; the segmented button sets its placement.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + + page->simple_form( `QuickView Popover` )->content( `form` )->title( `QuickView Popover` )->label( `placement` diff --git a/src/01/01/z2ui5_cl_demo_app_112.clas.abap b/src/01/01/z2ui5_cl_demo_app_112.clas.abap index 22df4a0c..f49edc0a 100644 --- a/src/01/01/z2ui5_cl_demo_app_112.clas.abap +++ b/src/01/01/z2ui5_cl_demo_app_112.clas.abap @@ -23,6 +23,13 @@ CLASS z2ui5_cl_demo_app_112 IMPLEMENTATION. METHOD view_display. + mo_view_parent->message_strip( + text = `This is sub-app class 2: it has no page of its own - its view is injected into ` && + `a column of the calling parent app through a shared view reference.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + mo_view_parent->input( value = client->_bind_edit( mv_class_2 ) placeholder = `Input From Class 2` ). diff --git a/src/01/01/z2ui5_cl_demo_app_122.clas.abap b/src/01/01/z2ui5_cl_demo_app_122.clas.abap index 8d21198a..a513ffff 100644 --- a/src/01/01/z2ui5_cl_demo_app_122.clas.abap +++ b/src/01/01/z2ui5_cl_demo_app_122.clas.abap @@ -67,53 +67,62 @@ CLASS Z2UI5_CL_DEMO_APP_122 IMPLEMENTATION. METHOD view_display. DATA(view) = z2ui5_cl_xml_view=>factory( ). - view->shell( + + DATA(page) = view->shell( )->page( title = `abap2UI5` navbuttonpress = client->_event_nav_app_leave( ) - shownavbutton = client->check_app_prev_stack( ) - )->simple_form( - title = `Information` - editable = abap_true - )->content( `form` - )->label( `device_browser` - )->input( client->_bind_edit( device_browser ) - )->label( `device_browser_version` - )->input( client->_bind_edit( device_browser_version ) - )->label( `device_os` - )->input( client->_bind_edit( device_os ) - )->label( `device_os_version` - )->input( client->_bind_edit( device_os_version ) - )->label( `device_systemtype` - )->input( client->_bind_edit( device_systemtype ) - )->label( `device_orientation` - )->input( client->_bind_edit( device_orientation ) - )->label( `device_height` - )->input( client->_bind_edit( device_height ) - )->label( `device_width` - )->input( client->_bind_edit( device_width ) - )->label( `device_phone` - )->input( client->_bind_edit( device_phone ) - )->label( `device_desktop` - )->input( client->_bind_edit( device_desktop ) - )->label( `device_tablet` - )->input( client->_bind_edit( device_tablet ) - )->label( `device_combi` - )->input( client->_bind_edit( device_combi ) - )->label( `device_touch` - )->input( client->_bind_edit( device_touch ) - )->label( `device_pointer` - )->input( client->_bind_edit( device_pointer ) - )->label( `device_retina` - )->input( client->_bind_edit( device_retina ) - )->label( `ui5_version` - )->input( client->_bind_edit( ui5_version ) - )->label( `ui5_theme` - )->input( client->_bind_edit( ui5_theme ) - )->label( `ui5_gav` - )->input( client->_bind_edit( ui5_gav ) - )->label( `ui5_build_timestamp` - )->input( client->_bind_edit( ui5_build_timestamp ) ). + shownavbutton = client->check_app_prev_stack( ) ). + + page->message_strip( + text = `Reads frontend information from the client - UI5 version and theme plus device, ` && + `OS and browser details - and shows each value in a read-only form.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + + page->simple_form( + title = `Information` + editable = abap_true + )->content( `form` + )->label( `device_browser` + )->input( client->_bind_edit( device_browser ) + )->label( `device_browser_version` + )->input( client->_bind_edit( device_browser_version ) + )->label( `device_os` + )->input( client->_bind_edit( device_os ) + )->label( `device_os_version` + )->input( client->_bind_edit( device_os_version ) + )->label( `device_systemtype` + )->input( client->_bind_edit( device_systemtype ) + )->label( `device_orientation` + )->input( client->_bind_edit( device_orientation ) + )->label( `device_height` + )->input( client->_bind_edit( device_height ) + )->label( `device_width` + )->input( client->_bind_edit( device_width ) + )->label( `device_phone` + )->input( client->_bind_edit( device_phone ) + )->label( `device_desktop` + )->input( client->_bind_edit( device_desktop ) + )->label( `device_tablet` + )->input( client->_bind_edit( device_tablet ) + )->label( `device_combi` + )->input( client->_bind_edit( device_combi ) + )->label( `device_touch` + )->input( client->_bind_edit( device_touch ) + )->label( `device_pointer` + )->input( client->_bind_edit( device_pointer ) + )->label( `device_retina` + )->input( client->_bind_edit( device_retina ) + )->label( `ui5_version` + )->input( client->_bind_edit( ui5_version ) + )->label( `ui5_theme` + )->input( client->_bind_edit( ui5_theme ) + )->label( `ui5_gav` + )->input( client->_bind_edit( ui5_gav ) + )->label( `ui5_build_timestamp` + )->input( client->_bind_edit( ui5_build_timestamp ) ). client->view_display( view->stringify( ) ). ENDMETHOD. diff --git a/src/01/01/z2ui5_cl_demo_app_126.clas.abap b/src/01/01/z2ui5_cl_demo_app_126.clas.abap index 09e7396d..6d719404 100644 --- a/src/01/01/z2ui5_cl_demo_app_126.clas.abap +++ b/src/01/01/z2ui5_cl_demo_app_126.clas.abap @@ -126,6 +126,13 @@ CLASS z2ui5_cl_demo_app_126 IMPLEMENTATION. page = mo_parent_view->get( `Page` ). ENDIF. + page->message_strip( + text = `This sample shows the ProgressIndicator control, which renders a ` && + `completion percentage as a labeled progress bar.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + page->label( `ProgressIndicator` )->progress_indicator( percentvalue = mv_perc displayvalue = `0,44GB of 32GB used` diff --git a/src/01/01/z2ui5_cl_demo_app_144.clas.abap b/src/01/01/z2ui5_cl_demo_app_144.clas.abap index 127a7bb2..17a0e8bf 100644 --- a/src/01/01/z2ui5_cl_demo_app_144.clas.abap +++ b/src/01/01/z2ui5_cl_demo_app_144.clas.abap @@ -30,6 +30,13 @@ CLASS z2ui5_cl_demo_app_144 IMPLEMENTATION. navbuttonpress = client->_event_nav_app_leave( ) shownavbutton = client->check_app_prev_stack( ) ). + page->message_strip( + text = `This sample demonstrates cell-level binding: each input is bound to one ` && + `cell of an internal table via tab_index, so edits target exactly that row and field.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + LOOP AT t_tab REFERENCE INTO DATA(lr_row). DATA(lv_tabix) = sy-tabix. page->input( client->_bind_edit( val = lr_row->title tab = t_tab tab_index = lv_tabix ) ). diff --git a/src/01/01/z2ui5_cl_demo_app_161.clas.abap b/src/01/01/z2ui5_cl_demo_app_161.clas.abap index 767bc509..37027ea4 100644 --- a/src/01/01/z2ui5_cl_demo_app_161.clas.abap +++ b/src/01/01/z2ui5_cl_demo_app_161.clas.abap @@ -63,14 +63,22 @@ CLASS z2ui5_cl_demo_app_161 IMPLEMENTATION. METHOD view_display. DATA(view) = z2ui5_cl_xml_view=>factory( ). - view->shell( + DATA(page) = view->shell( )->page( title = `abap2UI5 - Popup To Popup` navbuttonpress = client->_event_nav_app_leave( ) - shownavbutton = client->check_app_prev_stack( ) - )->button( - text = `Open Popup...` - press = client->_event( `POPUP` ) ). + shownavbutton = client->check_app_prev_stack( ) ). + + page->message_strip( + text = `This sample opens a popup from a button and then chains to a second popup ` && + `from within the first one.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + + page->button( + text = `Open Popup...` + press = client->_event( `POPUP` ) ). client->view_display( view->stringify( ) ). diff --git a/src/01/01/z2ui5_cl_demo_app_163.clas.abap b/src/01/01/z2ui5_cl_demo_app_163.clas.abap index 3e515f62..bb44c4b5 100644 --- a/src/01/01/z2ui5_cl_demo_app_163.clas.abap +++ b/src/01/01/z2ui5_cl_demo_app_163.clas.abap @@ -65,6 +65,13 @@ CLASS z2ui5_cl_demo_app_163 IMPLEMENTATION. navbuttonpress = client->_event_nav_app_leave( ) shownavbutton = client->check_app_prev_stack( ) ). + view->message_strip( + text = `This sample opens a Menu as a popover anchored to a button; choosing an ` && + `item shows the selected action in a MessageToast.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + DATA(vbox) = view->vbox( ). vbox->button( text = `Open Menu` diff --git a/src/01/01/z2ui5_cl_demo_app_166.clas.abap b/src/01/01/z2ui5_cl_demo_app_166.clas.abap index c0129a6e..fc2f9810 100644 --- a/src/01/01/z2ui5_cl_demo_app_166.clas.abap +++ b/src/01/01/z2ui5_cl_demo_app_166.clas.abap @@ -44,6 +44,13 @@ CLASS z2ui5_cl_demo_app_166 IMPLEMENTATION. navbuttonpress = client->_event_nav_app_leave( ) shownavbutton = client->check_app_prev_stack( ) ). + page->message_strip( + text = `This sample demonstrates structure-level binding: each input is bound to a ` && + `field of a flat structure, including fields pulled in via INCLUDE.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + page->input( client->_bind_edit( val = ms_struc-title ) ). page->input( client->_bind_edit( val = ms_struc-value ) ). page->input( client->_bind_edit( val = ms_struc-value2 ) ). diff --git a/src/01/01/z2ui5_cl_demo_app_167.clas.abap b/src/01/01/z2ui5_cl_demo_app_167.clas.abap index 5365996c..97543f05 100644 --- a/src/01/01/z2ui5_cl_demo_app_167.clas.abap +++ b/src/01/01/z2ui5_cl_demo_app_167.clas.abap @@ -27,6 +27,13 @@ CLASS Z2UI5_CL_DEMO_APP_167 IMPLEMENTATION. navbuttonpress = client->_event_nav_app_leave( ) shownavbutton = client->check_app_prev_stack( ) ). + page->message_strip( + text = `This sample shows how to pass extra arguments to an event via t_arg - fixed ` && + `values, model values, or client-side expressions - and read them in the backend.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + page->link( text = `More Infos..` target = `_blank` href = `https://sapui5.hana.ondemand.com/sdk/#/topic/b0fb4de7364f4bcbb053a99aa645affe` ). diff --git a/src/01/01/z2ui5_cl_demo_app_173.clas.abap b/src/01/01/z2ui5_cl_demo_app_173.clas.abap index e6d92eb1..6a646d0f 100644 --- a/src/01/01/z2ui5_cl_demo_app_173.clas.abap +++ b/src/01/01/z2ui5_cl_demo_app_173.clas.abap @@ -46,6 +46,13 @@ CLASS Z2UI5_CL_DEMO_APP_173 IMPLEMENTATION. navbuttonpress = client->_event_nav_app_leave( ) shownavbutton = client->check_app_prev_stack( ) ). + view->message_strip( + text = `This sample builds table columns and cells dynamically from a layout table ` && + `using template repeat, plus a template if/then/else that re-renders on a switch.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + view->table( client->_bind_edit( mt_data ) )->columns( )->template_repeat( list = `{template>/XX/MT_LAYOUT}` diff --git a/src/01/01/z2ui5_cl_demo_app_176.clas.abap b/src/01/01/z2ui5_cl_demo_app_176.clas.abap index b74b7f43..98f00dc3 100644 --- a/src/01/01/z2ui5_cl_demo_app_176.clas.abap +++ b/src/01/01/z2ui5_cl_demo_app_176.clas.abap @@ -48,6 +48,13 @@ CLASS z2ui5_cl_demo_app_176 IMPLEMENTATION. navbuttonpress = i_client->_event_nav_app_leave( ) shownavbutton = i_client->check_app_prev_stack( ) ). + page->message_strip( + text = `This sample renders a main view and then embeds a second view into it as ` && + `nested content via nest_view_display.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + i_client->view_display( lo_view->stringify( ) ). ENDMETHOD. diff --git a/src/01/01/z2ui5_cl_demo_app_197.clas.abap b/src/01/01/z2ui5_cl_demo_app_197.clas.abap index 63507272..c3830d1f 100644 --- a/src/01/01/z2ui5_cl_demo_app_197.clas.abap +++ b/src/01/01/z2ui5_cl_demo_app_197.clas.abap @@ -42,6 +42,13 @@ CLASS z2ui5_cl_demo_app_197 IMPLEMENTATION. navbuttonpress = client->_event_nav_app_leave( ) shownavbutton = client->check_app_prev_stack( ) ). + page->message_strip( + text = `This sample shows a list-report table with a FacetFilter: selecting products ` && + `filters the rows, and Reset restores the full list.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + DATA(facet) = page->facet_filter( id = `idFacetFilter` type = `Light` showpersonalization = abap_true diff --git a/src/01/01/z2ui5_cl_demo_app_381.clas.abap b/src/01/01/z2ui5_cl_demo_app_381.clas.abap index 9966d8ec..89a278d8 100644 --- a/src/01/01/z2ui5_cl_demo_app_381.clas.abap +++ b/src/01/01/z2ui5_cl_demo_app_381.clas.abap @@ -82,6 +82,13 @@ CLASS z2ui5_cl_demo_app_381 IMPLEMENTATION. navbuttonpress = client->_event_nav_app_leave( ) shownavbutton = client->check_app_prev_stack( ) ). + page->message_strip( + text = `This sample demonstrates MessageToast: configure the text, duration, position ` && + `and animation, then show a short, non-blocking toast notification.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + page->header_content( )->link( text = `UI5 Demo Kit` @@ -140,13 +147,6 @@ CLASS z2ui5_cl_demo_app_381 IMPLEMENTATION. type = `Emphasized` press = client->_event( `SHOW` ) ). - page->footer( - )->overflow_toolbar( - )->button( - text = `Back` - icon = `sap-icon://nav-back` - press = client->_event_nav_app_leave( ) ). - client->view_display( page->stringify( ) ). ENDMETHOD. diff --git a/src/01/01/z2ui5_cl_demo_app_382.clas.abap b/src/01/01/z2ui5_cl_demo_app_382.clas.abap index a97d92ed..14010b63 100644 --- a/src/01/01/z2ui5_cl_demo_app_382.clas.abap +++ b/src/01/01/z2ui5_cl_demo_app_382.clas.abap @@ -72,6 +72,13 @@ CLASS z2ui5_cl_demo_app_382 IMPLEMENTATION. navbuttonpress = client->_event_nav_app_leave( ) shownavbutton = client->check_app_prev_stack( ) ). + page->message_strip( + text = `This sample demonstrates MessageBox: open confirm, information, success, ` && + `warning, error, or a custom dialog with your own actions.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + page->header_content( )->link( text = `UI5 Demo Kit` @@ -94,10 +101,6 @@ CLASS z2ui5_cl_demo_app_382 IMPLEMENTATION. page->footer( )->overflow_toolbar( - )->button( - text = `Back` - icon = `sap-icon://nav-back` - press = client->_event_nav_app_leave( ) )->text( `Open Message Box:` )->toolbar_spacer( )->button( diff --git a/src/01/01/z2ui5_cl_demo_app_452.clas.abap b/src/01/01/z2ui5_cl_demo_app_452.clas.abap index 9b9d0e81..32b63c8f 100644 --- a/src/01/01/z2ui5_cl_demo_app_452.clas.abap +++ b/src/01/01/z2ui5_cl_demo_app_452.clas.abap @@ -134,6 +134,13 @@ CLASS z2ui5_cl_demo_app_452 IMPLEMENTATION. navbuttonpress = client->_event_nav_app_leave( ) shownavbutton = client->check_app_prev_stack( ) ). + page->message_strip( + text = `This sample demonstrates the MessageView control listing grouped messages by ` && + `severity; the same messages also appear in a dialog and a MessagePopover.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + page->header_content( )->link( text = `UI5 Demo Kit` diff --git a/src/01/02/z2ui5_cl_demo_app_006.clas.abap b/src/01/02/z2ui5_cl_demo_app_006.clas.abap index 4a06c38e..502bbcac 100644 --- a/src/01/02/z2ui5_cl_demo_app_006.clas.abap +++ b/src/01/02/z2ui5_cl_demo_app_006.clas.abap @@ -92,6 +92,13 @@ CLASS Z2UI5_CL_DEMO_APP_006 IMPLEMENTATION. navbuttonpress = client->_event_nav_app_leave( ) shownavbutton = client->check_app_prev_stack( ) ). + page->message_strip( + text = `A large table (10,000 rows) is rendered inside a ScrollContainer using growing / ` && + `scroll-to-load, with a sticky header toolbar offering sort buttons and a segmented button.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + DATA(tab) = page->scroll_container( height = `70%` vertical = abap_true diff --git a/src/01/02/z2ui5_cl_demo_app_011.clas.abap b/src/01/02/z2ui5_cl_demo_app_011.clas.abap index 31a22c13..280f848c 100644 --- a/src/01/02/z2ui5_cl_demo_app_011.clas.abap +++ b/src/01/02/z2ui5_cl_demo_app_011.clas.abap @@ -40,6 +40,13 @@ CLASS Z2UI5_CL_DEMO_APP_011 IMPLEMENTATION. shownavbutton = client->check_app_prev_stack( ) id = `test2` ). + page->message_strip( + text = `A MultiSelect table whose input cells switch between display and edit mode via the ` && + `toolbar, which also adds new rows and deletes the currently selected ones.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + DATA(tab) = page->table( items = |\{path: '{ client->_bind_edit( val = t_tab path = abap_true ) }', templateShareable: false\}| mode = `MultiSelect` diff --git a/src/01/02/z2ui5_cl_demo_app_019.clas.abap b/src/01/02/z2ui5_cl_demo_app_019.clas.abap index edc041c9..33f7d6a7 100644 --- a/src/01/02/z2ui5_cl_demo_app_019.clas.abap +++ b/src/01/02/z2ui5_cl_demo_app_019.clas.abap @@ -35,6 +35,13 @@ CLASS z2ui5_cl_demo_app_019 IMPLEMENTATION. navbuttonpress = client->_event_nav_app_leave( ) shownavbutton = client->check_app_prev_stack( ) ). + page->message_strip( + text = `A SegmentedButton switches the table's selection mode (None, Single, Multi) at ` && + `runtime; a second table below collects the rows selected in the first.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + page->segmented_button( selected_key = client->_bind_edit( sel_mode ) selection_change = client->_event( `BUTTON_SEGMENT_CHANGE` ) )->get( diff --git a/src/01/02/z2ui5_cl_demo_app_028.clas.abap b/src/01/02/z2ui5_cl_demo_app_028.clas.abap index bcef5ff3..2df0c0ec 100644 --- a/src/01/02/z2ui5_cl_demo_app_028.clas.abap +++ b/src/01/02/z2ui5_cl_demo_app_028.clas.abap @@ -97,6 +97,13 @@ CLASS z2ui5_cl_demo_app_028 IMPLEMENTATION. navbuttonpress = client->_event_nav_app_leave( ) shownavbutton = client->check_app_prev_stack( ) ). + page->message_strip( + text = `The list refreshes itself automatically: a client-side timer (follow_up_action) fires ` && + `every 2 seconds, appending a new entry on the server until three rows exist.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + page->list( headertext = `Data auto refresh (2 sec)` items = client->_bind( t_tab ) diff --git a/src/01/02/z2ui5_cl_demo_app_028.clas.xml b/src/01/02/z2ui5_cl_demo_app_028.clas.xml index 16030be5..7a84eb6f 100644 --- a/src/01/02/z2ui5_cl_demo_app_028.clas.xml +++ b/src/01/02/z2ui5_cl_demo_app_028.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_028 E - Timer - Wait n MS and call again the server + Timer - Wait n MS and call again the server (A) 1 X X diff --git a/src/01/02/z2ui5_cl_demo_app_045.clas.abap b/src/01/02/z2ui5_cl_demo_app_045.clas.abap index aa06d1cb..9f92b069 100644 --- a/src/01/02/z2ui5_cl_demo_app_045.clas.abap +++ b/src/01/02/z2ui5_cl_demo_app_045.clas.abap @@ -66,6 +66,13 @@ CLASS Z2UI5_CL_DEMO_APP_045 IMPLEMENTATION. )->link( )->get_parent( ). + page->message_strip( + text = `A growing, scrollable table filtered on the backend: entering a value in the form and ` && + `pressing filter deletes the non-matching rows server-side before re-rendering.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + page->simple_form( title = `Form Title` editable = abap_true )->content( `form` diff --git a/src/01/02/z2ui5_cl_demo_app_048.clas.abap b/src/01/02/z2ui5_cl_demo_app_048.clas.abap index 9c92d129..571b3cfe 100644 --- a/src/01/02/z2ui5_cl_demo_app_048.clas.abap +++ b/src/01/02/z2ui5_cl_demo_app_048.clas.abap @@ -56,6 +56,14 @@ CLASS z2ui5_cl_demo_app_048 IMPLEMENTATION. navbuttonpress = client->_event_nav_app_leave( ) shownavbutton = client->check_app_prev_stack( ) ). + + page->message_strip( + text = `A List of generic StandardListItems showing highlight bars, colored infoState and ` && + `wrap-character limits; the detail button and selection changes raise backend events with message boxes.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + page->list( headertext = `List Output` items = client->_bind_edit( t_tab ) diff --git a/src/01/02/z2ui5_cl_demo_app_053.clas.abap b/src/01/02/z2ui5_cl_demo_app_053.clas.abap index 85935cfa..2c0cc0db 100644 --- a/src/01/02/z2ui5_cl_demo_app_053.clas.abap +++ b/src/01/02/z2ui5_cl_demo_app_053.clas.abap @@ -67,6 +67,13 @@ CLASS z2ui5_cl_demo_app_053 IMPLEMENTATION. navbuttonpress = client->_event_nav_app_leave( ) shownavbutton = client->check_app_prev_stack( ) ). + page->message_strip( + text = `A search field triggers a backend filter on Enter or via the Go button; the matching ` && + `rows are computed server-side and the table is refreshed.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + DATA(vbox) = page->vbox( ). vbox->hbox( )->search_field( diff --git a/src/01/02/z2ui5_cl_demo_app_059.clas.abap b/src/01/02/z2ui5_cl_demo_app_059.clas.abap index 46450995..c278d0c0 100644 --- a/src/01/02/z2ui5_cl_demo_app_059.clas.abap +++ b/src/01/02/z2ui5_cl_demo_app_059.clas.abap @@ -86,6 +86,13 @@ CLASS Z2UI5_CL_DEMO_APP_059 IMPLEMENTATION. navbuttonpress = client->_event_nav_app_leave( ) shownavbutton = client->check_app_prev_stack( ) ). + page1->message_strip( + text = `The search field's livechange event sends every keystroke to the backend (multiple ` && + `parallel requests allowed) to live-filter the table as the user types.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + DATA(lo_box) = page1->vbox( )->text( `Search` )->search_field( width = `17.5rem` livechange = client->_event( diff --git a/src/01/02/z2ui5_cl_demo_app_064.clas.abap b/src/01/02/z2ui5_cl_demo_app_064.clas.abap index 24417ef6..690e0123 100644 --- a/src/01/02/z2ui5_cl_demo_app_064.clas.abap +++ b/src/01/02/z2ui5_cl_demo_app_064.clas.abap @@ -129,6 +129,13 @@ CLASS z2ui5_cl_demo_app_064 IMPLEMENTATION. shownavbutton = temp5 class = `sapUiContentPadding` ). + page1->message_strip( + text = `A ProgressIndicator driven from the backend: pressing Load runs a WAIT-delayed server ` && + `step and re-arms a client timer (follow_up_action), advancing the bar in 25% steps until it completes.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + layout = page1->vertical_layout( class = `sapuicontentpadding` width = `100%` ). layout->vbox( )->progress_indicator( diff --git a/src/01/02/z2ui5_cl_demo_app_064.clas.xml b/src/01/02/z2ui5_cl_demo_app_064.clas.xml index 2cc8dd06..2788eb37 100644 --- a/src/01/02/z2ui5_cl_demo_app_064.clas.xml +++ b/src/01/02/z2ui5_cl_demo_app_064.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_064 E - Timer - Loading Indicator with WAIT UP Backend + Timer - Loading Indicator with WAIT UP Backend (A) 1 X X diff --git a/src/01/02/z2ui5_cl_demo_app_070.clas.abap b/src/01/02/z2ui5_cl_demo_app_070.clas.abap index 69f6a975..e0069001 100644 --- a/src/01/02/z2ui5_cl_demo_app_070.clas.abap +++ b/src/01/02/z2ui5_cl_demo_app_070.clas.abap @@ -146,6 +146,13 @@ CLASS Z2UI5_CL_DEMO_APP_070 IMPLEMENTATION. shownavbutton = client->check_app_prev_stack( ) class = `sapUiContentPadding` ). + page1->message_strip( + text = `A full sap.ui.table.Table inside a DynamicPage: fixed column, row-action buttons, ` && + `progress-indicator and currency cells, plus backend-driven search, sort and filter events.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + DATA(page) = page1->dynamic_page( headerexpanded = abap_true ). DATA(header_title) = page->title( ns = `f` )->get( )->dynamic_page_title( ). diff --git a/src/01/02/z2ui5_cl_demo_app_073.clas.abap b/src/01/02/z2ui5_cl_demo_app_073.clas.abap index 7549fe84..97767952 100644 --- a/src/01/02/z2ui5_cl_demo_app_073.clas.abap +++ b/src/01/02/z2ui5_cl_demo_app_073.clas.abap @@ -18,18 +18,27 @@ CLASS z2ui5_cl_demo_app_073 IMPLEMENTATION. DATA(view) = z2ui5_cl_xml_view=>factory( ). - client->view_display( view->shell( - )->page( - title = `abap2UI5 - Open New Tab` - navbuttonpress = client->_event_nav_app_leave( ) - shownavbutton = client->check_app_prev_stack( ) - )->simple_form( title = `Form Title` - editable = abap_true - )->content( `form` - )->button( - text = `open new tab` - press = client->_event( val = `BUTTON_OPEN_NEW_TAB` ) - )->stringify( ) ). + DATA(page) = view->shell( )->page( + title = `abap2UI5 - Open New Tab` + navbuttonpress = client->_event_nav_app_leave( ) + shownavbutton = client->check_app_prev_stack( ) ). + + page->message_strip( + text = `Press the button to open the app's own URL in a new browser tab: the backend builds the ` && + `URL and the open_new_tab front-end action launches it.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + + page->simple_form( + title = `Form Title` + editable = abap_true + )->content( `form` + )->button( + text = `open new tab` + press = client->_event( val = `BUTTON_OPEN_NEW_TAB` ) ). + + client->view_display( view->stringify( ) ). ENDMETHOD. diff --git a/src/01/02/z2ui5_cl_demo_app_073.clas.xml b/src/01/02/z2ui5_cl_demo_app_073.clas.xml index df1ce627..fd861fb0 100644 --- a/src/01/02/z2ui5_cl_demo_app_073.clas.xml +++ b/src/01/02/z2ui5_cl_demo_app_073.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_073 E - URL - New Tab Open an URL in a new tab + Browser - Open an URL in a new tab (A) 1 X X diff --git a/src/01/02/z2ui5_cl_demo_app_074.clas.abap b/src/01/02/z2ui5_cl_demo_app_074.clas.abap index 6eefe942..f305758b 100644 --- a/src/01/02/z2ui5_cl_demo_app_074.clas.abap +++ b/src/01/02/z2ui5_cl_demo_app_074.clas.abap @@ -78,6 +78,13 @@ CLASS z2ui5_cl_demo_app_074 IMPLEMENTATION. navbuttonpress = client->_event_nav_app_leave( ) shownavbutton = client->check_app_prev_stack( ) ). + page->message_strip( + text = `The file_uploader custom control returns the picked file as a base64 data URL; the backend ` && + `strips the prefix, decodes the payload and shows the file content in a message box.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + IF table IS NOT INITIAL. FIELD-SYMBOLS TYPE table. diff --git a/src/01/02/z2ui5_cl_demo_app_078.clas.abap b/src/01/02/z2ui5_cl_demo_app_078.clas.abap index f614a725..f853a218 100644 --- a/src/01/02/z2ui5_cl_demo_app_078.clas.abap +++ b/src/01/02/z2ui5_cl_demo_app_078.clas.abap @@ -37,6 +37,13 @@ CLASS Z2UI5_CL_DEMO_APP_078 IMPLEMENTATION. navbuttonpress = client->_event_nav_app_leave( ) shownavbutton = client->check_app_prev_stack( ) ). + view->message_strip( + text = `The multiinput_ext custom control extends a sap.m.MultiInput so that added and removed ` && + `tokens are reported back to ABAP, where the token table and the linked list are updated.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + view->_z2ui5( )->multiinput_ext( addedtokens = client->_bind_edit( mt_tokens_added ) removedtokens = client->_bind_edit( mt_tokens_removed ) diff --git a/src/01/02/z2ui5_cl_demo_app_088.clas.abap b/src/01/02/z2ui5_cl_demo_app_088.clas.abap index cf8921fd..1a53b82c 100644 --- a/src/01/02/z2ui5_cl_demo_app_088.clas.abap +++ b/src/01/02/z2ui5_cl_demo_app_088.clas.abap @@ -55,6 +55,13 @@ CLASS z2ui5_cl_demo_app_088 IMPLEMENTATION. title = `abap2UI5 - Sample: Nav Container` )->content( ). + page->message_strip( + text = `Selecting a tab in the IconTabHeader switches the NavContainer page on the client via the ` && + `nav_container_to front-end action, without a backend roundtrip.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + page->icon_tab_header( selectedkey = client->_bind_edit( mv_selected_key ) select = client->_event_client( val = client->cs_event-nav_container_to t_arg = VALUE #( ( `NavCon` ) ( `${$parameters>/selectedKey}` ) ) ) mode = `Inline` diff --git a/src/01/02/z2ui5_cl_demo_app_120.clas.abap b/src/01/02/z2ui5_cl_demo_app_120.clas.abap index d426cf0e..22d254a7 100644 --- a/src/01/02/z2ui5_cl_demo_app_120.clas.abap +++ b/src/01/02/z2ui5_cl_demo_app_120.clas.abap @@ -63,12 +63,20 @@ CLASS z2ui5_cl_demo_app_120 IMPLEMENTATION. DATA(view) = z2ui5_cl_xml_view=>factory( ). - view->shell( + DATA(page) = view->shell( )->page( title = `abap2UI5 - Device Capabilities` navbuttonpress = client->_event_nav_app_leave( ) - shownavbutton = client->check_app_prev_stack( ) - )->_z2ui5( )->geolocation( + shownavbutton = client->check_app_prev_stack( ) ). + + page->message_strip( + text = `The geolocation custom control reads the device position from the browser and binds ` && + `longitude, latitude, altitude, accuracy and speed into the read-only form below.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + + page->_z2ui5( )->geolocation( finished = client->_event( `GEOLOCATION_LOADED` ) error = client->_event( val = `GEOLOCATION_ERROR` t_arg = VALUE #( ( `${$parameters>/code}` ) diff --git a/src/01/02/z2ui5_cl_demo_app_125.clas.abap b/src/01/02/z2ui5_cl_demo_app_125.clas.abap index 645687de..c2ff7016 100644 --- a/src/01/02/z2ui5_cl_demo_app_125.clas.abap +++ b/src/01/02/z2ui5_cl_demo_app_125.clas.abap @@ -19,20 +19,28 @@ CLASS z2ui5_cl_demo_app_125 IMPLEMENTATION. IF client->check_on_init( ). DATA(view) = z2ui5_cl_xml_view=>factory( ). - view->shell( + DATA(page) = view->shell( )->page( title = `abap2UI5 - Change Browser Title` navbuttonpress = client->_event_nav_app_leave( ) - shownavbutton = client->check_app_prev_stack( ) - )->simple_form( - title = `Form Title` - editable = abap_true - )->content( `form` - )->label( `title` - )->input( client->_bind_edit( title ) - )->button( - text = `Set Title` - press = client->_event( `SET_TITLE` ) ). + shownavbutton = client->check_app_prev_stack( ) ). + + page->message_strip( + text = `Enter a title and press the button to run the set_title front-end action, which updates ` && + `the browser tab title (document.title) without reloading the page.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + + page->simple_form( + title = `Form Title` + editable = abap_true + )->content( `form` + )->label( `title` + )->input( client->_bind_edit( title ) + )->button( + text = `Set Title` + press = client->_event( `SET_TITLE` ) ). client->view_display( view->stringify( ) ). ELSEIF client->check_on_event( `SET_TITLE` ). diff --git a/src/01/02/z2ui5_cl_demo_app_125.clas.xml b/src/01/02/z2ui5_cl_demo_app_125.clas.xml index 9e8e5c5f..cb7de4df 100644 --- a/src/01/02/z2ui5_cl_demo_app_125.clas.xml +++ b/src/01/02/z2ui5_cl_demo_app_125.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_125 E - Browser - Title + Browser - Title (A) 1 X X diff --git a/src/01/02/z2ui5_cl_demo_app_133.clas.abap b/src/01/02/z2ui5_cl_demo_app_133.clas.abap index 09c55b07..2052a585 100644 --- a/src/01/02/z2ui5_cl_demo_app_133.clas.abap +++ b/src/01/02/z2ui5_cl_demo_app_133.clas.abap @@ -25,15 +25,23 @@ CLASS Z2UI5_CL_DEMO_APP_133 IMPLEMENTATION. DATA(view) = z2ui5_cl_xml_view=>factory( ). - view->shell( + DATA(page) = view->shell( )->page( title = `abap2UI5 - Focus` navbuttonpress = client->_event_nav_app_leave( ) - shownavbutton = client->check_app_prev_stack( ) - )->simple_form( - title = `Focus & Cursor` - editable = abap_true - )->content( `form` + shownavbutton = client->check_app_prev_stack( ) ). + + page->message_strip( + text = `Pressing a button runs the set_focus front-end action, which moves keyboard focus to the ` && + `target input and selects the text between the given start and end positions.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + + page->simple_form( + title = `Focus & Cursor` + editable = abap_true + )->content( `form` )->title( `Input` )->label( `Sel_Start` )->input( client->_bind_edit( selstart ) diff --git a/src/01/02/z2ui5_cl_demo_app_133.clas.xml b/src/01/02/z2ui5_cl_demo_app_133.clas.xml index 0ad7714b..d4acc731 100644 --- a/src/01/02/z2ui5_cl_demo_app_133.clas.xml +++ b/src/01/02/z2ui5_cl_demo_app_133.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_133 E - Focus - Set Focus in Textfield + Focus - Set Focus in Textfield (A) 1 X X diff --git a/src/01/02/z2ui5_cl_demo_app_143.clas.abap b/src/01/02/z2ui5_cl_demo_app_143.clas.abap index 05432c3e..21b6721c 100644 --- a/src/01/02/z2ui5_cl_demo_app_143.clas.abap +++ b/src/01/02/z2ui5_cl_demo_app_143.clas.abap @@ -63,6 +63,13 @@ CLASS z2ui5_cl_demo_app_143 IMPLEMENTATION. navbuttonpress = client->_event_nav_app_leave( ) shownavbutton = client->check_app_prev_stack( ) ). + page1->message_strip( + text = `This sample uses the abap2UI5 uitableext custom control so the active sap.ui.table column ` && + `filters are preserved across a view model update instead of being reset.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + DATA(page) = page1->dynamic_page( headerexpanded = abap_true headerpinned = abap_true ). page1->_z2ui5( )->uitableext( `Table1` ). diff --git a/src/01/02/z2ui5_cl_demo_app_143.clas.xml b/src/01/02/z2ui5_cl_demo_app_143.clas.xml index e74b077b..63d5b8d3 100644 --- a/src/01/02/z2ui5_cl_demo_app_143.clas.xml +++ b/src/01/02/z2ui5_cl_demo_app_143.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_143 E - ui.Table - Default Filtering + ui.Table - Default Filtering (C) 1 X X diff --git a/src/01/02/z2ui5_cl_demo_app_160.clas.abap b/src/01/02/z2ui5_cl_demo_app_160.clas.abap index c8bf5181..209cedd7 100644 --- a/src/01/02/z2ui5_cl_demo_app_160.clas.abap +++ b/src/01/02/z2ui5_cl_demo_app_160.clas.abap @@ -111,6 +111,13 @@ CLASS z2ui5_cl_demo_app_160 IMPLEMENTATION. )->link( )->get_parent( ). + page->message_strip( + text = `Pressing ENTER in a sap.ui.table cell input fires a backend event that carries the cell id, ` && + `its row index and the parent row id as event arguments, shown here in a message box.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + page->text( `Make an input and press ENTER` ). DATA(table) = page->flex_box( height = `85vh` diff --git a/src/01/02/z2ui5_cl_demo_app_170.clas.abap b/src/01/02/z2ui5_cl_demo_app_170.clas.abap index 07beeb26..51fb15f4 100644 --- a/src/01/02/z2ui5_cl_demo_app_170.clas.abap +++ b/src/01/02/z2ui5_cl_demo_app_170.clas.abap @@ -102,14 +102,22 @@ CLASS z2ui5_cl_demo_app_170 IMPLEMENTATION. METHOD view_display. DATA(view) = z2ui5_cl_xml_view=>factory( ). - view->shell( + DATA(page) = view->shell( )->page( title = `abap2UI5 - Popup To Popup` navbuttonpress = client->_event_nav_app_leave( ) - shownavbutton = client->check_app_prev_stack( ) - )->button( - text = `Open Popup...` - press = client->_event( `POPUP` ) ). + shownavbutton = client->check_app_prev_stack( ) ). + + page->message_strip( + text = `Press the button to open a dialog; from there a second popup can be opened and navigated ` && + `back to the first, demonstrating popup-to-popup navigation.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + + page->button( + text = `Open Popup...` + press = client->_event( `POPUP` ) ). client->view_display( view->stringify( ) ). diff --git a/src/01/02/z2ui5_cl_demo_app_189.clas.abap b/src/01/02/z2ui5_cl_demo_app_189.clas.abap index 859e650c..8750241b 100644 --- a/src/01/02/z2ui5_cl_demo_app_189.clas.abap +++ b/src/01/02/z2ui5_cl_demo_app_189.clas.abap @@ -47,6 +47,12 @@ CLASS Z2UI5_CL_DEMO_APP_189 IMPLEMENTATION. navbuttonpress = client->_event_nav_app_leave( ) shownavbutton = client->check_app_prev_stack( ) ). + page->message_strip( + text = `Pressing Enter in an input field jumps the cursor to the next one via the set_focus follow-up action.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + page->simple_form( )->content( `form` )->label( `One (Press Enter)` )->input( id = `IdOne` diff --git a/src/01/02/z2ui5_cl_demo_app_189.clas.xml b/src/01/02/z2ui5_cl_demo_app_189.clas.xml index 285c842a..df688783 100644 --- a/src/01/02/z2ui5_cl_demo_app_189.clas.xml +++ b/src/01/02/z2ui5_cl_demo_app_189.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_189 E - Focus - Jump with the focus + Focus - Jump with the focus (A) 1 X X diff --git a/src/01/02/z2ui5_cl_demo_app_279.clas.abap b/src/01/02/z2ui5_cl_demo_app_279.clas.abap index e413a64d..aa5bdf0d 100644 --- a/src/01/02/z2ui5_cl_demo_app_279.clas.abap +++ b/src/01/02/z2ui5_cl_demo_app_279.clas.abap @@ -31,6 +31,13 @@ CLASS Z2UI5_CL_DEMO_APP_279 IMPLEMENTATION. navbuttonpress = client->_event( `BACK` ) shownavbutton = client->check_app_prev_stack( ) ). + page->message_strip( + text = `Unsaved input marks the page dirty via a custom control; navigating back then opens a confirmation ` && + `popup instead of leaving and losing the data.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + DATA(box) = page->flex_box( direction = `Row` alignitems = `Start` class = `sapUiTinyMargin` ). diff --git a/src/01/02/z2ui5_cl_demo_app_306.clas.abap b/src/01/02/z2ui5_cl_demo_app_306.clas.abap index b0691517..8918caa4 100644 --- a/src/01/02/z2ui5_cl_demo_app_306.clas.abap +++ b/src/01/02/z2ui5_cl_demo_app_306.clas.abap @@ -56,6 +56,13 @@ CLASS Z2UI5_CL_DEMO_APP_306 IMPLEMENTATION. navbuttonpress = client->_event_nav_app_leave( ) shownavbutton = client->check_app_prev_stack( ) ). + page->message_strip( + text = `Capture photos from the device camera custom control; pick the facing mode and camera, then edit a ` && + `captured picture in the popup image editor.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + page->vbox( `sapUiSmallMargin` )->label( text = `facingMode: ` labelfor = `ComboFacingMode` diff --git a/src/01/02/z2ui5_cl_demo_app_316.clas.abap b/src/01/02/z2ui5_cl_demo_app_316.clas.abap index ba67875c..6b02d2f6 100644 --- a/src/01/02/z2ui5_cl_demo_app_316.clas.abap +++ b/src/01/02/z2ui5_cl_demo_app_316.clas.abap @@ -47,6 +47,13 @@ CLASS z2ui5_cl_demo_app_316 IMPLEMENTATION. shownavbutton = client->check_app_prev_stack( ) ). + page->message_strip( + text = `The URL helper triggers native browser actions from ABAP: open e-mail, telephone and SMS links, or ` && + `redirect the browser to a URL.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + DATA(layout) = page->vertical_layout( class = `sapUiContentPadding` width = `100%` ). diff --git a/src/01/02/z2ui5_cl_demo_app_316.clas.xml b/src/01/02/z2ui5_cl_demo_app_316.clas.xml index 00f65a67..55d1766b 100644 --- a/src/01/02/z2ui5_cl_demo_app_316.clas.xml +++ b/src/01/02/z2ui5_cl_demo_app_316.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_316 E - URL - Open Telephon, Email usw + Browser - Open Telephon, Email usw (A) 1 X X diff --git a/src/01/02/z2ui5_cl_demo_app_325.clas.abap b/src/01/02/z2ui5_cl_demo_app_325.clas.abap index 7db45d10..41b9815c 100644 --- a/src/01/02/z2ui5_cl_demo_app_325.clas.abap +++ b/src/01/02/z2ui5_cl_demo_app_325.clas.abap @@ -23,13 +23,20 @@ CLASS Z2UI5_CL_DEMO_APP_325 IMPLEMENTATION. DATA(page) = view->shell( )->page( title = `Clipboard` navbuttonpress = client->_event_nav_app_leave( ) - shownavbutton = client->check_app_prev_stack( ) - )->object_page_layout( - showtitleinheadercontent = abap_true - showeditheaderbutton = abap_true - uppercaseanchorbar = abap_false ). + shownavbutton = client->check_app_prev_stack( ) ). - DATA(header_title) = page->header_title( + page->message_strip( + text = `Copy the input field or text-area content to the system clipboard via the clipboard_copy follow-up action.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + + DATA(obj_page) = page->object_page_layout( + showtitleinheadercontent = abap_true + showeditheaderbutton = abap_true + uppercaseanchorbar = abap_false ). + + DATA(header_title) = obj_page->header_title( )->object_page_dyn_header_title( ). header_title->expanded_heading( )->hbox( )->title( text = `Test` @@ -37,7 +44,7 @@ CLASS Z2UI5_CL_DEMO_APP_325 IMPLEMENTATION. header_title->snapped_heading( )->flex_box( alignitems = `Center` )->title( text = `Test` wrapping = abap_true ). - DATA(sections) = page->sections( ). + DATA(sections) = obj_page->sections( ). sections->object_page_section( titleuppercase = abap_false id = `id_sec1` diff --git a/src/01/02/z2ui5_cl_demo_app_325.clas.xml b/src/01/02/z2ui5_cl_demo_app_325.clas.xml index 82c562c7..af68fee4 100644 --- a/src/01/02/z2ui5_cl_demo_app_325.clas.xml +++ b/src/01/02/z2ui5_cl_demo_app_325.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_325 E - Input - Clipboard + Input - Clipboard (A) 1 X X diff --git a/src/01/02/z2ui5_cl_demo_app_352.clas.abap b/src/01/02/z2ui5_cl_demo_app_352.clas.abap index 9f101ca9..c690f235 100644 --- a/src/01/02/z2ui5_cl_demo_app_352.clas.abap +++ b/src/01/02/z2ui5_cl_demo_app_352.clas.abap @@ -48,6 +48,13 @@ CLASS Z2UI5_CL_DEMO_APP_352 IMPLEMENTATION. navbuttonpress = client->_event_nav_app_leave( ) shownavbutton = client->check_app_prev_stack( ) ). + page->message_strip( + text = `Set the on-screen soft keyboard mode (numeric or off) via the keyboard_set_mode follow-up action, and ` && + `focus the input on load.` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + page->simple_form( editable = abap_true )->content( `form` diff --git a/src/01/02/z2ui5_cl_demo_app_352.clas.xml b/src/01/02/z2ui5_cl_demo_app_352.clas.xml index 0fd4840b..0d497313 100644 --- a/src/01/02/z2ui5_cl_demo_app_352.clas.xml +++ b/src/01/02/z2ui5_cl_demo_app_352.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_352 E - Input - Hide/show Soft Keyboard + Input - Hide/show Soft Keyboard (A) 1 X X diff --git a/src/01/02/z2ui5_cl_demo_app_362.clas.xml b/src/01/02/z2ui5_cl_demo_app_362.clas.xml index f13abe38..7a3bc75b 100644 --- a/src/01/02/z2ui5_cl_demo_app_362.clas.xml +++ b/src/01/02/z2ui5_cl_demo_app_362.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_362 E - Scroll - Scroll to position + Scroll - Scroll to position (A) 1 X X diff --git a/src/01/02/z2ui5_cl_demo_app_363.clas.xml b/src/01/02/z2ui5_cl_demo_app_363.clas.xml index d75e6a22..e161fa60 100644 --- a/src/01/02/z2ui5_cl_demo_app_363.clas.xml +++ b/src/01/02/z2ui5_cl_demo_app_363.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_363 E - Scroll - Scroll into view + Scroll - Scroll into view (A) 1 X X diff --git a/src/01/02/z2ui5_cl_demo_app_461.clas.xml b/src/01/02/z2ui5_cl_demo_app_461.clas.xml index ab1e05d5..9e0ad64b 100644 --- a/src/01/02/z2ui5_cl_demo_app_461.clas.xml +++ b/src/01/02/z2ui5_cl_demo_app_461.clas.xml @@ -5,7 +5,7 @@ Z2UI5_CL_DEMO_APP_461 E - Tree - Drag and Drop + Tree - Drag and Drop (A,C) 1 X X diff --git a/src/01/z2ui5_cl_demo_app_g00.clas.abap b/src/01/z2ui5_cl_demo_app_g00.clas.abap index 8c63225c..f86b89d2 100644 --- a/src/01/z2ui5_cl_demo_app_g00.clas.abap +++ b/src/01/z2ui5_cl_demo_app_g00.clas.abap @@ -247,11 +247,13 @@ CLASS z2ui5_cl_demo_app_g00 IMPLEMENTATION. ( group = `Basic I` header = `Templating` sub = `Basic Example` app = `z2ui5_cl_demo_app_173` ) ( group = `Basic I` header = `Templating` sub = `Nested Views` app = `z2ui5_cl_demo_app_176` ) ( group = `Basic II` header = `Browser` sub = `Logout (A)` app = `z2ui5_cl_demo_app_361` ) - ( group = `Basic II` header = `Browser` sub = `Title` app = `z2ui5_cl_demo_app_125` ) - ( group = `Basic II` header = `Focus` sub = `Jump with the focus` app = `z2ui5_cl_demo_app_189` ) - ( group = `Basic II` header = `Focus` sub = `Set Focus in Textfield` app = `z2ui5_cl_demo_app_133` ) - ( group = `Basic II` header = `Input` sub = `Clipboard` app = `z2ui5_cl_demo_app_325` ) - ( group = `Basic II` header = `Input` sub = `Hide/show Soft Keyboard` app = `z2ui5_cl_demo_app_352` ) + ( group = `Basic II` header = `Browser` sub = `Open an URL in a new tab (A)` app = `z2ui5_cl_demo_app_073` ) + ( group = `Basic II` header = `Browser` sub = `Open Telephon, Email usw (A)` app = `z2ui5_cl_demo_app_316` ) + ( group = `Basic II` header = `Browser` sub = `Title (A)` app = `z2ui5_cl_demo_app_125` ) + ( group = `Basic II` header = `Focus` sub = `Jump with the focus (A)` app = `z2ui5_cl_demo_app_189` ) + ( group = `Basic II` header = `Focus` sub = `Set Focus in Textfield (A)` app = `z2ui5_cl_demo_app_133` ) + ( group = `Basic II` header = `Input` sub = `Clipboard (A)` app = `z2ui5_cl_demo_app_325` ) + ( group = `Basic II` header = `Input` sub = `Hide/show Soft Keyboard (A)` app = `z2ui5_cl_demo_app_352` ) ( group = `Basic II` header = `List` sub = `Events & Visualization` app = `z2ui5_cl_demo_app_048` ) ( group = `Basic II` header = `List` sub = `Frontend Filter/Sort via Backend Event (A)` app = `z2ui5_cl_demo_app_454` ) ( group = `Basic II` header = `List` sub = `Frontend Live Filter without Backend (A)` app = `z2ui5_cl_demo_app_455` ) @@ -265,8 +267,8 @@ CLASS z2ui5_cl_demo_app_g00 IMPLEMENTATION. ( group = `Basic II` header = `More` sub = `Wizard Control (A)` app = `z2ui5_cl_demo_app_202` ) ( group = `Basic II` header = `NavContainer` sub = `Popup (A)` app = `z2ui5_cl_demo_app_170` ) ( group = `Basic II` header = `NavContainer` sub = `Simple (A)` app = `z2ui5_cl_demo_app_088` ) - ( group = `Basic II` header = `Scroll` sub = `Scroll into view` app = `z2ui5_cl_demo_app_363` ) - ( group = `Basic II` header = `Scroll` sub = `Scroll to position` app = `z2ui5_cl_demo_app_362` ) + ( group = `Basic II` header = `Scroll` sub = `Scroll into view (A)` app = `z2ui5_cl_demo_app_363` ) + ( group = `Basic II` header = `Scroll` sub = `Scroll to position (A)` app = `z2ui5_cl_demo_app_362` ) ( group = `Basic II` header = `Table` sub = `Backend Filter` app = `z2ui5_cl_demo_app_045` ) ( group = `Basic II` header = `Table` sub = `Drag and Drop (A)` app = `z2ui5_cl_demo_app_459` ) ( group = `Basic II` header = `Table` sub = `Editable` app = `z2ui5_cl_demo_app_011` ) @@ -274,17 +276,15 @@ CLASS z2ui5_cl_demo_app_g00 IMPLEMENTATION. ( group = `Basic II` header = `Table` sub = `Search via Backend` app = `z2ui5_cl_demo_app_053` ) ( group = `Basic II` header = `Table` sub = `Selection Modes: Single Select & Multi Select` app = `z2ui5_cl_demo_app_019` ) ( group = `Basic II` header = `Table` sub = `Table with ScrollContainer` app = `z2ui5_cl_demo_app_006` ) - ( group = `Basic II` header = `Timer` sub = `Loading Indicator with WAIT UP Backend` app = `z2ui5_cl_demo_app_064` ) - ( group = `Basic II` header = `Timer` sub = `Wait n MS and call again the server` app = `z2ui5_cl_demo_app_028` ) - ( group = `Basic II` header = `Tree` sub = `Drag and Drop` app = `z2ui5_cl_demo_app_461` ) + ( group = `Basic II` header = `Timer` sub = `Loading Indicator with WAIT UP Backend (A)` app = `z2ui5_cl_demo_app_064` ) + ( group = `Basic II` header = `Timer` sub = `Wait n MS and call again the server (A)` app = `z2ui5_cl_demo_app_028` ) + ( group = `Basic II` header = `Tree` sub = `Drag and Drop (A,C)` app = `z2ui5_cl_demo_app_461` ) ( group = `Basic II` header = `Tree` sub = `Editable with Custom Item (C)` app = `z2ui5_cl_demo_app_463` ) ( group = `Basic II` header = `Tree` sub = `Inside Popup (C)` app = `z2ui5_cl_demo_app_462` ) ( group = `Basic II` header = `Tree` sub = `Simple` app = `z2ui5_cl_demo_app_460` ) - ( group = `Basic II` header = `ui.Table` sub = `Default Filtering` app = `z2ui5_cl_demo_app_143` ) + ( group = `Basic II` header = `ui.Table` sub = `Default Filtering (C)` app = `z2ui5_cl_demo_app_143` ) ( group = `Basic II` header = `ui.Table` sub = `Events on Cell Level` app = `z2ui5_cl_demo_app_160` ) ( group = `Basic II` header = `ui.Table` sub = `Full Example` app = `z2ui5_cl_demo_app_070` ) - ( group = `Basic II` header = `URL` sub = `New Tab Open an URL in a new tab` app = `z2ui5_cl_demo_app_073` ) - ( group = `Basic II` header = `URL` sub = `Open Telephon, Email usw` app = `z2ui5_cl_demo_app_316` ) ( group = `controls - sap.m` header = `ActionListItem` sub = `Use the Action List Item to trigger an action directly from a list` app = `z2ui5_cl_demo_app_216` ) ( group = `controls - sap.m` header = `Breadcrumbs` sub = `Breadcrumbs sample with current page set as aggregation, resulting in a link` app = `z2ui5_cl_demo_app_292` ) ( group = `controls - sap.m` header = `BusyIndicator` sub = `The Busy Indicator signals that some operation is going on and that the user must wait ...` app = `z2ui5_cl_demo_app_215` ) From 8c8c6e8e5ed937110237cf190db958e6a785337a Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 19 Jul 2026 15:06:21 +0000 Subject: [PATCH 44/49] Sample 122: set the device-info input fields inactive The device / frontend-info form is a read-only display, so disable all its inputs (enabled = abap_false). Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_018JnhapjtGyzgxzuzUoeeXW --- src/01/01/z2ui5_cl_demo_app_122.clas.abap | 76 +++++++++++++++++------ 1 file changed, 57 insertions(+), 19 deletions(-) diff --git a/src/01/01/z2ui5_cl_demo_app_122.clas.abap b/src/01/01/z2ui5_cl_demo_app_122.clas.abap index a513ffff..264c6efe 100644 --- a/src/01/01/z2ui5_cl_demo_app_122.clas.abap +++ b/src/01/01/z2ui5_cl_demo_app_122.clas.abap @@ -86,43 +86,81 @@ CLASS Z2UI5_CL_DEMO_APP_122 IMPLEMENTATION. editable = abap_true )->content( `form` )->label( `device_browser` - )->input( client->_bind_edit( device_browser ) + )->input( + value = client->_bind_edit( device_browser ) + enabled = abap_false )->label( `device_browser_version` - )->input( client->_bind_edit( device_browser_version ) + )->input( + value = client->_bind_edit( device_browser_version ) + enabled = abap_false )->label( `device_os` - )->input( client->_bind_edit( device_os ) + )->input( + value = client->_bind_edit( device_os ) + enabled = abap_false )->label( `device_os_version` - )->input( client->_bind_edit( device_os_version ) + )->input( + value = client->_bind_edit( device_os_version ) + enabled = abap_false )->label( `device_systemtype` - )->input( client->_bind_edit( device_systemtype ) + )->input( + value = client->_bind_edit( device_systemtype ) + enabled = abap_false )->label( `device_orientation` - )->input( client->_bind_edit( device_orientation ) + )->input( + value = client->_bind_edit( device_orientation ) + enabled = abap_false )->label( `device_height` - )->input( client->_bind_edit( device_height ) + )->input( + value = client->_bind_edit( device_height ) + enabled = abap_false )->label( `device_width` - )->input( client->_bind_edit( device_width ) + )->input( + value = client->_bind_edit( device_width ) + enabled = abap_false )->label( `device_phone` - )->input( client->_bind_edit( device_phone ) + )->input( + value = client->_bind_edit( device_phone ) + enabled = abap_false )->label( `device_desktop` - )->input( client->_bind_edit( device_desktop ) + )->input( + value = client->_bind_edit( device_desktop ) + enabled = abap_false )->label( `device_tablet` - )->input( client->_bind_edit( device_tablet ) + )->input( + value = client->_bind_edit( device_tablet ) + enabled = abap_false )->label( `device_combi` - )->input( client->_bind_edit( device_combi ) + )->input( + value = client->_bind_edit( device_combi ) + enabled = abap_false )->label( `device_touch` - )->input( client->_bind_edit( device_touch ) + )->input( + value = client->_bind_edit( device_touch ) + enabled = abap_false )->label( `device_pointer` - )->input( client->_bind_edit( device_pointer ) + )->input( + value = client->_bind_edit( device_pointer ) + enabled = abap_false )->label( `device_retina` - )->input( client->_bind_edit( device_retina ) + )->input( + value = client->_bind_edit( device_retina ) + enabled = abap_false )->label( `ui5_version` - )->input( client->_bind_edit( ui5_version ) + )->input( + value = client->_bind_edit( ui5_version ) + enabled = abap_false )->label( `ui5_theme` - )->input( client->_bind_edit( ui5_theme ) + )->input( + value = client->_bind_edit( ui5_theme ) + enabled = abap_false )->label( `ui5_gav` - )->input( client->_bind_edit( ui5_gav ) + )->input( + value = client->_bind_edit( ui5_gav ) + enabled = abap_false )->label( `ui5_build_timestamp` - )->input( client->_bind_edit( ui5_build_timestamp ) ). + )->input( + value = client->_bind_edit( ui5_build_timestamp ) + enabled = abap_false ). client->view_display( view->stringify( ) ). ENDMETHOD. From 2abab53a4a8d59dac6ff21f2f63a2435cd9c2607 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 19 Jul 2026 15:08:17 +0000 Subject: [PATCH 45/49] =?UTF-8?q?Docs:=20add=20=C2=A712=20sample=20content?= =?UTF-8?q?=20conventions=20(intro=20strip,=20A/C=20markers,=20read-only?= =?UTF-8?q?=20inputs)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Record the conventions established while curating 01/01 and 01/02: every sample opens with an explanatory MessageStrip; 01/02 DESCRIPTs carry (A)/(C)/(A,C) capability markers; read-only info forms disable their inputs; no redundant footer Back button. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_018JnhapjtGyzgxzuzUoeeXW --- AGENTS.md | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/AGENTS.md b/AGENTS.md index 9ba32e6b..cc8fb937 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -747,3 +747,43 @@ CLASS z2ui5_cl_app_xxx IMPLEMENTATION. ENDCLASS. ``` + +--- + +## 12. Sample content conventions + +Learned while curating the `01/01` (Basic I) and `01/02` (Basic II) packages — +follow these so new/edited samples stay consistent: + +- **Every sample opens with an intro `MessageStrip`.** As the **first control in + the page content** (right after the page is created, before the form/table), + add a short, specific English explanation of what the sample demonstrates: + ```abap + page->message_strip( + text = `` + type = `Information` + showicon = abap_true + class = `sapUiSmallMargin` ). + ``` + Split a long `text` into `` `chunk ` && `` continuation lines (≤255 chars/line, + aligned under the first backtick). If the view is one uncaptured fluent chain, + capture the page first (`DATA(page) = ->shell( )->page( ... ).`). + +- **`01/02` DESCRIPTs carry a capability marker** appended to the `` + (leading space), surfaced in the overview: + - `(C)` — uses an abap2UI5 **custom control** (`view->_z2ui5( )->…`, or the + `z2ui5` cc namespace: `_generic( … ns = `z2ui5` … )`, `z2ui5.cc`, `xmlns:z2ui5`). + - `(A)` — performs a **frontend action**: `client->_event_client( )`, + `client->follow_up_action( )`, `control_call`/`control_call_by_id`, + `binding_call`/`binding_call_by_id`, or a client-side interaction like + drag-and-drop. The ubiquitous back-button `client->_event_nav_app_leave( )` + does **not** count. + - `(A,C)` — both. Regenerate the overviews after changing any DESCRIPT (§4). + +- **A read-only info form disables its inputs** (`enabled = abap_false`) — do not + leave display-only values in editable inputs (see `z2ui5_cl_demo_app_122`). + +- **No redundant footer Back button.** The `shell( )->page( )` already renders a + nav-back button (`navbuttonpress` / `shownavbutton`); do not add a second + `Back` button in the page footer (removed from the MessageBox / MessageToast + samples). From 2995085de442e0d6cbc05ef970319c82efe8b127 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 19 Jul 2026 15:26:20 +0000 Subject: [PATCH 46/49] Samples 01: fix OpenUI5 1.71 crashes and align titles with descriptions - 325 (Input - Clipboard) and 017 (ObjectPage): remove `heading( `uxap` )` on ObjectPageSection. sap.uxap.ObjectPageSection has no `heading` aggregation, so on 1.71 UI5 resolved `` as a control and failed with "failed to load sap/uxap/heading.js". In 017 the one non-empty heading (a message strip) is moved into the first sub-section. - 189 (Focus - Jump with the focus): set the SimpleForm `editable` so the label/input pairs render aligned on one row (matches sample 133). - 01/02 titles: page title now carries the class-description text where it was missing (045 was a copy-paste of 006's title; 078, 120, 316, 448, 449 now name the actual feature). Full static audit of all 195 sample classes in package 01: no other "failed to load" control-load risks on 1.71 remain. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_018JnhapjtGyzgxzuzUoeeXW --- src/01/02/z2ui5_cl_demo_app_045.clas.abap | 2 +- src/01/02/z2ui5_cl_demo_app_078.clas.abap | 2 +- src/01/02/z2ui5_cl_demo_app_120.clas.abap | 2 +- src/01/02/z2ui5_cl_demo_app_189.clas.abap | 1 + src/01/02/z2ui5_cl_demo_app_316.clas.abap | 2 +- src/01/02/z2ui5_cl_demo_app_325.clas.abap | 12 ++++++------ src/01/02/z2ui5_cl_demo_app_448.clas.abap | 2 +- src/01/02/z2ui5_cl_demo_app_449.clas.abap | 2 +- src/01/08/01/z2ui5_cl_demo_app_017.clas.abap | 8 +------- 9 files changed, 14 insertions(+), 19 deletions(-) diff --git a/src/01/02/z2ui5_cl_demo_app_045.clas.abap b/src/01/02/z2ui5_cl_demo_app_045.clas.abap index 9f92b069..7ae03006 100644 --- a/src/01/02/z2ui5_cl_demo_app_045.clas.abap +++ b/src/01/02/z2ui5_cl_demo_app_045.clas.abap @@ -59,7 +59,7 @@ CLASS Z2UI5_CL_DEMO_APP_045 IMPLEMENTATION. DATA(page) = z2ui5_cl_xml_view=>factory( )->shell( )->page( - title = `abap2UI5 - Scroll Container with Table and Toolbar` + title = `abap2UI5 - Table - Backend Filter` navbuttonpress = client->_event_nav_app_leave( ) shownavbutton = client->check_app_prev_stack( ) )->header_content( diff --git a/src/01/02/z2ui5_cl_demo_app_078.clas.abap b/src/01/02/z2ui5_cl_demo_app_078.clas.abap index f853a218..1bdf1780 100644 --- a/src/01/02/z2ui5_cl_demo_app_078.clas.abap +++ b/src/01/02/z2ui5_cl_demo_app_078.clas.abap @@ -33,7 +33,7 @@ CLASS Z2UI5_CL_DEMO_APP_078 IMPLEMENTATION. DATA(view) = z2ui5_cl_xml_view=>factory( ). view = view->shell( )->page( id = `page_main` - title = `abap2UI5 - Select-Options` + title = `abap2UI5 - Multi Input (Select-Options)` navbuttonpress = client->_event_nav_app_leave( ) shownavbutton = client->check_app_prev_stack( ) ). diff --git a/src/01/02/z2ui5_cl_demo_app_120.clas.abap b/src/01/02/z2ui5_cl_demo_app_120.clas.abap index 22d254a7..00b8c1a0 100644 --- a/src/01/02/z2ui5_cl_demo_app_120.clas.abap +++ b/src/01/02/z2ui5_cl_demo_app_120.clas.abap @@ -65,7 +65,7 @@ CLASS z2ui5_cl_demo_app_120 IMPLEMENTATION. DATA(page) = view->shell( )->page( - title = `abap2UI5 - Device Capabilities` + title = `abap2UI5 - Geolocation` navbuttonpress = client->_event_nav_app_leave( ) shownavbutton = client->check_app_prev_stack( ) ). diff --git a/src/01/02/z2ui5_cl_demo_app_189.clas.abap b/src/01/02/z2ui5_cl_demo_app_189.clas.abap index 8750241b..fe104a69 100644 --- a/src/01/02/z2ui5_cl_demo_app_189.clas.abap +++ b/src/01/02/z2ui5_cl_demo_app_189.clas.abap @@ -54,6 +54,7 @@ CLASS Z2UI5_CL_DEMO_APP_189 IMPLEMENTATION. class = `sapUiSmallMargin` ). page->simple_form( + editable = abap_true )->content( `form` )->label( `One (Press Enter)` )->input( id = `IdOne` value = client->_bind_edit( one ) diff --git a/src/01/02/z2ui5_cl_demo_app_316.clas.abap b/src/01/02/z2ui5_cl_demo_app_316.clas.abap index 6b02d2f6..71b6a452 100644 --- a/src/01/02/z2ui5_cl_demo_app_316.clas.abap +++ b/src/01/02/z2ui5_cl_demo_app_316.clas.abap @@ -42,7 +42,7 @@ CLASS z2ui5_cl_demo_app_316 IMPLEMENTATION. DATA(page) = z2ui5_cl_xml_view=>factory( )->shell( - )->page( title = `abap2UI5 - Sample: URL Helper` + )->page( title = `abap2UI5 - Browser - Open Telephone, Email etc.` navbuttonpress = client->_event_nav_app_leave( ) shownavbutton = client->check_app_prev_stack( ) ). diff --git a/src/01/02/z2ui5_cl_demo_app_325.clas.abap b/src/01/02/z2ui5_cl_demo_app_325.clas.abap index 41b9815c..82ceaa00 100644 --- a/src/01/02/z2ui5_cl_demo_app_325.clas.abap +++ b/src/01/02/z2ui5_cl_demo_app_325.clas.abap @@ -48,9 +48,9 @@ CLASS Z2UI5_CL_DEMO_APP_325 IMPLEMENTATION. sections->object_page_section( titleuppercase = abap_false id = `id_sec1` - title = `...` )->heading( `uxap` - )->get_parent( )->sub_sections( )->object_page_sub_section( id = `id_input` - title = `Input field` + title = `...` + )->sub_sections( )->object_page_sub_section( id = `id_input` + title = `Input field` )->blocks( )->vbox( )->input( value = client->_bind_edit( input ) width = `50%` @@ -60,9 +60,9 @@ CLASS Z2UI5_CL_DEMO_APP_325 IMPLEMENTATION. sections->object_page_section( titleuppercase = abap_false id = `id_sec2` - title = `...` )->heading( `uxap` - )->get_parent( )->sub_sections( )->object_page_sub_section( id = `id_text_area` - title = `Text area` + title = `...` + )->sub_sections( )->object_page_sub_section( id = `id_text_area` + title = `Text area` )->blocks( )->vbox( )->button( text = `Copy text area` type = `Emphasized` diff --git a/src/01/02/z2ui5_cl_demo_app_448.clas.abap b/src/01/02/z2ui5_cl_demo_app_448.clas.abap index b4fd7b21..3f775e5e 100644 --- a/src/01/02/z2ui5_cl_demo_app_448.clas.abap +++ b/src/01/02/z2ui5_cl_demo_app_448.clas.abap @@ -52,7 +52,7 @@ CLASS z2ui5_cl_demo_app_448 IMPLEMENTATION. DATA(page) = view->shell( )->page( - title = `abap2UI5 - Action - control_call_by_id setExpanded` + title = `abap2UI5 - Panel - setExpanded via control_call_by_id` navbuttonpress = client->_event_nav_app_leave( ) shownavbutton = client->check_app_prev_stack( ) ). diff --git a/src/01/02/z2ui5_cl_demo_app_449.clas.abap b/src/01/02/z2ui5_cl_demo_app_449.clas.abap index 1d16a638..623dd4fa 100644 --- a/src/01/02/z2ui5_cl_demo_app_449.clas.abap +++ b/src/01/02/z2ui5_cl_demo_app_449.clas.abap @@ -48,7 +48,7 @@ CLASS z2ui5_cl_demo_app_449 IMPLEMENTATION. DATA(page) = view->shell( )->page( - title = `abap2UI5 - Action - control_call_by_id open` + title = `abap2UI5 - PDF Viewer - Display via control_call_by_id` navbuttonpress = client->_event_nav_app_leave( ) shownavbutton = client->check_app_prev_stack( ) ). diff --git a/src/01/08/01/z2ui5_cl_demo_app_017.clas.abap b/src/01/08/01/z2ui5_cl_demo_app_017.clas.abap index 317af4ab..0a606dbd 100644 --- a/src/01/08/01/z2ui5_cl_demo_app_017.clas.abap +++ b/src/01/08/01/z2ui5_cl_demo_app_017.clas.abap @@ -107,14 +107,12 @@ CLASS z2ui5_cl_demo_app_017 IMPLEMENTATION. titleuppercase = abap_false id = `goalsSectionSS1` title = `2014 Goals Plan` - )->heading( `uxap` - )->message_strip( `this is a message strip` - )->get_parent( )->sub_sections( )->object_page_sub_section( id = `goalssubSectionSS1` title = `goals1` )->blocks( + )->message_strip( `this is a message strip` )->vbox( )->label( `goals1` )->label( `goals1` @@ -145,8 +143,6 @@ CLASS z2ui5_cl_demo_app_017 IMPLEMENTATION. titleuppercase = abap_false id = `PersonalSection` title = `Personal` - )->heading( `uxap` - )->get_parent( )->sub_sections( )->object_page_sub_section( id = `personalSectionSS1` @@ -166,8 +162,6 @@ CLASS z2ui5_cl_demo_app_017 IMPLEMENTATION. titleuppercase = abap_false id = `employmentSection` title = `Employment` - )->heading( `uxap` - )->get_parent( )->sub_sections( )->object_page_sub_section( id = `empSectionSS1` From 00f24a53556bd3fd537677f866c1b5247174b454 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 19 Jul 2026 16:27:01 +0000 Subject: [PATCH 47/49] Samples 454/455: show product category as subtitle instead of right-aligned info In the Binding Call filter/sort list samples the category was bound to the StandardListItem `info` slot, which right-aligns it to the far edge of the list and looks disconnected on a wide screen. Bind it to `description` instead, so the category reads as a subtitle under the product name. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_018JnhapjtGyzgxzuzUoeeXW --- src/01/02/z2ui5_cl_demo_app_454.clas.abap | 4 ++-- src/01/02/z2ui5_cl_demo_app_455.clas.abap | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/01/02/z2ui5_cl_demo_app_454.clas.abap b/src/01/02/z2ui5_cl_demo_app_454.clas.abap index e51d071a..163860fd 100644 --- a/src/01/02/z2ui5_cl_demo_app_454.clas.abap +++ b/src/01/02/z2ui5_cl_demo_app_454.clas.abap @@ -104,8 +104,8 @@ CLASS Z2UI5_CL_DEMO_APP_454 IMPLEMENTATION. headertext = `Products` items = client->_bind_edit( t_products ) class = `sapUiSmallMargin` - )->standard_list_item( title = `{NAME}` - info = `{CATEGORY}` ). + )->standard_list_item( title = `{NAME}` + description = `{CATEGORY}` ). client->view_display( view->stringify( ) ). diff --git a/src/01/02/z2ui5_cl_demo_app_455.clas.abap b/src/01/02/z2ui5_cl_demo_app_455.clas.abap index 8dcea41e..9c9d537c 100644 --- a/src/01/02/z2ui5_cl_demo_app_455.clas.abap +++ b/src/01/02/z2ui5_cl_demo_app_455.clas.abap @@ -77,8 +77,8 @@ CLASS Z2UI5_CL_DEMO_APP_455 IMPLEMENTATION. headertext = `Products` items = client->_bind_edit( t_products ) class = `sapUiSmallMargin` - )->standard_list_item( title = `{NAME}` - info = `{CATEGORY}` ). + )->standard_list_item( title = `{NAME}` + description = `{CATEGORY}` ). client->view_display( view->stringify( ) ). From 54b29377a16659aaf034c3fdf322bf54eea7d844 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 19 Jul 2026 16:36:02 +0000 Subject: [PATCH 48/49] Sample 143: wrap the page in a shell like the other samples The ui.Table Default Filtering sample built its page directly on the view (view->page(...)); every other sample starts from view->shell( )->page(...). Add the shell for a consistent frame. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_018JnhapjtGyzgxzuzUoeeXW --- src/01/02/z2ui5_cl_demo_app_143.clas.abap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/01/02/z2ui5_cl_demo_app_143.clas.abap b/src/01/02/z2ui5_cl_demo_app_143.clas.abap index 21b6721c..5fef6a5e 100644 --- a/src/01/02/z2ui5_cl_demo_app_143.clas.abap +++ b/src/01/02/z2ui5_cl_demo_app_143.clas.abap @@ -57,7 +57,7 @@ CLASS z2ui5_cl_demo_app_143 IMPLEMENTATION. DATA(view) = z2ui5_cl_xml_view=>factory( ). - DATA(page1) = view->page( id = `page_main` + DATA(page1) = view->shell( )->page( id = `page_main` title = `Table Filters Reset after view Update` class = `sapUiContentPadding` navbuttonpress = client->_event_nav_app_leave( ) From 5f59bc9351755c30b7a1ba1d8e3e47ee7da4c018 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 19 Jul 2026 16:41:30 +0000 Subject: [PATCH 49/49] =?UTF-8?q?AGENTS=20=C2=A712:=20record=201.71=20+=20?= =?UTF-8?q?layout=20learnings=20from=20this=20session?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add conventions learned while fixing samples: watch for phantom-control 404s on 1.71 (heading on ObjectPageSection,
on Dialog); SimpleForm needs editable=abap_true for aligned rows; StandardListItem info vs description; page title should carry the DESCRIPT text; start views from shell( )->page( ); give search_field an explicit placeholder. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_018JnhapjtGyzgxzuzUoeeXW --- AGENTS.md | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/AGENTS.md b/AGENTS.md index cc8fb937..1e0026c2 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -787,3 +787,38 @@ follow these so new/edited samples stay consistent: nav-back button (`navbuttonpress` / `shownavbutton`); do not add a second `Back` button in the page footer (removed from the MessageBox / MessageToast samples). + +- **Must run on OpenUI5 1.71 — watch for "phantom control" 404s.** A generic + aggregation-escape method that names an aggregation the parent does **not** + have makes UI5 resolve it as a *control class* and 404 with `failed to load + sap//.js` on 1.71, crashing the sample. Two real cases: + - `object_page_section( )->heading( `uxap` )` — `sap.uxap.ObjectPageSection` + has no `heading` aggregation. Put the section title in `title = `…`` and go + straight to `sub_sections( )`. (`heading( `f` )` **is** valid on a + `dynamic_page_title( )` — sap.f `DynamicPageTitle` has that aggregation.) + - `
` on a popup `Dialog` — `sap.m.Dialog` only got a public `footer` + aggregation ~1.110; a `page( )->footer( )` is fine (sap.m.Page always had + one). Every control/property in `src/01` must exist since 1.71 (§2); when in + doubt check "available since" in the demo kit. + +- **`sap.m.SimpleForm` needs `editable = abap_true`** for its label/input pairs + to line up on one row — without it the form renders in display mode and the + first field is mislaid (fixed in `189`; compare `133`). + +- **`StandardListItem`: `info` right-aligns to the far edge** (a status/amount + slot). For a secondary attribute that belongs *with* the title (e.g. a + product's category) use `description` — a left-aligned subtitle — instead; the + far-right float looks disconnected on wide screens (fixed in `454`/`455`). + +- **The page title should carry the `` text.** A user clicks a tile in + the overview (which shows the DESCRIPT) and the opened sample's + `page( title = … )` should name the same thing so it is recognisably the right + sample — e.g. `045` had a copy-pasted "Scroll Container" title on a "Backend + Filter" sample. + +- **Start every view from `view->shell( )->page( … )`** (not `view->page( … )`) + so all samples share the same outer frame (fixed in `143`). + +- **Give a `search_field` an explicit `placeholder`.** Without one UI5 shows its + locale default (German "Suchen" on a DE system), which clashes with the + otherwise-English samples.