project reorganization

This commit is contained in:
oblomov 2023-06-15 16:22:56 +00:00
commit b0caecb3f7
68 changed files with 9267 additions and 0 deletions

20
.abapgit.xml Normal file
View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<DATA>
<MASTER_LANGUAGE>E</MASTER_LANGUAGE>
<STARTING_FOLDER>/src/</STARTING_FOLDER>
<FOLDER_LOGIC>PREFIX</FOLDER_LOGIC>
<IGNORE>
<item>/.gitignore</item>
<item>/LICENSE</item>
<item>/README.md</item>
<item>/package.json</item>
<item>/.travis.yml</item>
<item>/.gitlab-ci.yml</item>
<item>/abaplint.json</item>
<item>/azure-pipelines.yml</item>
</IGNORE>
</DATA>
</asx:values>
</asx:abap>

21
LICENSE Normal file
View File

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2022 oblomov
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

84
README.md Normal file
View File

@ -0,0 +1,84 @@
# abap2UI5
Development of UI5 Apps in pure ABAP. Follow this project on [twitter](https://twitter.com/OblomovDev) to keep up to date!
### Project Features
* easy to use implement just one interface for a standalone UI5 application
* pure ABAP development in 100% ABAP source code (no JavaScript, EML, DDL or Customizing)
* low system footprint - based on a plain http handler (no BSP, OData, BOPF, CDS, FE or RAP)
* cloud and on-premise ready works with both language versions (ABAP for Cloud, Standard ABAP)
* high system compatibility runs on all available ABAP stacks (NW 7.02 to ABAP 2302)
* easy installation abapGit project, no additional app deployment needed
### Information
##### SCN Blog Series - Introduction to abap2UI5
* (1/3) Development of UI5 Apps in pure ABAP [(Blog SCN - 22.02.2023)](https://blogs.sap.com/2023/02/22/abap2ui5-development-of-ui5-apps-in-pure-abap-1-3/)<br>
* (2/3) Output of Lists & Tables add toolbars and make editable [(Blog SCN - 22.02.2023)](https://blogs.sap.com/2023/02/22/abap2ui5-output-of-lists-and-tables-toolbar-and-editable-2-3/)<br>
* (3/3) Demo Applications developed with abap2UI5 (...)<br>
##### More
* Find abap2UI5 in the ABAP Open Source Projects [(dotabap.org)](https://dotabap.org/)
* Static Analysis & Continuous Integration with abaplint [(abaplint.app/abap2UI5)](https://abaplint.app/stats/oblomov-dev/abap2UI5)
* Featured in the Boring Enterprise Nerdletter [(newsletter - 08.03.2023)](https://boringenterprisenerds.substack.com/p/34-abap2ui5-sap-cva-burnout-c2c-shortwave)
* Featured in the SAP Developer News [(youtube - 26.01.2023)](https://www.youtube.com/watch?v=6BDK55xYttM)
* Development of UI5 Selection-Screens in pure ABAP (former version) [(Blog SCN - 22.01.2023)](https://blogs.sap.com/2023/01/22/abap2ui5-project-development-of-ui5-selection-screens-in-pure-abap-no-app-deployment-or-javascript-needed/)
### Demo Application [(Source Code)](https://github.com/oblomov-dev/ABAP2UI5/blob/main/src/00/z2ui5_cl_app_demo_01.clas.abap)
![tweet1](https://user-images.githubusercontent.com/102328295/220315102-2e1e6545-ac32-4ea3-9d10-7286998304e7.gif)
## Installation
Works with all available ABAP stacks and language versions:
* BTP ABAP Environment (ABAP for Cloud)
* S/4 Public Cloud ABAP Environment (ABAP for Cloud)
* S/4 Private Cloud or On-Premise (ABAP for Cloud, Standard ABAP)
* R/3 NetWeaver AS ABAP 7.50 or higher (Standard ABAP)
* R/3 NetWeaver AS ABAP 7.02 to 7.40 - use the low syntax [branch](https://github.com/oblomov-dev/ABAP2UI5/tree/main_v702)
Install with [abapGit](https://abapgit.org), create a new HTTP service and call abap2UI5 [(more information)](https://github.com/oblomov-dev/abap2ui5/wiki).
#### ABAP for Cloud:
```abap
METHOD if_http_service_extension~handle_request.
z2ui5_cl_http_handler=>client = VALUE #(
t_header = request->get_header_fields( )
t_param = request->get_form_fields( )
body = request->get_text( ) ).
DATA(lv_resp) = SWITCH #( request->get_method( )
WHEN 'GET' THEN z2ui5_cl_http_handler=>main_index_html( )
WHEN 'POST' THEN z2ui5_cl_http_handler=>main_roundtrip( ) ).
response->set_status( 200 )->set_text( lv_resp ).
ENDMETHOD.
```
#### Standard ABAP:
```abap
METHOD if_http_extension~handle_request.
DATA lt_header TYPE tihttpnvp.
server->request->get_header_fields( CHANGING fields = lt_header ).
DATA lt_param TYPE tihttpnvp.
server->request->get_form_fields( CHANGING fields = lt_param ).
z2ui5_cl_http_handler=>client = VALUE #(
t_header = lt_header
t_param = lt_param
body = server->request->get_cdata( ) ).
DATA(lv_resp) = SWITCH #( server->request->get_method( )
WHEN 'GET' THEN z2ui5_cl_http_handler=>main_index_html( )
WHEN 'POST' THEN z2ui5_cl_http_handler=>main_roundtrip( ) ).
server->response->set_cdata( lv_resp ).
server->response->set_status( code = 200 reason = 'success' ).
ENDMETHOD.
```
## FAQ
* read these [instructions](https://github.com/oblomov-dev/ABAP2UI5/wiki/First-App) when you develop your first app<br>
* running into problems with your app? see [debugging & troubleshooting](https://github.com/oblomov-dev/ABAP2UI5/wiki/Debugging-&-Troubleshooting)
* as always - your comments, questions, wishes and bugs are welcome, please create an [issue](https://github.com/oblomov-dev/ABAP2UI5/issues)

262
abaplint.jsonc Normal file
View File

@ -0,0 +1,262 @@
{
"global": {
"files": "/src/**/*.*"
},
"dependencies": [
{
"url": "https://github.com/abapedia/steampunk-2302-api",
"folder": "/deps",
"files": "/src/**/*.*"
}
],
"syntax": {
"version": "v750",
"errorNamespace": "."
},
"rules": {
"7bit_ascii": false,
"abapdoc": false,
"align_parameters": false,
"allowed_object_naming": true,
"allowed_object_types": true,
"ambiguous_statement": true,
"avoid_use": true,
"begin_end_names": true,
"begin_single_include": true,
"call_transaction_authority_check": true,
"cds_comment_style": true,
"cds_legacy_view": true,
"cds_parser_error": true,
"chain_mainly_declarations": true,
"change_if_to_case": {
"exclude": [],
"severity": "Error",
"skipNames": []
},
"check_abstract": true,
"check_comments": {
"exclude": [],
"severity": "Warning"
},
"check_ddic": true,
"check_include": true,
"check_subrc": true,
"check_syntax": true,
"check_text_elements": true,
"check_transformation_exists": true,
"class_attribute_names": false,
"classic_exceptions_overlap": true,
"cloud_types": true,
"colon_missing_space": true,
"commented_code": false,
"constant_classes": {
"exclude": [],
"severity": "Error",
"mapping": []
},
"constructor_visibility_public": true,
"contains_tab": {
"exclude": [],
"severity": "Error",
"spaces": 1
},
"cyclic_oo": false,
"cyclomatic_complexity": {
"exclude": [],
"severity": "Error",
"max": 20
},
"dangerous_statement": true,
"db_operation_in_loop": true,
"definitions_top": false,
"description_empty": true,
"double_space": {
"exclude": [],
"severity": "Warning",
"keywords": true,
"startParen": true,
"endParen": true,
"afterColon": true
},
"downport": true,
"empty_line_in_statement": false,
"empty_statement": true,
"empty_structure": {
"loop": true,
"if": true,
"while": true,
"case": true,
"select": true,
"do": true,
"at": true,
"try": true,
"when": false
},
"exit_or_check": true,
"expand_macros": true,
"exporting": true,
"forbidden_identifier": true,
"forbidden_pseudo_and_pragma": {
"exclude": [],
"severity": "Error",
"pseudo": [],
"pragmas": [],
"ignoreGlobalClassDefinition": false,
"ignoreGlobalInterface": false
},
"forbidden_void_type": true,
"form_tables_obsolete": true,
"fully_type_constants": {
"checkData": true
},
"function_module_recommendations": true,
"functional_writing": {
"ignoreExceptions": true
},
"global_class": true,
"identical_conditions": true,
"identical_contents": true,
"identical_descriptions": true,
"identical_form_names": true,
"if_in_if": true,
"implement_methods": true,
"in_statement_indentation": false,
"indentation": false,
"inline_data_old_versions": true,
"intf_referencing_clas": true,
"keep_single_parameter_on_one_line": false,
"keyword_case": false,
"line_break_multiple_parameters": false,
"line_break_style": false,
"line_length": false,
"line_only_punc": false,
"local_class_naming": false,
"local_testclass_consistency": true,
"local_variable_names": false,
"main_file_contents": true,
"many_parentheses": true,
"max_one_method_parameter_per_line": true,
"max_one_statement": true,
"message_exists": true,
"method_implemented_twice": true,
"method_length": false,
"method_overwrites_builtin": false,
"method_parameter_names": false,
"mix_returning": true,
"modify_only_own_db_tables": {
"reportDynamic": true,
"ownTables": "^[yz]"
},
"msag_consistency": true,
"names_no_dash": true,
"nesting": {
"depth": 5
},
"newline_between_methods": true,
"no_aliases": true,
"no_chained_assignment": true,
"no_external_form_calls": true,
"no_inline_in_optional_branches": false,
"no_public_attributes": false,
"no_yoda_conditions": false,
"nrob_consistency": true,
"object_naming": {
"exclude": [],
"severity": "Error",
"patternKind": "required",
"ignoreNames": [],
"ignorePatterns": [],
"clas": "^Z2UI5_C(L|X)",
"intf": "^Z2UI5_IF",
"prog": "^Z",
"fugr": "^Z",
"tabl": "^Z",
"ttyp": "^Z",
"dtel": "^Z",
"doma": "^Z",
"msag": "^Z",
"tran": "^Z",
"enqu": "^EZ",
"auth": "^Z",
"pinf": "^Z",
"idoc": "^Z",
"xslt": "^Z",
"ssfo": "^Z",
"ssst": "^Z",
"shlp": "^Z"
},
"obsolete_statement": true,
"omit_parameter_name": false,
"omit_preceding_zeros": true,
"omit_receiving": true,
"parser_702_chaining": true,
"parser_error": true,
"parser_missing_space": true,
"pragma_style": true,
"prefer_corresponding": true,
"prefer_inline": {
"severity": "Warning"
},
"prefer_is_not": true,
"prefer_raise_exception_new": true,
"prefer_returning_to_exporting": false,
"prefer_xsdbool": true,
"preferred_compare_operator": true,
"prefix_is_current_class": {
"severity": "Warning"
},
"reduce_string_templates": true,
"release_idoc": true,
"remove_descriptions": {
"exclude": [],
"severity": "Error",
"ignoreExceptions": false,
"ignoreWorkflow": true
},
"rfc_error_handling": true,
"select_add_order_by": true,
"select_performance": true,
"selection_screen_naming": true,
"sequential_blank": {
"severity": "Warning"
},
"short_case": false,
"sicf_consistency": true,
"slow_parameter_passing": true,
"space_before_colon": true,
"space_before_dot": true,
"sql_escape_host_variables": true,
"start_at_tab": false,
"static_call_via_instance": {
"allowInTestclassIncludes": false
},
"superclass_final": true,
"superfluous_value": true,
"sy_modification": true,
"tabl_enhancement_category": true,
"try_without_catch": true,
"type_form_parameters": true,
"types_naming": false,
"uncaught_exception": true,
"unknown_types": true,
"unnecessary_chaining": true,
"unnecessary_pragma": true,
"unnecessary_return": true,
"unreachable_code": true,
"unsecure_fae": true,
"unused_ddic": true,
"unused_methods": true,
"unused_types": true,
"unused_variables": {
"severity": "Warning",
"skipNames": [ "lv_dummy", "i_mv_editor" ]
},
"use_bool_expression": true,
"use_class_based_exceptions": true,
"use_line_exists": true,
"use_new": true,
"when_others_last": true,
"whitespace_end": true,
"xml_consistency": true
}
}

10
src/00/package.devc.xml Normal file
View File

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

View File

@ -0,0 +1,176 @@
CLASS z2ui5_cl_app_demo_00 DEFINITION PUBLIC.
PUBLIC SECTION.
INTERFACES z2ui5_if_app.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS Z2UI5_CL_APP_DEMO_00 IMPLEMENTATION.
METHOD z2ui5_if_app~controller.
CASE client->get( )-lifecycle_method.
WHEN client->cs-lifecycle_method-on_event.
CASE client->get( )-event.
WHEN '0101'.
client->nav_app_call( NEW z2ui5_cl_app_demo_01( ) ).
WHEN '0102'.
client->nav_app_call( NEW z2ui5_cl_app_demo_04( ) ).
WHEN '0103'.
client->nav_app_call( NEW z2ui5_cl_app_demo_08( ) ).
WHEN '0104'.
client->nav_app_call( NEW z2ui5_cl_app_demo_10( ) ).
WHEN '0201'.
client->nav_app_call( NEW z2ui5_cl_app_demo_02( ) ).
WHEN '0202'.
client->nav_app_call( NEW z2ui5_cl_app_demo_05( ) ).
WHEN '0301'.
client->nav_app_call( NEW z2ui5_cl_app_demo_03( ) ).
WHEN '0302'.
client->nav_app_call( NEW z2ui5_cl_app_demo_19( ) ).
WHEN '0303'.
client->nav_app_call( NEW z2ui5_cl_app_demo_06( ) ).
WHEN '0304'.
client->nav_app_call( NEW z2ui5_cl_app_demo_11( ) ).
WHEN '0100'.
client->nav_app_call( NEW z2ui5_cl_app_demo_22( ) ).
WHEN '2400'.
client->nav_app_call( NEW z2ui5_cl_app_demo_24( ) ).
WHEN 'MIME_EDITOR'.
client->nav_app_call( NEW z2ui5_cl_app_demo_14( ) ).
WHEN 'TABLE_MAINTENANCE'.
client->nav_app_call( NEW z2ui5_cl_app_demo_13( ) ).
WHEN 'BACK'.
client->nav_app_leave( client->get( )-id_prev_app_stack ).
ENDCASE.
WHEN client->cs-lifecycle_method-on_rendering.
DATA(view) = client->factory_view( ).
DATA(page) = view->page( title = 'abap2UI5 - Demo Section'
navbuttontap = view->_event( 'BACK' ) ).
page->header_content(
)->link( text = 'SCN' href = 'https://blogs.sap.com/tag/abap2ui5/'
)->link( text = 'Twitter' href = 'https://twitter.com/OblomovDev'
)->link( text = 'GitHub' href = 'https://github.com/oblomov-dev/abap2ui5' ).
DATA(grid) = page->grid( default_span = 'L3 M6 S12' )->content( 'l' ).
grid->simple_form( 'HowTo - General' )->content( 'f'
)->button( text = 'Communication & Data Binding' press = view->_event( '0101' )
)->button( text = 'Events, Error & Change View' press = view->_event( '0102' )
)->button( text = 'Call new app and go back' press = view->_event( '2400' )
)->button( text = 'Messages (Toast, Box, Strip)' press = view->_event( '0103' )
).
grid->simple_form( 'HowTo - General II' )->content( 'f'
)->button( text = 'Layout (Header, Footer, Grid)' press = view->_event( '0104' )
)->button( text = 'Scrolling & Focus' press = view->_event( '0100' )
" )->button( text = 'Popups I' press = view->_event( '0101' )
" )->button( text = 'Popups II (F4 Help)' press = view->_event( '0101' )
).
grid->simple_form( 'HowTo - Selection-Screen' )->content( 'f'
)->button( text = 'Basic' press = view->_event( '0201' )
)->button( text = 'More Controls' press = view->_event( '0202' ) ).
grid->simple_form( 'HowTo - Tables' )->content( 'f'
)->button( text = 'List' press = view->_event( '0301' )
)->button( text = 'Toolbar, Scroll Container' press = view->_event( '0303' )
" )->button( text = 'Selection Modes' press = view->_event( '0302' )
)->button( text = 'Editable' press = view->_event( '0304' )
" )->button( text = 'Cell changes' press = view->_event( '0304' )
).
grid = page->grid( default_span = 'L12 M12 S12' ).
DATA(form) = grid->simple_form( 'Applications and Examples' )->vbox( ).
form->flex_box( class = 'columns'
)->button( text = 'MIME Editor' press = view->_event( 'MIME_EDITOR' )
)->get(
)->layout_data(
)->flex_item_data(
growFactor = '1'
styleclass = 'sapUiTinyMargin'
)->get_parent( )->get_parent(
)->text( text = 'Use the sap.ui.codeeditor to develop editor apps - for instance edit files form the MIME Repository'
)->get(
)->layout_data(
)->flex_item_data(
growFactor = '3'
styleclass = 'sapUiTinyMargin'
).
form->flex_box( class = 'columns'
)->button( text = 'Table Maintenance' press = view->_event( 'TABLE_MAINTENANCE' )
)->get(
)->layout_data(
)->flex_item_data(
growFactor = '1'
styleclass = 'sapUiTinyMargin'
)->get_parent( )->get_parent(
)->text( text = 'Use the sap.ui.table to develop table maintenance apps - import/export data in csv/json/xml, edit entries in the table control and save it to database'
)->get(
)->layout_data(
)->flex_item_data(
growFactor = '3'
styleclass = 'sapUiTinyMargin'
).
*
* form->flex_box( class = 'columns'
* )->button( text = 'File Upload/Download' press = view->_event( 'TABLE_MAINTENANCE' ) )->get(
* )->layout_data(
* )->flex_item_data( grow_Factor = '1' style_class = 'sapUiTinyMargin' )->get_parent( )->get_parent(
* )->text( text = 'Use the sap.ui.fileuploader to develop file transfer apps - upload files of jpeg/pdf/zip, display the content or download the data again'
* )->get( )->layout_data( )->flex_item_data( grow_Factor = '3' style_class = 'sapUiTinyMargin' ).
*
* form->flex_box( class = 'columns'
* )->button( text = 'Visualisation 1' press = view->_event( 'TABLE_MAINTENANCE' ) )->get(
* )->layout_data(
* )->flex_item_data( grow_Factor = '1' style_class = 'sapUiTinyMargin' )->get_parent( )->get_parent(
* )->text( text = 'Use the sap.ui.fileuploader to develop file transfer apps - upload files of jpeg/pdf/zip, display the content or download the data again'
* )->get( )->layout_data( )->flex_item_data( grow_Factor = '3' style_class = 'sapUiTinyMargin' ).
*
* form->flex_box( class = 'columns'
* )->button( text = 'Visualisation 2' press = view->_event( 'TABLE_MAINTENANCE' ) )->get(
* )->layout_data(
* )->flex_item_data( grow_Factor = '1' style_class = 'sapUiTinyMargin' )->get_parent( )->get_parent(
* )->text( text = 'Use the sap.ui.fileuploader to develop file transfer apps - upload files of jpeg/pdf/zip, display the content or download the data again'
* )->get( )->layout_data( )->flex_item_data( grow_Factor = '3' style_class = 'sapUiTinyMargin' ).
*
ENDCASE.
ENDMETHOD.
ENDCLASS.

View File

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

View File

@ -0,0 +1,54 @@
CLASS z2ui5_cl_app_demo_01 DEFINITION PUBLIC.
PUBLIC SECTION.
INTERFACES z2ui5_if_app.
DATA product TYPE string.
DATA quantity TYPE string.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS z2ui5_cl_app_demo_01 IMPLEMENTATION.
METHOD z2ui5_if_app~controller.
CASE client->get( )-lifecycle_method.
WHEN client->cs-lifecycle_method-on_init.
product = 'tomato'.
quantity = '500'.
WHEN client->cs-lifecycle_method-on_event.
CASE client->get( )-event.
WHEN 'BUTTON_POST'.
client->popup_message_toast( |{ product } { quantity } ST - send to the server| ).
WHEN 'BACK'.
client->nav_app_leave( client->get( )-id_prev_app_stack ).
ENDCASE.
WHEN client->cs-lifecycle_method-on_rendering.
DATA(view) = client->factory_view( ).
DATA(page) = view->page( title = 'abap2UI5 - First Example' navbuttontap = view->_event( 'BACK' ) ).
page->header_content( )->link( text = 'Go to Source Code' href = client->get( )-s_request-url_source_code ).
page->simple_form( 'Form Title'
)->content( 'f'
)->title( 'Input'
)->label( 'quantity'
)->input( view->_bind( quantity )
)->label( 'product'
)->input( value = product editable = abap_False
)->button( text = 'post' press = view->_event( 'BUTTON_POST' ) ).
ENDCASE.
ENDMETHOD.
ENDCLASS.

View File

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

View File

@ -0,0 +1,198 @@
CLASS z2ui5_cl_app_demo_02 DEFINITION PUBLIC.
PUBLIC SECTION.
INTERFACES z2ui5_if_app.
DATA:
BEGIN OF screen,
check_is_active TYPE abap_bool,
colour TYPE string,
combo_key TYPE string,
segment_key TYPE string,
date TYPE string,
date_time TYPE string,
time_start TYPE string,
time_end TYPE string,
check_switch_01 TYPE abap_bool VALUE abap_false,
check_switch_02 TYPE abap_bool VALUE abap_false,
END OF screen.
TYPES:
BEGIN OF s_suggestion_items,
value TYPE string,
descr TYPE string,
END OF s_suggestion_items.
TYPES:
BEGIN OF s_combobox,
key TYPE string,
text TYPE string,
END OF s_combobox.
TYPES ty_t_combo TYPE STANDARD TABLE OF s_combobox WITH EMPTY KEY.
DATA mt_suggestion TYPE STANDARD TABLE OF s_suggestion_items WITH EMPTY KEY.
PROTECTED SECTION.
METHODS z2ui5_on_rendering
IMPORTING
client TYPE REF TO z2ui5_if_client.
METHODS z2ui5_on_event
IMPORTING
client TYPE REF TO z2ui5_if_client.
METHODS z2ui5_on_init.
PRIVATE SECTION.
ENDCLASS.
CLASS z2ui5_cl_app_demo_02 IMPLEMENTATION.
METHOD z2ui5_if_app~controller.
CASE client->get( )-lifecycle_method.
WHEN client->cs-lifecycle_method-on_init.
z2ui5_on_init( ).
WHEN client->cs-lifecycle_method-on_event.
z2ui5_on_event( client ).
WHEN client->cs-lifecycle_method-on_rendering.
z2ui5_on_rendering( client ).
ENDCASE.
ENDMETHOD.
METHOD z2ui5_on_rendering.
DATA(view) = client->factory_view( ).
DATA(page) = view->page( title = 'abap2UI5 - Selection-Screen Example' navbuttontap = view->_event( 'BACK' ) ).
page->header_content( )->link( text = 'Go to Source Code' href = client->get( )-s_request-url_source_code ).
DATA(grid) = page->grid( 'L6 M12 S12' )->content( 'l' ).
grid->simple_form( 'Input' )->content( 'f'
)->label( 'Input with value help'
)->input(
value = view->_bind( screen-colour )
placeholder = 'fill in your favorite colour'
suggestionitems = view->_bind_one_way( mt_suggestion )
showsuggestion = abap_true
)->get(
)->suggestion_items( )->get(
)->list_item( text = '{VALUE}' additionalText = '{DESCR}'
).
grid->simple_form( 'Time Inputs' )->content( 'f'
)->label( 'Date'
)->date_picker( view->_bind( screen-date )
)->label( 'Date and Time'
)->date_time_picker( view->_bind( screen-date_time )
)->label( 'Time Begin/End'
)->time_picker( view->_bind( screen-time_start )
)->time_picker( view->_bind( screen-time_end ) ).
data(form) = page->grid( default_span = 'L12 M12 S12' )->content( 'l'
)->simple_form( 'Input with select options' )->content( 'f' ).
form->label( 'Checkbox'
)->checkbox(
selected = view->_bind( screen-check_is_active )
text = 'this is a checkbox'
enabled = abap_true
)->label( 'Combobox'
)->combobox(
selectedkey = view->_bind( screen-combo_key )
items = view->_bind_one_way( VALUE ty_t_combo(
( key = 'BLUE' text = 'green' )
( key = 'GREEN' text = 'blue' )
( key = 'BLACK' text = 'red' )
( key = 'GRAY' text = 'gray' ) )
) )->get( )->item( key = '{KEY}' text = '{TEXT}'
)->get_parent( )->get_parent(
)->label( 'Segmented Button'
)->segmented_button( view->_bind( screen-segment_key ) )->get(
)->items( )->get(
)->segmented_button_item( key = 'BLUE' icon = 'sap-icon://accept' text = 'blue'
)->segmented_button_item( key = 'GREEN' icon = 'sap-icon://add-favorite' text = 'green'
)->segmented_button_item( key = 'BLACK' icon = 'sap-icon://attachment' text = 'black'
)->get_parent( )->get_parent( ).
form->label( 'Switch disabled' ).
form->switch( enabled = abap_false customtexton = 'A' customtextoff = 'B' ).
form->label( 'Switch accept/reject' ).
form->switch( state = view->_bind( screen-check_switch_01 ) customtexton = 'on' customtextoff = 'off' type = 'AcceptReject' ).
form->label( 'Switch normal' ).
form->switch( state = view->_bind( screen-check_switch_02 ) customtexton = 'YES' customtextoff = 'NO' ).
page->footer( )->overflow_toolbar(
)->toolbar_spacer(
)->button(
text = 'Clear'
press = view->_event( 'BUTTON_CLEAR' )
type = 'Reject'
icon = 'sap-icon://delete'
)->button(
text = 'Send to Server'
press = view->_event( 'BUTTON_SEND' )
type = 'Success' ).
ENDMETHOD.
METHOD z2ui5_on_event.
CASE client->get( )-event.
WHEN 'BUTTON_SEND'.
client->popup_message_box( 'Values were send to the server successfully' ).
WHEN 'BUTTON_CLEAR'.
CLEAR screen.
client->popup_message_toast( 'View initialized' ).
WHEN 'BACK'.
client->nav_app_leave( client->get( )-id_prev_app_stack ).
ENDCASE.
ENDMETHOD.
METHOD z2ui5_on_init.
screen = VALUE #(
check_is_active = abap_true
colour = 'BLUE'
combo_key = 'GRAY'
segment_key = 'GREEN'
date = '07.12.22'
date_time = '23.12.2022, 19:27:20'
time_start = '05:24:00'
time_end = '17:23:57'
).
mt_suggestion = VALUE #(
( descr = 'Green' value = 'GREEN' )
( descr = 'Blue' value = 'BLUE' )
( descr = 'Black' value = 'BLACK' )
( descr = 'Grey' value = 'GREY' )
( descr = 'Blue2' value = 'BLUE2' )
( descr = 'Blue3' value = 'BLUE3' ) ).
ENDMETHOD.
ENDCLASS.

View File

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

View File

@ -0,0 +1,72 @@
CLASS z2ui5_cl_app_demo_03 DEFINITION PUBLIC.
PUBLIC SECTION.
INTERFACES z2ui5_if_app.
TYPES:
BEGIN OF ty_row,
title TYPE string,
value TYPE string,
descr TYPE string,
icon TYPE string,
info TYPE string,
checkbox TYPE abap_bool,
END OF ty_row.
DATA t_tab TYPE STANDARD TABLE OF ty_row WITH EMPTY KEY.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS z2ui5_cl_app_demo_03 IMPLEMENTATION.
METHOD z2ui5_if_app~controller.
CASE client->get( )-lifecycle_method.
WHEN client->cs-lifecycle_method-on_init.
t_tab = VALUE #(
( title = 'Hans' info = 'completed' descr = 'this is a description' icon = 'sap-icon://account' )
( title = 'Hans' info = 'incompleted' descr = 'this is a description' icon = 'sap-icon://account' )
( title = 'Hans' info = 'working' descr = 'this is a description' icon = 'sap-icon://account' )
( title = 'Hans' info = 'working' descr = 'this is a description' icon = 'sap-icon://account' )
( title = 'Hans' info = 'completed' descr = 'this is a description' icon = 'sap-icon://account' )
( title = 'Hans' info = 'completed' descr = 'this is a description' icon = 'sap-icon://account' )
).
WHEN client->cs-lifecycle_method-on_event.
CASE client->get( )-event.
WHEN 'BACK'.
client->nav_app_leave( client->get( )-id_prev_app_stack ).
ENDCASE.
WHEN client->cs-lifecycle_method-on_rendering.
DATA(view) = client->factory_view( ).
DATA(page) = view->page( title = 'abap2UI5 - List' navbuttontap = view->_event( 'BACK' ) ).
page->header_content( )->link( text = 'Go to Source Code' href = client->get( )-s_request-url_source_code ).
page->list(
headertext = 'List Ouput'
items = view->_bind_one_way( t_tab )
)->standard_list_item(
title = '{TITLE}'
description = '{DESCR}'
icon = '{ICON}'
info = '{INFO}'
).
ENDCASE.
ENDMETHOD.
ENDCLASS.

View File

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

View File

@ -0,0 +1,122 @@
CLASS z2ui5_cl_app_demo_04 DEFINITION PUBLIC.
PUBLIC SECTION.
INTERFACES z2ui5_if_app.
CLASS-METHODS factory
IMPORTING
i_app TYPE REF TO z2ui5_if_app
i_name_attri TYPE string
RETURNING
VALUE(r_result) TYPE REF TO z2ui5_cl_app_demo_04.
DATA mo_app TYPE REF TO z2ui5_if_app.
DATA mv_name_attri TYPE string.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS z2ui5_cl_app_demo_04 IMPLEMENTATION.
METHOD factory.
r_result = NEW #( ).
r_result->mo_app = i_app.
r_result->mv_name_attri = i_name_attri.
ENDMETHOD.
METHOD z2ui5_if_app~controller.
CASE client->get( )-lifecycle_method.
"when the app starts for the first time, this part is calles
WHEN client->cs-lifecycle_method-on_init.
"set init values or view here
client->view_show( 'MAIN' ).
client->popup_message_box( 'method on_init of the abap controller was called' ).
"every event raised by an ui5 control , is send to this part
WHEN client->cs-lifecycle_method-on_event.
CASE client->get( )-event.
WHEN 'BUTTON_ROUNDTRIP'.
client->popup_message_box( 'server-client roundtrip, method on_event of the abap controller was called' ).
WHEN 'BUTTON_RESTART'.
client->nav_app_call( NEW z2ui5_cl_app_demo_04( ) ).
WHEN 'BUTTON_CHANGE_APP'.
client->nav_app_call( NEW z2ui5_cl_app_demo_01( ) ).
WHEN 'BUTTON_CHANGE_VIEW'.
"read the active view
CASE client->get( )-view_active.
WHEN 'MAIN'.
client->view_show( 'SECOND' ).
WHEN 'SECOND'.
client->view_show( 'MAIN' ).
ENDCASE.
WHEN 'BUTTON_ERROR'.
DATA(lv_dummy) = 1 / 0.
WHEN 'BACK'.
client->nav_app_leave( client->get( )-id_prev_app_stack ).
ENDCASE.
"when the server is called, in the end this part is called to get the actual view of the app
WHEN client->cs-lifecycle_method-on_rendering.
"Definition of View Main
DATA(view) = client->factory_view( 'MAIN' ).
view->page( title = 'abap2UI5 - Controller' navbuttontap = view->_event( 'BACK' )
)->header_content( )->link( text = 'Go to Source Code' href = client->get( )-s_request-url_source_code )->get_parent(
)->grid( 'L6 M12 S12' )->content( 'l'
)->simple_form( 'Controller' )->content( 'f'
)->label( 'Roundtrip'
)->button( text = 'Client/Server Interaction' press = view->_event( 'BUTTON_ROUNDTRIP' )
)->label( 'System'
)->button( text = 'Restart App' press = view->_event( 'BUTTON_RESTART' )
)->label( 'Change View'
)->button( text = 'Display View SECOND' press = view->_event( 'BUTTON_CHANGE_VIEW' )
)->label( 'CX_SY_ZERO_DIVIDE'
)->button( text = 'Error not catched by the user' press = view->_event( 'BUTTON_ERROR' )
).
"Definition of View Second
view = client->factory_view( 'SECOND' ).
view->page( title = 'ABAP2UI5 - Controller' navbuttontap = view->_event( 'BACK' )
)->grid( default_span = 'L12 M12 S12' )->content( 'l'
)->simple_form( 'View Second' )->content( 'f'
)->label( 'Change View'
)->button( text = 'Display View MAIN' press = view->_event( 'BUTTON_CHANGE_VIEW' ) ).
ENDCASE.
ENDMETHOD.
ENDCLASS.

View File

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

View File

@ -0,0 +1,190 @@
CLASS z2ui5_cl_app_demo_05 DEFINITION PUBLIC.
PUBLIC SECTION.
INTERFACES z2ui5_if_app.
DATA:
BEGIN OF screen,
check_initialized TYPE abap_bool,
check_is_active TYPE abap_bool,
colour TYPE string,
combo_key TYPE string,
segment_key TYPE string,
date TYPE string,
date_time TYPE string,
time_start TYPE string,
time_end TYPE string,
check_switch_01 TYPE abap_bool VALUE abap_false,
check_switch_02 TYPE abap_bool VALUE abap_false,
progress_value TYPE string VALUE '3',
step_val_01 TYPE string VALUE '4',
step_val_02 TYPE string VALUE '10',
text_area TYPE string,
END OF screen.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS z2ui5_cl_app_demo_05 IMPLEMENTATION.
METHOD z2ui5_if_app~controller.
CASE client->get( )-lifecycle_method.
WHEN client->cs-lifecycle_method-on_init.
screen = VALUE #(
check_initialized = abap_true
check_is_active = abap_true
colour = 'BLUE'
combo_key = 'GRAY'
segment_key = 'GREEN'
date = '07.12.22'
date_time = '23.12.2022, 19:27:20'
time_start = '05:24:00'
time_end = '17:23:57' ).
WHEN client->cs-lifecycle_method-on_event.
"user event handling
CASE client->get( )-event.
WHEN 'BUTTON_ROUNDTRIP'.
DATA(lv_dummy) = 'user pressed a button, your custom implementation can be called here'.
WHEN 'BUTTON_MSG_BOX'.
client->popup_message_box(
text = 'this is a message box with a custom text'
type = 'success' ).
WHEN 'BACK'.
client->nav_app_leave( client->get( )-id_prev_app_stack ).
ENDCASE.
WHEN client->cs-lifecycle_method-on_rendering.
DATA(view) = client->factory_view( ).
DATA(page) = view->page( title = 'abap2UI5 - Selection-Screen more Controls' navbuttontap = view->_event( 'BACK' ) ).
page->header_content( )->link( text = 'Go to Source Code' href = client->get( )-s_request-url_source_code ).
page->generic_tag(
arialabelledby = 'genericTagLabel'
text = 'Project Cost'
design = 'StatusIconHidden'
status = 'Error'
class = 'sapUiSmallMarginBottom'
)->object_number(
state = 'Error'
emphasized = 'false'
number = '3.5M'
unit = 'EUR'
).
page->generic_tag(
arialabelledby = 'genericTagLabel'
text = 'Project Cost'
design = 'StatusIconHidden'
status = 'Success'
class = 'sapUiSmallMarginBottom'
)->object_number(
state = 'Success'
emphasized = 'false'
number = '3.5M'
unit = 'EUR'
).
page->generic_tag(
arialabelledby = 'genericTagLabel'
text = 'Input'
design = 'StatusIconHidden'
" status = 'Error'
class = 'sapUiSmallMarginBottom'
)->object_number(
" state = 'Error'
emphasized = 'true'
number = '3.5M'
unit = 'EUR'
).
DATA(grid) = page->grid( 'L12 M12 S12' )->content( 'l' ).
grid->simple_form( 'More Controls' )->content( 'f'
)->label( 'ProgressIndicator'
)->progress_indicator( percentvalue = screen-progress_value displayvalue = '0,44GB of 32GB used' showvalue = abap_true state = 'Success'
)->label( 'StepInput'
)->step_input( value = view->_bind( screen-step_val_01 ) step = '2' min = '0' max = '20'
)->step_input( value = view->_bind( screen-step_val_02 ) step = '10' min = '0' max = '100'
)->label( 'Range Slider'
)->range_slider(
max = '100'
min = '0'
step = '10'
startvalue = '10'
endvalue = '20'
showtickmarks = abap_true
labelinterval = '2'
width = '80%'
class = 'sapUiTinyMargin' ).
grid->simple_form( 'Text Area' )->label( 'text area'
)->text_area(
" value = view->_bind( screen-text_area )
value = `Lorem ipsum dolor st amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd` &&
` gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. Lorem ipsum dolor sit am` &&
`et, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat. Lorem ipsum dolor st amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat,` &&
` sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor i` &&
`nvidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat.`
growing = abap_true
growingMaxLines = '7' width = '100%' ).
page->footer( )->overflow_toolbar(
)->button(
text = 'Button with Badge'
class = 'sapUiTinyMarginBeginEnd'
icon = 'sap-icon://cart'
)->get(
)->custom_data(
)->badge_custom_data(
key = 'badge'
value = '5'
visible = abap_true
)->get_parent( )->get_parent(
)->button(
text = 'Emphasized Button with Badge'
type = 'Emphasized'
class = 'sapUiTinyMarginBeginEnd'
icon = 'sap-icon://cart'
)->get(
)->custom_data(
)->badge_custom_data(
key = 'badge'
value = '23'
visible = abap_true
)->get_parent( )->get_parent(
)->toolbar_spacer(
)->overflow_toolbar_button(
text = 'Clear'
press = view->_event( 'BUTTON_CLEAR' )
type = 'Reject'
icon = 'sap-icon://delete'
)->overflow_toolbar_button(
text = 'Send to Server'
press = view->_event( 'BUTTON_SEND' )
type = 'Success' ).
ENDCASE.
ENDMETHOD.
ENDCLASS.

View File

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

View File

@ -0,0 +1,94 @@
CLASS z2ui5_cl_app_demo_06 DEFINITION PUBLIC.
PUBLIC SECTION.
INTERFACES z2ui5_if_app.
TYPES:
BEGIN OF ty_row,
title TYPE string,
value TYPE string,
descr TYPE string,
icon TYPE string,
info TYPE string,
checkbox TYPE abap_bool,
END OF ty_row.
DATA t_tab TYPE STANDARD TABLE OF ty_row WITH EMPTY KEY.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS Z2UI5_CL_APP_DEMO_06 IMPLEMENTATION.
METHOD z2ui5_if_app~controller.
CASE client->get( )-lifecycle_method.
WHEN client->cs-lifecycle_method-on_init.
t_tab = REDUCE #( INIT ret = VALUE #( ) FOR n = 1 WHILE n < 101 NEXT ret =
VALUE #( BASE ret ( title = 'Hans' value = 'red' info = 'completed' descr = 'this is a description' checkbox = abap_true ) ) ).
WHEN client->cs-lifecycle_method-on_event.
CASE client->get( )-event.
WHEN 'BUTTON_SORT'.
SORT t_tab BY value.
WHEN 'BUTTON_POST'.
client->popup_message_box( 'button post was pressed' ).
WHEN 'BACK'.
client->nav_app_leave( client->get( )-id_prev_app_stack ).
ENDCASE.
WHEN client->cs-lifecycle_method-on_rendering.
DATA(view) = client->factory_view( ).
DATA(page) = view->page( title = 'abap2UI5 - Scroll Container with Table and Toolbar' navbuttontap = view->_event( 'BACK' ) ).
page->header_content( )->link( text = 'Go to Source Code' href = client->get( )-s_request-url_source_code ).
"set table and container
DATA(tab) = page->scroll_container( '70%' )->table(
items = view->_bind_one_way( t_tab )
sticky = 'ColumnHeaders,HeaderToolbar'
).
"set toolbar
tab->header_toolbar( )->overflow_toolbar(
)->title( 'title of the table'
)->toolbar_spacer(
)->button( text = 'Sort' press = view->_event( 'BUTTON_SORT' )
)->button( text = 'Post' press = view->_event( 'BUTTON_POST' )
).
"set header
tab->columns(
)->column( )->text( 'Title' )->get_parent(
)->column( )->text( 'Color' )->get_parent(
)->column( )->text( 'Info' )->get_parent(
)->column( )->text( 'Description' )->get_parent(
)->column( )->text( 'Checkbox' ).
"set content
tab->items( )->column_list_item( )->cells(
)->text( '{TITLE}'
)->text( '{VALUE}'
)->text( '{INFO}'
)->text( '{DESCR}'
)->checkbox( '{CHECKBOX}' ).
ENDCASE.
ENDMETHOD.
ENDCLASS.

View File

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

View File

@ -0,0 +1,90 @@
CLASS z2ui5_cl_app_demo_07 DEFINITION PUBLIC.
PUBLIC SECTION.
INTERFACES z2ui5_if_app.
TYPES:
BEGIN OF ty_row,
selkz TYPE abap_bool,
title TYPE string,
value TYPE string,
descr TYPE string,
info TYPE string,
checkbox TYPE abap_bool,
END OF ty_row.
DATA t_tab TYPE STANDARD TABLE OF ty_row WITH EMPTY KEY.
DATA mv_value TYPE string VALUE 'button'.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS Z2UI5_CL_APP_DEMO_07 IMPLEMENTATION.
METHOD z2ui5_if_app~controller.
CASE client->get( )-lifecycle_method.
WHEN client->cs-lifecycle_method-on_init.
t_tab = REDUCE #( INIT ret = VALUE #( ) FOR n = 1 WHILE n < 10000 NEXT
ret = VALUE #( BASE ret ( title = 'Hans' value = 'red' info = 'completed' descr = 'this is a description' checkbox = abap_true ) ) ).
WHEN client->cs-lifecycle_method-on_event.
CASE client->get( )-event.
WHEN 'BACK'.
client->nav_app_leave( client->get( )-id_prev_app_stack ).
ENDCASE.
WHEN client->cs-lifecycle_method-on_rendering.
DATA(view) = client->factory_view( ).
DATA(page) = view->page( title = 'Example - ZZ2UI5_CL_APP_DEMO_07' navbuttontap = view->_event( 'BACK' ) ).
page->header_content( )->link( text = 'Go to Source Code' href = client->get( )-s_request-url_source_code ).
page->input( value = view->_bind( mv_value ) ).
DATA(tab) = page->table(
headertext = 'Table with 100 entries'
mode = 'MultiSelect'
items = view->_bind( t_tab ) ).
"set header
tab->columns(
)->column( )->text( 'Title' )->get_parent(
)->column( )->text( 'Color' )->get_parent(
)->column( )->text( 'Info' )->get_parent(
)->column( )->text( 'Description' )->get_parent(
)->column( )->text( 'Checkbox' ).
"set content
tab->items( )->column_list_item(
selected = '{SELKZ}'
)->cells(
)->text( '{TITLE}'
)->text( '{VALUE}'
)->text( '{INFO}'
)->text( '{DESCR}'
)->checkbox( selected = '{CHECKBOX}' enabled = abap_false ).
page->footer( )->overflow_toolbar(
)->toolbar_spacer(
)->button(
text = 'Send to Server'
press = view->_event( 'BUTTON_SEND' )
type = 'Success' ).
ENDCASE.
ENDMETHOD.
ENDCLASS.

View File

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

View File

@ -0,0 +1,92 @@
CLASS z2ui5_cl_app_demo_08 DEFINITION PUBLIC.
PUBLIC SECTION.
INTERFACES z2ui5_if_app.
DATA check_strip_active TYPE abap_bool.
DATA strip_type TYPE string.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS z2ui5_cl_app_demo_08 IMPLEMENTATION.
METHOD z2ui5_if_app~controller.
CASE client->get( )-lifecycle_method.
WHEN client->cs-lifecycle_method-on_event.
CASE client->get( )-event.
WHEN 'BUTTON_MESSAGE_BOX'.
client->popup_message_box( 'this is a message box' ).
WHEN 'BUTTON_MESSAGE_BOX_ERROR'.
client->popup_message_box( text = 'this is a message box' type = 'error' ).
WHEN 'BUTTON_MESSAGE_BOX_SUCCESS'.
client->popup_message_box( text = 'this is a message box' type = 'success' ).
WHEN 'BUTTON_MESSAGE_BOX_WARNING'.
client->popup_message_box( text = 'this is a message box' type = 'warning' ).
WHEN 'BUTTON_MESSAGE_TOAST'.
client->popup_message_toast( 'this is a message toast' ).
WHEN 'BUTTON_MESSAGE_STRIP_INFO'.
check_strip_active = xsdbool( check_strip_active = abap_false ).
strip_type = 'Information'.
WHEN 'BUTTON_MESSAGE_STRIP_ERROR'.
check_strip_active = xsdbool( check_strip_active = abap_false ).
strip_type = 'Error'.
WHEN 'BUTTON_MESSAGE_STRIP_SUCCESS'.
check_strip_active = xsdbool( check_strip_active = abap_false ).
strip_type = 'Success'.
WHEN 'BACK'.
client->nav_app_leave( client->get( )-id_prev_app_stack ).
ENDCASE.
WHEN client->cs-lifecycle_method-on_rendering.
"Definition of View Main
DATA(view) = client->factory_view( 'MAIN' ).
DATA(page) = view->page( title = 'abap2UI5 - Messages' navbuttontap = view->_event( 'BACK' ) ).
page->header_content( )->link( text = 'Go to Source Code' href = client->get( )-s_request-url_source_code ).
IF check_strip_active = abap_true.
page->message_strip( text = 'This is a Message Strip' type = strip_type ).
ENDIF.
page->grid( 'L6 M12 S12' )->content( 'l'
)->simple_form( 'Message Box' )->content( 'f'
)->button( text = 'information' press = view->_event( 'BUTTON_MESSAGE_BOX' )
)->button( text = 'success' press = view->_event( 'BUTTON_MESSAGE_BOX_SUCCESS' )
)->button( text = 'error' press = view->_event( 'BUTTON_MESSAGE_BOX_ERROR' )
)->button( text = 'warning' press = view->_event( 'BUTTON_MESSAGE_BOX_WARNING' ) ).
page->grid( 'L6 M12 S12' )->content( 'l'
)->simple_form( 'Message Strip' )->content( 'f'
)->button( text = 'success' press = view->_event( 'BUTTON_MESSAGE_STRIP_SUCCESS' )
)->button( text = 'error' press = view->_event( 'BUTTON_MESSAGE_STRIP_ERROR' )
)->button( text = 'information' press = view->_event( 'BUTTON_MESSAGE_STRIP_INFO' ) ).
page->grid( 'L6 M12 S12' )->content( 'l'
)->simple_form( 'Display' )->content( 'f'
)->button( text = 'Message Toast' press = view->_event( 'BUTTON_MESSAGE_TOAST' ) ).
ENDCASE.
ENDMETHOD.
ENDCLASS.

View File

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

View File

@ -0,0 +1,103 @@
CLASS z2ui5_cl_app_demo_10 DEFINITION PUBLIC.
PUBLIC SECTION.
INTERFACES z2ui5_if_app.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS Z2UI5_CL_APP_DEMO_10 IMPLEMENTATION.
METHOD z2ui5_if_app~controller.
CASE client->get( )-lifecycle_method.
WHEN client->cs-lifecycle_method-on_init.
"implement init actions here...
WHEN client->cs-lifecycle_method-on_event.
CASE client->get( )-event.
WHEN '...'.
"implement event handling here...
WHEN 'BACK'.
client->nav_app_leave( client->get( )-id_prev_app_stack ).
ENDCASE.
WHEN client->cs-lifecycle_method-on_rendering.
DATA(view) = client->factory_view( ).
DATA(page) = view->page( title = 'abap2UI5 - Demo Layout' navbuttontap = view->_event( 'BACK' ) ).
page->header_content(
)->button( text = 'button'
)->text( 'text'
)->link( text = 'link' href = 'https://twitter.com/OblomovDev'
)->link( text = 'Go to Source Code' href = client->get( )-s_request-url_source_code
).
page->sub_header( )->overflow_toolbar(
)->button( text = 'button'
)->text( 'text'
)->link( text = 'link' href = 'https://twitter.com/OblomovDev'
)->toolbar_spacer(
)->text( 'subheader'
)->toolbar_spacer(
)->button( text = 'button'
)->text( 'text'
)->link( text = 'link' href = 'https://twitter.com/OblomovDev' ).
DATA(grid) = page->grid( 'L4 M4 S4' )->content( 'l' ).
grid->simple_form( 'Grid width 33%' )->content( 'f'
)->button( text = 'button'
)->text( 'text'
)->link( text = 'link' href = 'https://twitter.com/OblomovDev' ).
grid->simple_form( 'Grid width 33%' )->content( 'f'
)->button( text = 'button'
)->text( 'text'
)->link( text = 'link' href = 'https://twitter.com/OblomovDev' ).
grid->simple_form( 'Grid width 33%' )->content( 'f'
)->button( text = 'button'
)->text( 'text'
)->link( text = 'link' href = 'https://twitter.com/OblomovDev' ).
grid = page->grid( 'L12 M12 S12' )->content( 'l' ).
grid->simple_form( 'grid width 100%' )->content( 'f'
)->button( text = 'button'
)->text( 'text'
)->link( text = 'link' href = 'https://twitter.com/OblomovDev' ).
page->footer( )->overflow_toolbar(
)->button( text = 'button'
)->text( 'text'
)->link( text = 'link' href = 'https://twitter.com/OblomovDev'
)->toolbar_spacer(
)->text( 'footer'
)->toolbar_spacer(
)->text( 'text'
)->link( text = 'link' href = 'https://twitter.com/OblomovDev'
)->button( text = 'reject' type = 'Reject'
)->button( text = 'accept' type = 'Success'
).
ENDCASE.
ENDMETHOD.
ENDCLASS.

View File

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

View File

@ -0,0 +1,132 @@
CLASS z2ui5_cl_app_demo_11 DEFINITION PUBLIC.
PUBLIC SECTION.
INTERFACES z2ui5_if_app.
TYPES:
BEGIN OF ty_row,
selkz TYPE abap_bool,
title TYPE string,
value TYPE string,
descr TYPE string,
icon TYPE string,
info TYPE string,
checkbox TYPE abap_bool,
END OF ty_row.
DATA t_tab TYPE STANDARD TABLE OF ty_row WITH EMPTY KEY.
DATA check_editable_active TYPE abap_bool.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS z2ui5_cl_app_demo_11 IMPLEMENTATION.
METHOD z2ui5_if_app~controller.
CASE client->get( )-lifecycle_method.
WHEN client->cs-lifecycle_method-on_init.
check_editable_active = abap_false.
t_tab = VALUE #(
( title = 'entry 01' value = 'red' info = 'completed' descr = 'this is a description' checkbox = abap_true )
( title = 'entry 02' value = 'blue' info = 'completed' descr = 'this is a description' checkbox = abap_true )
( title = 'entry 03' value = 'green' info = 'completed' descr = 'this is a description' checkbox = abap_true )
( title = 'entry 04' value = 'orange' info = 'completed' descr = 'this is a description' checkbox = abap_true )
( title = 'entry 05' value = 'grey' info = 'completed' descr = 'this is a description' checkbox = abap_true )
).
WHEN client->cs-lifecycle_method-on_event.
CASE client->get( )-event.
WHEN 'BUTTON_EDIT'.
check_editable_active = xsdbool( check_editable_active = abap_false ).
WHEN 'BUTTON_DELETE'.
DELETE t_tab WHERE selkz = abap_true.
WHEN 'BUTTON_ADD'.
INSERT VALUE #( ) INTO TABLE t_tab.
WHEN 'BACK'.
client->nav_app_leave( client->get( )-id_prev_app_stack ).
ENDCASE.
WHEN client->cs-lifecycle_method-on_rendering.
DATA(view) = client->factory_view( ).
DATA(page) = view->page( title = 'abap2UI5 - Tables and editable' navbuttontap = view->_event( 'BACK' ) ).
page->header_content( )->link( text = 'Go to Source Code' href = client->get( )-s_request-url_source_code ).
DATA(tab) = page->table(
items = view->_bind( t_tab )
mode = 'MultiSelect'
).
"set toolbar
tab->header_toolbar( )->overflow_toolbar(
)->title( 'title of the table'
)->toolbar_spacer(
)->button(
icon = 'sap-icon://delete'
text = 'delete selected row'
press = view->_event( 'BUTTON_DELETE' )
)->button(
icon = 'sap-icon://add'
text = 'add'
press = view->_event( 'BUTTON_ADD' )
)->button(
icon = 'sap-icon://edit'
text = SWITCH #( check_editable_active WHEN abap_true THEN 'display' ELSE 'edit' )
press = view->_event( 'BUTTON_EDIT' )
).
"set header
tab->columns(
)->column( )->text( 'Title' )->get_parent(
)->column( )->text( 'Color' )->get_parent(
)->column( )->text( 'Info' )->get_parent(
)->column( )->text( 'Description' )->get_parent(
)->column( )->text( 'Checkbox' ).
"set toolbar
IF check_editable_active = abap_true.
tab->items( )->column_list_item( selected = '{SELKZ}' )->cells(
)->input( '{TITLE}'
)->input( '{VALUE}'
)->input( '{INFO}'
)->input( '{DESCR}'
)->checkbox( selected = '{CHECKBOX}' ).
ELSE.
tab->items( )->column_list_item( selected = '{SELKZ}' )->cells(
)->text( '{TITLE}'
)->text( '{VALUE}'
)->text( '{INFO}'
)->text( '{DESCR}'
)->checkbox( selected = '{CHECKBOX}' enabled = abap_false ).
ENDIF.
ENDCASE.
ENDMETHOD.
ENDCLASS.

View File

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

View File

@ -0,0 +1,269 @@
CLASS z2ui5_cl_app_demo_13 DEFINITION PUBLIC.
PUBLIC SECTION.
INTERFACES z2ui5_if_app.
TYPES:
BEGIN OF ty_s_spfli,
carrid TYPE c LENGTH 3,
connid TYPE n LENGTH 4,
countryfr TYPE c LENGTH 3,
cityfrom TYPE c LENGTH 20,
airpfrom TYPE c LENGTH 3,
countryto TYPE c LENGTH 3,
cityto TYPE c LENGTH 20,
airpto TYPE c LENGTH 3,
END OF ty_s_spfli.
TYPES ty_t_table TYPE STANDARD TABLE OF ty_s_spfli WITH EMPTY KEY.
DATA:
BEGIN OF ms_import,
t_table TYPE ty_t_table,
segment_key TYPE string,
editor TYPE string,
END OF ms_import.
DATA:
BEGIN OF ms_export,
t_table TYPE ty_t_table,
segment_key TYPE string,
editor TYPE string,
END OF ms_export.
DATA:
BEGIN OF ms_edit,
t_table TYPE ty_t_table,
delete_index TYPE i,
check_active TYPE abap_bool,
END OF ms_edit.
"dummy helper - not needed when using db
DATA st_db TYPE ty_T_table.
PROTECTED SECTION.
METHODS z2ui5_on_event
IMPORTING
client TYPE REF TO z2ui5_if_client.
METHODS z2ui5_on_render_view_import
IMPORTING
client TYPE REF TO z2ui5_if_client.
METHODS z2ui5_on_render_view_edit
IMPORTING
client TYPE REF TO z2ui5_if_client.
METHODS z2ui5_on_render_view_export
IMPORTING
client TYPE REF TO z2ui5_if_client.
PRIVATE SECTION.
ENDCLASS.
CLASS z2ui5_cl_app_demo_13 IMPLEMENTATION.
METHOD z2ui5_if_app~controller.
"dummy helper - not needed when using db
lcl_db=>app = me.
CASE client->get( )-lifecycle_method.
WHEN client->cs-lifecycle_method-on_init.
ms_import-segment_key = 'json'.
ms_import-editor = lcl_db=>get_test_data_json( ).
ms_export-segment_key = 'json'.
client->view_show( 'IMPORT_TABLE' ).
WHEN client->cs-lifecycle_method-on_event.
z2ui5_on_event( client ).
WHEN client->cs-lifecycle_method-on_rendering.
z2ui5_on_render_view_import( client ).
z2ui5_on_render_view_edit( client ).
z2ui5_on_render_view_export( client ).
ENDCASE.
ENDMETHOD.
METHOD z2ui5_on_event.
CASE client->get( )-event.
WHEN 'IMPORT_DB'.
ms_import-t_table = SWITCH #( ms_import-segment_key
WHEN 'json' THEN lcl_db=>get_table_by_json( ms_import-editor )
WHEN 'csv' THEN lcl_db=>get_table_by_csv( ms_import-editor )
WHEN 'xml' THEN lcl_db=>get_table_by_xml( ms_import-editor ) ).
lcl_db=>db_save( ms_import-t_table ).
client->popup_message_box( 'Table data imported successfully' ).
WHEN 'EXPORT_DB'.
ms_export-t_table = lcl_db=>db_read( ).
ms_export-editor = SWITCH #( ms_export-segment_key
WHEN 'json' THEN lcl_db=>get_json_by_table( ms_export-t_table )
WHEN 'csv' THEN lcl_db=>get_csv_by_table( ms_export-t_table )
WHEN 'xml' THEN lcl_db=>get_xml_by_table( ms_export-t_table ) ).
client->popup_message_box( 'Table data exported successfully' ).
WHEN 'IMPORT_CLEAR'.
CLEAR ms_import-editor.
WHEN 'EDIT_DB_READ'.
ms_edit-t_table = lcl_db=>db_read( ).
client->popup_message_box( 'Table read successfully' ).
WHEN 'EDIT_DB_SAVE'.
lcl_db=>db_save( ms_edit-t_table ).
client->popup_message_box( 'Table data saved to database successfully' ).
WHEN 'EDIT_ROW_DELETE'.
DELETE ms_edit-t_table INDEX ms_edit-delete_index + 1.
WHEN 'EDIT_CHANGE_MODE'.
ms_edit-check_active = xsdbool( ms_edit-check_active = abap_false ).
WHEN 'EDIT_ROW_ADD'.
INSERT VALUE #( ) INTO TABLE ms_edit-t_table.
WHEN 'BTN_IMPORT'.
client->view_show( 'IMPORT_TABLE' ).
WHEN 'BTN_EDIT'.
client->view_show( 'EDIT_TABLE' ).
WHEN 'BTN_EXPORT'.
client->view_show( 'EXPORT_TABLE' ).
WHEN 'BACK'.
client->nav_app_leave( client->get( )-id_prev_app_stack ).
ENDCASE.
ENDMETHOD.
METHOD z2ui5_on_render_view_import.
DATA(view) = client->factory_view( 'IMPORT_TABLE' ).
DATA(page) = view->page( title = 'abap2ui5 - Table Maintenance' navbuttontap = view->_event( 'BACK' ) ).
page->header_content( )->link( text = 'Demo' href = `https://twitter.com/OblomovDev/status/1634206964291911682`
)->link( text = 'Source_Code' href = client->get( )-s_request-url_source_code ).
page->sub_header( )->overflow_toolbar(
)->button( text = '(1) Import Data' press = view->_event( 'BTN_IMPORT' ) enabled = abap_false
)->button( text = '(2) Edit Data' press = view->_event( 'BTN_EDIT' )
)->button( text = '(3) Export Data' press = view->_event( 'BTN_EXPORT' ) ).
DATA(grid) = page->grid( default_span = 'L12 M12 S12' )->content( 'l' ).
grid->simple_form( '1. Import Data'
)->content( 'f'
)->label( 'Table' )->input( 'SPFLI'
)->label( 'Format'
)->segmented_button( view->_bind( ms_import-segment_key ) )->get(
)->items( )->get(
)->segmented_button_item( key = 'json' text = 'json'
)->segmented_button_item( key = 'csv' text = 'csv'
)->segmented_button_item( key = 'xml' text = 'xml' ).
grid->scroll_container( '75%' )->code_editor(
type = COND #( WHEN ms_import-segment_key = 'csv' THEN 'plain_text' ELSE ms_import-segment_key )
value = view->_bind( ms_import-editor )
editable = abap_true ).
page->footer( )->overflow_toolbar(
)->button( text = 'Clear' press = view->_event( 'IMPORT_CLEAR' ) icon = 'sap-icon://delete'
)->toolbar_spacer(
)->button( text = 'Import' press = view->_event( 'IMPORT_DB' ) type = 'Emphasized' icon = 'sap-icon://upload-to-cloud' ).
ENDMETHOD.
METHOD z2ui5_on_render_view_edit.
DATA(view) = client->factory_view( 'EDIT_TABLE' ).
DATA(page) = view->page( title = 'abap2ui5 - Table Maintenance' navbuttontap = view->_event( 'BACK' ) ).
page->sub_header( )->overflow_toolbar(
)->button( text = '(1) Import Data' press = view->_event( 'BTN_IMPORT' )
)->button( text = '(2) Edit Data' press = view->_event( 'BTN_EDIT' ) enabled = abap_false
)->button( text = '(3) Export Data' press = view->_event( 'BTN_EXPORT' ) ).
DATA(grid) = page->grid( default_span = 'L12 M12 S12' )->content( 'l' ).
grid->simple_form( '2. Edit Data'
)->content( 'f' )->label( 'Table' )->input( 'SPFLI' ).
DATA(table) = grid->ui_table(
rows = view->_bind( ms_edit-t_table )
selectionmode = 'Single'
selectedindex = view->_bind( ms_edit-delete_index ) ).
table->ui_extension( )->overflow_toolbar(
)->toolbar_spacer(
)->button( text = 'Reload' icon = 'sap-icon://refresh' press = view->_event( 'EDIT_DB_READ' )
)->button( text = 'Delete Row' icon = 'sap-icon://delete' press = view->_event( 'EDIT_ROW_DELETE' )
)->button( text = 'Add Row' icon = 'sap-icon://add' press = view->_event( 'EDIT_ROW_ADD' ) ).
DATA(columns) = table->ui_columns( ).
DATA(lt_fields) = lcl_db=>get_fieldlist_by_table( ms_edit-t_table ).
LOOP AT lt_fields INTO DATA(lv_field).
DATA(templ) = columns->ui_column( )->label( lv_field )->ui_template( ).
IF ms_edit-check_active = abap_true.
templ->input( value = `{` && lv_field && `}` ).
ELSE.
templ->text( `{` && lv_field && `}` ).
ENDIF.
ENDLOOP.
page->footer( )->overflow_toolbar(
)->button( text = 'Edit' press = view->_event( 'EDIT_CHANGE_MODE' ) icon = 'sap-icon://edit'
)->toolbar_spacer(
)->button( text = 'Save' press = view->_event( 'EDIT_DB_SAVE' ) type = 'Emphasized' icon = 'sap-icon://upload-to-cloud' ).
ENDMETHOD.
METHOD z2ui5_on_render_view_export.
DATA(view) = client->factory_view( 'EXPORT_TABLE' ).
DATA(page) = view->page( title = 'abap2ui5 - Table Maintenance' navbuttontap = view->_event( 'BACK' ) ).
page->sub_header( )->overflow_toolbar(
)->button( text = '(1) Import Data' press = view->_event( 'BTN_IMPORT' )
)->button( text = '(2) Edit Data' press = view->_event( 'BTN_EDIT' )
)->button( text = '(3) Export Data' press = view->_event( 'BTN_EXPORT' ) enabled = abap_false ).
DATA(grid) = page->grid( default_span = 'L12 M12 S12' )->content( 'l' ).
grid->simple_form( '3. Export Data'
)->content( 'f'
)->label( 'Table' )->input( 'SPFLI'
)->label( 'Format'
)->segmented_button( view->_bind( ms_export-segment_key ) )->get(
)->items( )->get(
)->segmented_button_item( key = 'json' text = 'json'
)->segmented_button_item( key = 'csv' text = 'csv'
)->segmented_button_item( key = 'xml' text = 'xml' ).
grid->scroll_container( '75%' )->code_editor(
type = COND #( WHEN ms_export-segment_key = 'csv' THEN 'plain_text' ELSE ms_import-segment_key )
value = view->_bind( ms_export-editor )
editable = abap_false ).
page->footer( )->overflow_toolbar(
)->toolbar_spacer(
)->button( text = 'Export' press = view->_event( 'EXPORT_DB' ) type = 'Emphasized' icon = 'sap-icon://download-from-cloud' ).
ENDMETHOD.
ENDCLASS.

View File

@ -0,0 +1,312 @@
CLASS lcl_db DEFINITION.
PUBLIC SECTION.
TYPES ty_t_table TYPE z2ui5_cl_app_demo_13=>ty_T_table.
CLASS-DATA app TYPE REF TO z2ui5_cl_app_demo_13.
"CLASS-DATA st_table TYPE ty_t_table.
CLASS-METHODS generate_test_data.
CLASS-METHODS get_table_by_json
IMPORTING
val TYPE string
RETURNING
VALUE(result) TYPE ty_T_table.
CLASS-METHODS get_table_by_xml
IMPORTING
val TYPE string
RETURNING
VALUE(result) TYPE ty_T_table.
CLASS-METHODS get_table_by_csv
IMPORTING
val TYPE string
RETURNING
VALUE(result) TYPE ty_T_table.
CLASS-METHODS get_csv_by_table
IMPORTING
val TYPE ty_T_table
RETURNING
VALUE(result) TYPE string.
CLASS-METHODS get_xml_by_table
IMPORTING
val TYPE ty_T_table
RETURNING
VALUE(result) TYPE string.
CLASS-METHODS get_json_by_table
IMPORTING
val TYPE ty_T_table
RETURNING
VALUE(result) TYPE string.
CLASS-METHODS get_fieldlist_by_table
IMPORTING
it_table TYPE ty_T_table
RETURNING
VALUE(result) TYPE string_table.
CLASS-METHODS db_save
IMPORTING
value TYPE ty_T_table.
CLASS-METHODS db_read
RETURNING
VALUE(result) TYPE ty_T_table.
CLASS-METHODS get_test_data_json
RETURNING
value(result) TYPE string.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS lcl_db IMPLEMENTATION.
METHOD generate_test_data.
app->st_db = VALUE #(
( carrid = 'DL' connid = '0106' countryfr = 'US' cityfrom = 'NEW YORK' airpfrom = 'JFK' countryto = 'DE' cityto = 'FRANKFURT' airpto = 'FR' )
( carrid = 'DL' connid = '0106' countryfr = 'US' cityfrom = 'NEW YORK' airpfrom = 'JFK' countryto = 'DE' cityto = 'FRANKFURT' airpto = 'FR' )
( carrid = 'DL' connid = '0106' countryfr = 'US' cityfrom = 'NEW YORK' airpfrom = 'JFK' countryto = 'DE' cityto = 'FRANKFURT' airpto = 'FR' )
( carrid = 'DL' connid = '0106' countryfr = 'US' cityfrom = 'NEW YORK' airpfrom = 'JFK' countryto = 'DE' cityto = 'FRANKFURT' airpto = 'FR' )
( carrid = 'DL' connid = '0106' countryfr = 'US' cityfrom = 'NEW YORK' airpfrom = 'JFK' countryto = 'DE' cityto = 'FRANKFURT' airpto = 'FR' )
( carrid = 'DL' connid = '0106' countryfr = 'US' cityfrom = 'NEW YORK' airpfrom = 'JFK' countryto = 'DE' cityto = 'FRANKFURT' airpto = 'FR' )
( carrid = 'DL' connid = '0106' countryfr = 'US' cityfrom = 'NEW YORK' airpfrom = 'JFK' countryto = 'DE' cityto = 'FRANKFURT' airpto = 'FR' )
( carrid = 'DL' connid = '0106' countryfr = 'US' cityfrom = 'NEW YORK' airpfrom = 'JFK' countryto = 'DE' cityto = 'FRANKFURT' airpto = 'FR' )
).
ENDMETHOD.
METHOD get_table_by_json.
DATA lt_tab TYPE ty_T_table.
/ui2/cl_json=>deserialize(
EXPORTING
json = val
* jsonx =
* pretty_name =
* assoc_arrays =
* assoc_arrays_opt =
* name_mappings =
* conversion_exits =
* hex_as_base64 =
CHANGING
data = lt_tab
).
result = lt_tab.
ENDMETHOD.
METHOD get_table_by_xml.
DATA lt_tab TYPE ty_T_table.
CALL TRANSFORMATION id SOURCE xml = val RESULT data = lt_tab.
result = lt_tab.
ENDMETHOD.
METHOD get_table_by_csv.
SPLIT val AT ';' INTO TABLE DATA(lt_cols).
LOOP AT lt_cols INTO DATA(lv_field).
DATA(ls_row) = VALUE z2ui5_cl_app_demo_13=>ty_S_spfli( ).
DATA(lv_index) = 1.
DO.
ASSIGN COMPONENT lv_index OF STRUCTURE ls_row TO FIELD-SYMBOL(<field>).
IF sy-subrc <> 0.
EXIT.
ENDIF.
<field> = lv_field.
lv_index = lv_index + 1.
ENDDO.
INSERT ls_row INTO TABLE result.
ENDLOOP.
ENDMETHOD.
METHOD db_save.
"normally modify database here
"test scenario, therefore write internal table instead
app->st_db = value.
ENDMETHOD.
METHOD db_read.
"normally read database here
"test scenario, therefore read internal table instead
result = app->st_db.
ENDMETHOD.
METHOD get_csv_by_table.
LOOP AT val INTO DATA(ls_row).
DATA(lv_index) = 1.
DO.
ASSIGN COMPONENT lv_index OF STRUCTURE ls_row TO FIELD-SYMBOL(<field>).
IF sy-subrc <> 0.
EXIT.
ENDIF.
lv_index = lv_index + 1.
result = result && <field> && ';'.
ENDDO.
result = result && CL_ABAP_CHAR_UTILITIES=>CR_LF.
ENDLOOP.
ENDMETHOD.
METHOD get_json_by_table.
result = /ui2/cl_json=>serialize(
data = val
* compress =
* name =
* pretty_name =
* type_descr =
* assoc_arrays =
* ts_as_iso8601 =
* expand_includes =
* assoc_arrays_opt =
* numc_as_string =
* name_mappings =
* conversion_exits =
" format_output = abap_true
* hex_as_base64 =
).
ENDMETHOD.
METHOD get_xml_by_table.
CALL TRANSFORMATION id SOURCE values = val RESULT XML result.
ENDMETHOD.
METHOD get_fieldlist_by_table.
DATA(lo_tab) = CAST cl_abap_tabledescr( cl_abap_datadescr=>describe_by_data( it_table ) ).
DATA(lo_struc) = CAST cl_abap_structdescr( lo_tab->get_table_line_type( ) ).
DATA(lt_comp) = lo_struc->get_components( ).
LOOP AT lt_comp INTO DATA(ls_comp).
INSERT ls_comp-name INTO TABLE result.
ENDLOOP.
ENDMETHOD.
METHOD get_test_data_json.
result = `[` && |\n| &&
` {` && |\n| &&
` "CARRID": "DL",` && |\n| &&
` "CONNID": 106,` && |\n| &&
` "COUNTRYFR": "US",` && |\n| &&
` "CITYFROM": "NEW YORK",` && |\n| &&
` "AIRPFROM": "JFK",` && |\n| &&
` "COUNTRYTO": "DE",` && |\n| &&
` "CITYTO": "FRANKFURT",` && |\n| &&
` "AIRPTO": "FR"` && |\n| &&
` },` && |\n| &&
` {` && |\n| &&
` "CARRID": "DL",` && |\n| &&
` "CONNID": 106,` && |\n| &&
` "COUNTRYFR": "US",` && |\n| &&
` "CITYFROM": "NEW YORK",` && |\n| &&
` "AIRPFROM": "JFK",` && |\n| &&
` "COUNTRYTO": "DE",` && |\n| &&
` "CITYTO": "FRANKFURT",` && |\n| &&
` "AIRPTO": "FR"` && |\n| &&
` },` && |\n| &&
` {` && |\n| &&
` "CARRID": "DL",` && |\n| &&
` "CONNID": 106,` && |\n| &&
` "COUNTRYFR": "US",` && |\n| &&
` "CITYFROM": "NEW YORK",` && |\n| &&
` "AIRPFROM": "JFK",` && |\n| &&
` "COUNTRYTO": "DE",` && |\n| &&
` "CITYTO": "FRANKFURT",` && |\n| &&
` "AIRPTO": "FR"` && |\n| &&
` },` && |\n| &&
` {` && |\n| &&
` "CARRID": "DL",` && |\n| &&
` "CONNID": 106,` && |\n| &&
` "COUNTRYFR": "US",` && |\n| &&
` "CITYFROM": "NEW YORK",` && |\n| &&
` "AIRPFROM": "JFK",` && |\n| &&
` "COUNTRYTO": "DE",` && |\n| &&
` "CITYTO": "FRANKFURT",` && |\n| &&
` "AIRPTO": "FR"` && |\n| &&
` },` && |\n| &&
` {` && |\n| &&
` "CARRID": "DL",` && |\n| &&
` "CONNID": 106,` && |\n| &&
` "COUNTRYFR": "US",` && |\n| &&
` "CITYFROM": "NEW YORK",` && |\n| &&
` "AIRPFROM": "JFK",` && |\n| &&
` "COUNTRYTO": "DE",` && |\n| &&
` "CITYTO": "FRANKFURT",` && |\n| &&
` "AIRPTO": "FR"` && |\n| &&
` },` && |\n| &&
` {` && |\n| &&
` "CARRID": "DL",` && |\n| &&
` "CONNID": 106,` && |\n| &&
` "COUNTRYFR": "US",` && |\n| &&
` "CITYFROM": "NEW YORK",` && |\n| &&
` "AIRPFROM": "JFK",` && |\n| &&
` "COUNTRYTO": "DE",` && |\n| &&
` "CITYTO": "FRANKFURT",` && |\n| &&
` "AIRPTO": "FR"` && |\n| &&
` },` && |\n| &&
` {` && |\n| &&
` "CARRID": "DL",` && |\n| &&
` "CONNID": 106,` && |\n| &&
` "COUNTRYFR": "US",` && |\n| &&
` "CITYFROM": "NEW YORK",` && |\n| &&
` "AIRPFROM": "JFK",` && |\n| &&
` "COUNTRYTO": "DE",` && |\n| &&
` "CITYTO": "FRANKFURT",` && |\n| &&
` "AIRPTO": "FR"` && |\n| &&
` },` && |\n| &&
` {` && |\n| &&
` "CARRID": "DL",` && |\n| &&
` "CONNID": 106,` && |\n| &&
` "COUNTRYFR": "US",` && |\n| &&
` "CITYFROM": "NEW YORK",` && |\n| &&
` "AIRPFROM": "JFK",` && |\n| &&
` "COUNTRYTO": "DE",` && |\n| &&
` "CITYTO": "FRANKFURT",` && |\n| &&
` "AIRPTO": "FR"` && |\n| &&
` }` && |\n| &&
`]`.
ENDMETHOD.
ENDCLASS.

View File

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

View File

@ -0,0 +1,102 @@
CLASS z2ui5_cl_app_demo_14 DEFINITION PUBLIC.
PUBLIC SECTION.
INTERFACES z2ui5_if_app.
DATA mv_type TYPE string.
DATA mv_path TYPE string.
DATA mv_editor TYPE string.
DATA mv_check_editable TYPE abap_bool.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS z2ui5_cl_app_demo_14 IMPLEMENTATION.
METHOD z2ui5_if_app~controller.
CASE client->get( )-lifecycle_method.
WHEN client->cs-lifecycle_method-on_init.
mv_path = '../../demo/text'.
mv_type = 'plain_text'.
WHEN client->cs-lifecycle_method-on_event.
CASE client->get( )-event.
WHEN 'DB_LOAD'.
mv_editor = COND #(
WHEN mv_path CS 'abap' THEN lcl_mime_api=>read_abap( )
WHEN mv_path CS 'json' THEN lcl_mime_api=>read_json( )
WHEN mv_path CS 'yaml' THEN lcl_mime_api=>read_yaml( )
WHEN mv_path CS 'text' THEN lcl_mime_api=>read_text( )
WHEN mv_path CS 'js' THEN lcl_mime_api=>read_js( )
).
client->popup_message_toast( 'Download successfull' ).
WHEN 'DB_SAVE'.
lcl_mime_api=>save_data( ).
client->popup_message_box( text = 'Upload successfull. File saved!' type = 'success' ).
WHEN 'EDIT'.
mv_check_editable = xsdbool( mv_check_editable = abap_False ).
WHEN 'CLEAR'.
mv_editor = ``.
WHEN 'BACK'.
client->nav_app_leave( client->get( )-id_prev_app_stack ).
ENDCASE.
WHEN client->cs-lifecycle_method-on_rendering.
DATA(view) = client->factory_view( 'VIEW_INPUT' ).
DATA(page) = view->page( title = 'abap2UI5 - MIME Editor' navbuttontap = view->_event( 'BACK' ) ).
page->header_content( )->link( text = 'Demo' href = 'https://twitter.com/OblomovDev/status/1631562906570575875'
)->link( text = 'Source_Code' href = client->get( )-s_request-url_source_code ).
DATA(grid) = page->grid( 'L12 M12 S12' )->content( 'l' ).
grid->simple_form( 'File' )->content( 'f'
)->label( 'path'
)->input( view->_bind( mv_path )
)->label( 'Option'
)->input( value = view->_bind( mv_type ) suggestionitems = view->_bind_one_way( lcl_mime_api=>get_editor_type( ) )
)->get( )->suggestion_items( )->get(
)->list_item( text = '{NAME}' additionalText = '{VALUE}' )->get_parent( )->get_parent(
)->button( text = 'Download' press = view->_event( 'DB_LOAD' ) icon = 'sap-icon://download-from-cloud' ).
grid->simple_form( 'Editor' )->content( 'f'
)->scroll_container( '75%' )->code_editor(
type = mv_type
editable = mv_check_editable
value = view->_bind( mv_editor ) ).
page->footer( )->overflow_toolbar(
)->button(
text = 'Clear'
press = view->_event( 'CLEAR' )
icon = 'sap-icon://delete'
)->toolbar_spacer(
)->button(
text = 'Edit'
press = view->_event( 'EDIT' )
icon = 'sap-icon://edit'
)->button(
text = 'Upload'
press = view->_event( 'DB_SAVE' )
type = 'Emphasized'
icon = 'sap-icon://upload-to-cloud'
enabled = xsdbool( mv_editor IS NOT INITIAL ) ).
ENDCASE.
ENDMETHOD.
ENDCLASS.

View File

@ -0,0 +1,190 @@
CLASS lcl_mime_api DEFINITION FINAL.
PUBLIC SECTION.
CLASS-METHODS read_abap
RETURNING
VALUE(r_result) TYPE string.
CLASS-METHODS read_json
RETURNING
VALUE(r_result) TYPE string.
CLASS-METHODS read_js
RETURNING
VALUE(r_result) TYPE string.
CLASS-METHODS read_yaml
RETURNING
VALUE(r_result) TYPE string.
CLASS-METHODS read_text
RETURNING
VALUE(r_result) TYPE string.
TYPES:
BEGIN OF ty_S_suggest,
name TYPE string,
value TYPE string,
END OF ty_s_suggest.
TYPES ty_T_suggest TYPE STANDARD TABLE OF ty_s_suggest WITH EMPTY KEY.
CLASS-METHODS get_editor_type
RETURNING
VALUE(r_result) TYPE ty_t_suggest.
CLASS-METHODS save_data.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS lcl_mime_api IMPLEMENTATION.
METHOD read_abap.
r_result = `METHOD SELECT_FILES.` && |\n| &&
|\n| &&
` DATA: LV_RET_CODE TYPE I,` && |\n| &&
` LV_USR_AXN TYPE I.` && |\n| &&
|\n| &&
` CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG(` && |\n| &&
` EXPORTING` && |\n| &&
` WINDOW_TITLE = 'Select file'` && |\n| &&
` MULTISELECTION = 'X'` && |\n| &&
` CHANGING` && |\n| &&
` FILE_TABLE = ME->PT_FILETAB` && |\n| &&
` RC = LV_RET_CODE` && |\n| &&
` USER_ACTION = LV_USR_AXN` && |\n| &&
` EXCEPTIONS` && |\n| &&
` FILE_OPEN_DIALOG_FAILED = 1` && |\n| &&
` CNTL_ERROR = 2` && |\n| &&
` ERROR_NO_GUI = 3` && |\n| &&
` NOT_SUPPORTED_BY_GUI = 4` && |\n| &&
` OTHERS = 5` && |\n| &&
` ).` && |\n| &&
` IF SY-SUBRC <> 0 OR` && |\n| &&
` LV_USR_AXN = CL_GUI_FRONTEND_SERVICES=>ACTION_CANCEL.` && |\n| &&
` RAISE EX_FILE_SEL_ERR.` && |\n| &&
` ENDIF.` && |\n| &&
|\n| &&
` ENDMETHOD. `.
ENDMETHOD.
METHOD read_json.
r_result = `{` && |\n| &&
` "quiz": {` && |\n| &&
` "sport": {` && |\n| &&
` "q1": {` && |\n| &&
` "test" : false,` && |\n| &&
` "question": "Which one is correct team name in NBA?",` && |\n| &&
` "options": [` && |\n| &&
` "New York Bulls",` && |\n| &&
` "Los Angeles Kings",` && |\n| &&
` "Golden State Warriros",` && |\n| &&
` "Huston Rocket"` && |\n| &&
` ],` && |\n| &&
` "answer": "Huston Rocket"` && |\n| &&
` }` && |\n| &&
` },` && |\n| &&
` "maths": {` && |\n| &&
` "q1": {` && |\n| &&
` "question": "5 + 7 = ?",` && |\n| &&
` "options": [` && |\n| &&
` "10",` && |\n| &&
` "11",` && |\n| &&
` "12",` && |\n| &&
` "13"` && |\n| &&
` ],` && |\n| &&
` "answer": "12"` && |\n| &&
` },` && |\n| &&
` "q2": {` && |\n| &&
` "question": true,` && |\n| &&
` "options": [` && |\n| &&
` "1",` && |\n| &&
` "2",` && |\n| &&
` "3",` && |\n| &&
` "4"` && |\n| &&
` ],` && |\n| &&
` "answer": 487829` && |\n| &&
` }` && |\n| &&
` }` && |\n| &&
` }` && |\n| &&
`}`.
ENDMETHOD.
METHOD read_js.
r_result = `function showAlert() {` && |\n| &&
` alert("Alert from JS file");` && |\n| &&
`}` && |\n| &&
|\n| &&
`function updateHeading() {` && |\n| &&
` document.getElementById('heading').innerHTML = 'Heading changed with JS';` && |\n| &&
`}`.
ENDMETHOD.
METHOD read_yaml.
r_result = `# Employee records` && |\n| &&
`- martin:` && |\n| &&
` name: Martin Developer` && |\n| &&
` job: Developer` && |\n| &&
` skills:` && |\n| &&
` - python` && |\n| &&
` - perl` && |\n| &&
` - pascal` && |\n| &&
`- tabitha:` && |\n| &&
` name: Tabitha Bitumen` && |\n| &&
` job: Developer` && |\n| &&
` skills:` && |\n| &&
` - lisp` && |\n| &&
` - fortran` && |\n| &&
` - erlang`.
ENDMETHOD.
METHOD read_text.
r_result = `TXT test file` && |\n| &&
`Purpose: Provide example of this file type` && |\n| &&
`Document file type: TXT` && |\n| &&
`Version: 1.0` && |\n| &&
`Remark:` && |\n| &&
|\n| &&
`Example content:` && |\n| &&
`The names "John Doe" for males, "Jane Doe" or "Jane Roe" for females, or "Jonnie Doe" and "Janie Doe" for children, or just "Doe" non-gender-specifically are used as placeholder names for a party whose true identity is unknown or mus` &&
`t be withheld in a legal action, case, or discussion. The names are also used to refer to acorpse or hospital patient whose identity is unknown. This practice is widely used in the United States and Canada, but is rarely used in other English-speak` &&
`ing countries including the United Kingdom itself, from where the use of "John Doe" in a legal context originates. The names Joe Bloggs or John Smith are used in the UK instead, as well as in Australia and New Zealand.` && |\n| &&
|\n| &&
`John Doe is sometimes used to refer to a typical male in other contexts as well, in a similar manner to John Q. Public, known in Great Britain as Joe Public, John Smith or Joe Bloggs. For example, the first name listed on a form is o` &&
`ften John Doe, along with a fictional address or other fictional information to provide an example of how to fill in the form. The name is also used frequently in popular culture, for example in the Frank Capra film Meet John Doe. John Doe was also` &&
` the name of a 2002 American television series.`.
ENDMETHOD.
METHOD get_editor_type.
DATA(lv_types) = `abap, abc, actionscript, ada, apache_conf, applescript, asciidoc, assembly_x86, autohotkey, batchfile, bro, c9search, c_cpp, cirru, clojure, cobol, coffee, coldfusion, csharp, css, curly, d, dart, diff, django, dockerfile, ` &&
`dot, drools, eiffel, yaml, ejs, elixir, elm, erlang, forth, fortran, ftl, gcode, gherkin, gitignore, glsl, gobstones, golang, groovy, haml, handlebars, haskell, haskell_cabal, haxe, hjson, html, html_elixir, html_ruby, ini, io, jack, jade, java, ja` &&
`vascri` &&
`pt, json, jsoniq, jsp, jsx, julia, kotlin, latex, lean, less, liquid, lisp, live_script, livescript, logiql, lsl, lua, luapage, lucene, makefile, markdown, mask, matlab, mavens_mate_log, maze, mel, mips_assembler, mipsassembler, mushcode, mysql, ni` &&
`x, nsis, objectivec, ocaml, pascal, perl, pgsql, php, plain_text, powershell, praat, prolog, properties, protobuf, python, r, razor, rdoc, rhtml, rst, ruby, rust, sass, scad, scala, scheme, scss, sh, sjs, smarty, snippets, soy_template, space, sql,` &&
` sqlserver, stylus, svg, swift, swig, tcl, tex, text, textile, toml, tsx, twig, typescript, vala, vbscript, velocity, verilog, vhdl, wollok, xml, xquery, terraform, slim, redshift, red, puppet, php_laravel_blade, mixal, jssm, fsharp, edifact,` &&
` csp, cssound_score, cssound_orchestra, cssound_document`.
SPLIT lv_types AT ',' INTO TABLE DATA(lt_types).
r_result = VALUE #( FOR row IN lt_types ( name = shift_right( shift_left( row ) ) value = shift_right( shift_left( row ) ) ) ).
ENDMETHOD.
METHOD save_data.
"save data here
ENDMETHOD.
ENDCLASS.

View File

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

View File

@ -0,0 +1,261 @@
CLASS z2ui5_cl_app_demo_16 DEFINITION PUBLIC.
PUBLIC SECTION.
INTERFACES z2ui5_if_app.
DATA mv_type TYPE string.
DATA mv_path TYPE string.
DATA mv_editor TYPE string.
DATA mv_check_editable TYPE abap_bool.
DATA mv_sel1 TYPE abap_bool.
DATA mv_sel2 TYPE abap_bool.
DATA mv_sel3 TYPE abap_bool.
DATA mv_tab_bar_active TYPE abap_bool.
DATA mv_tab_donut_active TYPE abap_bool.
DATA mv_tab_line_active TYPE abap_bool.
DATA mv_tab_radial_active TYPE abap_bool.
METHODS render_tab_bar
IMPORTING
view TYPE REF TO z2ui5_if_view
container TYPE REF TO z2ui5_if_view.
METHODS render_tab_donut
IMPORTING
view TYPE REF TO z2ui5_if_view
container TYPE REF TO z2ui5_if_view.
METHODS render_tab_line
IMPORTING
view TYPE REF TO z2ui5_if_view
container TYPE REF TO z2ui5_if_view.
METHODS render_tab_radial
IMPORTING
view TYPE REF TO z2ui5_if_view
container TYPE REF TO z2ui5_if_view.
ENDCLASS.
CLASS Z2UI5_CL_APP_DEMO_16 IMPLEMENTATION.
METHOD render_tab_bar.
DATA(tab) = container->tab( text = 'Bar Chart' selected = view->_bind( mv_tab_bar_active ) ).
DATA(grid) = tab->grid( default_span = 'XL6 L6 M6 S12' ).
grid->link(
text = 'Go to the SAP Demos for Interactive bar Charts here...'
href = 'https://sapui5.hana.ondemand.com/#/entity/sap.suite.ui.microchart.InteractiveBarChart/sample/sap.suite.ui.microchart.sample.InteractiveBarChart'
).
grid->text( text = 'Absolute and Percentage value' class = 'sapUiSmallMargin'
)->get( )->layout_data( )->grid_data( span = 'XL12 L12 M12 S12' ).
"Example with absolute and percentage values
DATA(bar) = grid->flex_box( width = '22rem' height = '13rem' alignitems = 'Center' class = 'sapUiSmallMargin'
)->items( )->interact_bar_chart(
selectionchanged = view->_event( 'BAR_CHANGED' )
press = view->_event( 'BAR_PRESS' )
)->bars( ).
bar->interact_bar_chart_bar( selected = view->_bind( mv_sel1 ) label = 'Product 1' value = '10' ).
bar->interact_bar_chart_bar( selected = view->_bind( mv_sel2 ) label = 'Product 2' value = '20' ).
bar->interact_bar_chart_bar( selected = view->_bind( mv_sel3 ) label = 'Product 3' value = '70' ).
bar = grid->flex_box( width = '22rem' height = '13rem' alignitems = 'Center' class = 'sapUiSmallMargin'
)->items( )->interact_bar_chart(
selectionchanged = view->_event( 'BAR_CHANGED' )
press = view->_event( 'BAR_PRESS' )
)->bars( ).
bar->interact_bar_chart_bar( selected = view->_bind( mv_sel1 ) label = 'Product 1' value = '10' displayedValue = '10%' ).
bar->interact_bar_chart_bar( selected = view->_bind( mv_sel2 ) label = 'Product 2' value = '20' displayedValue = '20%' ).
bar->interact_bar_chart_bar( selected = view->_bind( mv_sel3 ) label = 'Product 3' value = '70' displayedValue = '70%' ).
DATA(layout) = grid->vertical_layout( )->layout_data( ns = 'l' )->grid_data( span = 'XL12 L12 M12 S12' )->get_parent( )->get_parent( ).
layout->text( text = 'Positive and Negative values' class = 'sapUiSmallMargin' ).
bar = layout->flex_box( width = '20rem' height = '10rem' alignitems = 'Center' class = 'sapUiSmallMargin'
)->items( )->interact_bar_chart(
selectionchanged = view->_event( 'BAR_CHANGED' )
press = view->_event( 'BAR_PRESS' )
labelwidth = '25%'
)->bars( ).
bar->interact_bar_chart_bar( label = 'Product 1' value = '25' ).
bar->interact_bar_chart_bar( label = 'Product 2' value = '-50' ).
bar->interact_bar_chart_bar( label = 'Product 3' value = '-100' ).
ENDMETHOD.
METHOD render_tab_donut.
DATA(tab) = container->tab( text = 'Donut Chart' selected = view->_bind( mv_tab_donut_active ) ).
DATA(grid) = tab->grid( default_span = 'XL6 L6 M6 S12' ).
grid->link(
text = 'Go to the SAP Demos for Interactive Donut Charts here...'
href = 'https://sapui5.hana.ondemand.com/#/entity/sap.suite.ui.microchart.InteractiveDonutChart/sample/sap.suite.ui.microchart.sample.InteractiveDonutChart'
).
grid->text( text = 'Three segments' class = 'sapUiSmallMargin'
)->get( )->layout_data( )->grid_data( span = 'XL12 L12 M12 S12' ).
DATA(seg) = grid->flex_box(
width = '22rem' height = '13rem' alignitems = 'Start' justifycontent = 'SpaceBetween'
)->items(
)->interact_donut_chart(
selectionchanged = view->_event( 'DONUT_CHANGED' )
)->segments( ).
seg->interact_donut_chart_segment( selected = view->_bind( mv_sel1 ) label = 'Implementation Phase' value = '40.0' displayedvalue = '40.0%' ).
seg->interact_donut_chart_segment( selected = view->_bind( mv_sel2 )
label = 'Design Phase' value = '21.5' displayedvalue = '21.5%' ).
seg->interact_donut_chart_segment( selected = view->_bind( mv_sel3 )
label = 'Test Phase' value = '38.5' displayedvalue = '38.5%' ).
grid->text( text = 'Four segments' class = 'sapUiSmallMargin'
)->get( )->layout_data( )->grid_data( span = 'XL12 L12 M12 S12' ).
seg = grid->flex_box( width = '22rem' height = '13rem' alignitems = 'Start' justifycontent = 'SpaceBetween'
)->items(
)->interact_donut_chart(
selectionchanged = view->_event( 'DONUT_CHANGED' )
press = view->_event( 'DONUT_PRESS' )
displayedsegments = '4'
)->segments( ).
seg->interact_donut_chart_segment( label = 'Design Phase' value = '32.0' displayedvalue = '32.0%' ).
seg->interact_donut_chart_segment( label = 'Implementation Phase' value = '28' displayedvalue = '28%' ).
seg->interact_donut_chart_segment( label = 'Test Phase' value = '25' displayedvalue = '25%' ).
seg->interact_donut_chart_segment( label = 'Launch Phase' value = '15' displayedvalue = '15%' ).
grid->text( text = 'Error Messages' class = 'sapUiSmallMargin'
)->get( )->layout_data( )->grid_data( span = 'XL12 L12 M12 S12' ).
seg = grid->flex_box( width = '22rem' height = '13rem' alignitems = 'Start' justifycontent = 'SpaceBetween'
)->items( )->interact_donut_chart(
selectionchanged = view->_event( 'DONUT_CHANGED' )
showerror = abap_true
errormessagetitle = 'No data'
errormessage = 'Currently no data is available'
)->segments( ).
seg->interact_donut_chart_segment( label = 'Implementation Phase' value = '40.0' displayedvalue = '40.0%' ).
seg->interact_donut_chart_segment( label = 'Design Phase' value = '21.5' displayedvalue = '21.5%' ).
seg->interact_donut_chart_segment( label = 'Test Phase' value = '38.5' displayedvalue = '38.5%' ).
ENDMETHOD.
METHOD render_tab_line.
DATA(tab) = container->tab( text = 'Line Chart' selected = view->_bind( mv_tab_line_active ) ).
DATA(grid) = tab->grid( default_span = 'XL6 L6 M6 S12' ).
grid->link(
text = 'Go to the SAP Demos for Interactive Line Charts here...'
href = 'https://sapui5.hana.ondemand.com/#/entity/sap.suite.ui.microchart.InteractiveLineChart/sample/sap.suite.ui.microchart.sample.InteractiveLineChart'
).
ENDMETHOD.
METHOD render_tab_radial.
DATA(tab) = container->tab( text = 'Radial Chart' selected = view->_bind( mv_tab_radial_active ) ).
DATA(grid) = tab->grid( default_span = 'XL6 L6 M6 S12' ).
grid->link(
text = 'Go to the SAP Demos for Radial Charts here...'
href = 'https://sapui5.hana.ondemand.com/#/entity/sap.suite.ui.microchart.RadialMicroChart/sample/sap.suite.ui.microchart.sample.RadialMicroChart'
).
ENDMETHOD.
METHOD z2ui5_if_app~controller.
CASE client->get( )-lifecycle_method.
WHEN client->cs-lifecycle_method-on_init.
mv_path = '../../demo/text'.
mv_type = 'plain_text'.
mv_sel1 = abap_true.
WHEN client->cs-lifecycle_method-on_event.
CASE client->get( )-event.
WHEN 'DONUT_CHANGED'.
mv_type = 'plain_text'.
WHEN 'DB_LOAD'.
mv_editor = COND #(
WHEN mv_path CS 'abap' THEN lcl_mime_api=>read_abap( )
WHEN mv_path CS 'json' THEN lcl_mime_api=>read_json( )
WHEN mv_path CS 'yaml' THEN lcl_mime_api=>read_yaml( )
WHEN mv_path CS 'text' THEN lcl_mime_api=>read_text( ) ).
client->popup_message_toast( 'Download successfull' ).
WHEN 'DB_SAVE'.
lcl_mime_api=>save_data( mv_editor ).
client->popup_message_box( text = 'Upload successfull. File saved!' type = 'success' ).
WHEN 'EDIT'.
mv_check_editable = xsdbool( mv_check_editable = abap_False ).
WHEN 'CLEAR'.
mv_editor = ``.
WHEN 'BACK'.
client->nav_app_leave( client->get( )-id_prev_app_stack ).
ENDCASE.
WHEN client->cs-lifecycle_method-on_rendering.
DATA(view) = client->factory_view( 'VIEW_INPUT' ).
DATA(page) = view->page( title = 'abap2UI5 - Visualization with Charts' navbuttontap = view->_event( 'BACK' ) ).
page->header_content(
")->link( text = 'Demo' href = `https://twitter.com/OblomovDev/status/1634206964291911682`
)->link( text = 'Source_Code' href = client->get( )-s_request-url_source_code
).
DATA(container) = page->tab_container( ).
render_tab_donut( view = view container = container ).
render_tab_bar( view = view container = container ).
render_tab_line( view = view container = container ).
render_tab_radial( view = view container = container ).
" tab = container->tab( 'Interactive Line Chart' ).
" tab = container->tab( 'Radial Micro Chart' ).
page->footer( )->overflow_toolbar(
)->overflow_toolbar_button(
text = 'Delete'
icon = 'sap-icon://delete'
)->toolbar_spacer(
)->overflow_toolbar_button(
text = 'Edit'
icon = 'sap-icon://edit'
)->overflow_toolbar_button(
text = 'Upload'
type = 'Emphasized'
icon = 'sap-icon://upload-to-cloud' ).
ENDCASE.
ENDMETHOD.
ENDCLASS.

View File

@ -0,0 +1,194 @@
CLASS lcl_mime_api DEFINITION FINAL.
PUBLIC SECTION.
CLASS-METHODS read_abap
RETURNING
VALUE(r_result) TYPE string.
CLASS-METHODS read_json
RETURNING
VALUE(r_result) TYPE string.
CLASS-METHODS read_js
RETURNING
VALUE(r_result) TYPE string.
CLASS-METHODS read_yaml
RETURNING
VALUE(r_result) TYPE string.
CLASS-METHODS read_text
RETURNING
VALUE(r_result) TYPE string.
TYPES:
BEGIN OF ty_S_suggest,
name TYPE string,
value TYPE string,
END OF ty_s_suggest.
TYPES ty_T_suggest TYPE STANDARD TABLE OF ty_s_suggest WITH EMPTY KEY.
CLASS-METHODS get_editor_type
RETURNING
VALUE(r_result) TYPE ty_t_suggest.
CLASS-METHODS save_data
IMPORTING
i_mv_editor TYPE string.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS lcl_mime_api IMPLEMENTATION.
METHOD read_abap.
r_result = `METHOD SELECT_FILES.` && |\n| &&
|\n| &&
` DATA: LV_RET_CODE TYPE I,` && |\n| &&
` LV_USR_AXN TYPE I.` && |\n| &&
|\n| &&
` CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG(` && |\n| &&
` EXPORTING` && |\n| &&
` WINDOW_TITLE = 'Select file'` && |\n| &&
` MULTISELECTION = 'X'` && |\n| &&
` CHANGING` && |\n| &&
` FILE_TABLE = ME->PT_FILETAB` && |\n| &&
` RC = LV_RET_CODE` && |\n| &&
` USER_ACTION = LV_USR_AXN` && |\n| &&
` EXCEPTIONS` && |\n| &&
` FILE_OPEN_DIALOG_FAILED = 1` && |\n| &&
` CNTL_ERROR = 2` && |\n| &&
` ERROR_NO_GUI = 3` && |\n| &&
` NOT_SUPPORTED_BY_GUI = 4` && |\n| &&
` OTHERS = 5` && |\n| &&
` ).` && |\n| &&
` IF SY-SUBRC <> 0 OR` && |\n| &&
` LV_USR_AXN = CL_GUI_FRONTEND_SERVICES=>ACTION_CANCEL.` && |\n| &&
` RAISE EX_FILE_SEL_ERR.` && |\n| &&
` ENDIF.` && |\n| &&
|\n| &&
` ENDMETHOD. `.
ENDMETHOD.
METHOD read_json.
r_result = `{` && |\n| &&
` "quiz": {` && |\n| &&
` "sport": {` && |\n| &&
` "q1": {` && |\n| &&
` "test" : false,` && |\n| &&
` "question": "Which one is correct team name in NBA?",` && |\n| &&
` "options": [` && |\n| &&
` "New York Bulls",` && |\n| &&
` "Los Angeles Kings",` && |\n| &&
` "Golden State Warriros",` && |\n| &&
` "Huston Rocket"` && |\n| &&
` ],` && |\n| &&
` "answer": "Huston Rocket"` && |\n| &&
` }` && |\n| &&
` },` && |\n| &&
` "maths": {` && |\n| &&
` "q1": {` && |\n| &&
` "question": "5 + 7 = ?",` && |\n| &&
` "options": [` && |\n| &&
` "10",` && |\n| &&
` "11",` && |\n| &&
` "12",` && |\n| &&
` "13"` && |\n| &&
` ],` && |\n| &&
` "answer": "12"` && |\n| &&
` },` && |\n| &&
` "q2": {` && |\n| &&
` "question": true,` && |\n| &&
` "options": [` && |\n| &&
` "1",` && |\n| &&
` "2",` && |\n| &&
` "3",` && |\n| &&
` "4"` && |\n| &&
` ],` && |\n| &&
` "answer": 487829` && |\n| &&
` }` && |\n| &&
` }` && |\n| &&
` }` && |\n| &&
`}`.
ENDMETHOD.
METHOD read_js.
r_result = `function showAlert() {` && |\n| &&
` alert("Alert from JS file");` && |\n| &&
`}` && |\n| &&
|\n| &&
`function updateHeading() {` && |\n| &&
` document.getElementById('heading').innerHTML = 'Heading changed with JS';` && |\n| &&
`}`.
ENDMETHOD.
METHOD read_yaml.
r_result = `# Employee records` && |\n| &&
`- martin:` && |\n| &&
` name: Martin Developer` && |\n| &&
` job: Developer` && |\n| &&
` skills:` && |\n| &&
` - python` && |\n| &&
` - perl` && |\n| &&
` - pascal` && |\n| &&
`- tabitha:` && |\n| &&
` name: Tabitha Bitumen` && |\n| &&
` job: Developer` && |\n| &&
` skills:` && |\n| &&
` - lisp` && |\n| &&
` - fortran` && |\n| &&
` - erlang`.
ENDMETHOD.
METHOD read_text.
r_result = `TXT test file` && |\n| &&
`Purpose: Provide example of this file type` && |\n| &&
`Document file type: TXT` && |\n| &&
`Version: 1.0` && |\n| &&
`Remark:` && |\n| &&
|\n| &&
`Example content:` && |\n| &&
`The names "John Doe" for males, "Jane Doe" or "Jane Roe" for females, or "Jonnie Doe" and "Janie Doe" for children, or just "Doe" non-gender-specifically are used as placeholder names for a party whose true identity is unknown or mus` &&
`t be withheld in a legal action, case, or discussion. The names are also used to refer to acorpse or hospital patient whose identity is unknown. This practice is widely used in the United States and Canada, but is rarely used in other English-speak` &&
`ing countries including the United Kingdom itself, from where the use of "John Doe" in a legal context originates. The names Joe Bloggs or John Smith are used in the UK instead, as well as in Australia and New Zealand.` && |\n| &&
|\n| &&
`John Doe is sometimes used to refer to a typical male in other contexts as well, in a similar manner to John Q. Public, known in Great Britain as Joe Public, John Smith or Joe Bloggs. For example, the first name listed on a form is o` &&
`ften John Doe, along with a fictional address or other fictional information to provide an example of how to fill in the form. The name is also used frequently in popular culture, for example in the Frank Capra film Meet John Doe. John Doe was also` &&
` the name of a 2002 American television series.`.
ENDMETHOD.
METHOD get_editor_type.
DATA(lv_types) = `abap, abc, actionscript, ada, apache_conf, applescript, asciidoc, assembly_x86, autohotkey, batchfile, bro, c9search, c_cpp, cirru, clojure, cobol, coffee, coldfusion, csharp, css, curly, d, dart, diff, django, dockerfile, ` &&
`dot, drools, eiffel, yaml, ejs, elixir, elm, erlang, forth, fortran, ftl, gcode, gherkin, gitignore, glsl, gobstones, golang, groovy, haml, handlebars, haskell, haskell_cabal, haxe, hjson, html, html_elixir, html_ruby, ini, io, jack, jade, java, ja` &&
`vascri` &&
`pt, json, jsoniq, jsp, jsx, julia, kotlin, latex, lean, less, liquid, lisp, live_script, livescript, logiql, lsl, lua, luapage, lucene, makefile, markdown, mask, matlab, mavens_mate_log, maze, mel, mips_assembler, mipsassembler, mushcode, mysql, ni` &&
`x, nsis, objectivec, ocaml, pascal, perl, pgsql, php, plain_text, powershell, praat, prolog, properties, protobuf, python, r, razor, rdoc, rhtml, rst, ruby, rust, sass, scad, scala, scheme, scss, sh, sjs, smarty, snippets, soy_template, space, sql,` &&
` sqlserver, stylus, svg, swift, swig, tcl, tex, text, textile, toml, tsx, twig, typescript, vala, vbscript, velocity, verilog, vhdl, wollok, xml, xquery, terraform, slim, redshift, red, puppet, php_laravel_blade, mixal, jssm, fsharp, edifact,` &&
` csp, cssound_score, cssound_orchestra, cssound_document`.
SPLIT lv_types AT ',' INTO TABLE DATA(lt_types).
r_result = VALUE #( FOR row IN lt_types ( name = shift_right( shift_left( row ) ) value = shift_right( shift_left( row ) ) ) ).
ENDMETHOD.
METHOD save_data.
"save data here
ENDMETHOD.
ENDCLASS.

View File

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

View File

@ -0,0 +1,98 @@
CLASS z2ui5_cl_app_demo_17 DEFINITION PUBLIC.
PUBLIC SECTION.
INTERFACES z2ui5_if_app.
DATA mv_type TYPE string.
DATA mv_path TYPE string.
DATA mv_editor TYPE string.
DATA mv_check_editable TYPE abap_bool.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS Z2UI5_CL_APP_DEMO_17 IMPLEMENTATION.
METHOD z2ui5_if_app~controller.
CASE client->get( )-lifecycle_method.
WHEN client->cs-lifecycle_method-on_init.
mv_path = '../../demo/text'.
mv_type = 'plain_text'.
WHEN client->cs-lifecycle_method-on_event.
CASE client->get( )-event.
WHEN 'DB_LOAD'.
mv_editor = COND #(
WHEN mv_path CS 'abap' THEN lcl_mime_api=>read_abap( )
WHEN mv_path CS 'json' THEN lcl_mime_api=>read_json( )
WHEN mv_path CS 'yaml' THEN lcl_mime_api=>read_yaml( )
WHEN mv_path CS 'text' THEN lcl_mime_api=>read_text( ) ).
client->popup_message_toast( 'Download successfull' ).
WHEN 'DB_SAVE'.
lcl_mime_api=>save_data( mv_editor ).
client->popup_message_box( text = 'Upload successfull. File saved!' type = 'success' ).
WHEN 'EDIT'.
mv_check_editable = xsdbool( mv_check_editable = abap_False ).
WHEN 'CLEAR'.
mv_editor = ``.
WHEN 'BACK'.
client->nav_app_leave( client->get( )-id_prev_app_stack ).
ENDCASE.
WHEN client->cs-lifecycle_method-on_rendering.
DATA(view) = client->factory_view( 'VIEW_INPUT' ).
DATA(page) = view->page( title = 'ABAP2UI5 - MIME Editor' navbuttontap = view->_event( 'BACK' ) ).
DATA(grid) = page->grid( 'L12 M12 S12' )->content( 'l' ).
grid->simple_form( 'File' )->content( 'f'
)->label( 'path'
)->input( view->_bind( mv_path )
)->label( 'Option'
)->input( value = view->_bind( mv_type ) suggestionitems = view->_bind_one_way( lcl_mime_api=>get_editor_type( ) )
)->get( )->suggestion_items( )->get(
)->list_item( text = '{NAME}' additionalText = '{VALUE}' )->get_parent( )->get_parent(
)->button( text = 'Download' press = view->_event( 'DB_LOAD' ) icon = 'sap-icon://download-from-cloud' ).
grid->simple_form( 'Editor' )->content( 'f'
)->code_editor(
type = mv_type
editable = mv_check_editable
value = view->_bind( mv_editor ) ).
page->footer( )->overflow_toolbar(
)->button(
text = 'Clear'
press = view->_event( 'CLEAR' )
icon = 'sap-icon://delete'
)->toolbar_spacer(
)->button(
text = 'Edit'
press = view->_event( 'EDIT' )
icon = 'sap-icon://edit'
)->button(
text = 'Upload'
press = view->_event( 'DB_SAVE' )
type = 'Emphasized'
icon = 'sap-icon://upload-to-cloud'
enabled = xsdbool( mv_editor IS NOT INITIAL ) ).
mv_editor = escape( val = mv_editor format = cl_abap_format=>e_json_string ).
ENDCASE.
ENDMETHOD.
ENDCLASS.

View File

@ -0,0 +1,193 @@
CLASS lcl_mime_api DEFINITION FINAL.
PUBLIC SECTION.
CLASS-METHODS read_abap
RETURNING
VALUE(r_result) TYPE string.
CLASS-METHODS read_json
RETURNING
VALUE(r_result) TYPE string.
CLASS-METHODS read_js
RETURNING
VALUE(r_result) TYPE string.
CLASS-METHODS read_yaml
RETURNING
VALUE(r_result) TYPE string.
CLASS-METHODS read_text
RETURNING
VALUE(r_result) TYPE string.
TYPES:
BEGIN OF ty_S_suggest,
name TYPE string,
value TYPE string,
END OF ty_s_suggest.
TYPES ty_T_suggest TYPE STANDARD TABLE OF ty_s_suggest WITH EMPTY KEY.
CLASS-METHODS get_editor_type
RETURNING
VALUE(r_result) TYPE ty_t_suggest.
CLASS-METHODS save_data
IMPORTING
i_mv_editor TYPE string.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS lcl_mime_api IMPLEMENTATION.
METHOD read_abap.
r_result = `METHOD SELECT_FILES.` && |\n| &&
|\n| &&
` DATA: LV_RET_CODE TYPE I,` && |\n| &&
` LV_USR_AXN TYPE I.` && |\n| &&
|\n| &&
` CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG(` && |\n| &&
` EXPORTING` && |\n| &&
` WINDOW_TITLE = 'Select file'` && |\n| &&
` MULTISELECTION = 'X'` && |\n| &&
` CHANGING` && |\n| &&
` FILE_TABLE = ME->PT_FILETAB` && |\n| &&
` RC = LV_RET_CODE` && |\n| &&
` USER_ACTION = LV_USR_AXN` && |\n| &&
` EXCEPTIONS` && |\n| &&
` FILE_OPEN_DIALOG_FAILED = 1` && |\n| &&
` CNTL_ERROR = 2` && |\n| &&
` ERROR_NO_GUI = 3` && |\n| &&
` NOT_SUPPORTED_BY_GUI = 4` && |\n| &&
` OTHERS = 5` && |\n| &&
` ).` && |\n| &&
` IF SY-SUBRC <> 0 OR` && |\n| &&
` LV_USR_AXN = CL_GUI_FRONTEND_SERVICES=>ACTION_CANCEL.` && |\n| &&
` RAISE EX_FILE_SEL_ERR.` && |\n| &&
` ENDIF.` && |\n| &&
|\n| &&
` ENDMETHOD. `.
ENDMETHOD.
METHOD read_json.
r_result = `{` && |\n| &&
` "quiz": {` && |\n| &&
` "sport": {` && |\n| &&
` "q1": {` && |\n| &&
` "test" : false,` && |\n| &&
` "question": "Which one is correct team name in NBA?",` && |\n| &&
` "options": [` && |\n| &&
` "New York Bulls",` && |\n| &&
` "Los Angeles Kings",` && |\n| &&
` "Golden State Warriros",` && |\n| &&
` "Huston Rocket"` && |\n| &&
` ],` && |\n| &&
` "answer": "Huston Rocket"` && |\n| &&
` }` && |\n| &&
` },` && |\n| &&
` "maths": {` && |\n| &&
` "q1": {` && |\n| &&
` "question": "5 + 7 = ?",` && |\n| &&
` "options": [` && |\n| &&
` "10",` && |\n| &&
` "11",` && |\n| &&
` "12",` && |\n| &&
` "13"` && |\n| &&
` ],` && |\n| &&
` "answer": "12"` && |\n| &&
` },` && |\n| &&
` "q2": {` && |\n| &&
` "question": true,` && |\n| &&
` "options": [` && |\n| &&
` "1",` && |\n| &&
` "2",` && |\n| &&
` "3",` && |\n| &&
` "4"` && |\n| &&
` ],` && |\n| &&
` "answer": 487829` && |\n| &&
` }` && |\n| &&
` }` && |\n| &&
` }` && |\n| &&
`}`.
ENDMETHOD.
METHOD read_js.
r_result = `function showAlert() {` && |\n| &&
` alert("Alert from JS file");` && |\n| &&
`}` && |\n| &&
|\n| &&
`function updateHeading() {` && |\n| &&
` document.getElementById('heading').innerHTML = 'Heading changed with JS';` && |\n| &&
`}`.
ENDMETHOD.
METHOD read_yaml.
r_result = `# Employee records` && |\n| &&
`- martin:` && |\n| &&
` name: Martin Developer` && |\n| &&
` job: Developer` && |\n| &&
` skills:` && |\n| &&
` - python` && |\n| &&
` - perl` && |\n| &&
` - pascal` && |\n| &&
`- tabitha:` && |\n| &&
` name: Tabitha Bitumen` && |\n| &&
` job: Developer` && |\n| &&
` skills:` && |\n| &&
` - lisp` && |\n| &&
` - fortran` && |\n| &&
` - erlang`.
ENDMETHOD.
METHOD read_text.
r_result = `TXT test file` && |\n| &&
`Purpose: Provide example of this file type` && |\n| &&
`Document file type: TXT` && |\n| &&
`Version: 1.0` && |\n| &&
`Remark:` && |\n| &&
|\n| &&
`Example content:` && |\n| &&
`The names "John Doe" for males, "Jane Doe" or "Jane Roe" for females, or "Jonnie Doe" and "Janie Doe" for children, or just "Doe" non-gender-specifically are used as placeholder names for a party whose true identity is unknown or mus` &&
`t be withheld in a legal action, case, or discussion. The names are also used to refer to acorpse or hospital patient whose identity is unknown. This practice is widely used in the United States and Canada, but is rarely used in other English-speak` &&
`ing countries including the United Kingdom itself, from where the use of "John Doe" in a legal context originates. The names Joe Bloggs or John Smith are used in the UK instead, as well as in Australia and New Zealand.` && |\n| &&
|\n| &&
`John Doe is sometimes used to refer to a typical male in other contexts as well, in a similar manner to John Q. Public, known in Great Britain as Joe Public, John Smith or Joe Bloggs. For example, the first name listed on a form is o` &&
`ften John Doe, along with a fictional address or other fictional information to provide an example of how to fill in the form. The name is also used frequently in popular culture, for example in the Frank Capra film Meet John Doe. John Doe was also` &&
` the name of a 2002 American television series.`.
ENDMETHOD.
METHOD get_editor_type.
DATA(lv_types) = `abap, abc, actionscript, ada, apache_conf, applescript, asciidoc, assembly_x86, autohotkey, batchfile, bro, c9search, c_cpp, cirru, clojure, cobol, coffee, coldfusion, csharp, css, curly, d, dart, diff, django, dockerfile, ` &&
`dot, drools, eiffel, yaml, ejs, elixir, elm, erlang, forth, fortran, ftl, gcode, gherkin, gitignore, glsl, gobstones, golang, groovy, haml, handlebars, haskell, haskell_cabal, haxe, hjson, html, html_elixir, html_ruby, ini, io, jack, jade, java, ja` &&
`vascri` &&
`pt, json, jsoniq, jsp, jsx, julia, kotlin, latex, lean, less, liquid, lisp, live_script, livescript, logiql, lsl, lua, luapage, lucene, makefile, markdown, mask, matlab, mavens_mate_log, maze, mel, mips_assembler, mipsassembler, mushcode, mysql, ni` &&
`x, nsis, objectivec, ocaml, pascal, perl, pgsql, php, plain_text, powershell, praat, prolog, properties, protobuf, python, r, razor, rdoc, rhtml, rst, ruby, rust, sass, scad, scala, scheme, scss, sh, sjs, smarty, snippets, soy_template, space, sql,` &&
` sqlserver, stylus, svg, swift, swig, tcl, tex, text, textile, toml, tsx, twig, typescript, vala, vbscript, velocity, verilog, vhdl, wollok, xml, xquery, terraform, slim, redshift, red, puppet, php_laravel_blade, mixal, jssm, fsharp, edifact,` &&
` csp, cssound_score, cssound_orchestra, cssound_document`.
SPLIT lv_types AT ',' INTO TABLE DATA(lt_types).
r_result = VALUE #( FOR row IN lt_types ( name = shift_right( shift_left( row ) ) value = shift_right( shift_left( row ) ) ) ).
ENDMETHOD.
METHOD save_data.
"save data here
ENDMETHOD.
ENDCLASS.

View File

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

View File

@ -0,0 +1,79 @@
CLASS z2ui5_cl_app_demo_18 DEFINITION PUBLIC.
PUBLIC SECTION.
INTERFACES z2ui5_if_app.
DATA mv_path TYPE string.
DATA mv_value TYPE string.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS Z2UI5_CL_APP_DEMO_18 IMPLEMENTATION.
METHOD z2ui5_if_app~controller.
CASE client->get( )-lifecycle_method.
WHEN client->cs-lifecycle_method-on_init.
* mv_path = '../../demo/text'.
* mv_type = 'plain_text'.
*
WHEN client->cs-lifecycle_method-on_event.
*
CASE client->get( )-event.
*
* WHEN 'DB_LOAD'.
*
* mv_editor = COND #(
* WHEN mv_path CS 'abap' THEN lcl_mime_api=>read_abap( )
* WHEN mv_path CS 'json' THEN lcl_mime_api=>read_json( )
* WHEN mv_path CS 'yaml' THEN lcl_mime_api=>read_yaml( )
* WHEN mv_path CS 'text' THEN lcl_mime_api=>read_text( ) ).
* client->display_message_toast( 'Download successfull').
*
* WHEN 'DB_SAVE'.
* lcl_mime_api=>save_data( mv_editor ).
* client->display_message_box( text = 'Upload successfull. File saved!' type = 'success' ).
*
* WHEN 'EDIT'.
* mv_check_editable = xsdbool( mv_check_editable = abap_False ).
* WHEN 'CLEAR'.
* mv_editor = ``.
WHEN 'UPLOAD'.
DATA(lv_dummy) = ''.
WHEN 'BACK'.
client->nav_app_leave( client->get( )-id_prev_app_stack ).
ENDCASE.
WHEN client->cs-lifecycle_method-on_rendering.
DATA(view) = client->factory_view( 'VIEW_INPUT' ).
DATA(page) = view->page( title = 'abap2UI5 - Upload/Download Files' navbuttontap = view->_event( 'BACK' ) ).
" DATA(grid) = page->grid( 'L12 M12 S12' )->content( 'l' ).
page->zz_file_uploader(
value = view->_bind( mv_value )
path = view->_bind( mv_path )
placeholder = 'filepath here...'
upload = view->_event( 'UPLOAD' )
).
IF mv_value IS NOT INITIAL.
page->zz_html( '<iframe src="' && mv_value && '" height="90%" width="98%"/>' ).
CLEAR mv_value.
ENDIF.
RETURN.
" mv_editor = escape( val = mv_editor format = cl_abap_format=>e_json_string ).
ENDCASE.
ENDMETHOD.
ENDCLASS.

View File

@ -0,0 +1,194 @@
CLASS lcl_mime_api DEFINITION FINAL.
PUBLIC SECTION.
CLASS-METHODS read_abap
RETURNING
VALUE(r_result) TYPE string.
CLASS-METHODS read_json
RETURNING
VALUE(r_result) TYPE string.
CLASS-METHODS read_js
RETURNING
VALUE(r_result) TYPE string.
CLASS-METHODS read_yaml
RETURNING
VALUE(r_result) TYPE string.
CLASS-METHODS read_text
RETURNING
VALUE(r_result) TYPE string.
TYPES:
BEGIN OF ty_S_suggest,
name TYPE string,
value TYPE string,
END OF ty_s_suggest.
TYPES ty_T_suggest TYPE STANDARD TABLE OF ty_s_suggest WITH EMPTY KEY.
CLASS-METHODS get_editor_type
RETURNING
VALUE(r_result) TYPE ty_t_suggest.
CLASS-METHODS save_data
IMPORTING
i_mv_editor TYPE string.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS lcl_mime_api IMPLEMENTATION.
METHOD read_abap.
r_result = `METHOD SELECT_FILES.` && |\n| &&
|\n| &&
` DATA: LV_RET_CODE TYPE I,` && |\n| &&
` LV_USR_AXN TYPE I.` && |\n| &&
|\n| &&
` CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG(` && |\n| &&
` EXPORTING` && |\n| &&
` WINDOW_TITLE = 'Select file'` && |\n| &&
` MULTISELECTION = 'X'` && |\n| &&
` CHANGING` && |\n| &&
` FILE_TABLE = ME->PT_FILETAB` && |\n| &&
` RC = LV_RET_CODE` && |\n| &&
` USER_ACTION = LV_USR_AXN` && |\n| &&
` EXCEPTIONS` && |\n| &&
` FILE_OPEN_DIALOG_FAILED = 1` && |\n| &&
` CNTL_ERROR = 2` && |\n| &&
` ERROR_NO_GUI = 3` && |\n| &&
` NOT_SUPPORTED_BY_GUI = 4` && |\n| &&
` OTHERS = 5` && |\n| &&
` ).` && |\n| &&
` IF SY-SUBRC <> 0 OR` && |\n| &&
` LV_USR_AXN = CL_GUI_FRONTEND_SERVICES=>ACTION_CANCEL.` && |\n| &&
` RAISE EX_FILE_SEL_ERR.` && |\n| &&
` ENDIF.` && |\n| &&
|\n| &&
` ENDMETHOD. `.
ENDMETHOD.
METHOD read_json.
r_result = `{` && |\n| &&
` "quiz": {` && |\n| &&
` "sport": {` && |\n| &&
` "q1": {` && |\n| &&
` "test" : false,` && |\n| &&
` "question": "Which one is correct team name in NBA?",` && |\n| &&
` "options": [` && |\n| &&
` "New York Bulls",` && |\n| &&
` "Los Angeles Kings",` && |\n| &&
` "Golden State Warriros",` && |\n| &&
` "Huston Rocket"` && |\n| &&
` ],` && |\n| &&
` "answer": "Huston Rocket"` && |\n| &&
` }` && |\n| &&
` },` && |\n| &&
` "maths": {` && |\n| &&
` "q1": {` && |\n| &&
` "question": "5 + 7 = ?",` && |\n| &&
` "options": [` && |\n| &&
` "10",` && |\n| &&
` "11",` && |\n| &&
` "12",` && |\n| &&
` "13"` && |\n| &&
` ],` && |\n| &&
` "answer": "12"` && |\n| &&
` },` && |\n| &&
` "q2": {` && |\n| &&
` "question": true,` && |\n| &&
` "options": [` && |\n| &&
` "1",` && |\n| &&
` "2",` && |\n| &&
` "3",` && |\n| &&
` "4"` && |\n| &&
` ],` && |\n| &&
` "answer": 487829` && |\n| &&
` }` && |\n| &&
` }` && |\n| &&
` }` && |\n| &&
`}`.
ENDMETHOD.
METHOD read_js.
r_result = `function showAlert() {` && |\n| &&
` alert("Alert from JS file");` && |\n| &&
`}` && |\n| &&
|\n| &&
`function updateHeading() {` && |\n| &&
` document.getElementById('heading').innerHTML = 'Heading changed with JS';` && |\n| &&
`}`.
ENDMETHOD.
METHOD read_yaml.
r_result = `# Employee records` && |\n| &&
`- martin:` && |\n| &&
` name: Martin Developer` && |\n| &&
` job: Developer` && |\n| &&
` skills:` && |\n| &&
` - python` && |\n| &&
` - perl` && |\n| &&
` - pascal` && |\n| &&
`- tabitha:` && |\n| &&
` name: Tabitha Bitumen` && |\n| &&
` job: Developer` && |\n| &&
` skills:` && |\n| &&
` - lisp` && |\n| &&
` - fortran` && |\n| &&
` - erlang`.
ENDMETHOD.
METHOD read_text.
r_result = `TXT test file` && |\n| &&
`Purpose: Provide example of this file type` && |\n| &&
`Document file type: TXT` && |\n| &&
`Version: 1.0` && |\n| &&
`Remark:` && |\n| &&
|\n| &&
`Example content:` && |\n| &&
`The names "John Doe" for males, "Jane Doe" or "Jane Roe" for females, or "Jonnie Doe" and "Janie Doe" for children, or just "Doe" non-gender-specifically are used as placeholder names for a party whose true identity is unknown or mus` &&
`t be withheld in a legal action, case, or discussion. The names are also used to refer to acorpse or hospital patient whose identity is unknown. This practice is widely used in the United States and Canada, but is rarely used in other English-speak` &&
`ing countries including the United Kingdom itself, from where the use of "John Doe" in a legal context originates. The names Joe Bloggs or John Smith are used in the UK instead, as well as in Australia and New Zealand.` && |\n| &&
|\n| &&
`John Doe is sometimes used to refer to a typical male in other contexts as well, in a similar manner to John Q. Public, known in Great Britain as Joe Public, John Smith or Joe Bloggs. For example, the first name listed on a form is o` &&
`ften John Doe, along with a fictional address or other fictional information to provide an example of how to fill in the form. The name is also used frequently in popular culture, for example in the Frank Capra film Meet John Doe. John Doe was also` &&
` the name of a 2002 American television series.`.
ENDMETHOD.
METHOD get_editor_type.
DATA(lv_types) = `abap, abc, actionscript, ada, apache_conf, applescript, asciidoc, assembly_x86, autohotkey, batchfile, bro, c9search, c_cpp, cirru, clojure, cobol, coffee, coldfusion, csharp, css, curly, d, dart, diff, django, dockerfile, ` &&
`dot, drools, eiffel, yaml, ejs, elixir, elm, erlang, forth, fortran, ftl, gcode, gherkin, gitignore, glsl, gobstones, golang, groovy, haml, handlebars, haskell, haskell_cabal, haxe, hjson, html, html_elixir, html_ruby, ini, io, jack, jade, java, ja` &&
`vascri` &&
`pt, json, jsoniq, jsp, jsx, julia, kotlin, latex, lean, less, liquid, lisp, live_script, livescript, logiql, lsl, lua, luapage, lucene, makefile, markdown, mask, matlab, mavens_mate_log, maze, mel, mips_assembler, mipsassembler, mushcode, mysql, ni` &&
`x, nsis, objectivec, ocaml, pascal, perl, pgsql, php, plain_text, powershell, praat, prolog, properties, protobuf, python, r, razor, rdoc, rhtml, rst, ruby, rust, sass, scad, scala, scheme, scss, sh, sjs, smarty, snippets, soy_template, space, sql,` &&
` sqlserver, stylus, svg, swift, swig, tcl, tex, text, textile, toml, tsx, twig, typescript, vala, vbscript, velocity, verilog, vhdl, wollok, xml, xquery, terraform, slim, redshift, red, puppet, php_laravel_blade, mixal, jssm, fsharp, edifact,` &&
` csp, cssound_score, cssound_orchestra, cssound_document`.
SPLIT lv_types AT ',' INTO TABLE DATA(lt_types).
r_result = VALUE #( FOR row IN lt_types ( name = shift_right( shift_left( row ) ) value = shift_right( shift_left( row ) ) ) ).
ENDMETHOD.
METHOD save_data.
"save data here
ENDMETHOD.
ENDCLASS.

View File

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

View File

@ -0,0 +1,108 @@
CLASS z2ui5_cl_app_demo_19 DEFINITION PUBLIC.
PUBLIC SECTION.
INTERFACES z2ui5_if_app.
TYPES:
BEGIN OF ty_row,
selkz TYPE abap_bool,
title TYPE string,
value TYPE string,
descr TYPE string,
END OF ty_row.
DATA t_tab TYPE STANDARD TABLE OF ty_row WITH EMPTY KEY.
DATA t_tab_sel TYPE STANDARD TABLE OF ty_row WITH EMPTY KEY.
DATA mv_sel_mode TYPE string.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS Z2UI5_CL_APP_DEMO_19 IMPLEMENTATION.
METHOD z2ui5_if_app~controller.
CASE client->get( )-lifecycle_method.
WHEN client->cs-lifecycle_method-on_init.
mv_sel_mode = 'None'.
t_tab = VALUE #( descr = 'this is a description'
( title = 'title_01' value = 'value_01' )
( title = 'title_02' value = 'value_02' )
( title = 'title_03' value = 'value_03' )
( title = 'title_04' value = 'value_04' )
( title = 'title_05' value = 'value_05' ) ).
WHEN client->cs-lifecycle_method-on_event.
CASE client->get( )-event.
WHEN 'BUTTON_SEGMENT_CHANGE'.
client->popup_message_toast( `Selection Mode changed` ).
WHEN 'BUTTON_READ_SEL'.
t_tab_sel = t_tab.
DELETE t_tab_sel WHERE selkz <> abap_true.
WHEN 'BACK'.
client->nav_app_leave( client->get( )-id_prev_app_stack ).
ENDCASE.
WHEN client->cs-lifecycle_method-on_rendering.
DATA(view) = client->factory_view( ).
DATA(page) = view->page( title = 'abap2ui5 - Table with different Selection-Modes' navbuttontap = view->_event( 'BACK' ) ).
page->header_content( )->link( text = 'Go to Source Code' href = client->get( )-s_request-url_source_code ).
page->segmented_button(
selected_key = view->_bind( mv_sel_mode )
selection_change = view->_event( 'BUTTON_SEGMENT_CHANGE' )
)->get( )->items( )->get(
)->segmented_button_item( key = 'None' text = 'None'
)->segmented_button_item( key = 'SingleSelect' text = 'SingleSelect'
)->segmented_button_item( key = 'SingleSelectLeft' text = 'SingleSelectLeft'
)->segmented_button_item( key = 'SingleSelectMaster' text = 'SingleSelectMaster'
)->segmented_button_item( key = 'MultiSelect' text = 'MultiSelect' ).
DATA(tab) = page->table(
headertext = 'Table'
mode = mv_sel_mode
items = view->_bind( t_tab ) ).
tab->columns(
)->column( )->text( 'Title' )->get_parent(
)->column( )->text( 'Value' )->get_parent(
)->column( )->text( 'Description' ).
tab->items( )->column_list_item( selected = '{SELKZ}' )->cells(
)->text( '{TITLE}'
)->text( '{VALUE}'
)->text( '{DESCR}' ).
DATA(tab2) = page->table( view->_bind_one_way( t_tab_sel ) ).
tab2->header_toolbar( )->overflow_toolbar(
)->title( 'Selected Entries'
)->button( icon = 'sap-icon://pull-down' text = 'copy selected entries' press = view->_event( 'BUTTON_READ_SEL' )
).
tab2->columns(
)->column( )->text( 'Title' )->get_parent(
)->column( )->text( 'Value' )->get_parent(
)->column( )->text( 'Description' ).
tab2->items( )->column_list_item( )->cells(
)->text( '{TITLE}'
)->text( '{VALUE}'
)->text( '{DESCR}' ).
ENDCASE.
ENDMETHOD.
ENDCLASS.

View File

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

View File

@ -0,0 +1,87 @@
CLASS z2ui5_cl_app_demo_20 DEFINITION PUBLIC.
PUBLIC SECTION.
INTERFACES z2ui5_if_app.
CLASS-METHODS factory
IMPORTING
i_text TYPE string
i_cancel_text TYPE string
i_cancel_event TYPE string
i_confirm_text TYPE string
i_confirm_event TYPE string
i_check_show_previous_view type abap_bool optional
RETURNING
VALUE(r_result) TYPE REF TO z2ui5_cl_app_demo_20.
DATA mv_text TYPE string.
DATA mv_cancel_text TYPE string.
DATA mv_cancel_event TYPE string.
DATA mv_confirm_text TYPE string.
DATA mv_confirm_event TYPE string.
data mv_check_show_previous_view type abap_bool.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS z2ui5_cl_app_demo_20 IMPLEMENTATION.
METHOD factory.
r_result = NEW #( ).
r_result->mv_text = i_text.
r_result->mv_cancel_text = i_cancel_text.
r_result->mv_cancel_event = i_cancel_event.
r_result->mv_confirm_text = i_confirm_text.
r_result->mv_confirm_event = i_confirm_event.
r_result->mv_check_show_previous_view = i_check_show_previous_view.
ENDMETHOD.
METHOD z2ui5_if_app~controller.
CASE client->get( )-lifecycle_method.
WHEN client->cs-lifecycle_method-on_init.
if mv_check_show_previous_view = abap_true.
client->set( set_prev_view = abap_true ).
endif.
client->view_popup( 'POPUP_DECIDE' ).
WHEN client->cs-lifecycle_method-on_event.
CASE client->get( )-event.
WHEN mv_cancel_event OR mv_confirm_event.
client->set( event = client->get( )-event ).
client->nav_app_leave( client->get( )-id_prev_app_stack ).
ENDCASE.
WHEN client->cs-lifecycle_method-on_rendering.
DATA(view) = client->factory_view( 'POPUP_DECIDE' ).
DATA(page) = view->dialog( title = 'Example - ZZ2UI5_CL_APP_DEMO_07' ).
page->text( text = mv_text ).
page->button( text = mv_cancel_text press = view->_event( mv_cancel_event ) ).
page->button( text = mv_confirm_text press = view->_event( mv_confirm_event ) ).
page->footer( )->overflow_toolbar(
)->toolbar_spacer(
)->button(
text = 'Send to Server'
press = view->_event( 'BUTTON_SEND' )
type = 'Success' ).
ENDCASE.
ENDMETHOD.
ENDCLASS.

View File

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

View File

@ -0,0 +1,243 @@
CLASS z2ui5_cl_app_demo_21 DEFINITION PUBLIC.
PUBLIC SECTION.
INTERFACES z2ui5_if_app.
TYPES:
BEGIN OF ty_row,
title TYPE string,
value TYPE string,
descr TYPE string,
icon TYPE string,
info TYPE string,
checkbox TYPE abap_bool,
END OF ty_row.
DATA t_tab TYPE STANDARD TABLE OF ty_row WITH EMPTY KEY.
DATA mv_value TYPE string VALUE 'value'.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS Z2UI5_CL_APP_DEMO_21 IMPLEMENTATION.
METHOD z2ui5_if_app~controller.
CASE client->get( )-lifecycle_method.
WHEN client->cs-lifecycle_method-on_init.
t_tab = REDUCE #( INIT ret = VALUE #( ) FOR n = 1 WHILE n < 11 NEXT ret =
VALUE #( BASE ret ( title = 'Hans' value = 'red' info = 'completed' descr = 'this is a description' checkbox = abap_true ) ) ).
WHEN client->cs-lifecycle_method-on_event.
CASE client->get( )-event.
WHEN 'BUTTON_POPUP_DECIDE'.
client->nav_app_call( z2ui5_cl_app_demo_20=>factory(
i_text = 'Do really want to continue?'
i_cancel_text = 'No'
i_cancel_event = 'POPUP_CONFIRM_NO'
i_confirm_text = 'Yes'
i_confirm_event = 'POPUP_CONFIRM_YES' )
).
WHEN 'BUTTON_POPUP_SELECT'.
DATA(lo_popup_select) = z2ui5_cl_app_demo_23=>factory(
event_callback = 'POPUP_SELECT_RETURN'
i_tab = VALUE #( descr = 'this is a description'
( title = 'title_01' value = 'value_01' )
( title = 'title_02' value = 'value_02' )
( title = 'title_03' value = 'value_03' )
( title = 'title_04' value = 'value_04' ) ) ).
client->nav_app_call( lo_popup_select ).
WHEN 'POPUP_SELECT_RETURN'.
lo_popup_select = CAST z2ui5_cl_app_demo_23( client->get_app_by_id( client->get( )-id_prev_app ) ).
DELETE lo_popup_select->t_tab WHERE selkz <> abap_true.
client->popup_message_box( 'Entry selected: ' && lo_popup_select->t_tab[ 1 ]-title ).
WHEN 'POPUP_CONFIRM_YES'.
client->popup_message_box( 'decide yes' ).
WHEN 'POPUP_CONFIRM_NO'.
client->popup_message_box( 'decide no' ).
WHEN 'F4HELP'.
client->popup_message_box( 'F4HELP' ).
WHEN 'BUTTON_POPUP_01'.
client->view_popup( 'BAL_POPUP' ).
WHEN 'BUTTON_POPUP_02'.
client->view_show( 'MAIN' ).
client->view_popup( 'BAL_POPUP' ).
WHEN 'BUTTON_POPUP_03'.
client->view_show( 'MAIN' ).
client->view_popup( 'BAL_POPUP2' ).
WHEN 'BUTTON_POPUP_04'.
client->set( set_prev_view = abap_true ).
client->view_popup( 'BAL_POPUP2' ).
WHEN 'BUTTON_POPUP_05'.
client->nav_app_call( z2ui5_cl_app_demo_20=>factory(
i_text = 'Do really want to continue?'
i_cancel_text = 'No'
i_cancel_event = 'POPUP_CONFIRM_NO'
i_confirm_text = 'Yes'
i_confirm_event = 'POPUP_CONFIRM_YES' )
).
WHEN 'BUTTON_POPUP_06'.
" client->set( set_prev_view = abap_true ).
client->view_popup( 'POPUP_TABLE' ).
WHEN 'POPUP_TABLE_SEND'.
client->popup_message_box( 'entries edited' ).
WHEN 'BACK'.
client->nav_app_leave( client->get( )-id_prev_app_stack ).
ENDCASE.
WHEN client->cs-lifecycle_method-on_rendering.
DATA(view) = client->factory_view( 'MAIN' ).
DATA(page) = view->page( title = 'Example - ZZ2UI5_CL_APP_DEMO_07' navbuttontap = view->_event( 'BACK' ) ).
page->input(
value = view->_bind( mv_value )
showvaluehelp = abap_true
valuehelprequest = view->_event( 'F4HELP' )
).
page->button(
text = 'Popup new app - popup renderung, no view'
press = view->_event( 'BUTTON_POPUP_DECIDE' )
).
page->button(
text = 'Popup same app - popup rendering, no view rendering'
press = view->_event( 'BUTTON_POPUP_01' )
).
page->button(
text = 'Popup same app - popup rendering, view rendering'
press = view->_event( 'BUTTON_POPUP_02' )
).
page->button(
text = 'Popup same app - popup rendering, view rendering - frontend close'
press = view->_event( 'BUTTON_POPUP_03' )
).
page->button(
text = 'Popup same app - popup rendering, view previous'
press = view->_event( 'BUTTON_POPUP_04' )
).
page->button(
text = 'Popup next app - popup rendering, view previous'
press = view->_event( 'BUTTON_POPUP_05' )
).
page->button(
text = 'Popup select'
press = view->_event( 'BUTTON_POPUP_06' )
).
" client->set( focus = mv_value ).
page->footer( )->overflow_toolbar(
)->toolbar_spacer(
)->button(
text = 'Send to Server'
press = view->_event( 'BUTTON_SEND' )
type = 'Success' ).
view = client->factory_view( 'BAL_POPUP' ).
DATA(popup) = view->dialog( title = 'Example - ZZ2UI5_CL_APP_DEMO_07' ).
popup->text( text = 'this is a message' ).
popup->button( text = 'YES' press = view->_event( 'POPUP_CONFIRM_YES' ) ).
popup->button( text = 'NO' press = view->_event( 'POPUP_CONFIRM_NO' ) ).
popup->footer( )->overflow_toolbar(
)->toolbar_spacer(
)->button(
text = 'Send to Server'
press = view->_event( 'BUTTON_SEND' )
type = 'Success' ).
view = client->factory_view( 'BAL_POPUP2' ).
popup = view->dialog( title = 'Example - ZZ2UI5_CL_APP_DEMO_07' ).
popup->text( text = 'this popup frontend close' ).
popup->button( text = 'YES' press = view->_event( 'POPUP_CONFIRM_YES' ) ).
popup->button( text = 'NO' press = view->_event( 'POPUP_CONFIRM_NO' ) ).
popup->footer( )->overflow_toolbar(
)->toolbar_spacer(
)->button(
text = 'frontend close'
press = view->_event_close_popup( )
type = 'Success' ).
view = client->factory_view( 'POPUP_TABLE' ).
popup = view->dialog( title = 'Example - ZZ2UI5_CL_APP_DEMO_07' ).
DATA(tab) = popup->table( view->_bind( t_tab ) ).
"set toolbar
tab->header_toolbar( )->overflow_toolbar(
)->title( 'title of the table' ).
"set header
tab->columns(
)->column( )->text( 'Title' )->get_parent(
)->column( )->text( 'Color' )->get_parent(
)->column( )->text( 'Info' )->get_parent(
)->column( )->text( 'Description' )->get_parent(
)->column( )->text( 'Checkbox' ).
tab->items( )->column_list_item( )->cells(
)->input( '{TITLE}'
)->input( '{VALUE}'
)->input( '{INFO}'
)->input( '{DESCR}'
)->checkbox( selected = '{CHECKBOX}' enabled = abap_true ).
popup->footer( )->overflow_toolbar(
)->toolbar_spacer(
)->button(
text = 'Commit'
press = view->_event( 'POPUP_TABLE_SEND' )
type = 'Success' ).
ENDCASE.
ENDMETHOD.
ENDCLASS.

View File

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

View File

@ -0,0 +1,143 @@
CLASS z2ui5_cl_app_demo_22 DEFINITION PUBLIC.
PUBLIC SECTION.
INTERFACES z2ui5_if_app.
TYPES:
BEGIN OF ty_row,
title TYPE string,
value TYPE string,
descr TYPE string,
info TYPE string,
END OF ty_row.
DATA t_tab TYPE STANDARD TABLE OF ty_row WITH EMPTY KEY.
DATA mv_value1 TYPE string.
DATA mv_value2 TYPE string.
DATA mv_value3 TYPE string.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS z2ui5_cl_app_demo_22 IMPLEMENTATION.
METHOD z2ui5_if_app~controller.
CASE client->get( )-lifecycle_method.
WHEN client->cs-lifecycle_method-on_init.
mv_value1 = 'value1'.
mv_value2 = 'this is a long text this is a long text this is a long text tis is a long text.'.
DO 4 TIMES.
mv_value2 = mv_value2 && mv_value2.
ENDDO.
mv_value3 = mv_value2.
DATA(ls_row) = VALUE ty_row( title = 'Hans' value = 'red' info = 'completed' descr = 'this is a description' ).
DO 100 TIMES.
INSERT ls_row INTO TABLE t_tab.
ENDDO.
WHEN client->cs-lifecycle_method-on_event.
CASE client->get( )-event.
WHEN 'BUTTON_SCROLL_TOP'.
"nothing to do, default mode
WHEN 'BUTTON_SCROLL_BOTTOM'.
client->set( t_scroll_pos = VALUE #( ( n = 'id_page' v = '99999' ) ) ).
" WHEN 'BUTTON_SCROLL_UP'.
" DATA(lv_pos) = client->get( )-page_scroll_pos - 500.
" client->set( page_scroll_pos = COND #( WHEN lv_pos < 0 THEN 0 ELSE lv_pos ) ).
" WHEN 'BUTTON_SCROLL_DOWN'.
" client->set( page_scroll_pos = client->get( )-page_scroll_pos + 500 ).
" WHEN 'BUTTON_SCROLL_HOLD'.
" client->set( page_scroll_pos = client->get( )-page_scroll_pos ).
WHEN 'BUTTON_FOCUS_FIRST'.
client->set( s_cursor_pos = VALUE #( id = 'id_text1' cursorpos = '5' selectionstart = '5' selectionend = '5' ) ).
WHEN 'BUTTON_FOCUS_SECOND'.
client->set( s_cursor_pos = VALUE #( id = 'id_text2' cursorpos = '5' selectionstart = '5' selectionend = '10' ) ).
WHEN 'BUTTON_FOCUS_END'.
client->set( s_cursor_pos = VALUE #( id = 'id_text3' cursorpos = '99999' selectionstart = '99999' selectionend = '999999' ) ).
client->set( t_scroll_pos = VALUE #(
( n = 'id_page' v = '99999' )
( n = 'id_text3' v = '99999' )
) ).
WHEN 'BACK'.
client->nav_app_leave( client->get( )-id_prev_app_stack ).
ENDCASE.
WHEN client->cs-lifecycle_method-on_rendering.
DATA(view) = client->factory_view( ).
DATA(page) = view->page( id = 'id_page' title = 'abap2ui5 - Scrolling and Focus' navbuttontap = view->_event( 'BACK' ) ).
page->header_content( )->link( text = 'Go to Source Code' href = client->get( )-s_request-url_source_code ).
page->input(
id = 'id_text1'
value = view->_bind( mv_value1 )
).
page->text_area(
width = '100%'
height = '10%'
id = 'id_text2'
value = view->_bind( mv_value2 ) ).
page->button( text = 'focus input pos 3' press = view->_event( 'BUTTON_FOCUS_FIRST' ) ).
page->button( text = 'focus text area pos 20' press = view->_event( 'BUTTON_FOCUS_SECOND' ) ).
page->button( text = 'scroll end + focus end' press = view->_event( 'BUTTON_FOCUS_END' ) ).
DATA(tab) = page->table( sticky = 'ColumnHeaders,HeaderToolbar' headertext = 'Table with some entries' items = view->_bind_one_way( t_tab ) ).
tab->columns(
)->column( )->text( 'Title' )->get_parent(
)->column( )->text( 'Color' )->get_parent(
)->column( )->text( 'Info' )->get_parent(
)->column( )->text( 'Description' ).
tab->items( )->column_list_item( )->cells(
)->text( '{TITLE}'
)->text( '{VALUE}'
)->text( '{INFO}'
)->text( '{DESCR}' ).
page->text_area(
id = 'id_text3'
width = '100%'
height = '10%'
value = view->_bind( mv_value3 ) ).
page->footer( )->overflow_toolbar(
)->button( text = 'Scroll Top' press = view->_event( 'BUTTON_SCROLL_TOP' )
" )->button( text = 'Scroll 500 up' press = view->_event( 'BUTTON_SCROLL_UP' )
" )->button( text = 'Scroll 500 down' press = view->_event( 'BUTTON_SCROLL_DOWN' )
)->button( text = 'Scroll Bottom' press = view->_event( 'BUTTON_SCROLL_BOTTOM' )
" )->toolbar_spacer(
" )->button( text = 'Server Event and hold position' press = view->_event( 'BUTTON_SCROLL_HOLD' )
).
ENDCASE.
ENDMETHOD.
ENDCLASS.

View File

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

View File

@ -0,0 +1,95 @@
CLASS z2ui5_cl_app_demo_23 DEFINITION PUBLIC.
PUBLIC SECTION.
INTERFACES z2ui5_if_app.
TYPES:
BEGIN OF ty_row,
selkz TYPE abap_bool,
title TYPE string,
value TYPE string,
descr TYPE string,
END OF ty_row,
ty_tab TYPE STANDARD TABLE OF ty_row WITH EMPTY KEY.
CLASS-METHODS factory
IMPORTING
i_tab TYPE ty_tab
event_callback type clike
RETURNING
VALUE(r_result) TYPE REF TO z2ui5_cl_app_demo_23.
data mv_event_return type string.
DATA t_tab TYPE STANDARD TABLE OF ty_row WITH EMPTY KEY.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS Z2UI5_CL_APP_DEMO_23 IMPLEMENTATION.
METHOD factory.
r_result = NEW #( ).
r_result->t_tab = i_tab.
r_result->mv_event_return = event_callback.
ENDMETHOD.
METHOD z2ui5_if_app~controller.
CASE client->get( )-lifecycle_method.
WHEN client->cs-lifecycle_method-on_init.
WHEN client->cs-lifecycle_method-on_event.
CASE client->get( )-event.
WHEN 'BUTTON_SEND'.
client->set( event = mv_event_return ).
client->nav_app_leave( client->get( )-id_prev_app_stack ).
WHEN 'BACK'.
client->nav_app_leave( client->get( )-id_prev_app_stack ).
ENDCASE.
WHEN client->cs-lifecycle_method-on_rendering.
DATA(view) = client->factory_view( ).
DATA(page) = view->page( title = 'abap2ui5 - Table with different Selection-Modes' navbuttontap = view->_event( 'BACK' ) ).
page->header_content( )->link( text = 'Go to Source Code' href = client->get( )-s_request-url_source_code ).
DATA(tab) = page->table(
headertext = 'Table'
mode = 'SingleSelectLeft'
items = view->_bind( t_tab ) ).
tab->columns(
)->column( )->text( 'Title' )->get_parent(
)->column( )->text( 'Value' )->get_parent(
)->column( )->text( 'Description' ).
tab->items( )->column_list_item( selected = '{SELKZ}' )->cells(
)->text( '{TITLE}'
)->text( '{VALUE}'
)->text( '{DESCR}' ).
page->footer( )->overflow_toolbar(
)->toolbar_spacer(
)->button(
text = 'Confirm'
press = view->_event( 'BUTTON_SEND' )
type = 'Success' ).
ENDCASE.
ENDMETHOD.
ENDCLASS.

View File

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

View File

@ -0,0 +1,82 @@
CLASS z2ui5_cl_app_demo_24 DEFINITION PUBLIC.
PUBLIC SECTION.
INTERFACES z2ui5_if_app.
DATA mv_input TYPE string.
DATA mv_input2 TYPE string.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS Z2UI5_CL_APP_DEMO_24 IMPLEMENTATION.
METHOD z2ui5_if_app~controller.
CASE client->get( )-lifecycle_method.
WHEN client->cs-lifecycle_method-on_init.
WHEN client->cs-lifecycle_method-on_event.
CASE client->get( )-event.
WHEN 'CALL_NEW_APP'.
client->nav_app_call( NEW z2ui5_cl_app_demo_25( ) ).
WHEN 'CALL_NEW_APP_VIEW'.
client->nav_app_call( NEW z2ui5_cl_app_demo_25( ) ).
client->view_show( 'SECOND' ).
WHEN 'CALL_NEW_APP_READ'.
DATA(lo_app_next) = NEW z2ui5_cl_app_demo_25( ).
lo_app_next->mv_input_previous_set = mv_input.
client->nav_app_call( lo_app_next ).
WHEN 'CALL_NEW_APP_EVENT'.
client->nav_app_call( NEW z2ui5_cl_app_demo_25( ) ).
client->set( event = 'NEW_APP_EVENT' ).
WHEN 'CALL_PREVIOUS_APP_INPUT_RETURN'.
DATA(lo_called_app) = CAST z2ui5_cl_app_demo_25( client->get_app_by_id( client->get( )-id_prev_app ) ).
client->popup_message_box( `Input made in the previous app:` && lo_called_app->mv_input ).
WHEN 'BACK'.
client->nav_app_leave( client->get( )-id_prev_app_stack ).
ENDCASE.
WHEN client->cs-lifecycle_method-on_rendering.
DATA(view) = client->factory_view( ).
view->page( title = 'abap2UI5 - flow logic 1' navbuttontap = view->_event( 'BACK' )
)->header_content( )->link( text = 'Go to Source Code' href = client->get( )-s_request-url_source_code )->get_parent(
)->grid( 'L6 M12 S12' )->content( 'l'
)->simple_form( 'Controller' )->content( 'f'
)->label( 'Demo'
)->button( text = 'call new app (default View)' press = view->_event( 'CALL_NEW_APP' )
)->label( 'Demo'
)->button( text = 'call new app with view SECOND' press = view->_event( 'CALL_NEW_APP_VIEW' )
)->label( 'Demo'
)->button( text = 'call new app and set event' press = view->_event( 'CALL_NEW_APP_EVENT' )
)->label( 'call new app and set this data'
)->input( view->_bind( mv_input )
)->button( text = 'call' press = view->_event( 'CALL_NEW_APP_READ' )
)->label( 'some data, you can read it in the next app'
)->input( view->_bind( mv_input2 )
).
ENDCASE.
ENDMETHOD.
ENDCLASS.

View File

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

View File

@ -0,0 +1,117 @@
CLASS z2ui5_cl_app_demo_25 DEFINITION PUBLIC.
PUBLIC SECTION.
INTERFACES z2ui5_if_app.
CLASS-METHODS factory
IMPORTING
i_app TYPE REF TO z2ui5_if_app
i_name_attri TYPE string
RETURNING
VALUE(r_result) TYPE REF TO z2ui5_cl_app_demo_25.
DATA mv_input TYPE string.
DATA mv_input_previous TYPE string.
DATA mv_input_previous_set TYPE string.
DATA mo_app TYPE REF TO z2ui5_if_app.
DATA mv_name_attri TYPE string.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS z2ui5_cl_app_demo_25 IMPLEMENTATION.
METHOD factory.
r_result = NEW #( ).
r_result->mo_app = i_app.
r_result->mv_name_attri = i_name_attri.
ENDMETHOD.
METHOD z2ui5_if_app~controller.
CASE client->get( )-lifecycle_method.
WHEN client->cs-lifecycle_method-on_init.
WHEN client->cs-lifecycle_method-on_event.
CASE client->get( )-event.
WHEN 'BUTTON_ROUNDTRIP'.
client->popup_message_box( 'server-client roundtrip, method on_event of the abap controller was called' ).
WHEN 'BUTTON_RESTART'.
client->nav_app_call( NEW z2ui5_cl_app_demo_25( ) ).
WHEN 'BUTTON_CHANGE_APP'.
client->nav_app_call( NEW z2ui5_cl_app_demo_01( ) ).
WHEN 'BUTTON_READ_PREVIOUS'.
DATA(lo_previous_app) = CAST z2ui5_cl_app_demo_24( client->get_app_by_id( client->get( )-id_prev_app ) ).
mv_input_previous = lo_previous_app->mv_input2.
client->popup_message_toast( `data of previous app read` ).
WHEN 'NEW_APP_EVENT'.
client->popup_message_box( 'new app called and event NEW_APP_EVENT raised' ).
WHEN 'SHOW_VIEW_MAIN'.
client->view_show( 'MAIN' ).
WHEN 'BACK_WITH_EVENT'.
client->nav_app_leave( client->get( )-id_prev_app_stack ).
client->set( event = 'CALL_PREVIOUS_APP_INPUT_RETURN' ).
WHEN 'BACK'.
client->nav_app_leave( client->get( )-id_prev_app_stack ).
ENDCASE.
WHEN client->cs-lifecycle_method-on_rendering.
DATA(view) = client->factory_view( 'MAIN' ).
view->page( title = 'abap2UI5 - flow logic 2' navbuttontap = view->_event( 'BACK' )
)->header_content( )->link( text = 'Go to Source Code' href = client->get( )-s_request-url_source_code )->get_parent(
)->grid( 'L6 M12 S12' )->content( 'l'
)->simple_form( 'MAIN View' )->content( 'f'
)->label( 'Input set by previous app'
)->input( value = mv_input_previous_set
)->label( 'Data of previous app'
)->input( mv_input_previous
)->button( text = 'read' press = view->_event( 'BUTTON_READ_PREVIOUS' )
)->label( 'Call previous app and show data of this app'
)->input( view->_bind( mv_input )
)->button( text = 'back' press = view->_event( 'BACK_WITH_EVENT' )
).
view = client->factory_view( 'SECOND' ).
view->page( title = 'abap2UI5 - flow logic 2' navbuttontap = view->_event( 'BACK' )
)->header_content( )->link( text = 'Go to Source Code' href = client->get( )-s_request-url_source_code )->get_parent(
)->grid( 'L6 M12 S12' )->content( 'l'
)->simple_form( 'second view set by previous app' )->content( 'f'
)->label( 'Demo'
)->button( text = 'leave to previous app' press = view->_event( 'BACK' )
)->label( 'Demo'
)->button( text = 'show view main' press = view->_event( 'SHOW_VIEW_MAIN' )
).
ENDCASE.
ENDMETHOD.
ENDCLASS.

View File

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

10
src/package.devc.xml Normal file
View File

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

View File

@ -0,0 +1,435 @@
CLASS z2ui5_cl_http_handler DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
CONSTANTS:
BEGIN OF cs_config,
theme TYPE string VALUE 'sap_horizon',
browser_title TYPE string VALUE 'abap2UI5',
repository TYPE string VALUE 'https://ui5.sap.com/resources/sap-ui-core.js',
letterboxing TYPE abap_bool VALUE abap_true,
check_debug_mode TYPE abap_bool VALUE abap_true,
END OF cs_config.
TYPES:
BEGIN OF ty_S_name_value,
name TYPE string,
value TYPE string,
END OF ty_S_name_value.
TYPES ty_t_name_value TYPE STANDARD TABLE OF ty_S_name_value.
CLASS-DATA:
BEGIN OF client,
body TYPE string,
t_header TYPE ty_t_name_value,
t_param TYPE ty_t_name_value,
END OF client.
CLASS-METHODS main_index_html
RETURNING
VALUE(r_result) TYPE string.
CLASS-METHODS main_roundtrip
RETURNING
VALUE(result) TYPE string.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS Z2UI5_CL_HTTP_HANDLER IMPLEMENTATION.
METHOD main_roundtrip.
DATA(lo_runtime) = z2ui5_lcl_system_runtime=>execute_init( ).
DO.
TRY.
DATA(li_client) = lo_runtime->execute_before_app( ).
IF lo_runtime->ms_actual-lifecycle_method = z2ui5_if_client=>cs-lifecycle_method-on_init.
ROLLBACK WORK.
CAST z2ui5_if_app( lo_runtime->ms_db-o_app )->controller( li_client ).
ROLLBACK WORK.
lo_runtime->ms_actual-lifecycle_method = z2ui5_if_client=>cs-lifecycle_method-on_event.
ENDIF.
ROLLBACK WORK.
CAST z2ui5_if_app( lo_runtime->ms_db-o_app )->controller( li_client ).
ROLLBACK WORK.
CATCH cx_root INTO DATA(cx).
lo_runtime = lo_runtime->set_app_system_error( kind = 'ON_EVENT' ix = cx ).
CONTINUE.
ENDTRY.
IF lo_runtime->ms_next-s_nav_app_call_new IS NOT INITIAL.
lo_runtime = lo_runtime->set_app_call_new( ).
CONTINUE.
ENDIF.
IF lo_runtime->ms_next-nav_app_leave_to_id IS NOT INITIAL.
lo_runtime = lo_runtime->set_app_leave_to_id( ).
CONTINUE.
ENDIF.
TRY.
li_client = lo_runtime->execute_before_app( z2ui5_if_client=>cs-lifecycle_method-on_rendering ).
ROLLBACK WORK.
CAST z2ui5_if_app( lo_runtime->ms_db-o_app )->controller( li_client ).
ROLLBACK WORK.
result = lo_runtime->execute_finish( ).
CATCH cx_root INTO cx.
lo_runtime = lo_runtime->set_app_system_error( kind = 'ON_RENDERING' ix = cx ).
CONTINUE.
ENDTRY.
RETURN.
ENDDO.
ENDMETHOD.
METHOD main_index_html.
client-t_param = VALUE #( LET tab = client-t_param IN FOR row IN tab
( name = to_upper( row-name ) value = to_upper( row-value ) ) ).
DATA(lv_url) = client-t_header[ name = '~path' ]-value.
TRY.
DATA(lv_app) = client-t_param[ name = 'APP' ]-value.
lv_url = lv_url && `?app=` && lv_app.
CATCH cx_root.
ENDTRY.
z2ui5_lcl_db=>cleanup( ).
r_result = `<html>` && |\n| &&
`<head>` && |\n| &&
` <meta charset="utf-8">` && |\n| &&
` <title>` && cs_config-browser_title && `</title>` && |\n| &&
` <script src="` && cs_config-repository && `" ` &&
` id="sap-ui-bootstrap" data-sap-ui-theme="` && cs_config-theme && `"` && |\n| &&
` data-sap-ui-libs="sap.m" data-sap-ui-bindingSyntax="complex" data-sap-ui-compatVersion="edge"` && |\n| &&
` data-sap-ui-preload="async">` && |\n| &&
` </script></head>` && |\n| &&
`<body class="sapUiBody">` && |\n| &&
` <div id="content"></div>` && |\n| &&
`</body>` && |\n| &&
`</html>` && |\n|.
r_result = r_result && `<script>` && |\n| &&
` sap.ui.getCore().attachInit(function () {` && |\n| &&
` "use strict";` && |\n| &&
` sap.ui.define(["sap/ui/core/mvc/Controller", "sap/ui/model/odata/v2/ODataModel", "sap/ui/model/json/JSONModel", "sap/m/MessageBox", "sap/ui/core/Fragment"], function (Controller, ODataModel, JSONModel, MessageBox, Fragment) {` && |\n| &&
` "use strict";` && |\n| &&
` return Controller.extend("MyController", {` && |\n| &&
|\n| &&
` onAfterRendering: function () {` && |\n| &&
` var oView = this.getView();` && |\n| &&
` try {` && |\n| &&
` if (sap.z2ui5.oResponse.oCursor) {` && |\n| &&
` var ofocus = oView.byId(sap.z2ui5.oResponse.oCursor.id).getFocusInfo();` && |\n| &&
` ofocus.cursorPos = sap.z2ui5.oResponse.oCursor.cursorPos;` && |\n| &&
` ofocus.selectionStart = sap.z2ui5.oResponse.oCursor.selectionStart;` && |\n| &&
` ofocus.selectionEnd = sap.z2ui5.oResponse.oCursor.selectionEnd;` && |\n| &&
` }` && |\n| &&
` oView.byId(sap.z2ui5.oResponse.oCursor.id).applyFocusInfo(ofocus);` && |\n| &&
` } catch (error) { };` && |\n| &&
` try {` && |\n| &&
` // oView.getContent()[0].getApp().scrollTo(sap.z2ui5.oResponse.PAGE_SCROLL_POS);` && |\n| &&
` } catch (error) { };` && |\n| &&
` //todo` && |\n| &&
` if (sap.z2ui5.oResponse.oScroll){` && |\n| &&
` sap.z2ui5.oResponse.oScroll.forEach( item => Object.keys(item).forEach(function(key,index) {` && |\n| &&
` try {` && |\n| &&
` oView.byId( key ).scrollTo( item[ key ] );` && |\n| &&
` }catch( e ){ ` && |\n| &&
` var ele = '#' + oView.byId( key ).getId( ) + '-inner'; ` && |\n| &&
` $(ele).scrollTop( item[ key ] ); } ` && |\n| &&
` // index: the ordinal position of the key within the object ` && |\n| &&
`})); }` && |\n| &&
` },` && |\n| &&
|\n| &&
` onEventFrontend: function (vAction) {` && |\n| &&
|\n| &&
` if (vAction == 'POPUP_CLOSE' ){` && |\n| &&
` sap.z2ui5.oResponse.oViewPopup.close();` && |\n| &&
` sap.z2ui5.oResponse.oViewPopup.destroy();` && |\n| &&
` delete sap.z2ui5.oResponse.oViewPopup;` && |\n| &&
` delete sap.z2ui5.oResponse.oSystem.VIEW_POPUP;` && |\n| &&
` }` && |\n| &&
|\n| &&
` },` && |\n| &&
|\n| &&
` onEvent: function (oEvent, oEvent2, oEvent3, oEvent4) {` && |\n| &&
|\n| &&
` if (!window.navigator.onLine) {` && |\n| &&
` sap.m.MessageBox.alert('No internet connection! Please reconnect to the server and try again.');` && |\n| &&
` return;` && |\n| &&
` }` && |\n| &&
|\n| &&
` sap.ui.core.BusyIndicator.show();` && |\n| &&
|\n| &&
` this.oBody = this.oView.getModel().oData.oUpdate;` && |\n| &&
` this.oBody.oSystem = sap.z2ui5.oResponse.oSystem;` && |\n| &&
` this.oBody.oEvent = oEvent;` && |\n| &&
|\n| &&
` if (sap.z2ui5.oResponse.oViewPopup) {` && |\n| &&
` sap.z2ui5.oResponse.oViewPopup.close();` && |\n| &&
` sap.z2ui5.oResponse.oViewPopup.destroy();` && |\n| &&
` this.oBody.oPopup = sap.z2ui5.oResponse.oViewPopup.getModel().oData.oUpdate;` && |\n| &&
` }` && |\n| &&
|\n| &&
` if (sap.z2ui5.oResponse.oScroll){` && |\n| &&
` var oScrollNew = [];` && |\n| &&
` sap.z2ui5.oResponse.oScroll.forEach( item => Object.keys(item).forEach(function(key,index) { ` &&
` try {` && |\n| &&
` // oScrollNew.push( { 'n' = key 'v' = this.oView.byId( key ).getScrollDelegate().getScrollTop() } );` && |\n| &&
` }catch( e ){ } ` &&
` }.bind(this))); ` &&
` this.oBody.oScroll = oScrollNew; }` && |\n| &&
|\n| &&
` try {` && |\n| &&
` this.oBody.scrollPos = parseInt(this.oView.getContent()[0].getApp().getScrollDelegate().getScrollTop());` && |\n| &&
` } catch (e) { };` && |\n| &&
|\n| &&
` if (this.oView.getModel().oData.oUpdate.oSystem.CHECK_DEBUG_ACTIVE) {` && |\n| &&
` console.log('Request Object:');` && |\n| &&
` console.log(this.oBody);` && |\n| &&
` }` && |\n| &&
` sap.z2ui5.oResponseOld = sap.z2ui5.oResponse;` && |\n| &&
` sap.z2ui5.oResponse = {};` && |\n| &&
` this.oView.destroy();` && |\n| && |\n| &&
` this.Roundtrip();` && |\n| &&
` },` && |\n| &&
` Roundtrip: function () {` && |\n| &&
|\n| &&
` var xhr = new XMLHttpRequest();` && |\n| &&
` var url = '` && lv_url && `';` && |\n| &&
` xhr.open("POST", url, true);` && |\n| &&
` xhr.onload = function (that) {` && |\n| &&
` if (that.target.status !== 200) {` && |\n| &&
` document.write(that.target.response);` && |\n| &&
` return;` && |\n| &&
` }` && |\n| &&
` sap.z2ui5.oResponse = JSON.parse(that.target.response);` && |\n| &&
` if (sap.z2ui5.oResponse.oSystem.CHECK_DEBUG_ACTIVE) {` && |\n| &&
` console.log('Response Object:');` && |\n| &&
` console.log(sap.z2ui5.oResponse);` && |\n| &&
` console.log('UI5-XML-View:');` && |\n| &&
` console.log(sap.z2ui5.oResponse.vView);` && |\n| &&
` }` && |\n| &&
|\n| &&
` if (sap.z2ui5.oResponse.oAfter) {` && |\n| &&
` sap.z2ui5.oResponse.oAfter.forEach(item => sap.m[item[0]][item[1]](item[2]));` && |\n| &&
` }` && |\n| &&
|\n| &&
` // sap.z2ui5.oResponse.oViewModel.oUpdate.oSystem = sap.z2ui5.oResponse.oSystem;` && |\n| &&
|\n| &&
` if (sap.z2ui5.oResponse.vViewPopup) {` && |\n| &&
` var oModelPopup = new JSONModel(sap.z2ui5.oResponse.oViewModelPopup);` && |\n| &&
` new sap.ui.core.Fragment.load({` && |\n| &&
` definition: sap.z2ui5.oResponse.vViewPopup,` && |\n| &&
` controller: this,` && |\n| &&
` }).then(function (oFragment) {` && |\n| &&
` oFragment.setModel(oModelPopup);` && |\n| &&
` this.getView().addDependent(oFragment);` && |\n| &&
` oFragment.open();` && |\n| &&
` sap.z2ui5.oResponse.oViewPopup = oFragment;` && |\n| &&
` sap.ui.core.BusyIndicator.hide();` && |\n| &&
` }.bind(this));` && |\n| &&
` }` && |\n| &&
|\n| &&
` if (sap.z2ui5.oResponse.vView) {` && |\n| &&
` var oModel = new JSONModel(sap.z2ui5.oResponse.oViewModel);` && |\n| &&
` var oView = new sap.ui.core.mvc.XMLView.create({` && |\n| &&
` viewContent: sap.z2ui5.oResponse.vView,` && |\n| &&
` definition: sap.z2ui5.oResponse.vView,` && |\n| &&
` preprocessors: {` && |\n| &&
` xml: {` && |\n| &&
` models: {` && |\n| &&
` meta: oModel` && |\n| &&
` }` && |\n| &&
` }` && |\n| &&
` },` && |\n| &&
` }).then(oView => {` && |\n| &&
` oView.setModel(oModel);` && |\n| &&
` oView.placeAt("content");` && |\n| &&
` this.oView = oView;` && |\n| &&
` sap.ui.core.BusyIndicator.hide();` && |\n| &&
` }` && |\n| &&
` );` && |\n| &&
` } else if ( sap.z2ui5.oResponse.SET_PREV_VIEW == true ){` && |\n| &&
|\n| &&
` var oModel = new JSONModel(sap.z2ui5.oResponseOld.oViewModel);` && |\n| &&
` var oView = new sap.ui.core.mvc.XMLView.create({` && |\n| &&
` viewContent: sap.z2ui5.oResponseOld.vView,` && |\n| &&
` definition: sap.z2ui5.oResponseOld.vView,` && |\n| &&
` preprocessors: {` && |\n| &&
` xml: {` && |\n| &&
` models: {` && |\n| &&
` meta: oModel` && |\n| &&
` }` && |\n| &&
` }` && |\n| &&
` },` && |\n| &&
` }).then( oView => {` && |\n| &&
` oView.setModel(oModel);` && |\n| &&
` oView.placeAt("content");` && |\n| &&
` this.oView = oView;` && |\n| &&
` sap.ui.core.BusyIndicator.hide();` && |\n| &&
` } );` && |\n| &&
` }` && |\n| &&
` }.bind(this);` && |\n| &&
` xhr.send(JSON.stringify(this.oBody));` && |\n| &&
` },` && |\n| &&
` });` && |\n| &&
` });` && |\n| &&
` var oView = sap.ui.xmlview({` && |\n| &&
` viewContent: "<mvc:View controllerName='MyController' xmlns:mvc='sap.ui.core.mvc' />"` && |\n| &&
` });` && |\n| &&
` sap.z2ui5 = {};` && |\n| &&
` oView.getController().Roundtrip();` && |\n| &&
|\n| &&
|\n| &&
` jQuery.sap.declare("my.library");` && |\n| &&
` jQuery.sap.require("sap.ui.core.Core");` && |\n| &&
` jQuery.sap.require("sap.ui.core.library");` && |\n| &&
|\n| &&
` sap.ui.getCore().initLibrary({` && |\n| &&
` name: "z2ui5",` && |\n| &&
` dependencies: ["sap.ui.core"],` && |\n| &&
` types: [],` && |\n| &&
` interfaces: [],` && |\n| &&
` controls: ["z2ui5.FileUploader"],` && |\n| &&
` elements: [],` && |\n| &&
` version: "0.0.1-SNAPSHOT"` && |\n| &&
` });` && |\n| &&
|\n| &&
` jQuery.sap.declare("z2ui5.FileUploader");` && |\n| &&
|\n| &&
` sap.ui.define([` && |\n| &&
` "sap/ui/core/Control",` && |\n| &&
` "sap/m/Button",` && |\n| &&
` "sap/ui/unified/FileUploader"` && |\n| &&
` ], function (Control, Button, FileUploader) {` && |\n| &&
` "use strict";` && |\n| &&
|\n| &&
` return Control.extend("z2ui5.FileUploader", {` && |\n| &&
|\n| &&
` metadata: {` && |\n| &&
` properties: {` && |\n| &&
` value: {` && |\n| &&
` type: "string",` && |\n| &&
` defaultValue: ""` && |\n| &&
` },` && |\n| &&
` path: {` && |\n| &&
` type: "string",` && |\n| &&
` defaultValue: ""` && |\n| &&
` },` && |\n| &&
` tooltip: {` && |\n| &&
` type: "string",` && |\n| &&
` defaultValue: ""` && |\n| &&
` },` && |\n| &&
` fileType: {` && |\n| &&
` type: "string",` && |\n| &&
` defaultValue: ""` && |\n| &&
` },` && |\n| &&
` placeholder: {` && |\n| &&
` type: "string",` && |\n| &&
` defaultValue: ""` && |\n| &&
` },` && |\n| &&
` buttonText: {` && |\n| &&
` type: "string",` && |\n| &&
` defaultValue: "Upload"` && |\n| &&
` },` && |\n| &&
` enabled: {` && |\n| &&
` type: "boolean",` && |\n| &&
` defaultValue: true` && |\n| &&
` },` && |\n| &&
` multiple: {` && |\n| &&
` type: "boolean",` && |\n| &&
` defaultValue: false` && |\n| &&
` }` && |\n| &&
` },` && |\n| &&
|\n| &&
|\n| &&
` aggregations: {` && |\n| &&
` },` && |\n| &&
` events: {` && |\n| &&
` "upload": {` && |\n| &&
` allowPreventDefault: true,` && |\n| &&
` parameters: {}` && |\n| &&
` }` && |\n| &&
` },` && |\n| &&
` renderer: null` && |\n| &&
` },` && |\n| &&
|\n| &&
` renderer: function (oRm, oControl) {` && |\n| &&
|\n| &&
` oControl.oUploadButton = new Button({` && |\n| &&
` text: oControl.getProperty("buttonText"),` && |\n| &&
` enabled: oControl.getProperty("path") !== "",` && |\n| &&
` press: function (oEvent) {` && |\n| &&
|\n| &&
` this.setProperty("path", this.oFileUploader.getProperty("value"));` && |\n| &&
|\n| &&
` var file = this.oFileUploader.oFileUpload.files[0];` && |\n| &&
` var reader = new FileReader();` && |\n| &&
|\n| &&
` reader.onload = function (evt) {` && |\n| &&
` var vContent = evt.currentTarget.result;` && |\n| &&
` this.setProperty("value", vContent);` && |\n| &&
` this.fireUpload();` && |\n| &&
` //this.getView().byId('picture' ).getDomRef().src = vContent;` && |\n| &&
` }.bind(this)` && |\n| &&
|\n| &&
` reader.readAsDataURL(file);` && |\n| &&
` }.bind(oControl)` && |\n| &&
` });` && |\n| &&
|\n| &&
` oControl.oFileUploader = new FileUploader({` && |\n| &&
` icon: "sap-icon://browse-folder",` && |\n| &&
` iconOnly: true,` && |\n| &&
` value: oControl.getProperty("path"),` && |\n| &&
` placeholder: oControl.getProperty("placeholder"),` && |\n| &&
` change: function (oEvent) {` && |\n| &&
` var value = oEvent.getSource().getProperty("value");` && |\n| &&
` this.setProperty("path", value);` && |\n| &&
` if (value) {` && |\n| &&
` this.oUploadButton.setEnabled();` && |\n| &&
` } else {` && |\n| &&
` this.oUploadButton.setEnabled(false);` && |\n| &&
` }` && |\n| &&
` this.oUploadButton.rerender();` && |\n| &&
` }.bind(oControl)` && |\n| &&
` });` && |\n| &&
|\n| &&
` var hbox = new sap.m.HBox();` && |\n| &&
` hbox.addItem(oControl.oFileUploader);` && |\n| &&
` hbox.addItem(oControl.oUploadButton);` && |\n| &&
` oRm.renderControl(hbox);` && |\n| &&
` }` && |\n| &&
` });` && |\n| &&
` });` && |\n| &&
` });` && |\n| &&
`</script>` && |\n| &&
|\n| &&
`</html>`.
ENDMETHOD.
ENDCLASS.

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,26 @@
CLASS z2ui5_lcl_unit_test DEFINITION FINAL FOR TESTING
DURATION SHORT
RISK LEVEL HARMLESS.
PRIVATE SECTION.
METHODS
first_test FOR TESTING RAISING cx_static_check.
ENDCLASS.
CLASS z2ui5_lcl_unit_test IMPLEMENTATION.
METHOD first_test.
z2ui5_cl_http_handler=>client = VALUE #(
t_header = VALUE #( ( name = `~path` value = `/sap/bc/http/sap/zz99test` ) ) ).
DATA(lv_index_html) = z2ui5_cl_http_handler=>main_index_html( ).
IF lv_index_html IS INITIAL.
cl_abap_unit_assert=>fail( 'No index.html' ).
ENDIF.
ENDMETHOD.
ENDCLASS.

View File

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

View File

@ -0,0 +1,10 @@
INTERFACE z2ui5_if_app
PUBLIC .
INTERFACES if_serializable_object.
METHODS controller
IMPORTING
client TYPE REF TO z2ui5_if_client.
ENDINTERFACE.

15
src/z2ui5_if_app.intf.xml Normal file
View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_INTF" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOINTERF>
<CLSNAME>Z2UI5_IF_APP</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>abap2UI5 - app</DESCRIPT>
<EXPOSURE>2</EXPOSURE>
<STATE>1</STATE>
<UNICODE>X</UNICODE>
</VSEOINTERF>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -0,0 +1,91 @@
INTERFACE z2ui5_if_client
PUBLIC .
CONSTANTS cs LIKE z2ui5_if_view=>cs VALUE z2ui5_if_view=>cs.
types:
begin of ty_S_cursor,
id type string,
cursorPos type string,
selectionStart type string,
selectionEnd type string,
end of ty_S_cursor.
TYPES:
BEGIN OF ty_S_get,
view_active TYPE string,
popup_active type string,
check_previous_app TYPE abap_bool,
event TYPE string,
page_scroll_pos TYPE i,
lifecycle_method TYPE string,
id TYPE string,
id_prev TYPE string,
id_prev_app type string,
id_prev_app_stack TYPE string,
BEGIN OF s_request,
tenant TYPE string,
url_app TYPE string,
url_app_gen TYPE string,
origin TYPE string,
url_source_code TYPE string,
END OF s_request,
END OF ty_s_get.
METHODS set
IMPORTING
event TYPE clike OPTIONAL
t_scroll_pos type z2ui5_if_view=>ty_t_name_value optional
s_cursor_pos type ty_s_cursor optional
set_prev_view type abap_bool optional.
METHODS get
RETURNING
VALUE(result) TYPE ty_S_get.
METHODS get_app_by_id
IMPORTING
id TYPE clike
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_app.
METHODS nav_app_leave
IMPORTING
id TYPE clike.
METHODS nav_app_call
IMPORTING
app TYPE REF TO z2ui5_if_app.
METHODS nav_app_home.
METHODS popup_message_box
IMPORTING
text TYPE string
type TYPE string DEFAULT 'information'.
METHODS popup_message_toast
IMPORTING
text TYPE string.
METHODS view_show
IMPORTING
val TYPE clike OPTIONAL
check_no_rerender TYPE abap_bool DEFAULT abap_false
PREFERRED PARAMETER val.
METHODS view_popup
IMPORTING
name TYPE clike.
METHODS factory_view
IMPORTING
name TYPE string OPTIONAL
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
ENDINTERFACE.

View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_INTF" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOINTERF>
<CLSNAME>Z2UI5_IF_CLIENT</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>abap2UI5 - client</DESCRIPT>
<EXPOSURE>2</EXPOSURE>
<STATE>1</STATE>
<UNICODE>X</UNICODE>
</VSEOINTERF>
</asx:values>
</asx:abap>
</abapGit>

653
src/z2ui5_if_view.intf.abap Normal file
View File

@ -0,0 +1,653 @@
INTERFACE z2ui5_if_view
PUBLIC .
CONSTANTS:
BEGIN OF cs,
BEGIN OF lifecycle_method,
on_init TYPE string VALUE 'INIT',
on_event TYPE string VALUE 'EVENT',
on_rendering TYPE string VALUE 'RENDERING',
END OF lifecycle_method,
BEGIN OF event_type,
server_function TYPE string VALUE 'SERVER_FUNCTION',
display_id TYPE string VALUE 'CALL_PREVIOUS_APP',
END OF event_type,
BEGIN OF bind_type,
one_way TYPE string VALUE 'ONE_WAY',
two_way TYPE string VALUE 'TWO_WAY',
one_time TYPE string VALUE 'ONE_TIME',
END OF bind_type,
END OF cs.
TYPES:
BEGIN OF ty_s_name_value,
n TYPE string,
v TYPE string,
END OF ty_s_name_value.
TYPES ty_T_name_value TYPE STANDARD TABLE OF ty_S_name_value WITH EMPTY KEY.
METHODS _bind
IMPORTING
val TYPE data
RETURNING
VALUE(result) TYPE string.
METHODS _bind_one_way
IMPORTING
val TYPE data
RETURNING
VALUE(result) TYPE string.
METHODS _event
IMPORTING
val TYPE clike
RETURNING
VALUE(result) TYPE string.
METHODS _event_close_popup
RETURNING
VALUE(result) TYPE string.
METHODS layout_data
IMPORTING
ns TYPE clike OPTIONAL
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS flex_item_data
IMPORTING
growFactor TYPE clike OPTIONAL
baseSize TYPE clike OPTIONAL
backgroundDesign TYPE clike OPTIONAL
styleClass TYPE clike OPTIONAL
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS code_editor
IMPORTING
value TYPE clike OPTIONAL
type TYPE clike OPTIONAL
height TYPE clike OPTIONAL
width TYPE clike OPTIONAL
editable TYPE clike OPTIONAL
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS suggestion_items
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS vertical_layout
IMPORTING
class TYPE clike OPTIONAL
width TYPE clike OPTIONAL
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS flex_box
IMPORTING
class TYPE clike OPTIONAL
renderType TYPE clike OPTIONAL
width TYPE clike OPTIONAL
height TYPE clike OPTIONAL
alignItems TYPE clike OPTIONAL
justifyContent TYPE clike OPTIONAL
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS list_item
IMPORTING
text TYPE clike OPTIONAL
additionalText TYPE clike OPTIONAL
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS input
IMPORTING
id type clike optional
value TYPE clike OPTIONAL
placeholder TYPE clike OPTIONAL
type TYPE clike OPTIONAL
showClearIcon TYPE clike OPTIONAL
valueState TYPE clike OPTIONAL
valueStateText TYPE clike OPTIONAL
description TYPE clike OPTIONAL
editable TYPE clike OPTIONAL
suggestionItems TYPE clike OPTIONAL
showSuggestion TYPE clike OPTIONAL
showValueHelp TYPE clike OPTIONAL
valueHelpRequest TYPE clike OPTIONAL
PREFERRED PARAMETER value
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS message_strip
IMPORTING
text TYPE clike OPTIONAL
type TYPE clike OPTIONAL
showIcon TYPE clike OPTIONAL
class TYPE clike OPTIONAL
PREFERRED PARAMETER text
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS ui_table
IMPORTING
rows TYPE clike OPTIONAL
selectionMode TYPE clike OPTIONAL
visibleRowCount TYPE clike OPTIONAL
selectedIndex TYPE clike OPTIONAL
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS ui_extension
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS ui_columns
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS ui_column
IMPORTING
width TYPE clike DEFAULT '11rem'
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS ui_template
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS table
IMPORTING
items TYPE clike OPTIONAL
growing TYPE clike OPTIONAL
growingThreshold TYPE clike OPTIONAL
headerText TYPE clike OPTIONAL
sticky TYPE clike OPTIONAL
mode TYPE clike OPTIONAL
PREFERRED PARAMETER items
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS footer
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS dialog
IMPORTING
title TYPE clike OPTIONAL
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS buttons
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS message_page
IMPORTING
show_header TYPE clike OPTIONAL
text TYPE clike OPTIONAL
enableFormattedText TYPE clike OPTIONAL
description TYPE clike OPTIONAL
icon TYPE clike OPTIONAL
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS get_parent
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS get
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS get_child
IMPORTING
index TYPE i DEFAULT 1
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS columns
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS column
IMPORTING
width TYPE clike OPTIONAL
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS items
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS interact_donut_chart
IMPORTING
selectionchanged TYPE clike OPTIONAL
errormessage TYPE clike OPTIONAL
errormessagetitle TYPE clike OPTIONAL
showerror TYPE clike OPTIONAL
displayedsegments TYPE clike OPTIONAL
press TYPE clike OPTIONAL
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS segments
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS interact_donut_chart_segment
IMPORTING
label TYPE clike OPTIONAL
value TYPE clike OPTIONAL
displayedvalue TYPE clike OPTIONAL
selected TYPE clike OPTIONAL
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS interact_bar_chart
IMPORTING
selectionchanged TYPE clike OPTIONAL
press TYPE clike OPTIONAL
labelwidth TYPE clike OPTIONAL
errormessage TYPE clike OPTIONAL
errormessagetitle TYPE clike OPTIONAL
showerror TYPE clike OPTIONAL
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS bars
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS interact_bar_chart_bar
IMPORTING
label TYPE clike OPTIONAL
value TYPE clike OPTIONAL
displayedvalue TYPE clike OPTIONAL
selected TYPE clike OPTIONAL
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS interact_line_chart
IMPORTING
selectionchanged TYPE clike OPTIONAL
press TYPE clike OPTIONAL
precedingpoint TYPE clike OPTIONAL
succeddingpoint TYPE clike OPTIONAL
errormessage TYPE clike OPTIONAL
errormessagetitle TYPE clike OPTIONAL
showerror TYPE clike OPTIONAL
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS points
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS interact_line_chart_point
IMPORTING
label TYPE clike OPTIONAL
value TYPE clike OPTIONAL
secondarylabel TYPE clike OPTIONAL
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS radial_micro_chart
IMPORTING
sice TYPE clike OPTIONAL
percentage TYPE clike OPTIONAL
press TYPE clike OPTIONAL
valuecolor TYPE clike OPTIONAL
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS column_list_item
IMPORTING
valign TYPE clike DEFAULT 'Middle'
selected TYPE clike OPTIONAL
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS cells
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS header_content
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS sub_header
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS custom_data
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS badge_custom_data
IMPORTING
key TYPE clike OPTIONAL
value TYPE clike OPTIONAL
visible TYPE clike OPTIONAL
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS toggle_button
IMPORTING
text TYPE clike OPTIONAL
icon TYPE clike OPTIONAL
type TYPE clike OPTIONAL
enabled TYPE clike OPTIONAL
press TYPE clike OPTIONAL
class TYPE clike OPTIONAL
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS button
IMPORTING
text TYPE clike OPTIONAL
icon TYPE clike OPTIONAL
type TYPE clike OPTIONAL
enabled TYPE clike OPTIONAL
press TYPE clike OPTIONAL
class TYPE clike OPTIONAL
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS page
IMPORTING
title TYPE clike OPTIONAL
navbuttontap TYPE clike OPTIONAL
id TYPE clike OPTIONAL
PREFERRED PARAMETER title
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS vbox
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS hbox
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS scroll_container
IMPORTING
height TYPE clike DEFAULT '100%'
width TYPE clike DEFAULT '100%'
PREFERRED PARAMETER height
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS simple_form
IMPORTING
title TYPE clike OPTIONAL
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS zz_html
IMPORTING
val TYPE clike OPTIONAL
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS content
IMPORTING
ns TYPE clike OPTIONAL
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS title
IMPORTING
title TYPE clike OPTIONAL
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS tab_container
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS tab
IMPORTING
text TYPE clike OPTIONAL
selected TYPE clike OPTIONAL
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS overflow_toolbar
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS overflow_toolbar_button
IMPORTING
text TYPE clike OPTIONAL
icon TYPE clike OPTIONAL
type TYPE clike OPTIONAL
enabled TYPE clike OPTIONAL
press TYPE clike OPTIONAL
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS toolbar_spacer
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS label
IMPORTING
text TYPE clike OPTIONAL
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS date_picker
IMPORTING
value TYPE clike OPTIONAL
placeholder TYPE clike OPTIONAL
PREFERRED PARAMETER value
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS time_picker
IMPORTING
value TYPE clike OPTIONAL
placeholder TYPE clike OPTIONAL
PREFERRED PARAMETER value
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS date_time_picker
IMPORTING
value TYPE clike OPTIONAL
placeholder TYPE clike OPTIONAL
PREFERRED PARAMETER value
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS link
IMPORTING
text TYPE clike OPTIONAL
href TYPE clike OPTIONAL
enabled TYPE clike OPTIONAL
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS list
IMPORTING
headertext TYPE clike OPTIONAL
items TYPE clike OPTIONAL
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS standard_list_item
IMPORTING
title TYPE clike OPTIONAL
description TYPE clike OPTIONAL
icon TYPE clike OPTIONAL
info TYPE clike OPTIONAL
press TYPE clike OPTIONAL
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS item
IMPORTING
key TYPE clike OPTIONAL
text TYPE clike OPTIONAL
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS segmented_button_item
IMPORTING
icon TYPE clike OPTIONAL
key TYPE clike OPTIONAL
text TYPE clike OPTIONAL
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS combobox
IMPORTING
selectedkey TYPE clike OPTIONAL
showclearicon TYPE clike OPTIONAL
label TYPE clike OPTIONAL
items TYPE clike OPTIONAL
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS grid
IMPORTING
class TYPE clike OPTIONAL
default_span TYPE clike OPTIONAL
PREFERRED PARAMETER default_span
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS grid_data
IMPORTING
span TYPE clike OPTIONAL
PREFERRED PARAMETER span
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS text_area
IMPORTING
value TYPE clike OPTIONAL
rows TYPE clike OPTIONAL
height TYPE clike OPTIONAL
width TYPE clike OPTIONAL
growing TYPE clike OPTIONAL
growingMaxLines TYPE clike OPTIONAL
id TYPE clike OPTIONAL
PREFERRED PARAMETER value
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS range_slider
IMPORTING
max TYPE clike OPTIONAL
min TYPE clike OPTIONAL
step TYPE clike OPTIONAL
startvalue TYPE clike OPTIONAL
endvalue TYPE clike OPTIONAL
showTickmarks TYPE clike OPTIONAL
labelInterval TYPE clike OPTIONAL
width TYPE clike OPTIONAL
class TYPE clike OPTIONAL
id TYPE clike OPTIONAL
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS generic_tag
IMPORTING
ariaLabelledBy TYPE clike OPTIONAL
text TYPE clike OPTIONAL
design TYPE clike OPTIONAL
status TYPE clike OPTIONAL
class TYPE clike OPTIONAL
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS object_number
IMPORTING
state TYPE clike OPTIONAL
emphasized TYPE clike OPTIONAL
number TYPE clike OPTIONAL
unit TYPE clike OPTIONAL
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS switch
IMPORTING
state TYPE clike OPTIONAL
customtexton TYPE clike OPTIONAL
customtextoff TYPE clike OPTIONAL
enabled TYPE clike OPTIONAL
type TYPE clike OPTIONAL
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS step_input
IMPORTING
value TYPE clike
min TYPE clike
max TYPE clike
step TYPE clike
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS progress_indicator
IMPORTING
percentvalue TYPE clike OPTIONAL
displayvalue TYPE clike OPTIONAL
showvalue TYPE clike OPTIONAL
state TYPE clike OPTIONAL
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS segmented_button
IMPORTING
selected_key TYPE clike
selection_Change TYPE clike OPTIONAL
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS checkbox
IMPORTING
text TYPE clike OPTIONAL
selected TYPE clike OPTIONAL
enabled TYPE clike OPTIONAL
PREFERRED PARAMETER selected
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS header_toolbar
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS text
IMPORTING
text TYPE clike OPTIONAL
class TYPE clike OPTIONAL
PREFERRED PARAMETER text
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS _generic
IMPORTING
name TYPE clike
ns TYPE clike OPTIONAL
t_prop TYPE ty_t_name_value OPTIONAL
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
METHODS zz_file_uploader
IMPORTING
value TYPE clike OPTIONAL
path TYPE clike OPTIONAL
placeholder TYPE clike OPTIONAL
upload TYPE clike OPTIONAL
RETURNING
VALUE(result) TYPE REF TO z2ui5_if_view.
ENDINTERFACE.

View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_INTF" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOINTERF>
<CLSNAME>Z2UI5_IF_VIEW</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>abap2UI5 - view</DESCRIPT>
<EXPOSURE>2</EXPOSURE>
<STATE>1</STATE>
<UNICODE>X</UNICODE>
</VSEOINTERF>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -0,0 +1,94 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_TABL" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<DD02V>
<TABNAME>Z2UI5_T_DRAFT</TABNAME>
<DDLANGUAGE>E</DDLANGUAGE>
<TABCLASS>TRANSP</TABCLASS>
<CLIDEP>X</CLIDEP>
<DDTEXT>abap2UI5 - drafts</DDTEXT>
<MASTERLANG>E</MASTERLANG>
<CONTFLAG>A</CONTFLAG>
<EXCLASS>1</EXCLASS>
<ABAP_LANGUAGE_VERSION>5</ABAP_LANGUAGE_VERSION>
</DD02V>
<DD09L>
<TABNAME>Z2UI5_T_DRAFT</TABNAME>
<AS4LOCAL>A</AS4LOCAL>
<TABKAT>0</TABKAT>
<TABART>APPL0</TABART>
<BUFALLOW>N</BUFALLOW>
</DD09L>
<DD03P_TABLE>
<DD03P>
<FIELDNAME>CLIENT</FIELDNAME>
<KEYFLAG>X</KEYFLAG>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>C</INTTYPE>
<INTLEN>000006</INTLEN>
<NOTNULL>X</NOTNULL>
<DATATYPE>CLNT</DATATYPE>
<LENG>000003</LENG>
<MASK> CLNT</MASK>
</DD03P>
<DD03P>
<FIELDNAME>UUID</FIELDNAME>
<KEYFLAG>X</KEYFLAG>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>C</INTTYPE>
<INTLEN>000064</INTLEN>
<NOTNULL>X</NOTNULL>
<DATATYPE>CHAR</DATATYPE>
<LENG>000032</LENG>
<MASK> CHAR</MASK>
</DD03P>
<DD03P>
<FIELDNAME>TIMESTAMPL</FIELDNAME>
<ROLLNAME>TIMESTAMPL</ROLLNAME>
<ADMINFIELD>0</ADMINFIELD>
<COMPTYPE>E</COMPTYPE>
</DD03P>
<DD03P>
<FIELDNAME>UNAME</FIELDNAME>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>C</INTTYPE>
<INTLEN>000040</INTLEN>
<DATATYPE>CHAR</DATATYPE>
<LENG>000020</LENG>
<MASK> CHAR</MASK>
</DD03P>
<DD03P>
<FIELDNAME>REQUEST</FIELDNAME>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>g</INTTYPE>
<INTLEN>000008</INTLEN>
<DATATYPE>STRG</DATATYPE>
<MASK> STRG</MASK>
</DD03P>
<DD03P>
<FIELDNAME>RESPONSE</FIELDNAME>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>g</INTTYPE>
<INTLEN>000008</INTLEN>
<DATATYPE>STRG</DATATYPE>
<MASK> STRG</MASK>
</DD03P>
<DD03P>
<FIELDNAME>DATA</FIELDNAME>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>g</INTTYPE>
<INTLEN>000008</INTLEN>
<DATATYPE>STRG</DATATYPE>
<MASK> STRG</MASK>
</DD03P>
</DD03P_TABLE>
<TABL_EXTRAS>
<TDDAT>
<TABNAME>Z2UI5_T_DRAFT</TABNAME>
<CCLASS>CUS_DEV_SUP_DA</CCLASS>
</TDDAT>
</TABL_EXTRAS>
</asx:values>
</asx:abap>
</abapGit>