Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/furkancosgun/abap-easy-ui
ABAP Easy UI is a library designed to simplify the creation of user interfaces in ABAP.
https://github.com/furkancosgun/abap-easy-ui
abap abapgit custom easy layout oop screen widget
Last synced: about 1 month ago
JSON representation
ABAP Easy UI is a library designed to simplify the creation of user interfaces in ABAP.
- Host: GitHub
- URL: https://github.com/furkancosgun/abap-easy-ui
- Owner: furkancosgun
- License: mit
- Created: 2024-09-08T18:59:38.000Z (5 months ago)
- Default Branch: main
- Last Pushed: 2024-09-09T07:20:32.000Z (5 months ago)
- Last Synced: 2024-12-20T15:18:02.273Z (about 1 month ago)
- Topics: abap, abapgit, custom, easy, layout, oop, screen, widget
- Language: ABAP
- Homepage:
- Size: 30.3 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# ABAP Easy UI
ABAP Easy UI is a library designed to simplify the creation of user interfaces in ABAP. It provides a flexible and powerful way to create and manage screens, layouts, and widgets with minimal code. This project supports various UI components such as labels, inputs, radio buttons, checkboxes, and buttons, and offers easy integration with subscreens.
## License
This project is licensed under the [MIT License](LICENSE). See the LICENSE file for details.
## Contents
- [Row-Column Example](#row-column-example)
- [Label-Input Example](#label-input-example)
- [Radiobutton-Checkbox-Pushbutton Example](#radiobutton-checkbox-pushbutton-example)
- [Custom Container Example](#custom-container-example)
- [Subscreen Example](#subscreen-example)### Row-Column Example
This example demonstrates how to use rows and columns to organize UI components.
```abap
INITIALIZATION.
DATA(lo_screen) = NEW zcl_easy_ui_screen(
repid = sy-repid
dynnr = '0100'
).START-OF-SELECTION.
DATA(lo_main_col) = NEW zcl_easy_ui_col( ).
DATA(lo_row) = NEW zcl_easy_ui_row( ).
DATA(lo_sub_col) = NEW zcl_easy_ui_col( )." Add widgets to the main column
lo_main_col->add_widget(
io_widget = NEW zcl_easy_ui_label( 'Hello from COL' )
)." Add multiple widgets to the row
lo_row->add_widget( io_widget = NEW zcl_easy_ui_label( 'Hello from ROW 1' ) ).
lo_row->add_widget( io_widget = NEW zcl_easy_ui_label( 'Hello from ROW 2' ) ).
lo_row->add_widget( io_widget = NEW zcl_easy_ui_label( 'Hello from ROW 3' ) )." Add widgets to the sub-column
lo_sub_col->add_widget( io_widget = NEW zcl_easy_ui_label( 'Hello From Other COL 1' ) ).
lo_sub_col->add_widget( io_widget = NEW zcl_easy_ui_label( 'Hello From Other COL 2' ) ).
lo_sub_col->add_widget( io_widget = NEW zcl_easy_ui_label( 'Hello From Other COL 3' ) )." Nest layouts: Add sub-column to the row, and row to the main column
lo_row->add_col( io_layout = lo_sub_col ).
lo_main_col->add_row( io_layout = lo_row )." Set the screen layout
lo_screen->set_layout( io_layout = lo_main_col )." Call screen 0100
CALL SCREEN 0100.
```### Label-Input Example
This example shows how to create a UI with labels and input fields.
```abap
TABLES: scarr.INITIALIZATION.
DATA(lo_screen) = NEW zcl_easy_ui_screen(
repid = sy-repid
dynnr = '0100'
).START-OF-SELECTION.
DATA(lo_layout) = NEW zcl_easy_ui_col( )." Add header label
DATA(lo_title) = NEW zcl_easy_ui_label(
label = 'Scarr Table Example'
).
lo_layout->add_widget( io_widget = lo_title )." First row: Label and input for Carrid
DATA(lo_row1) = NEW zcl_easy_ui_row( ).
lo_row1->add_widget(
io_widget = NEW zcl_easy_ui_label(
label = 'Carrid:'
width = 10
)
).
lo_row1->add_widget(
io_widget = NEW zcl_easy_ui_input(
fieldname = 'SCARR-CARRID'
)
)." Second row: Label and input for Carrname
DATA(lo_row2) = NEW zcl_easy_ui_row( ).
lo_row2->add_widget(
io_widget = NEW zcl_easy_ui_label(
label = 'Carrname:'
width = 10
)
).
lo_row2->add_widget(
io_widget = NEW zcl_easy_ui_input(
fieldname = 'SCARR-CARRNAME'
)
)." Add rows to the layout
lo_layout->add_row( io_layout = lo_row1 ).
lo_layout->add_row( io_layout = lo_row2 )." Set the screen layout
lo_screen->set_layout( io_layout = lo_layout )." Call screen 0100
CALL SCREEN 0100.
```### Radiobutton-Checkbox-Pushbutton Example
This example demonstrates the integration of radio buttons, checkboxes, and push buttons into a screen.
```abap
DATA: BEGIN OF gs_context,
BEGIN OF gender,
man TYPE boolean,
woman TYPE boolean,
END OF gender,
chckbox TYPE boolean,
END OF gs_context.INITIALIZATION.
DATA(lo_screen) = NEW zcl_easy_ui_screen(
repid = sy-repid
dynnr = '0100'
).START-OF-SELECTION.
DATA(lo_layout) = NEW zcl_easy_ui_col( )." Radio button section
DATA(lo_row1) = NEW zcl_easy_ui_row( ).
lo_row1->add_widget(
io_widget = NEW zcl_easy_ui_label( label = 'Choose your gender:' )
).lo_row1->add_widget(
io_widget = NEW zcl_easy_ui_label( label = 'Man' )
).
lo_row1->add_widget(
io_widget = NEW zcl_easy_ui_radiobutton(
fieldname = 'GS_CONTEXT-GENDER-MAN'
group = 'GENDER'
)
).lo_row1->add_widget(
io_widget = NEW zcl_easy_ui_label( label = 'Woman' )
).
lo_row1->add_widget(
io_widget = NEW zcl_easy_ui_radiobutton(
fieldname = 'GS_CONTEXT-GENDER-WOMAN'
group = 'GENDER'
)
).
lo_layout->add_row( io_layout = lo_row1 )." Checkbox section
DATA(lo_row2) = NEW zcl_easy_ui_row( ).
lo_row2->add_widget(
io_widget = NEW zcl_easy_ui_label( label = 'Bla Bla Bla:' )
).
lo_row2->add_widget(
io_widget = NEW zcl_easy_ui_label( label = 'I agree' )
).
lo_row2->add_widget(
io_widget = NEW zcl_easy_ui_checkbox(
fieldname = 'GS_CONTEXT-CHCKBOX'
)
).
lo_layout->add_row( io_layout = lo_row2 )." Pushbutton section
DATA(lo_row3) = NEW zcl_easy_ui_row( ).
lo_row3->add_widget(
io_widget = NEW zcl_easy_ui_button(
label = |{ icon_system_save } Save|
fcode = 'SAVE'
)
).
lo_layout->add_row( io_layout = lo_row3 )." Set the screen layout
lo_screen->set_layout( io_layout = lo_layout )." Call screen 0100
CALL SCREEN 0100.
```### Custom Container Example
This example illustrates how to use custom containers to manage complex layouts and widget arrangements.
```abap
DATA: gt_scarr TYPE TABLE OF scarr,
go_salv TYPE REF TO cl_salv_table,
go_container TYPE REF TO cl_gui_custom_container.CONSTANTS: gc_container_name TYPE char2 VALUE 'CC'. " Custom container name
INITIALIZATION.
DATA(lo_screen) = NEW zcl_easy_ui_screen(
repid = sy-repid
dynnr = '0100'
).START-OF-SELECTION.
" Fetch SCARR data
SELECT * FROM scarr INTO TABLE gt_scarr." Create main layout
DATA(lo_layout) = NEW zcl_easy_ui_col( )." Add a custom container widget to the layout
lo_layout->add_widget( io_widget = NEW zcl_easy_ui_container(
fieldname = gc_container_name
width = 100
height = 20
) )." Set the screen layout and call screen
lo_screen->set_layout( io_layout = lo_layout ).
CALL SCREEN 0100.*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
SET PF-STATUS '0100'." Create the container and SALV table if not already created
IF go_salv IS NOT BOUND.
TRY.
" Create the GUI container for the custom area
CREATE OBJECT go_container
EXPORTING
container_name = gc_container_name." Create the SALV table and bind it to the container
cl_salv_table=>factory(
EXPORTING
r_container = go_container
IMPORTING
r_salv_table = go_salv
CHANGING
t_table = gt_scarr
)." Optimize columns and enable all functions
go_salv->get_columns( )->set_optimize( ).
go_salv->get_functions( )->set_all( ).
go_salv->display( ).CATCH cx_salv_msg INTO DATA(lx_salv_error).
MESSAGE lx_salv_error->get_text( ) TYPE 'E'.
ENDTRY.
ELSE.
" Refresh the table if it already exists
go_salv->refresh( ).
ENDIF.
ENDMODULE.
```### Subscreen Example
This example shows how to use subscreens to modularize and organize UI components effectively.
```abap
CONSTANTS: gc_subscreen_name1 TYPE fieldname VALUE 'SUBSCR1',
gc_subscreen_name2 TYPE fieldname VALUE 'SUBSCR2'.INITIALIZATION.
DATA(lo_screen_0100) = NEW zcl_easy_ui_screen( repid = sy-repid dynnr = '0100' ).
DATA(lo_screen_0001) = NEW zcl_easy_ui_screen( repid = sy-repid dynnr = '0001' ).
DATA(lo_screen_0002) = NEW zcl_easy_ui_screen( repid = sy-repid dynnr = '0002' ).START-OF-SELECTION.
" Create main layout
DATA(lo_layout) = NEW zcl_easy_ui_row( )." Add subscreens to main layout
lo_layout->add_widget( io_widget = NEW zcl_easy_ui_subscreen(
fieldname = gc_subscreen_name1
width = 30
height = 20
) ).lo_layout->add_widget( io_widget = NEW zcl_easy_ui_subscreen(
fieldname = gc_subscreen_name2
width = 30
height = 20
) ).lo_screen_0100->set_layout( io_layout = lo_layout ).
" Prepare subscreen 1 layout
DATA(lo_layout1) = NEW zcl_easy_ui_col( ).
lo_layout1->add_widget( io_widget = NEW zcl_easy_ui_label( label = 'Hello From 0001 Subscreen' ) ).
lo_screen_0001->set_layout( io_layout = lo_layout1 )." Prepare subscreen 2 layout
DATA(lo_layout2) = NEW zcl_easy_ui_col( ).
lo_layout2->add_widget( io_widget = NEW zcl_easy_ui_label( label = 'Hello From 0002 Subscreen' ) ).
lo_screen_0002->set_layout( io_layout = lo_layout2 )." Call main screen
CALL SCREEN 0100.
```## Usage
Refer to the examples provided in the `Contents` section to understand how to use various components and features of the ABAP Easy UI library.
Feel free to adjust these suggestions based on your specific needs or the context of your project!