├── _config.yml
├── README.md
├── src
├── zcl_eui_logger.clas.macros.abap
├── demo
│ ├── package.devc.xml
│ ├── zeui_test_screen_00.prog.xml
│ ├── zeui_test_excel.prog.xml
│ ├── zeui_test_crc64.prog.xml
│ ├── zeui_test_menu.prog.xml
│ ├── zcl_eui_test_screen_02.clas.xml
│ ├── zeui_test_screen_02.prog.abap
│ ├── zeui_test_alv.prog.xml
│ ├── zeui_test_alv_filter.prog.xml
│ ├── zeui_test_crc64.prog.abap
│ ├── zeui_test_screen_00.prog.abap
│ ├── zeui_test_screen_01.prog.xml
│ ├── zeui_test_screen_01.prog.abap
│ ├── zeui_test_menu.prog.abap
│ ├── zeui_test_screen_02.prog.xml
│ ├── zeui_test_alv_filter.prog.abap
│ └── zcl_eui_test_screen_02.clas.abap
├── package.devc.xml
├── zeui_dynamic_screen_events.prog.abap
├── zfg_eui_screen.fugr.lzfg_eui_screentop.xml
├── zfg_eui_screen.fugr.saplzfg_eui_screen.xml
├── zfg_eui_screen.fugr.zfm_eui_pbo.abap
├── zeui_dynamic_screen_events.prog.xml
├── zfg_eui_screen.fugr.zfm_eui_next_screen.abap
├── zdeui_ui_type.dtel.xml
├── zfg_eui_screen.fugr.zfm_eui_pai.abap
├── zcl_eui_memo.clas.xml
├── zfg_eui_screen.fugr.saplzfg_eui_screen.abap
├── zcl_eui_prog.clas.xml
├── zdeui_attr_name.dtel.xml
├── zcl_eui_file.clas.locals_def.abap
├── zdeui_db_field.dtel.xml
├── zdeui_f4_table.dtel.xml
├── zcl_eui_event_caller.clas.xml
├── zcl_eui_file.clas.macros.abap
├── zcl_eui_conv.clas.locals_def.abap
├── zcl_eui_crc64.clas.xml
├── zcx_eui_exception.clas.xml
├── zcx_eui_no_check.clas.xml
├── zcl_eui_manager.clas.xml
├── zcl_eui_tree.clas.xml
├── zcl_eui_file_io.clas.locals_def.abap
├── zcl_eui_msg_manager.clas.abap
├── zcl_eui_msg_manager.clas.xml
├── zcl_eui_menu.clas.xml
├── zcl_eui_type.clas.xml
├── zif_eui_manager.intf.abap
├── zcl_eui_memo.clas.abap
├── zcl_eui_file_io.clas.xml
├── zcl_eui_conv.clas.locals_imp.abap
├── zcl_eui_logger.clas.xml
├── zif_eui_manager.intf.xml
├── zcl_eui_alv_filter.clas.xml
├── zcx_eui_no_check.clas.abap
├── zcx_eui_exception.clas.abap
├── zcl_eui_file.clas.xml
├── zcl_eui_alv.clas.xml
├── zcl_eui_file.clas.locals_imp.abap
├── zcl_eui_conv.clas.xml
├── zdeui_ui_type.doma.xml
├── zcl_eui_screen.clas.xml
├── zeui_message.msag.xml
├── zcl_eui_alv.clas.locals_def.abap
├── zcl_eui_prog.clas.abap
├── zcl_eui_tree.clas.abap
├── zcl_eui_screen.clas.locals_def.abap
├── zcl_eui_manager.clas.abap
├── zcl_eui_event_caller.clas.abap
├── zcl_eui_alv.clas.abap
├── zcl_eui_file_io.clas.locals_imp.abap
├── zcl_eui_menu.clas.abap
└── zcl_eui_crc64.clas.abap
└── .abapgit.xml
/_config.yml:
--------------------------------------------------------------------------------
1 | theme: jekyll-theme-modernist
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # eui
2 | Easy UI in SAP
3 |
4 | Now full documentation available here https://bizhuka.github.io/eui
--------------------------------------------------------------------------------
/src/zcl_eui_logger.clas.macros.abap:
--------------------------------------------------------------------------------
1 | *"* use this source file for any macro definitions you need
2 | *"* in the implementation part of the class
3 |
4 | DEFINE set_default.
5 | IF &1 IS INITIAL.
6 | &1 = &2.
7 | ENDIF.
8 | END-OF-DEFINITION.
9 |
--------------------------------------------------------------------------------
/src/demo/package.devc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | EUI demo
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/src/package.devc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Easy user interface
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/src/zeui_dynamic_screen_events.prog.abap:
--------------------------------------------------------------------------------
1 | *&---------------------------------------------------------------------*
2 | *&---------------------------------------------------------------------*
3 |
4 | AT SELECTION-SCREEN OUTPUT.
5 | zcl_eui_screen=>top_pbo( ).
6 |
7 | AT SELECTION-SCREEN.
8 | " Only push button commands
9 | IF sy-ucomm CP 'X0*'.
10 | zcl_eui_screen=>top_pai( iv_ucomm = sy-ucomm ).
11 | ENDIF.
12 |
--------------------------------------------------------------------------------
/src/zfg_eui_screen.fugr.lzfg_eui_screentop.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | LZFG_EUI_SCREENTOP
7 | S
8 | D$
9 | I
10 | S
11 | X
12 | D$S
13 | X
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/src/zfg_eui_screen.fugr.saplzfg_eui_screen.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | SAPLZFG_EUI_SCREEN
7 | S
8 | D$
9 | F
10 | S
11 | E
12 | X
13 | D$S
14 | X
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/src/zfg_eui_screen.fugr.zfm_eui_pbo.abap:
--------------------------------------------------------------------------------
1 | FUNCTION zfm_eui_pbo.
2 | *"----------------------------------------------------------------------
3 | *"*"Local Interface:
4 | *"----------------------------------------------------------------------
5 |
6 | IF lcl_stack=>mt_stack[] IS INITIAL AND go_top_manager IS NOT INITIAL.
7 | go_top_manager->pbo( ).
8 | RETURN.
9 | ENDIF.
10 |
11 | " Do not show errors
12 | CHECK lcl_stack=>mt_stack IS NOT INITIAL.
13 |
14 | " Just call EVENT
15 | lcl_stack=>pbo_0100( iv_create_cont = abap_false ).
16 | ENDFUNCTION.
17 |
--------------------------------------------------------------------------------
/src/zeui_dynamic_screen_events.prog.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZEUI_DYNAMIC_SCREEN_EVENTS
7 | I
8 | E
9 | X
10 |
11 |
12 | -
13 | R
14 | ZCL_EUI_SCREEN dynamic screen events
15 | 36
16 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/src/demo/zeui_test_screen_00.prog.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZEUI_TEST_SCREEN_00
7 | 1
8 | E
9 | X
10 | X
11 |
12 |
13 | -
14 | R
15 | Test screen PBO event
16 | 21
17 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/.abapgit.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | E
6 | /src/
7 | PREFIX
8 |
9 | - /.gitignore
10 | - /LICENSE
11 | - /README.md
12 | - /package.json
13 | - /.travis.yml
14 | - /.gitlab-ci.yml
15 | - /abaplint.json
16 | - /azure-pipelines.yml
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/src/demo/zeui_test_excel.prog.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZEUI_TEST_EXCEL
7 | 1
8 | E
9 | X
10 | X
11 |
12 |
13 | -
14 | R
15 | Test Excel utils
16 | 16
17 |
18 | -
19 | S
20 | P_CSV
21 | Use CSV
22 | 15
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/src/demo/zeui_test_crc64.prog.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZEUI_TEST_CRC64
7 | 1
8 | E
9 | X
10 | X
11 |
12 |
13 | -
14 | R
15 | Test class ZCL_EUI_CRC64
16 | 24
17 |
18 | -
19 | S
20 | P_LOG
21 | Show logs
22 | 17
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/src/zfg_eui_screen.fugr.zfm_eui_next_screen.abap:
--------------------------------------------------------------------------------
1 | FUNCTION zfm_eui_next_screen.
2 | *"----------------------------------------------------------------------
3 | *"*"Local Interface:
4 | *" IMPORTING
5 | *" REFERENCE(IO_SCR_MANAGER) TYPE REF TO ZIF_EUI_MANAGER
6 | *" REFERENCE(IV_IS_TOP) TYPE ABAP_BOOL OPTIONAL
7 | *"----------------------------------------------------------------------
8 |
9 | " ### NO_CALL
10 | IF io_scr_manager->ms_screen-dynnr = zcl_eui_screen=>mc_dynnr-free_sel OR iv_is_top = abap_true.
11 | go_top_manager = io_scr_manager.
12 | RETURN.
13 | ENDIF.
14 |
15 | " Move to next screen
16 | lcl_stack=>push_stack( io_manager = io_scr_manager
17 | "iv_read_only = iv_read_only
18 | ).
19 | ENDFUNCTION.
20 |
--------------------------------------------------------------------------------
/src/zdeui_ui_type.dtel.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZDEUI_UI_TYPE
7 | E
8 | ZDEUI_UI_TYPE
9 | 55
10 | 10
11 | 20
12 | 40
13 | Kind
14 | Kind
15 | Kind
16 | Kind
17 | Kind
18 | E
19 | D
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/src/zfg_eui_screen.fugr.zfm_eui_pai.abap:
--------------------------------------------------------------------------------
1 | FUNCTION zfm_eui_pai.
2 | *"----------------------------------------------------------------------
3 | *"*"Local Interface:
4 | *" IMPORTING
5 | *" REFERENCE(IV_UCOMM) TYPE SYUCOMM
6 | *"----------------------------------------------------------------------
7 |
8 | IF lcl_stack=>mt_stack[] IS INITIAL AND go_top_manager IS NOT INITIAL.
9 | DATA lv_close TYPE abap_bool.
10 | go_top_manager->pai( EXPORTING iv_command = iv_ucomm
11 | CHANGING cv_close = lv_close ).
12 | RETURN.
13 | ENDIF.
14 |
15 | " Do not show errors
16 | CHECK lcl_stack=>mt_stack IS NOT INITIAL.
17 |
18 | " Just call EVENT
19 | gv_ok_code = iv_ucomm.
20 | lcl_stack=>pai_0700( EXPORTING iv_silent = abap_true " TODO Pass as PARAM ???
21 | CHANGING cv_cmd = gv_ok_code ).
22 | ENDFUNCTION.
23 |
--------------------------------------------------------------------------------
/src/zcl_eui_memo.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_EUI_MEMO
7 | E
8 | Popup text editor
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 | CONSTRUCTOR
17 | E
18 | CONSTRUCTOR
19 |
20 |
21 | MO_TEXTEDIT
22 | E
23 | SAP TextEdit Control
24 |
25 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/src/demo/zeui_test_menu.prog.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZEUI_TEST_MENU
7 | 1
8 | E
9 | X
10 | X
11 |
12 |
13 |
14 |
15 | TITLE_BAR
16 | &
17 |
18 |
19 |
20 |
21 | -
22 | R
23 | Test GOS menu
24 | 13
25 |
26 | -
27 | S
28 | P_SCR0
29 | Use CL_GUI_CONTAINER=>SCREEN0
30 | 37
31 |
32 |
33 |
34 |
35 |
36 |
--------------------------------------------------------------------------------
/src/demo/zcl_eui_test_screen_02.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_EUI_TEST_SCREEN_02
7 | E
8 | Test SE38 - > ZEUI_TEST_SCREEN_02
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 | ON_START_PAI
17 | E
18 | PAI for START screen
19 |
20 |
21 | SHOW_INITIAL_SCREEN
22 | E
23 | Instead of 1000
24 |
25 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/src/zfg_eui_screen.fugr.saplzfg_eui_screen.abap:
--------------------------------------------------------------------------------
1 | *******************************************************************
2 | * System-defined Include-files. *
3 | *******************************************************************
4 | INCLUDE LZFG_EUI_SCREENTOP. " Global Declarations
5 | INCLUDE LZFG_EUI_SCREENUXX. " Function Modules
6 |
7 | *******************************************************************
8 | * User-defined Include-files (if necessary). *
9 | *******************************************************************
10 | * INCLUDE LZHT_FUGR_SCREENF... " Subroutines
11 | * INCLUDE LZHT_FUGR_SCREENO... " PBO-Modules
12 | * INCLUDE LZHT_FUGR_SCREENI... " PAI-Modules
13 | * INCLUDE LZHT_FUGR_SCREENE... " Events
14 | * INCLUDE LZHT_FUGR_SCREENP... " Local class implement.
15 | * INCLUDE LZHT_FUGR_SCREENT99. " ABAP Unit tests
16 |
--------------------------------------------------------------------------------
/src/zcl_eui_prog.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_EUI_PROG
7 | E
8 | Subroutine pool Or permanent program creater
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 | CONSTRUCTOR
17 | E
18 | CONSTRUCTOR
19 |
20 |
21 | GENERATE
22 | E
23 | New or already existing app
24 |
25 |
26 | MV_CPROG
27 | E
28 | Calling Program
29 |
30 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/src/zdeui_attr_name.dtel.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZDEUI_ATTR_NAME
7 | E
8 | CHAR61
9 | 55
10 | 10
11 | 20
12 | 40
13 | Name
14 | Name
15 | Name
16 | Name
17 | Name
18 | E
19 | D
20 |
21 |
22 | R
23 |
24 |
25 | -
26 | R
27 | Имя
28 | Имя
29 | Имя
30 | Имя
31 | Имя
32 |
33 |
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/src/zcl_eui_file.clas.locals_def.abap:
--------------------------------------------------------------------------------
1 | *"* use this source file for any type of declarations (class
2 | *"* definitions, interfaces or type declarations) you need for
3 | *"* components in the private section
4 |
5 | TYPE-POOLS:
6 | abap.
7 |
8 | CLASS lcl_doi DEFINITION FINAL.
9 | PUBLIC SECTION.
10 | CLASS-METHODS:
11 |
12 | show_in_browser
13 | IMPORTING
14 | io_file TYPE REF TO zcl_eui_file
15 | io_container TYPE REF TO cl_gui_container,
16 |
17 | show_in_doi
18 | IMPORTING
19 | io_file TYPE REF TO zcl_eui_file
20 | io_container TYPE REF TO cl_gui_container
21 | CHANGING
22 | co_ole_app TYPE ole2_object,
23 |
24 | web_dynpro_attach
25 | IMPORTING
26 | i_filename TYPE string " File name with extension
27 | i_content TYPE xstring
28 | i_inplace TYPE abap_bool
29 | i_in_new_window TYPE abap_bool DEFAULT abap_false
30 | i_mime_type TYPE string OPTIONAL.
31 | ENDCLASS.
32 |
33 |
34 | CLASS zcl_eui_file DEFINITION LOCAL FRIENDS lcl_doi.
35 |
--------------------------------------------------------------------------------
/src/zdeui_db_field.dtel.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZDEUI_DB_FIELD
7 | E
8 | CHAR61
9 | 55
10 | 10
11 | 20
12 | 40
13 | Table & field
14 | Table & field
15 | TabFld
16 | Table & field
17 | Table & field
18 | E
19 | D
20 |
21 |
22 | R
23 |
24 |
25 | -
26 | R
27 | Тип
28 | Тип
29 | Тип
30 | Тип
31 | Тип
32 |
33 |
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/src/zdeui_f4_table.dtel.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZDEUI_F4_TABLE
7 | E
8 | CHAR61
9 | 55
10 | 10
11 | 20
12 | 40
13 | F4 internal table
14 | F4 internal table
15 | F4 Table
16 | F4 internal table
17 | F4 internal table
18 | E
19 | D
20 |
21 |
22 | R
23 |
24 |
25 | -
26 | R
27 | Тип
28 | Тип
29 | Тип
30 | Тип
31 | Тип
32 |
33 |
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/src/zcl_eui_event_caller.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_EUI_EVENT_CALLER
7 | E
8 | Dynamic event caller
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 | ADD_HANDLER
17 | E
18 | Add or delete handler
19 |
20 |
21 | MT_LISTENER
22 | E
23 | all listners
24 |
25 |
26 | TS_LISTENER
27 | E
28 | 1 listner
29 |
30 |
31 | TT_LISTENER
32 | E
33 | all listners
34 |
35 |
36 |
37 |
38 |
39 |
--------------------------------------------------------------------------------
/src/zcl_eui_file.clas.macros.abap:
--------------------------------------------------------------------------------
1 | *"* use this source file for any macro definitions you need
2 | *"* in the implementation part of the class
3 |
4 | DEFINE set_if_initial.
5 | IF &1 IS INITIAL AND &2 IS NOT INITIAL.
6 | &1 = &2.
7 | ENDIF.
8 | END-OF-DEFINITION.
9 |
10 | " Prepare file open/save dialog
11 | DEFINE prepare_dialog.
12 | set_if_initial iv_default_extension mv_extension.
13 | IF iv_default_filename IS INITIAL.
14 | CONCATENATE '*.' iv_default_extension INTO iv_default_filename.
15 | ENDIF.
16 |
17 | CASE mv_extension.
18 | WHEN mc_extension-xlsx.
19 | set_if_initial iv_file_filter 'Excel Workbook (*.xlsx)'.
20 | WHEN mc_extension-csv.
21 | set_if_initial iv_file_filter 'CSV (Tab delimited) (*.csv)'.
22 | WHEN mc_extension-docx.
23 | set_if_initial iv_file_filter 'Word Document (*.docx)'.
24 | WHEN mc_extension-html.
25 | set_if_initial iv_file_filter cl_gui_frontend_services=>filetype_html.
26 | WHEN mc_extension-pdf.
27 | set_if_initial iv_file_filter 'Adobe PDF Files (*.pdf)'.
28 | WHEN OTHERS.
29 | set_if_initial iv_file_filter cl_gui_frontend_services=>filetype_all.
30 | ENDCASE.
31 | END-OF-DEFINITION.
32 |
--------------------------------------------------------------------------------
/src/zcl_eui_conv.clas.locals_def.abap:
--------------------------------------------------------------------------------
1 | *"* use this source file for any type of declarations (class
2 | *"* definitions, interfaces or type declarations) you need for
3 | *"* components in the private section
4 |
5 | CLASS lcl_json_util DEFINITION FINAL.
6 | PUBLIC SECTION.
7 |
8 | CLASS-DATA:
9 | mt_xsdboolean TYPE stringtab.
10 |
11 | CLASS-METHODS:
12 | class_constructor.
13 | ENDCLASS.
14 |
15 | CLASS lcl_salv_util DEFINITION INHERITING FROM cl_salv_model_list FINAL.
16 | PUBLIC SECTION.
17 |
18 | CLASS-METHODS:
19 | _get_grid_from_salv
20 | IMPORTING
21 | io_salv TYPE REF TO cl_salv_model_list
22 | RETURNING
23 | VALUE(ro_gui_alv) TYPE REF TO cl_gui_alv_grid
24 | RAISING
25 | cx_salv_msg.
26 | ENDCLASS.
27 |
28 | CLASS lcl_grid_util DEFINITION INHERITING FROM cl_gui_alv_grid FINAL.
29 | PUBLIC SECTION.
30 |
31 | CLASS-METHODS:
32 | _get_grid_table
33 | IMPORTING
34 | io_alv TYPE REF TO cl_gui_alv_grid
35 | RETURNING
36 | VALUE(rr_table) TYPE REF TO data .
37 | ENDCLASS.
38 |
39 | CLASS lcl_assert_util DEFINITION FINAL.
40 | PUBLIC SECTION.
41 | CLASS-METHODS:
42 | get_class_name
43 | RETURNING VALUE(rv_class_name) TYPE seoclass-clsname.
44 | ENDCLASS.
45 |
--------------------------------------------------------------------------------
/src/zcl_eui_crc64.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_EUI_CRC64
7 | E
8 | Hash calculator
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 | -
16 | I
17 | PAR
18 | parameter error
19 | 25
20 |
21 |
22 |
23 |
24 | CALC_STRING_HASH
25 | E
26 | SHA1
27 |
28 |
29 | CALC_XSTRING_HASH
30 | E
31 | SHA1
32 |
33 |
34 | CONSTRUCTOR
35 | E
36 | CONSTRUCTOR
37 |
38 |
39 | MV_CRC64
40 | E
41 | Code Inspector: Check Sum
42 |
43 |
44 |
45 |
46 |
47 |
--------------------------------------------------------------------------------
/src/zcx_eui_exception.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCX_EUI_EXCEPTION
7 | E
8 | Easy user interface exception
9 | 40
10 | 1
11 | X
12 | X
13 | X
14 |
15 |
16 |
17 | CONSTRUCTOR
18 | E
19 | CONSTRUCTOR
20 |
21 |
22 | MSGV1
23 | E
24 | Message variable 01
25 |
26 |
27 | MSGV2
28 | E
29 | Message variable 02
30 |
31 |
32 | MSGV3
33 | E
34 | Message variable 03
35 |
36 |
37 | MSGV4
38 | E
39 | Message variable 04
40 |
41 |
42 |
43 |
44 |
45 |
--------------------------------------------------------------------------------
/src/zcx_eui_no_check.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCX_EUI_NO_CHECK
7 | E
8 | Exception that always be propagated automatically
9 | 40
10 | 1
11 | X
12 | X
13 | X
14 |
15 |
16 |
17 | CONSTRUCTOR
18 | E
19 | CONSTRUCTOR
20 |
21 |
22 | MSGV1
23 | E
24 | Message variable 01
25 |
26 |
27 | MSGV2
28 | E
29 | Message variable 02
30 |
31 |
32 | MSGV3
33 | E
34 | Message variable 03
35 |
36 |
37 | MSGV4
38 | E
39 | Message variable 04
40 |
41 |
42 |
43 |
44 |
45 |
--------------------------------------------------------------------------------
/src/demo/zeui_test_screen_02.prog.abap:
--------------------------------------------------------------------------------
1 | *&---------------------------------------------------------------------*
2 | *&---------------------------------------------------------------------*
3 | REPORT zeui_test_screen_02.
4 |
5 | TYPE-POOLS:
6 | abap.
7 |
8 | TABLES: usr02.
9 |
10 |
11 | **********************************************************************
12 | " CMD_01 -> 01-Statically decl. screen
13 | **********************************************************************
14 |
15 | SELECTION-SCREEN BEGIN OF SCREEN 1020 AS SUBSCREEN.
16 | SELECTION-SCREEN BEGIN OF BLOCK bl_1020. "WITH FRAME TITLE TEXT-tit.
17 | PARAMETERS:
18 | p_bukrs TYPE bukrs,
19 | p_bdc_m TYPE ettcd-mode AS LISTBOX VISIBLE LENGTH 50,
20 | p_mandt TYPE syst-mandt AS LISTBOX VISIBLE LENGTH 50,
21 | p_check AS CHECKBOX.
22 | SELECT-OPTIONS:
23 | s_user FOR usr02-bname.
24 | PARAMETERS:
25 | p_land1 TYPE t005t-land1,
26 | p_fld_i TYPE syindex,
27 | p_fld_i2 TYPE sytabix.
28 | SELECTION-SCREEN END OF BLOCK bl_1020.
29 | SELECTION-SCREEN END OF SCREEN 1020.
30 |
31 |
32 | **********************************************************************
33 | **********************************************************************
34 |
35 | INITIALIZATION.
36 | zcl_eui_test_screen_02=>show_initial_screen( ).
37 |
38 | AT SELECTION-SCREEN OUTPUT.
39 | " For 01 & 04 only
40 | IF sy-dynnr = '1020' OR sy-dynnr = '9999'.
41 | zcl_eui_screen=>top_pbo( ).
42 | ENDIF.
43 |
--------------------------------------------------------------------------------
/src/zcl_eui_manager.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_EUI_MANAGER
7 | E
8 | Default realization of ZIF_EUI_SCR_MANAGER
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 | -
16 | I
17 | OPC
18 | The action was cancelled
19 | 48
20 |
21 |
22 |
23 |
24 | ADD_HANDLER
25 | E
26 | Add event handler
27 |
28 |
29 | CONSTRUCTOR
30 | E
31 | CONSTRUCTOR
32 |
33 |
34 | MC_EUI_SCREEN_FUGR
35 | E
36 | Pf-status container
37 |
38 |
39 | MO_EVENT_CALLER
40 | E
41 | Dynamic event caller
42 |
43 |
44 |
45 |
46 |
47 |
--------------------------------------------------------------------------------
/src/zcl_eui_tree.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_EUI_TREE
7 | E
8 | Tree manager
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 | -
16 | I
17 | PPV
18 | Please pass valid empty standard table
19 | 76
20 |
21 |
22 |
23 | -
24 | R
25 |
26 |
-
27 | I
28 | PPV
29 | Пожалуйста, передайте пустую стандартную таблицу
30 | 76
31 |
32 |
33 |
34 |
35 |
36 |
37 | CONSTRUCTOR
38 | E
39 | CONSTRUCTOR
40 |
41 |
42 | _SET_HANDLERS
43 | E
44 | Use GET_TREE( ) for other events
45 |
46 |
47 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/src/demo/zeui_test_alv.prog.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZEUI_TEST_ALV
7 | 1
8 | E
9 | X
10 | X
11 |
12 |
13 | -
14 | R
15 | Test ALV
16 | 8
17 |
18 | -
19 | S
20 | P_EDIT
21 | Editable
22 | 16
23 |
24 | -
25 | S
26 | P_POPUP
27 | Show ALV in popup
28 | 26
29 |
30 |
31 |
32 | -
33 | R
34 |
35 |
-
36 | R
37 | Тестирование ALV
38 | 70
39 |
40 | -
41 | S
42 | P_EDIT
43 | Редактируемый
44 | 38
45 |
46 | -
47 | S
48 | P_POPUP
49 | ALV во всплывающем окне
50 | 38
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
--------------------------------------------------------------------------------
/src/zcl_eui_file_io.clas.locals_def.abap:
--------------------------------------------------------------------------------
1 | *"* use this source file for any type of declarations (class
2 | *"* definitions, interfaces or type declarations) you need for
3 | *"* components in the private section
4 |
5 | CLASS lcl_helper DEFINITION FINAL.
6 | PUBLIC SECTION.
7 | CONSTANTS:
8 | BEGIN OF mc_gen_type,
9 | number TYPE string VALUE 'NUMBER',
10 | date TYPE string VALUE 'DATA',
11 | time TYPE string VALUE 'TIME',
12 | skip TYPE string VALUE 'SKIP',
13 | END OF mc_gen_type.
14 |
15 | TYPES:
16 | " For speed
17 | BEGIN OF ts_col_ind,
18 | col TYPE char3,
19 | ind TYPE i,
20 | END OF ts_col_ind.
21 |
22 | CLASS-DATA:
23 | " Backward compatibility (could be 1 table)
24 | mt_col_ind TYPE SORTED TABLE OF ts_col_ind WITH UNIQUE KEY col,
25 | mt_ind_col TYPE SORTED TABLE OF ts_col_ind WITH UNIQUE KEY ind.
26 |
27 | CLASS-METHODS:
28 | fill_mapping
29 | IMPORTING
30 | ir_table TYPE REF TO data
31 | ir_excel_map TYPE REF TO zcl_eui_file_io=>tt_excel_map
32 | EXPORTING
33 | et_fieldcat TYPE lvc_t_fcat
34 | er_excel_map TYPE REF TO zcl_eui_file_io=>tt_excel_map,
35 |
36 | export_2_table
37 | IMPORTING
38 | ir_table TYPE REF TO data
39 | io_handler TYPE REF TO object
40 | ir_source TYPE REF TO data
41 | iv_row_from TYPE sytabix
42 | io_file TYPE REF TO zcl_eui_file_io " for messages only
43 | ir_excel_map TYPE REF TO zcl_eui_file_io=>tt_excel_map
44 | RAISING zcx_eui_exception.
45 | ENDCLASS.
46 |
47 |
48 | CLASS zcl_eui_file_io DEFINITION LOCAL FRIENDS lcl_helper.
49 |
--------------------------------------------------------------------------------
/src/demo/zeui_test_alv_filter.prog.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZEUI_TEST_ALV_FILTER
7 | 1
8 | E
9 | X
10 | X
11 |
12 |
13 | -
14 | I
15 | ADD
16 | Add selected rows
17 | 27
18 |
19 | -
20 | R
21 | Test ALV color filter
22 | 21
23 |
24 | -
25 | S
26 | P_MAX
27 | Max row count
28 | 21
29 |
30 | -
31 | S
32 | P_MENU
33 | As menu
34 | 15
35 |
36 |
37 |
38 | -
39 | R
40 |
41 |
-
42 | I
43 | ADD
44 | Добавить выбранные строки
45 | 27
46 |
47 | -
48 | R
49 | Тестирование ALV
50 | 70
51 |
52 | -
53 | S
54 | P_MAX
55 | Максимальное количество строк
56 | 38
57 |
58 | -
59 | S
60 | P_MENU
61 | В виде меню
62 | 38
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
--------------------------------------------------------------------------------
/src/zcl_eui_msg_manager.clas.abap:
--------------------------------------------------------------------------------
1 | class ZCL_EUI_MSG_MANAGER definition
2 | public
3 | inheriting from ZCL_EUI_MANAGER
4 | create public .
5 |
6 | public section.
7 | type-pools ABAP .
8 |
9 | methods SKIP_MESSAGE
10 | importing
11 | !IV_MSGID type SYMSGID
12 | !IV_MSGNO type SYMSGNO
13 | !IV_MSGTY type SYMSGTY optional .
14 | protected section.
15 |
16 | types:
17 | BEGIN OF ts_skip_msg,
18 | msgid TYPE symsgid,
19 | msgno TYPE symsgno,
20 | msgty TYPE symsgty,
21 | END OF ts_skip_msg .
22 | types:
23 | tt_skip_msg TYPE SORTED TABLE OF ts_skip_msg WITH UNIQUE KEY table_line .
24 |
25 | data MT_SKIP_MSG type TT_SKIP_MSG .
26 |
27 | methods IS_SKIPPED
28 | importing
29 | !IV_MSGID type SYMSGID
30 | !IV_MSGNO type SYMSGNO
31 | !IV_MSGTY type SYMSGTY
32 | returning
33 | value(RV_SKIP) type ABAP_BOOL .
34 | private section.
35 | ENDCLASS.
36 |
37 |
38 |
39 | CLASS ZCL_EUI_MSG_MANAGER IMPLEMENTATION.
40 |
41 |
42 | METHOD is_skipped.
43 | " Skip by all fields
44 | READ TABLE mt_skip_msg TRANSPORTING NO FIELDS
45 | WITH TABLE KEY msgid = iv_msgid
46 | msgno = iv_msgno
47 | msgty = iv_msgty.
48 | IF sy-subrc = 0.
49 | rv_skip = abap_true.
50 | RETURN.
51 | ENDIF.
52 |
53 | " Skip by 2 fields
54 | READ TABLE mt_skip_msg TRANSPORTING NO FIELDS
55 | WITH TABLE KEY msgid = iv_msgid
56 | msgno = iv_msgno
57 | msgty = ' '. " Or '*' ?
58 | IF sy-subrc = 0.
59 | rv_skip = abap_true.
60 | RETURN.
61 | ENDIF.
62 | ENDMETHOD.
63 |
64 |
65 | METHOD skip_message.
66 | DATA ls_skip LIKE LINE OF mt_skip_msg.
67 | ls_skip-msgid = iv_msgid.
68 | ls_skip-msgno = iv_msgno.
69 | ls_skip-msgty = iv_msgty.
70 |
71 | INSERT ls_skip INTO TABLE mt_skip_msg.
72 | ENDMETHOD.
73 | ENDCLASS.
74 |
--------------------------------------------------------------------------------
/src/zcl_eui_msg_manager.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_EUI_MSG_MANAGER
7 | E
8 | Message manager
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 | IS_SKIPPED
17 | E
18 | Is in skipped
19 |
20 |
21 | SKIP_MESSAGE
22 | E
23 | Skip 1 message
24 |
25 |
26 |
27 |
28 | IS_SKIPPED
29 | IV_MSGID
30 | E
31 | Message Class
32 |
33 |
34 | IS_SKIPPED
35 | IV_MSGNO
36 | E
37 | Message Number
38 |
39 |
40 | IS_SKIPPED
41 | IV_MSGTY
42 | E
43 | Message Type
44 |
45 |
46 | SKIP_MESSAGE
47 | IV_MSGID
48 | E
49 | Message Class
50 |
51 |
52 | SKIP_MESSAGE
53 | IV_MSGNO
54 | E
55 | Message Number
56 |
57 |
58 | SKIP_MESSAGE
59 | IV_MSGTY
60 | E
61 | Message Type
62 |
63 |
64 |
65 |
66 |
67 |
--------------------------------------------------------------------------------
/src/zcl_eui_menu.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_EUI_MENU
7 | E
8 | Gos based menu
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 | ADD_HANDLER
17 | E
18 | Add another listner
19 |
20 |
21 | CHANGE_HANDLER
22 | E
23 | If want change behavior at runtime without recreating MENU
24 |
25 |
26 | CONSTRUCTOR
27 | E
28 | CONSTRUCTOR
29 |
30 |
31 | CREATE_TOOLBAR
32 | E
33 | Main method
34 |
35 |
36 | GET_CONTAINER
37 | E
38 | SAP CONTAINER
39 |
40 |
41 | GET_TOOLBAR
42 | E
43 | SAP TOOLBAR
44 |
45 |
46 | MO_CONTAINER
47 | E
48 | Abstract Container for GUI Controls
49 |
50 |
51 | MO_EVENT_CALLER
52 | E
53 | Dynamic event caller
54 |
55 |
56 | MO_TOOLBAR
57 | E
58 | Toolbar Control
59 |
60 |
61 | ON_FUNCTION_SELECTED
62 | E
63 | Handler called by name
64 |
65 |
66 |
67 |
68 |
69 |
--------------------------------------------------------------------------------
/src/zcl_eui_type.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_EUI_TYPE
7 | E
8 | RTTI utils
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 | CREATE_STRUCTURE
17 | E
18 | Create dynamic structure
19 |
20 |
21 | CREATE_TYPE_DESCR
22 | E
23 | Create data by text
24 |
25 |
26 | FIND_DROPDOWN
27 | E
28 | If IS_LIST_BOX( )
29 |
30 |
31 | FIND_TABLE_FIELDNAME
32 | E
33 | 2 times!
34 |
35 |
36 | GET_CATALOG
37 | E
38 | Get field catalog
39 |
40 |
41 | GET_FIELD_DESC
42 | E
43 | Get full description of field
44 |
45 |
46 | GET_MOD_CATALOG
47 | E
48 | Merge with modification calog
49 |
50 |
51 | IS_LIST_BOX
52 | E
53 | If values from domain
54 |
55 |
56 | SPLIT_TYPE
57 | E
58 | Get table & fieldname separeted by '-'
59 |
60 |
61 |
62 |
63 | FIND_DROPDOWN
64 | IS_FIELDCAT
65 | E
66 | ALV control: Field catalog
67 |
68 |
69 |
70 |
71 |
72 |
--------------------------------------------------------------------------------
/src/zif_eui_manager.intf.abap:
--------------------------------------------------------------------------------
1 | interface ZIF_EUI_MANAGER
2 | public .
3 |
4 | type-pools ABAP .
5 |
6 | types:
7 | BEGIN OF TS_POPUP,
8 | COL_BEG TYPE i,
9 | COL_END TYPE i,
10 | ROW_BEG TYPE i,
11 | ROW_END TYPE i,
12 | " by default move POPUP right bottom corner by 1
13 | NO_SHIFT TYPE ABAP_BOOL,
14 | END OF TS_POPUP .
15 | types:
16 | TT_STATUS_EXCLUDE type STANDARD TABLE OF syucomm WITH DEFAULT KEY .
17 | types:
18 | BEGIN OF TS_STATUS,
19 | NAME TYPE GUI_STATUS,
20 | PROG TYPE SYREPID,
21 | EXCLUDE TYPE TT_STATUS_EXCLUDE,
22 |
23 | " Title bar
24 | TITLE TYPE STRING,
25 |
26 | " Do not change in PBO
27 | IS_FIXED TYPE ABAP_BOOL,
28 | END OF TS_STATUS .
29 | types:
30 | BEGIN OF TS_SCREEN,
31 | PROG TYPE SYREPID,
32 | DYNNR TYPE SYDYNNR,
33 | END OF TS_SCREEN .
34 |
35 | constants:
36 | BEGIN OF MC_CMD,
37 | OK TYPE SYUCOMM VALUE 'OK',
38 | SAVE TYPE SYUCOMM VALUE 'SAVE',
39 | CANCEL TYPE SYUCOMM VALUE 'DCAN',
40 | RETURN TYPE SYUCOMM VALUE 'CRET',
41 | END OF MC_CMD .
42 | data MS_POPUP type TS_POPUP .
43 | data MS_STATUS type TS_STATUS .
44 | data MS_SCREEN type TS_SCREEN .
45 |
46 | events PBO_EVENT
47 | exporting
48 | value(IO_CONTAINER) type ref to CL_GUI_CONTAINER optional .
49 | events PAI_EVENT
50 | exporting
51 | value(IV_COMMAND) type SYUCOMM
52 | value(CV_CLOSE) type ref to ABAP_BOOL .
53 |
54 | methods PBO
55 | importing
56 | !IO_CONTAINER type ref to CL_GUI_CONTAINER optional
57 | !IV_SET_STATUS type ABAP_BOOL default ABAP_FALSE .
58 | methods PAI
59 | importing
60 | !IV_COMMAND type SYUCOMM
61 | changing
62 | !CV_CLOSE type ABAP_BOOL .
63 | methods POPUP
64 | importing
65 | !IV_COL_BEG type I optional
66 | !IV_COL_END type I optional
67 | !IV_ROW_BEG type I optional
68 | !IV_ROW_END type I optional
69 | !IV_NO_SHIFT type ABAP_BOOL default ABAP_FALSE
70 | returning
71 | value(RO_MANAGER) type ref to ZIF_EUI_MANAGER .
72 | methods SHOW
73 | importing
74 | !IO_HANDLER type ref to OBJECT optional
75 | !IV_HANDLERS_MAP type CSEQUENCE optional
76 | preferred parameter IO_HANDLER
77 | returning
78 | value(RV_CLOSE_CMD) type SYUCOMM .
79 | methods SET_STATUS
80 | importing
81 | !IS_STATUS type TS_STATUS
82 | returning
83 | value(RO_MANAGER) type ref to ZIF_EUI_MANAGER .
84 | endinterface.
85 |
--------------------------------------------------------------------------------
/src/demo/zeui_test_crc64.prog.abap:
--------------------------------------------------------------------------------
1 | REPORT zeui_test_crc64.
2 |
3 | TYPE-POOLS:
4 | abap,
5 | col.
6 |
7 | PARAMETERS:
8 | p_log AS CHECKBOX DEFAULT 'X'.
9 |
10 | **********************************************************************
11 | **********************************************************************
12 | CLASS lcl_data DEFINITION FINAL
13 | " access to private attributes
14 | FRIENDS zcl_eui_crc64.
15 |
16 | PUBLIC SECTION.
17 | METHODS:
18 | constructor.
19 |
20 | DATA mv_a TYPE string.
21 |
22 | PRIVATE SECTION.
23 | TYPES:
24 | BEGIN OF ts_row,
25 | fld1 TYPE char1,
26 | fld2 TYPE char1,
27 | END OF ts_row.
28 | DATA lt_table TYPE STANDARD TABLE OF ts_row WITH DEFAULT KEY.
29 | ENDCLASS.
30 |
31 | CLASS lcl_data IMPLEMENTATION.
32 | METHOD constructor.
33 | mv_a = `A`.
34 |
35 | DATA lr_row TYPE REF TO ts_row.
36 | APPEND INITIAL LINE TO lt_table REFERENCE INTO lr_row.
37 | lr_row->fld1 = 'T'.
38 | ENDMETHOD.
39 | ENDCLASS.
40 |
41 | **********************************************************************
42 | **********************************************************************
43 |
44 | CLASS lcl_report DEFINITION FINAL.
45 | PUBLIC SECTION.
46 | METHODS:
47 | start_of_selection.
48 | ENDCLASS.
49 |
50 | CLASS lcl_report IMPLEMENTATION.
51 | METHOD start_of_selection.
52 | DO 2 TIMES.
53 | DATA lv_index TYPE syindex.
54 | lv_index = sy-index.
55 |
56 | DATA lo_data TYPE REF TO lcl_data.
57 | CREATE OBJECT lo_data.
58 |
59 | DATA lo_crc64 TYPE REF TO zcl_eui_crc64.
60 | CREATE OBJECT lo_crc64
61 | EXPORTING
62 | iv_log = p_log.
63 | lo_crc64->add_to_hash( lo_data ).
64 |
65 | CASE lv_index.
66 | WHEN 1.
67 | DATA lv_hash1 TYPE char16.
68 | lv_hash1 = lo_crc64->get_hash( ).
69 | WHEN 2.
70 | DATA lv_hash2 TYPE char16.
71 | lv_hash2 = lo_crc64->get_hash( ).
72 | ENDCASE.
73 |
74 | CHECK lv_index = 2.
75 | IF lv_hash1 = lv_hash2.
76 | WRITE / `The hash is the same` COLOR COL_POSITIVE.
77 | ENDIF.
78 | ENDDO.
79 | ENDMETHOD.
80 | ENDCLASS.
81 |
82 | **********************************************************************
83 | **********************************************************************
84 | INITIALIZATION.
85 | DATA go_report TYPE REF TO lcl_report. "#EC NEEDED
86 | CREATE OBJECT go_report.
87 |
88 | START-OF-SELECTION.
89 | go_report->start_of_selection( ).
90 |
--------------------------------------------------------------------------------
/src/zcl_eui_memo.clas.abap:
--------------------------------------------------------------------------------
1 | class ZCL_EUI_MEMO definition
2 | public
3 | inheriting from ZCL_EUI_MANAGER
4 | final
5 | create public .
6 |
7 | public section.
8 | type-pools ABAP .
9 |
10 | methods CONSTRUCTOR
11 | importing
12 | !IR_TEXT type ref to STRING
13 | !IV_EDITABLE type ABAP_BOOL default ABAP_TRUE .
14 | methods GET_TEXT
15 | returning
16 | value(RV_TEXT) type STRING .
17 |
18 | methods ZIF_EUI_MANAGER~PAI
19 | redefinition .
20 | methods ZIF_EUI_MANAGER~PBO
21 | redefinition .
22 | protected section.
23 | private section.
24 |
25 | data MR_TEXT type ref to STRING .
26 | data MO_TEXTEDIT type ref to CL_GUI_TEXTEDIT .
27 | ENDCLASS.
28 |
29 |
30 |
31 | CLASS ZCL_EUI_MEMO IMPLEMENTATION.
32 |
33 |
34 | METHOD constructor.
35 | super->constructor( iv_editable = iv_editable ).
36 |
37 | mr_text = ir_text.
38 | ENDMETHOD.
39 |
40 |
41 | METHOD get_text.
42 | mo_textedit->get_textstream(
43 | IMPORTING
44 | text = rv_text ).
45 | cl_gui_cfw=>flush( ).
46 | ENDMETHOD.
47 |
48 |
49 | METHOD zif_eui_manager~pai.
50 | FIELD-SYMBOLS TYPE string.
51 |
52 | super->pai(
53 | EXPORTING
54 | iv_command = iv_command
55 | CHANGING
56 | cv_close = cv_close ).
57 |
58 | " Write data back
59 | CASE iv_command.
60 | WHEN zif_eui_manager=>mc_cmd-ok.
61 | " Destination
62 | ASSIGN mr_text->* TO .
63 | = get_text( ).
64 |
65 | MESSAGE 'Text copied back' TYPE 'S'.
66 |
67 | WHEN zif_eui_manager=>mc_cmd-cancel.
68 | MESSAGE 'Text editing is cancelled!' TYPE 'S' DISPLAY LIKE 'W'.
69 | ENDCASE.
70 | ENDMETHOD.
71 |
72 |
73 | METHOD zif_eui_manager~pbo.
74 | DATA lv_mode TYPE i.
75 | FIELD-SYMBOLS TYPE string.
76 |
77 | " Initialize 1 time
78 | IF io_container IS NOT INITIAL.
79 | " Text editor
80 | CREATE OBJECT mo_textedit
81 | EXPORTING
82 | parent = io_container
83 | EXCEPTIONS
84 | OTHERS = 1.
85 | IF sy-subrc <> 0.
86 | MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno DISPLAY LIKE 'E' WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
87 | RETURN.
88 | ENDIF.
89 |
90 | " Update data
91 | ASSIGN mr_text->* TO .
92 | mo_textedit->set_textstream( ).
93 | IF mv_read_only = abap_true.
94 | lv_mode = cl_gui_textedit=>true.
95 | ELSE.
96 | lv_mode = cl_gui_textedit=>false.
97 | ENDIF.
98 | mo_textedit->set_readonly_mode( lv_mode ).
99 | ENDIF.
100 |
101 | super->pbo(
102 | io_container = io_container
103 | iv_set_status = iv_set_status ).
104 | ENDMETHOD.
105 | ENDCLASS.
106 |
--------------------------------------------------------------------------------
/src/demo/zeui_test_screen_00.prog.abap:
--------------------------------------------------------------------------------
1 | *&---------------------------------------------------------------------*
2 | *&---------------------------------------------------------------------*
3 | REPORT zeui_test_screen_00.
4 |
5 | TYPE-POOLS:
6 | abap.
7 |
8 | **********************************************************************
9 | **********************************************************************
10 | SELECTION-SCREEN BEGIN OF BLOCK bl_grp WITH FRAME.
11 | PARAMETERS:
12 | p_radio1 RADIOBUTTON GROUP radg USER-COMMAND for_pbo DEFAULT 'X',
13 | p_01_req TYPE werks_d MODIF ID gr1,
14 | p_02 TYPE werks_d MODIF ID gr1,
15 |
16 | p_radio2 RADIOBUTTON GROUP radg,
17 | p_03 TYPE werks_d MODIF ID gr2,
18 | p_04_req TYPE werks_d MODIF ID gr2.
19 | SELECTION-SCREEN END OF BLOCK bl_grp.
20 |
21 |
22 | **********************************************************************
23 | **********************************************************************
24 | CLASS lcl_main DEFINITION FINAL.
25 | PUBLIC SECTION.
26 | CLASS-METHODS:
27 | pbo.
28 |
29 | ENDCLASS.
30 |
31 | **********************************************************************
32 | **********************************************************************
33 | CLASS lcl_main IMPLEMENTATION.
34 | METHOD pbo.
35 | DATA lo_screen TYPE REF TO zcl_eui_screen.
36 | DATA lv_group1 TYPE screen-group1.
37 | DATA lo_error TYPE REF TO zcx_eui_exception.
38 | TRY.
39 | CREATE OBJECT lo_screen
40 | EXPORTING
41 | iv_dynnr = '1000'.
42 | CATCH zcx_eui_exception INTO lo_error.
43 | MESSAGE lo_error TYPE 'S' DISPLAY LIKE 'E'.
44 | RETURN.
45 | ENDTRY.
46 |
47 | " Mask 1
48 | lo_screen->customize(
49 | name = '*P_0*'
50 | input = '0'
51 | active = '0'
52 | invisible = '1' ).
53 |
54 | " Make recomended by mask
55 | lo_screen->customize(
56 | name = 'P_*_REQ'
57 | required = '2' ).
58 |
59 | " Visible by SCREEN-GROUP1
60 | CASE abap_true.
61 | WHEN p_radio1.
62 | lv_group1 = 'GR1'.
63 |
64 | WHEN p_radio2.
65 | lv_group1 = 'GR2'.
66 | ENDCASE.
67 |
68 | lo_screen->customize(
69 | group1 = lv_group1 " COND #( WHEN p_radio1 = abap_true THEN 'GR1' ELSE 'GR2' )
70 | input = '1'
71 | active = '1'
72 | invisible = '0' ).
73 |
74 | " Start of group (could be standard parameter in LDB screen)
75 | lo_screen->customize( name = '+' input = '0').
76 | " Copy params from +
77 | lo_screen->customize( name = '+P_02').
78 | lo_screen->customize( name = '+P_03').
79 |
80 | lo_screen->pbo( ).
81 | ENDMETHOD.
82 |
83 | ENDCLASS.
84 |
85 |
86 | **********************************************************************
87 | **********************************************************************
88 | AT SELECTION-SCREEN OUTPUT.
89 | lcl_main=>pbo( ).
90 |
--------------------------------------------------------------------------------
/src/zcl_eui_file_io.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_EUI_FILE_IO
7 | E
8 | Import & Export ITAB[] from Excel or CSV
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 | COLUMN_2_INT
17 | E
18 | Excel column to index
19 |
20 |
21 | EXPORT_TO_ITAB
22 | E
23 | Any file ->internal table (Auto Detect)
24 |
25 |
26 | EXPORT_TO_ITAB_CSV
27 | E
28 | CSV file -> internal table (With options)
29 |
30 |
31 | EXPORT_TO_ITAB_XLSX
32 | E
33 | XLSX file -> internal table (With options)
34 |
35 |
36 | IMPORT_FROM_ITAB
37 | E
38 | Internal table -> to FILE [<-->]MV_XSTRING (Auto Detect)
39 |
40 |
41 | IMPORT_FROM_ITAB_CSV
42 | E
43 | Internal table -> to CSV [<-->]MV_XSTRING
44 |
45 |
46 | IMPORT_FROM_ITAB_XLSX_0
47 | E
48 | Internal table -> to XLSX [<-->]MV_XSTRING (CL_FDT_XL_SPREA)
49 |
50 |
51 | IMPORT_FROM_ITAB_XLSX_1
52 | E
53 | Internal table -> to XLSX [<-->]MV_XSTRING (CL_SALV_BS_LEX)
54 |
55 |
56 | INT_2_COLUMN
57 | E
58 | Index to Excel column
59 |
60 |
61 | MAPPING_ERROR
62 | E
63 | Do not raised (Handler called by name)@see CONVERT_TO_ITAB()
64 |
65 |
66 | TS_EXCEL_MAP
67 | E
68 | Mapping between internal table and Excel columns
69 |
70 |
71 | TT_EXCEL_MAP
72 | E
73 | Fill FILED & COLUMN_NAME only
74 |
75 |
76 |
77 |
78 |
79 |
--------------------------------------------------------------------------------
/src/zcl_eui_conv.clas.locals_imp.abap:
--------------------------------------------------------------------------------
1 | *"* use this source file for the definition and implementation of
2 | *"* local helper classes, interface definitions and type
3 | *"* declarations
4 |
5 | **********************************************************************
6 | **********************************************************************
7 |
8 | CLASS lcl_json_util IMPLEMENTATION.
9 |
10 | METHOD class_constructor.
11 | FIELD-SYMBOLS LIKE LINE OF mt_xsdboolean.
12 |
13 | " Get all boolean types
14 | SELECT rollname INTO TABLE mt_xsdboolean
15 | FROM dd04l
16 | WHERE ( domname = 'XSDBOOLEAN' OR domname = 'OS_BOOLEAN' ) AND as4local = 'A'.
17 |
18 | " Add text for speed
19 | LOOP AT mt_xsdboolean ASSIGNING .
20 | CONCATENATE '\TYPE=' INTO .
21 | ENDLOOP.
22 |
23 | " Is standard table
24 | SORT mt_xsdboolean BY table_line.
25 | ENDMETHOD.
26 | ENDCLASS.
27 |
28 | **********************************************************************
29 | **********************************************************************
30 |
31 | CLASS lcl_salv_util IMPLEMENTATION.
32 | METHOD _get_grid_from_salv.
33 | DATA:
34 | lo_adapter TYPE REF TO object,
35 | lo_root TYPE REF TO cx_root.
36 |
37 | IF io_salv->model <> if_salv_c_model=>table.
38 | RAISE EXCEPTION TYPE cx_salv_msg
39 | EXPORTING
40 | msgid = '00'
41 | msgno = '001'
42 | msgty = 'E'
43 | msgv1 = 'Incorrect SALV Type'.
44 | ENDIF.
45 |
46 | TRY.
47 | CALL METHOD io_salv->r_controller->r_adapter->('GET_GRID')
48 | RECEIVING
49 | value = ro_gui_alv.
50 | CATCH cx_root INTO lo_root.
51 | RAISE EXCEPTION TYPE cx_salv_msg
52 | EXPORTING
53 | previous = lo_root
54 | msgid = '00'
55 | msgno = '001'
56 | msgty = 'E'
57 | msgv1 = 'Check PREVIOUS exception'.
58 | ENDTRY.
59 | ENDMETHOD.
60 | ENDCLASS.
61 |
62 | **********************************************************************
63 | **********************************************************************
64 |
65 | CLASS lcl_grid_util IMPLEMENTATION.
66 | METHOD _get_grid_table.
67 | rr_table = io_alv->mt_outtab.
68 | ENDMETHOD.
69 | ENDCLASS.
70 |
71 | **********************************************************************
72 | **********************************************************************
73 |
74 | CLASS lcl_assert_util IMPLEMENTATION.
75 | METHOD get_class_name.
76 | " Let see >=7.02
77 | SELECT SINGLE clsname INTO rv_class_name
78 | FROM seoclass
79 | WHERE clsname = 'CL_ABAP_UNIT_ASSERT'.
80 |
81 | " Let see >=7.00 or even lower
82 | IF rv_class_name IS INITIAL.
83 | SELECT SINGLE clsname INTO rv_class_name
84 | FROM seoclass
85 | WHERE clsname = 'CL_AUNIT_ASSERT'.
86 | ENDIF.
87 | ENDMETHOD.
88 | ENDCLASS.
89 |
--------------------------------------------------------------------------------
/src/zcl_eui_logger.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_EUI_LOGGER
7 | E
8 | Logger
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 | ADD
17 | E
18 | From sy OR any structure
19 |
20 |
21 | ADD_BATCH
22 | E
23 | Add from table
24 |
25 |
26 | CONSTRUCTOR
27 | E
28 | CONSTRUCTOR
29 |
30 |
31 | CORRESPONDING_MSG
32 | E
33 | Only basic info
34 |
35 |
36 | MC_PROFILE
37 | E
38 | Call FM to get a profile
39 |
40 |
41 | MO_MENU
42 | E
43 | Gos based menu
44 |
45 |
46 | MS_HEADER
47 | E
48 | Application Log: Log header data
49 |
50 |
51 | MT_UNIQUE_MSG
52 | E
53 | Unique messages
54 |
55 |
56 | MV_MSG_TYPES
57 | E
58 | What messages to add
59 |
60 |
61 | SHOW_AS_BUTTON
62 | E
63 | As single GOS button
64 |
65 |
66 |
67 |
68 | CONSTRUCTOR
69 | IS_HEADER
70 | E
71 | Application Log: Log header data
72 |
73 |
74 | SHOW
75 | IV_PROFILE
76 | E
77 | Function name
78 |
79 |
80 | SHOW_AS_BUTTON
81 | IS_PROFILE
82 | E
83 | Application Log: Log Output Format Profile
84 |
85 |
86 | _SET_BUTTON_PROFILE
87 | IS_PROFILE
88 | E
89 | Application Log: Log Output Format Profile
90 |
91 |
92 |
93 |
94 |
95 |
--------------------------------------------------------------------------------
/src/demo/zeui_test_screen_01.prog.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZEUI_TEST_SCREEN_01
7 | 1
8 | E
9 | X
10 | X
11 |
12 |
13 | -
14 | I
15 | CAN
16 | The action is cancelled
17 | 46
18 |
19 | -
20 | I
21 | TIT
22 | Next screen options
23 | 29
24 |
25 | -
26 | I
27 | YES
28 | OK is pressed
29 | 23
30 |
31 | -
32 | R
33 | Screen example 01
34 | 17
35 |
36 | -
37 | S
38 | P_01_GRY
39 | Make P_FLD_01 gray
40 | 26
41 |
42 | -
43 | S
44 | P_02_OBL
45 | Make P_FLD_02 obligatory
46 | 32
47 |
48 | -
49 | S
50 | P_FLD_01
51 | Field P_FLD_01
52 | 22
53 |
54 | -
55 | S
56 | P_FLD_02
57 | Field P_FLD_02
58 | 22
59 |
60 |
61 |
62 | -
63 | R
64 |
65 |
-
66 | I
67 | CAN
68 | Действие отменено
69 | 46
70 |
71 | -
72 | I
73 | TIT
74 | Параметры следующего экрана
75 | 29
76 |
77 | -
78 | I
79 | YES
80 | OK был нажат
81 | 23
82 |
83 | -
84 | R
85 | Пример экрана 01
86 | 70
87 |
88 | -
89 | S
90 | P_01_GRY
91 | Сделать P_FLD_01 серым
92 | 38
93 |
94 | -
95 | S
96 | P_02_OBL
97 | Сделать P_FLD_02 обязательным
98 | 38
99 |
100 | -
101 | S
102 | P_FLD_01
103 | Поле P_FLD_01
104 | 38
105 |
106 | -
107 | S
108 | P_FLD_02
109 | Поле P_FLD_02
110 | 38
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
--------------------------------------------------------------------------------
/src/zif_eui_manager.intf.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZIF_EUI_MANAGER
7 | E
8 | Screen events manager
9 | 2
10 | 1
11 | X
12 |
13 |
14 |
15 | MC_CMD
16 | E
17 | SY-UCOMM commands
18 |
19 |
20 | MS_POPUP
21 | E
22 | Set if show in popup
23 |
24 |
25 | MS_SCREEN
26 | E
27 | Subscreen info
28 |
29 |
30 | MS_STATUS
31 | E
32 | Screen status info
33 |
34 |
35 | PAI
36 | E
37 | PAI command & close
38 |
39 |
40 | PAI_EVENT
41 | E
42 | Handle PAI events & close
43 |
44 |
45 | PBO
46 | E
47 | Fill container @see ZFM_EUI_NEXT_SCREEN
48 |
49 |
50 | PBO_EVENT
51 | E
52 | Fill container @see ZFM_HT_SHOW_NEXT_SCREEN
53 |
54 |
55 | POPUP
56 | E
57 | Defaults for popup
58 |
59 |
60 | SET_STATUS
61 | E
62 | Set MS_STATUS
63 |
64 |
65 | SHOW
66 | E
67 | Show in SCREEN
68 |
69 |
70 | TS_POPUP
71 | E
72 | Set if show in popup
73 |
74 |
75 | TS_SCREEN
76 | E
77 | Subscreen info
78 |
79 |
80 | TS_STATUS
81 | E
82 | Screen status info
83 |
84 |
85 | TT_STATUS_EXCLUDE
86 | E
87 | Exclude commands from PF-STATUS
88 |
89 |
90 |
91 |
92 | SET_STATUS
93 | IS_STATUS
94 | E
95 | Screen status info
96 |
97 |
98 | SET_STATUS
99 | RO_MANAGER
100 | E
101 | Screen events manager
102 |
103 |
104 |
105 |
106 |
107 |
--------------------------------------------------------------------------------
/src/zcl_eui_alv_filter.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_EUI_ALV_FILTER
7 | E
8 | Filter with conditional formatting
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 | -
16 | I
17 | CAF
18 | Clear all filters
19 | 27
20 |
21 | -
22 | I
23 | CNT
24 | Count
25 | 15
26 |
27 | -
28 | I
29 | DES
30 | Description
31 | 21
32 |
33 | -
34 | I
35 | FLT
36 | Filter
37 | 16
38 |
39 | -
40 | I
41 | SFL
42 | Show filters
43 | 22
44 |
45 |
46 |
47 | -
48 | R
49 |
50 |
-
51 | I
52 | CAF
53 | Очистить все фильтры
54 | 27
55 |
56 | -
57 | I
58 | CNT
59 | Количество
60 | 15
61 |
62 | -
63 | I
64 | DES
65 | Описание
66 | 21
67 |
68 | -
69 | I
70 | FLT
71 | Фильтр
72 | 16
73 |
74 | -
75 | I
76 | SFL
77 | Показать фильтры
78 | 22
79 |
80 |
81 |
82 |
83 |
84 |
85 | CONSTRUCTOR
86 | E
87 | CONSTRUCTOR
88 |
89 |
90 | MO_ALV
91 | E
92 | ALV manager
93 |
94 |
95 |
96 |
97 | ADD_RULE
98 | RO_FILTER
99 | E
100 | Filter with conditional formatting
101 |
102 |
103 | _FILTER_BY_MENU
104 | IV_COMMAND
105 | E
106 | Function Code
107 |
108 |
109 | _FILTER_BY_MENU
110 | RV_OK
111 | E
112 | ALV control: Table of filter conditions
113 |
114 |
115 | _GET_RULE_DESCRIPTION
116 | IT_CATALOG
117 | E
118 | Field Catalog for List Viewer Control
119 |
120 |
121 |
122 |
123 |
124 |
--------------------------------------------------------------------------------
/src/demo/zeui_test_screen_01.prog.abap:
--------------------------------------------------------------------------------
1 | *&---------------------------------------------------------------------*
2 | *&---------------------------------------------------------------------*
3 | REPORT zeui_test_screen_01.
4 |
5 | TYPE-POOLS:
6 | abap.
7 |
8 | " Screen 1000
9 | SELECTION-SCREEN BEGIN OF BLOCK bl_1010 WITH FRAME TITLE TEXT-tit.
10 | PARAMETERS:
11 | p_01_gry AS CHECKBOX DEFAULT ' ',
12 | p_02_obl AS CHECKBOX DEFAULT 'X'.
13 | SELECTION-SCREEN END OF BLOCK bl_1010.
14 |
15 | " Screen 1010
16 | SELECTION-SCREEN BEGIN OF SCREEN 1010 AS SUBSCREEN.
17 | PARAMETERS : p_fld_01 TYPE sytabix,
18 | p_fld_02 TYPE sytabix.
19 | SELECTION-SCREEN END OF SCREEN 1010.
20 |
21 | **********************************************************************
22 | **********************************************************************
23 | CLASS lcl_main DEFINITION FINAL.
24 | PUBLIC SECTION.
25 | TYPES:
26 | " If SCREEN in another program pass values
27 | BEGIN OF ts_context,
28 | p_fld_01 LIKE p_fld_01,
29 | p_fld_02 LIKE p_fld_02,
30 | END OF ts_context.
31 |
32 | DATA:
33 | mo_screen TYPE REF TO zcl_eui_screen.
34 |
35 | METHODS:
36 | start_of_selection,
37 |
38 | pbo.
39 | ENDCLASS.
40 |
41 | **********************************************************************
42 | **********************************************************************
43 | CLASS lcl_main IMPLEMENTATION.
44 | METHOD start_of_selection.
45 | DATA ls_context TYPE REF TO ts_context.
46 | DATA lo_error TYPE REF TO zcx_eui_exception.
47 |
48 | **********************************************************************
49 | " Fill context
50 | " p_fld_01 = 777 is of course easy, but if you fill another program screen
51 | CREATE DATA ls_context.
52 | ls_context->p_fld_01 = 777. "#EC NUMBER_OK
53 |
54 | TRY.
55 | " Pass params
56 | CREATE OBJECT mo_screen
57 | EXPORTING
58 | iv_dynnr = '1010' " Only for that DYNNR
59 | ir_context = ls_context. " <--- Set initial values
60 | CATCH zcx_eui_exception INTO lo_error.
61 | MESSAGE lo_error TYPE 'S' DISPLAY LIKE 'E'.
62 | RETURN.
63 | ENDTRY.
64 | **********************************************************************
65 | " For pbo
66 | IF p_01_gry = abap_true.
67 | mo_screen->customize( name = 'P_FLD_01' input = '0' ).
68 | ENDIF.
69 |
70 | IF p_02_obl = abap_true.
71 | mo_screen->customize( name = 'P_FLD_02' required = '1' ).
72 | ENDIF.
73 |
74 | " As popup
75 | DATA lv_col_end TYPE i.
76 | mo_screen->get_dimension( IMPORTING ev_col_end = lv_col_end ).
77 | mo_screen->popup( iv_col_end = lv_col_end ).
78 |
79 | " If pressed OK
80 | IF mo_screen->show( io_handler = me ) = 'OK'.
81 | MESSAGE 'OK is pressed'(yes) TYPE 'I'.
82 | ELSE.
83 | MESSAGE 'The action is cancelled'(can) TYPE 'S' DISPLAY LIKE 'W'.
84 | ENDIF.
85 | ENDMETHOD.
86 |
87 | METHOD pbo.
88 | CHECK sy-dynnr = '1010'.
89 |
90 | " LOOP AT SCREEN
91 | mo_screen->pbo( ).
92 | ENDMETHOD.
93 |
94 | ENDCLASS.
95 |
96 |
97 | **********************************************************************
98 | **********************************************************************
99 |
100 | DATA:
101 | go_main TYPE REF TO lcl_main. "#EC NEEDED
102 |
103 | INITIALIZATION.
104 | CREATE OBJECT go_main.
105 |
106 | START-OF-SELECTION.
107 | go_main->start_of_selection( ).
108 |
109 | AT SELECTION-SCREEN OUTPUT.
110 | go_main->pbo( ).
111 |
--------------------------------------------------------------------------------
/src/zcx_eui_no_check.clas.abap:
--------------------------------------------------------------------------------
1 | class ZCX_EUI_NO_CHECK definition
2 | public
3 | inheriting from CX_NO_CHECK
4 | final
5 | create public .
6 |
7 | public section.
8 | *"* public components of class ZCX_EUI_NO_CHECK
9 | *"* do not include other source files here!!!
10 | type-pools ABAP .
11 |
12 | interfaces IF_T100_MESSAGE .
13 |
14 | constants:
15 | begin of ZCX_EUI_NO_CHECK,
16 | msgid type symsgid value 'ZEUI_MESSAGE',
17 | msgno type symsgno value '000',
18 | attr1 type scx_attrname value 'MSGV1',
19 | attr2 type scx_attrname value 'MSGV2',
20 | attr3 type scx_attrname value 'MSGV3',
21 | attr4 type scx_attrname value 'MSGV4',
22 | end of ZCX_EUI_NO_CHECK .
23 | data MSGV1 type MSGV1 .
24 | data MSGV2 type MSGV2 .
25 | data MSGV3 type MSGV3 .
26 | data MSGV4 type MSGV4 .
27 | data MS_MSG type ZCL_EUI_LOGGER=>TS_MSG read-only .
28 |
29 | methods CONSTRUCTOR
30 | importing
31 | !TEXTID like IF_T100_MESSAGE=>T100KEY optional
32 | !PREVIOUS like PREVIOUS optional
33 | !MSGV1 type MSGV1 optional
34 | !MSGV2 type MSGV2 optional
35 | !MSGV3 type MSGV3 optional
36 | !MSGV4 type MSGV4 optional
37 | !MS_MSG type ZCL_EUI_LOGGER=>TS_MSG optional .
38 | class-methods RAISE_SYS_ERROR
39 | importing
40 | !IV_MESSAGE type CSEQUENCE optional
41 | value(IO_ERROR) type ref to CX_ROOT optional .
42 | protected section.
43 | private section.
44 | ENDCLASS.
45 |
46 |
47 |
48 | CLASS ZCX_EUI_NO_CHECK IMPLEMENTATION.
49 |
50 |
51 | method CONSTRUCTOR.
52 | CALL METHOD SUPER->CONSTRUCTOR
53 | EXPORTING
54 | PREVIOUS = PREVIOUS
55 | .
56 | me->MSGV1 = MSGV1 .
57 | me->MSGV2 = MSGV2 .
58 | me->MSGV3 = MSGV3 .
59 | me->MSGV4 = MSGV4 .
60 | me->MS_MSG = MS_MSG .
61 | clear me->textid.
62 | if textid is initial.
63 | IF_T100_MESSAGE~T100KEY = ZCX_EUI_NO_CHECK .
64 | else.
65 | IF_T100_MESSAGE~T100KEY = TEXTID.
66 | endif.
67 | endmethod.
68 |
69 |
70 | METHOD raise_sys_error.
71 | DATA:
72 | BEGIN OF ls_string,
73 | part1 TYPE symsgv,
74 | part2 TYPE symsgv,
75 | part3 TYPE symsgv,
76 | part4 TYPE symsgv,
77 | END OF ls_string.
78 | DATA lv_incl TYPE syrepid.
79 | DATA lv_line TYPE i.
80 | DATA lv_text TYPE string.
81 |
82 | " From string
83 | IF iv_message IS NOT INITIAL.
84 | ls_string = iv_message.
85 | ENDIF.
86 |
87 | WHILE ls_string IS INITIAL AND io_error IS NOT INITIAL.
88 | ls_string = io_error->get_text( ).
89 |
90 | " For debug
91 | io_error->get_source_position(
92 | IMPORTING
93 | include_name = lv_incl
94 | source_line = lv_line ).
95 | " put break-point here ---> { lv_incl } - { lv_line }
96 |
97 | io_error = io_error->previous.
98 | ENDWHILE.
99 |
100 | " Any error based on system message
101 | IF ls_string IS INITIAL.
102 | MESSAGE ID sy-msgid TYPE 'E' NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO ls_string.
103 | DATA ls_msg TYPE zcl_eui_logger=>ts_msg.
104 | ls_msg-msgid = sy-msgid.
105 | ls_msg-msgno = sy-msgno.
106 | ls_msg-msgty = sy-msgty. " Always error 'E'
107 | ls_msg-msgv1 = sy-msgv1.
108 | ls_msg-msgv2 = sy-msgv2.
109 | ls_msg-msgv3 = sy-msgv3.
110 | ls_msg-msgv4 = sy-msgv4.
111 | ENDIF.
112 |
113 | " Devided to blocks
114 | RAISE EXCEPTION TYPE zcx_eui_no_check
115 | EXPORTING
116 | textid = zcx_eui_exception=>zcx_eui_exception
117 | msgv1 = ls_string-part1
118 | msgv2 = ls_string-part2
119 | msgv3 = ls_string-part3
120 | msgv4 = ls_string-part4
121 | ms_msg = ls_msg.
122 | ENDMETHOD.
123 | ENDCLASS.
124 |
--------------------------------------------------------------------------------
/src/zcx_eui_exception.clas.abap:
--------------------------------------------------------------------------------
1 | class ZCX_EUI_EXCEPTION definition
2 | public
3 | inheriting from CX_STATIC_CHECK
4 | final
5 | create public .
6 |
7 | public section.
8 | *"* public components of class ZCX_EUI_EXCEPTION
9 | *"* do not include other source files here!!!
10 | type-pools ABAP .
11 |
12 | interfaces IF_T100_MESSAGE .
13 |
14 | constants:
15 | begin of ZCX_EUI_EXCEPTION,
16 | msgid type symsgid value 'ZEUI_MESSAGE',
17 | msgno type symsgno value '000',
18 | attr1 type scx_attrname value 'MSGV1',
19 | attr2 type scx_attrname value 'MSGV2',
20 | attr3 type scx_attrname value 'MSGV3',
21 | attr4 type scx_attrname value 'MSGV4',
22 | end of ZCX_EUI_EXCEPTION .
23 | data MSGV1 type MSGV1 .
24 | data MSGV2 type MSGV2 .
25 | data MSGV3 type MSGV3 .
26 | data MSGV4 type MSGV4 .
27 |
28 | methods CONSTRUCTOR
29 | importing
30 | !TEXTID like IF_T100_MESSAGE=>T100KEY optional
31 | !PREVIOUS like PREVIOUS optional
32 | !MSGV1 type MSGV1 optional
33 | !MSGV2 type MSGV2 optional
34 | !MSGV3 type MSGV3 optional
35 | !MSGV4 type MSGV4 optional .
36 | class-methods RAISE_SYS_ERROR
37 | importing
38 | !IV_MESSAGE type CSEQUENCE optional
39 | value(IO_ERROR) type ref to CX_ROOT optional
40 | raising
41 | ZCX_EUI_EXCEPTION .
42 | class-methods RAISE_DUMP
43 | importing
44 | !IV_MESSAGE type CSEQUENCE optional
45 | !IO_ERROR type ref to CX_ROOT optional .
46 | protected section.
47 | private section.
48 | ENDCLASS.
49 |
50 |
51 |
52 | CLASS ZCX_EUI_EXCEPTION IMPLEMENTATION.
53 |
54 |
55 | method CONSTRUCTOR.
56 | CALL METHOD SUPER->CONSTRUCTOR
57 | EXPORTING
58 | PREVIOUS = PREVIOUS
59 | .
60 | me->MSGV1 = MSGV1 .
61 | me->MSGV2 = MSGV2 .
62 | me->MSGV3 = MSGV3 .
63 | me->MSGV4 = MSGV4 .
64 | clear me->textid.
65 | if textid is initial.
66 | IF_T100_MESSAGE~T100KEY = ZCX_EUI_EXCEPTION .
67 | else.
68 | IF_T100_MESSAGE~T100KEY = TEXTID.
69 | endif.
70 | endmethod.
71 |
72 |
73 | METHOD raise_dump.
74 | DATA:
75 | lv_message TYPE string.
76 |
77 | IF io_error IS SUPPLIED.
78 | lv_message = io_error->get_text( ).
79 | ELSE.
80 | lv_message = iv_message.
81 | ENDIF.
82 |
83 | MESSAGE lv_message TYPE 'S' DISPLAY LIKE 'E'.
84 | MESSAGE lv_message TYPE 'X'.
85 | ENDMETHOD.
86 |
87 |
88 | METHOD raise_sys_error.
89 | DATA:
90 | BEGIN OF ls_string,
91 | part1 TYPE symsgv,
92 | part2 TYPE symsgv,
93 | part3 TYPE symsgv,
94 | part4 TYPE symsgv,
95 | END OF ls_string.
96 | DATA lv_incl TYPE syrepid.
97 | DATA lv_line TYPE i.
98 | DATA lv_text TYPE string.
99 |
100 | " From string
101 | IF iv_message IS NOT INITIAL.
102 | ls_string = iv_message.
103 | ENDIF.
104 |
105 | WHILE ls_string IS INITIAL AND io_error IS NOT INITIAL.
106 | ls_string = io_error->get_text( ).
107 |
108 | " For debug
109 | io_error->get_source_position(
110 | IMPORTING
111 | include_name = lv_incl
112 | source_line = lv_line ).
113 | " put break-point here ---> { lv_incl } - { lv_line }
114 |
115 | io_error = io_error->previous.
116 | ENDWHILE.
117 |
118 | " Any error based on system message
119 | IF ls_string IS INITIAL.
120 | MESSAGE ID sy-msgid TYPE 'E' NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO ls_string.
121 | ENDIF.
122 |
123 | " Devided to blocks
124 | RAISE EXCEPTION TYPE zcx_eui_exception
125 | EXPORTING
126 | textid = zcx_eui_exception=>zcx_eui_exception
127 | msgv1 = ls_string-part1
128 | msgv2 = ls_string-part2
129 | msgv3 = ls_string-part3
130 | msgv4 = ls_string-part4.
131 | ENDMETHOD.
132 | ENDCLASS.
133 |
--------------------------------------------------------------------------------
/src/zcl_eui_file.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_EUI_FILE
7 | E
8 | Basic file operations
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 | CONSTRUCTOR
17 | E
18 | CONSTRUCTOR
19 |
20 |
21 | DOWNLOAD
22 | E
23 | Export to file OR show save dialog [<-->]MV_FULL_PATH ->OPEN
24 |
25 |
26 | FILE_EXIST
27 | E
28 | Is file exist?
29 |
30 |
31 | GET_FULL_PATH
32 | E
33 | For DOWNLOAD( ) method
34 |
35 |
36 | GET_OLE_INFO
37 | E
38 | For SHOW( ) method
39 |
40 |
41 | IMPORT_FROM_BINARY
42 | E
43 | [<-->]MV_XSTRING
44 |
45 |
46 | IMPORT_FROM_FILE
47 | E
48 | Load from file OR show open dialog [<-->]MV_FULL_PATH,MV_XST
49 |
50 |
51 | IMPORT_FROM_STRING
52 | E
53 | [<-->]MV_XSTRING
54 |
55 |
56 | IMPORT_FROM_XSTRING
57 | E
58 | [<-->]MV_XSTRING
59 |
60 |
61 | MC_EXTENSION
62 | E
63 | Pass value to constructor as IV_EXTENSION
64 |
65 |
66 | MS_OLE_INFO
67 | E
68 | Ole information
69 |
70 |
71 | MV_EXTENSION
72 | E
73 | For xlsx & csv special behaviour
74 |
75 |
76 | MV_FILE_NAME
77 | E
78 | Side results of IMPORT_FROM_FILE or DONWLOAD
79 |
80 |
81 | MV_FULL_PATH
82 | E
83 | Side results of IMPORT_FROM_FILE or DONWLOAD
84 |
85 |
86 | MV_XSTRING
87 | E
88 | Main file content
89 |
90 |
91 | OPEN
92 | E
93 | After DOWNLOAD( ) use MV_FULL_PATH
94 |
95 |
96 | OPEN_BY_OLE
97 | E
98 | Only for Excel & Word (Use CV_OLE_DOC for macro)MV_FULL_PATH
99 |
100 |
101 | SPLIT_FILE_PATH
102 | E
103 | Get info from fullpath
104 |
105 |
106 | TS_OLE_INFO
107 | E
108 | Ole information
109 |
110 |
111 |
112 |
113 |
114 |
--------------------------------------------------------------------------------
/src/zcl_eui_alv.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_EUI_ALV
7 | E
8 | ALV manager
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 | -
16 | I
17 | CNT
18 | Count
19 | 15
20 |
21 | -
22 | I
23 | EDT
24 | Edit
25 | 14
26 |
27 | -
28 | I
29 | EVO
30 | Edit values of
31 | 24
32 |
33 | -
34 | I
35 | PRO
36 | Please also specify `IV_READ_ONLY` parameter
37 | 88
38 |
39 | -
40 | I
41 | VVO
42 | View values of
43 | 24
44 |
45 |
46 |
47 | -
48 | R
49 |
50 |
-
51 | I
52 | CNT
53 | Количество
54 | 15
55 |
56 | -
57 | I
58 | EDT
59 | Редактировать
60 | 14
61 |
62 | -
63 | I
64 | EVO
65 | Редактировать значения
66 | 24
67 |
68 | -
69 | I
70 | PRO
71 | Пожалуйста, укажите параметр 'IV_READ_ONLY'
72 | 88
73 |
74 | -
75 | I
76 | VVO
77 | Просмотр значений
78 | 24
79 |
80 |
81 |
82 |
83 |
84 |
85 | CONSTRUCTOR
86 | E
87 | CONSTRUCTOR
88 |
89 |
90 | GET_GRID
91 | E
92 | Use sender in events & this method in PBO_EVENT
93 |
94 |
95 | MO_GRID
96 | E
97 | ALV List Viewer
98 |
99 |
100 | MS_LAYOUT
101 | E
102 | ALV control: Layout structure
103 |
104 |
105 | MS_VARIANT
106 | E
107 | Layout (External Use)
108 |
109 |
110 | MT_FILTER
111 | E
112 | ALV control: Table of filter conditions
113 |
114 |
115 | MT_MOD_CATALOG
116 | E
117 | Field Catalog for List Viewer Control
118 |
119 |
120 | MT_SORT
121 | E
122 | ALV Control: Table of Sort Criteria
123 |
124 |
125 | MT_TOOLBAR
126 | E
127 | Toolbar Buttons
128 |
129 |
130 | UPDATE_COMPLEX_FIELDS
131 | E
132 | For complex UI fields (range & table)
133 |
134 |
135 |
136 |
137 |
138 |
--------------------------------------------------------------------------------
/src/zcl_eui_file.clas.locals_imp.abap:
--------------------------------------------------------------------------------
1 | *"* use this source file for the definition and implementation of
2 | *"* local helper classes, interface definitions and type
3 | *"* declarations
4 |
5 | CLASS lcl_doi IMPLEMENTATION.
6 |
7 | METHOD show_in_browser.
8 | " Convert to table
9 | DATA lt_solix_tab TYPE solix_tab.
10 | DATA lv_solix_len TYPE i.
11 | DATA lo_html_viewer TYPE REF TO cl_gui_html_viewer.
12 | DATA lv_url TYPE text1000.
13 | DATA lv_subtype TYPE text10.
14 |
15 | CREATE OBJECT lo_html_viewer
16 | EXPORTING
17 | parent = io_container.
18 |
19 | " Convert
20 | zcl_eui_conv=>xstring_to_binary(
21 | EXPORTING
22 | iv_xstring = io_file->mv_xstring
23 | IMPORTING
24 | ev_length = lv_solix_len
25 | et_table = lt_solix_tab ).
26 |
27 | " Load
28 | lv_subtype = io_file->mv_extension.
29 | lo_html_viewer->load_data(
30 | EXPORTING
31 | type = 'application'
32 | subtype = lv_subtype
33 | size = lv_solix_len
34 | IMPORTING
35 | assigned_url = lv_url
36 | CHANGING
37 | data_table = lt_solix_tab
38 | EXCEPTIONS
39 | OTHERS = 1 ).
40 |
41 | " Oops
42 | IF sy-subrc <> 0.
43 | MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO sy-msgli.
44 | zcx_eui_exception=>raise_dump( iv_message = sy-msgli ).
45 | ENDIF.
46 |
47 | " Show it
48 | lo_html_viewer->show_url(
49 | url = lv_url
50 | in_place = abap_true ).
51 | ENDMETHOD.
52 |
53 | METHOD show_in_doi.
54 | " Convert to table
55 | DATA lt_solix_tab TYPE solix_tab.
56 | DATA lv_solix_len TYPE i.
57 | DATA lo_control TYPE REF TO i_oi_container_control.
58 | DATA lo_document TYPE REF TO i_oi_document_proxy.
59 | DATA ls_handle TYPE cntl_handle.
60 |
61 | c_oi_container_control_creator=>get_container_control( IMPORTING control = lo_control ).
62 | lo_control->init_control( EXPORTING inplace_enabled = abap_true
63 | r3_application_name = sy-tcode
64 | parent = io_container ).
65 |
66 | lo_control->get_document_proxy( EXPORTING document_type = io_file->ms_ole_info-proxy_app
67 | IMPORTING document_proxy = lo_document ).
68 |
69 | " Show document
70 | IF zcl_eui_file=>file_exist( io_file->mv_full_path ) = abap_true.
71 | DATA lv_url TYPE swk_url.
72 | CONCATENATE `FILE://` io_file->mv_full_path INTO lv_url.
73 | lo_document->open_document( document_url = lv_url
74 | open_inplace = abap_true ).
75 | ELSE.
76 | " Convert
77 | zcl_eui_conv=>xstring_to_binary(
78 | EXPORTING
79 | iv_xstring = io_file->mv_xstring
80 | IMPORTING
81 | ev_length = lv_solix_len
82 | et_table = lt_solix_tab ).
83 |
84 | lo_document->open_document_from_table( document_size = lv_solix_len
85 | document_table = lt_solix_tab
86 | open_inplace = abap_true ).
87 | ENDIF.
88 |
89 | " For OLE
90 | lo_document->get_document_handle(
91 | IMPORTING
92 | handle = ls_handle ).
93 |
94 | " Get Application object (the same for Word & Excel)
95 | GET PROPERTY OF ls_handle-obj 'Application' = co_ole_app.
96 | ENDMETHOD.
97 |
98 | METHOD web_dynpro_attach.
99 | DATA lv_mime_type TYPE STRING.
100 | lv_mime_type = i_mime_type.
101 | " Use as default
102 | IF lv_mime_type IS INITIAL.
103 | lv_mime_type = 'RAW'.
104 | ENDIF.
105 |
106 | cl_wd_runtime_services=>attach_file_to_response(
107 | i_filename = i_filename
108 | i_content = i_content
109 | i_inplace = i_inplace
110 |
111 | " Use defaults
112 | i_in_new_window = i_in_new_window
113 | i_mime_type = lv_mime_type ).
114 | ENDMETHOD.
115 | ENDCLASS.
116 |
--------------------------------------------------------------------------------
/src/zcl_eui_conv.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_EUI_CONV
7 | E
8 | Wrapper to some standard FMs
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 | ASSERT_DIFFERS
17 | E
18 | Ensure Difference Between 2 (Elementary) data Objects
19 |
20 |
21 | ASSERT_EQUALS
22 | E
23 | Ensure Equality of Two Data Objects
24 |
25 |
26 | BINARY_TO_STRING
27 | E
28 | ITAB -> STRING
29 |
30 |
31 | BINARY_TO_XSTRING
32 | E
33 | ITAB -> XSTRING
34 |
35 |
36 | FROM_JSON
37 | E
38 | ADD SURROUNDING { DATA: ... }
39 |
40 |
41 | GET_GRID_FROM_SALV
42 | E
43 | Get CL_GUI_ALV_GRID from CL_SALV_TABLE
44 |
45 |
46 | GET_GRID_TABLE
47 | E
48 | Get table from CL_GUI_ALV_GRID
49 |
50 |
51 | GUID_CREATE
52 | E
53 | Wrapper for obsolete function GUID_CREATE
54 |
55 |
56 | MC_ENCODING
57 | E
58 | Encodings constants
59 |
60 |
61 | MC_JSON_MODE
62 | E
63 | JSON handle order
64 |
65 |
66 | MOVE_CORRESPONDING
67 | E
68 | Could ignore some fileds Or Ignore INITIAL values
69 |
70 |
71 | STRING_TO_XSTRING
72 | E
73 | STRING -> XSTRING
74 |
75 |
76 | STR_TO_XML
77 | E
78 | Get XML object from string|xstring
79 |
80 |
81 | TO_JSON
82 | E
83 | DELETE SURROUNDING { DATA: ... }
84 |
85 |
86 | XML_FROM_ZIP
87 | E
88 | Get XML as a string or an object
89 |
90 |
91 | XML_TO_STR
92 | E
93 | XML object to string|xstring
94 |
95 |
96 | XML_TO_ZIP
97 | E
98 | Add XML(string|object) to archive
99 |
100 |
101 | XSTRING_TO_BINARY
102 | E
103 | XSTRING -> ITAB
104 |
105 |
106 | XSTRING_TO_STRING
107 | E
108 | XSTRING -> STRING
109 |
110 |
111 | _ABAP_2_JSON
112 | E
113 | https://github.com/cesar-sap/abap_fm_json.git
114 |
115 |
116 | _JSON_2_ABAP
117 | E
118 | https://github.com/cesar-sap/abap_fm_json.git
119 |
120 |
121 |
122 |
123 |
124 |
--------------------------------------------------------------------------------
/src/zdeui_ui_type.doma.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZDEUI_UI_TYPE
7 | E
8 | CHAR
9 | 000030
10 | 000030
11 | X
12 | X
13 | Kind
14 |
15 |
16 |
17 | 0001
18 | E
19 | char
20 | char
21 |
22 |
23 | 0002
24 | E
25 | numc
26 | numc
27 |
28 |
29 | 0003
30 | E
31 | numeric
32 | numeric
33 |
34 |
35 | 0004
36 | E
37 | boolean
38 | boolean
39 |
40 |
41 | 0005
42 | E
43 | date
44 | date
45 |
46 |
47 | 0006
48 | E
49 | time
50 | time
51 |
52 |
53 | 0007
54 | E
55 | datetime
56 | datetime
57 |
58 |
59 | 0008
60 | E
61 | string
62 | string
63 |
64 |
65 | 0009
66 | E
67 | range
68 | range
69 |
70 |
71 | 0010
72 | E
73 | table
74 | table
75 |
76 |
77 |
78 | R
79 |
80 |
81 | -
82 | R
83 | Тип
84 |
85 |
86 |
87 | -
88 | 0001
89 | R
90 | char
91 | char
92 |
93 | -
94 | 0002
95 | R
96 | numc
97 | numc
98 |
99 | -
100 | 0003
101 | R
102 | numeric
103 | numeric
104 |
105 | -
106 | 0004
107 | R
108 | boolean
109 | boolean
110 |
111 | -
112 | 0005
113 | R
114 | date
115 | date
116 |
117 | -
118 | 0006
119 | R
120 | time
121 | time
122 |
123 | -
124 | 0007
125 | R
126 | datetime
127 | datetime
128 |
129 | -
130 | 0008
131 | R
132 | string
133 | string
134 |
135 | -
136 | 0009
137 | R
138 | range
139 | range
140 |
141 | -
142 | 0010
143 | R
144 | table
145 | table
146 |
147 |
148 |
149 |
150 |
151 |
--------------------------------------------------------------------------------
/src/zcl_eui_screen.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_EUI_SCREEN
7 | E
8 | Screen & dialog utils
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 | -
16 | I
17 | CHR
18 | Chars
19 | 15
20 |
21 | -
22 | I
23 | EDT
24 | Edit value
25 | 20
26 |
27 | -
28 | I
29 | ROW
30 | Rows
31 | 14
32 |
33 | -
34 | I
35 | SHR
36 | Show range
37 | 20
38 |
39 |
40 |
41 | -
42 | R
43 |
44 |
-
45 | I
46 | CHR
47 | Символов
48 | 15
49 |
50 | -
51 | I
52 | EDT
53 | Редактировать
54 | 20
55 |
56 | -
57 | I
58 | ROW
59 | Строк
60 | 14
61 |
62 | -
63 | I
64 | SHR
65 | Показать диапазон
66 | 20
67 |
68 |
69 |
70 |
71 |
72 |
73 | CONFIRM
74 | E
75 | Popup confirm
76 |
77 |
78 | CONSTRUCTOR
79 | E
80 | CONSTRUCTOR
81 |
82 |
83 | CUSTOMIZE
84 | E
85 | Prepare for PBO
86 |
87 |
88 | EDIT_IN_POPUP
89 | E
90 | Edit in popup
91 |
92 |
93 | GET_CONTEXT
94 | E
95 | Get screen context
96 |
97 |
98 | GET_DIMENSION
99 | E
100 | Calculate the size of screen
101 |
102 |
103 | MC_DYNNR
104 | E
105 | Type of screen
106 |
107 |
108 | SET_INIT_PARAMS
109 | E
110 | Write context to screen
111 |
112 |
113 | SHOW_RANGE
114 | E
115 | Show SELECT-OPTION popup
116 |
117 |
118 | TOP_PAI
119 | E
120 | Call ->pai( ) for top instance
121 |
122 |
123 | TOP_PBO
124 | E
125 | Call ->pbo( ) for top instance
126 |
127 |
128 | TT_CUSTOMIZE
129 | E
130 | For 7.40 all params of CUSTOMIZE( )
131 |
132 |
133 | TT_MAP
134 | E
135 | Map of SCREEN elements
136 |
137 |
138 | TT_SCREEN
139 | E
140 | PBO event - Std. table of SCREEN
141 |
142 |
143 |
144 |
145 | CUSTOMIZE
146 | IV_COMMAND
147 | E
148 | Only for checkbox & listbox
149 |
150 |
151 |
152 |
153 |
154 |
--------------------------------------------------------------------------------
/src/zeui_message.msag.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZEUI_MESSAGE
7 | E
8 | Messages for EUI package
9 |
10 |
11 |
12 | E
13 | ZEUI_MESSAGE
14 | 000
15 | &1&2&3&4
16 |
17 |
18 | E
19 | ZEUI_MESSAGE
20 | 001
21 | Sheet &1 is not found in the file &2
22 |
23 |
24 | E
25 | ZEUI_MESSAGE
26 | 002
27 | There are several sheets in the &1! Please specify sheet or correct file.
28 |
29 |
30 | E
31 | ZEUI_MESSAGE
32 | 003
33 | The file &1 is empty
34 |
35 |
36 | E
37 | ZEUI_MESSAGE
38 | 004
39 | Wrong column index &1
40 |
41 |
42 | E
43 | ZEUI_MESSAGE
44 | 005
45 | Column &1 &2 is not found in file &3
46 |
47 |
48 | E
49 | ZEUI_MESSAGE
50 | 006
51 | Field &1 not found in CT_TABLE table
52 |
53 |
54 | E
55 | ZEUI_MESSAGE
56 | 007
57 | &1 method not found in IO_HANDLER
58 |
59 |
60 | E
61 | ZEUI_MESSAGE
62 | 008
63 | Please make '&1' method public or add to freinds ZCL_EUI_EVENT_CALLER
64 |
65 |
66 | E
67 | ZEUI_MESSAGE
68 | 009
69 | Operation cancelled by user
70 |
71 |
72 | E
73 | ZEUI_MESSAGE
74 | 010
75 | Import from &1 not implemented yet
76 |
77 |
78 | E
79 | ZEUI_MESSAGE
80 | 011
81 | Export to &1 not implemented yet
82 |
83 |
84 | E
85 | ZEUI_MESSAGE
86 | 012
87 | Open by OLE is not supported for &1
88 |
89 |
90 | E
91 | ZEUI_MESSAGE
92 | 013
93 | Show in sap gui is not supported for &1
94 |
95 |
96 | E
97 | ZEUI_MESSAGE
98 | 014
99 | Field &1 not found in program &2
100 |
101 |
102 | E
103 | ZEUI_MESSAGE
104 | 015
105 | Unknown type for field &1
106 |
107 |
108 | E
109 | ZEUI_MESSAGE
110 | 016
111 | Table line is not structure. Parameter &1
112 |
113 |
114 | E
115 | ZEUI_MESSAGE
116 | 017
117 | Cannot create '&1' type
118 |
119 |
120 | E
121 | ZEUI_MESSAGE
122 | 018
123 | Error in &1 text
124 |
125 |
126 | E
127 | ZEUI_MESSAGE
128 | 019
129 | Data copied back
130 |
131 |
132 | E
133 | ZEUI_MESSAGE
134 | 020
135 | Cannot write data back to table &1. Maybe key duplication
136 |
137 |
138 | E
139 | ZEUI_MESSAGE
140 | 021
141 | Error in FM &1 sy-subrc &2
142 |
143 |
144 | E
145 | ZEUI_MESSAGE
146 | 022
147 | Error in &1 text
148 |
149 |
150 |
151 |
152 |
153 |
--------------------------------------------------------------------------------
/src/demo/zeui_test_menu.prog.abap:
--------------------------------------------------------------------------------
1 | *&---------------------------------------------------------------------*
2 | *&---------------------------------------------------------------------*
3 | REPORT zeui_test_menu.
4 |
5 | TYPE-POOLS:
6 | abap,
7 | icon.
8 |
9 | SELECTION-SCREEN BEGIN OF BLOCK bl_grp WITH FRAME.
10 | PARAMETERS:
11 | p_scr0 AS CHECKBOX DEFAULT 'X'.
12 | SELECTION-SCREEN END OF BLOCK bl_grp.
13 |
14 | **********************************************************************
15 | **********************************************************************
16 | CLASS lcl_report DEFINITION FINAL.
17 | PUBLIC SECTION.
18 |
19 | CONSTANTS:
20 | BEGIN OF mc_func,
21 | but_01 TYPE stb_button-function VALUE 'BUT_01',
22 | but_gos_sub_menu TYPE stb_button-function VALUE 'BUT_GOS_HIDE_SHOW',
23 | but_gos_hide TYPE stb_button-function VALUE 'BUT_GOS_HIDE',
24 | but_gos_show TYPE stb_button-function VALUE 'BUT_GOS_SHOW',
25 | END OF mc_func.
26 |
27 | DATA:
28 | mt_menu TYPE zcl_eui_menu=>tt_menu,
29 |
30 | mo_gos_menu TYPE REF TO zcl_eui_menu,
31 | mo_scr0_menu TYPE REF TO zcl_eui_menu.
32 |
33 | METHODS:
34 | constructor,
35 |
36 | start_of_selection,
37 |
38 | on_function_selected FOR EVENT function_selected OF cl_gui_toolbar
39 | IMPORTING
40 | sender
41 | fcode.
42 | ENDCLASS.
43 |
44 |
45 | **********************************************************************
46 | **********************************************************************
47 | CLASS lcl_report IMPLEMENTATION.
48 | METHOD constructor.
49 | FIELD-SYMBOLS:
50 | LIKE LINE OF mt_menu.
51 |
52 | APPEND INITIAL LINE TO mt_menu ASSIGNING .
53 | -function = mc_func-but_01.
54 | -icon = icon_complete.
55 |
56 | " Delimiter
57 | APPEND INITIAL LINE TO mt_menu ASSIGNING .
58 | -butn_type = cntb_btype_sep.
59 |
60 | """""""""""""""""""""""
61 | " Sub menu
62 | """""""""""""""""""""""
63 | APPEND INITIAL LINE TO mt_menu ASSIGNING .
64 | -function = mc_func-but_gos_sub_menu.
65 | -icon = icon_okay.
66 | -butn_type = cntb_btype_menu.
67 |
68 | APPEND INITIAL LINE TO mt_menu ASSIGNING .
69 | -par_function = mc_func-but_gos_sub_menu.
70 | -function = mc_func-but_gos_hide.
71 | -text = 'Hide gos menu'.
72 |
73 | APPEND INITIAL LINE TO mt_menu ASSIGNING .
74 | -par_function = mc_func-but_gos_sub_menu.
75 | -function = mc_func-but_gos_show.
76 | -text = 'Show gos menu'.
77 |
78 | " If no container passed use GOS container
79 | CREATE OBJECT mo_gos_menu
80 | EXPORTING
81 | io_handler = me. " Set handler without calling ->GET_TOOLBAR( )
82 |
83 | " Gos menu
84 | mo_gos_menu->create_toolbar(
85 | it_menu = mt_menu ).
86 |
87 | SET TITLEBAR 'TITLE_BAR' WITH 'Test menu'.
88 | ENDMETHOD.
89 |
90 | METHOD start_of_selection.
91 | WRITE / 'Creating new menu ...'.
92 | CHECK p_scr0 = abap_true.
93 |
94 | " Create same menu
95 | CREATE OBJECT mo_scr0_menu
96 | EXPORTING
97 | io_container = cl_gui_container=>screen0
98 | io_handler = me. " Same event handler
99 |
100 | mo_scr0_menu->create_toolbar(
101 | it_menu = mt_menu ).
102 | ENDMETHOD.
103 |
104 | METHOD on_function_selected.
105 | DATA:
106 | lo_container TYPE REF TO cl_gui_container.
107 |
108 | CASE fcode.
109 | WHEN mc_func-but_01.
110 | IF sender = mo_gos_menu->get_toolbar( ).
111 | MESSAGE 'Gos menu pressed!' TYPE 'S'.
112 | RETURN.
113 | ENDIF.
114 |
115 | " Just if have several menus and only 1 shared event handler
116 | IF mo_scr0_menu IS NOT INITIAL AND sender = mo_scr0_menu->get_toolbar( ).
117 | MESSAGE 'cl_gui_container=>screen0 menu pressed!' TYPE 'S'.
118 | RETURN.
119 | ENDIF.
120 |
121 | WHEN mc_func-but_gos_hide OR mc_func-but_gos_show.
122 | " Get container
123 | lo_container = mo_gos_menu->get_container( ).
124 |
125 | " Invert
126 | IF fcode = mc_func-but_gos_hide.
127 | lo_container->set_visible( abap_false ).
128 | ELSE.
129 | lo_container->set_visible( abap_true ).
130 | ENDIF.
131 |
132 | ENDCASE.
133 |
134 | ENDMETHOD.
135 |
136 | ENDCLASS.
137 |
138 |
139 | **********************************************************************
140 | **********************************************************************
141 | DATA:
142 | go_report TYPE REF TO lcl_report. "#EC NEEDED
143 |
144 | INITIALIZATION.
145 | CREATE OBJECT go_report.
146 |
147 | START-OF-SELECTION.
148 | go_report->start_of_selection( ).
149 |
--------------------------------------------------------------------------------
/src/zcl_eui_alv.clas.locals_def.abap:
--------------------------------------------------------------------------------
1 | *"* use this source file for any type of declarations (class
2 | *"* definitions, interfaces or type declarations) you need for
3 | *"* components in the private section
4 |
5 | CLASS lcl_protocol DEFINITION INHERITING FROM cl_gui_alv_grid FINAL.
6 | PUBLIC SECTION.
7 | CLASS-DATA:
8 | mo_protocol TYPE REF TO cl_alv_changed_data_protocol READ-ONLY,
9 | mo_grid TYPE REF TO cl_gui_alv_grid.
10 |
11 | CLASS-METHODS:
12 | clear,
13 |
14 | init
15 | IMPORTING
16 | io_grid TYPE REF TO cl_gui_alv_grid,
17 |
18 | show.
19 | ENDCLASS.
20 |
21 | CLASS lcl_helper DEFINITION FINAL.
22 | PUBLIC SECTION.
23 | DATA:
24 | " Owner class
25 | mo_eui_alv TYPE REF TO zcl_eui_alv,
26 | ms_field_desc TYPE REF TO zcl_eui_type=>ts_field_desc,
27 |
28 | " Own field catalog
29 | mt_sub_field TYPE zcl_eui_type=>tt_field_desc,
30 |
31 | " F4 & dropdown
32 | mt_f4_table TYPE zcl_eui_alv=>tt_f4_table,
33 | mv_drdn_hndl TYPE i,
34 |
35 | " Own table
36 | mr_table TYPE REF TO data,
37 |
38 | " TOP_OF_PAGE
39 | mv_top_of_page_height TYPE i,
40 | mo_dyndoc TYPE REF TO cl_dd_document,
41 |
42 | mt_sorted_key TYPE SORTED TABLE OF fieldname WITH UNIQUE KEY table_line.
43 | METHODS:
44 | constructor
45 | IMPORTING
46 | io_eui_alv TYPE REF TO zcl_eui_alv,
47 |
48 | set_field_desc
49 | IMPORTING
50 | is_field_desc TYPE REF TO zcl_eui_type=>ts_field_desc,
51 |
52 | prepare_layout
53 | CHANGING
54 | cs_layout TYPE lvc_s_layo,
55 |
56 | prepare_variant
57 | CHANGING
58 | cs_variant TYPE disvariant,
59 |
60 | get_field_catalog
61 | RETURNING VALUE(rt_fieldcat) TYPE lvc_t_fcat,
62 | _set_dropdown_4_domain_values CHANGING cs_fieldcat TYPE lvc_s_fcat,
63 |
64 | is_editable
65 | RETURNING VALUE(rv_editable) TYPE abap_bool,
66 |
67 | pbo_init
68 | IMPORTING
69 | io_container TYPE REF TO cl_gui_container,
70 |
71 | after_close
72 | IMPORTING
73 | iv_close_cmd TYPE syucomm
74 | CHANGING
75 | cv_close TYPE abap_bool,
76 |
77 | on_data_changed FOR EVENT data_changed OF cl_gui_alv_grid
78 | IMPORTING
79 | sender
80 | er_data_changed
81 | e_onf4
82 | e_onf4_before
83 | e_onf4_after
84 | e_ucomm,
85 |
86 | on_data_changed_finished FOR EVENT data_changed_finished OF cl_gui_alv_grid
87 | IMPORTING
88 | sender
89 | e_modified
90 | et_good_cells,
91 |
92 | on_double_click FOR EVENT double_click OF cl_gui_alv_grid
93 | IMPORTING
94 | sender
95 | e_row
96 | e_column
97 | es_row_no,
98 |
99 | on_hotspot_click FOR EVENT hotspot_click OF cl_gui_alv_grid
100 | IMPORTING
101 | sender
102 | e_row_id
103 | e_column_id
104 | es_row_no,
105 |
106 | on_toolbar FOR EVENT toolbar OF cl_gui_alv_grid
107 | IMPORTING
108 | sender
109 | e_object
110 | e_interactive,
111 |
112 | on_menu_button FOR EVENT menu_button OF cl_gui_alv_grid
113 | IMPORTING
114 | sender
115 | e_object
116 | e_ucomm,
117 |
118 | on_top_of_page FOR EVENT top_of_page OF cl_gui_alv_grid
119 | IMPORTING
120 | sender
121 | e_dyndoc_id
122 | table_index,
123 |
124 | on_user_command FOR EVENT user_command OF cl_gui_alv_grid
125 | IMPORTING
126 | sender
127 | e_ucomm,
128 |
129 | on_button_click FOR EVENT button_click OF cl_gui_alv_grid
130 | IMPORTING
131 | sender
132 | es_col_id
133 | es_row_no,
134 |
135 | on_after_refresh FOR EVENT after_refresh OF cl_gui_alv_grid
136 | IMPORTING
137 | sender,
138 |
139 | on_context_menu_request FOR EVENT context_menu_request OF cl_gui_alv_grid
140 | IMPORTING
141 | sender
142 | e_object,
143 |
144 | on_f4 FOR EVENT onf4 OF cl_gui_alv_grid
145 | IMPORTING
146 | sender
147 | e_fieldname
148 | e_fieldvalue
149 | es_row_no
150 | er_event_data
151 | et_bad_cells
152 | e_display,
153 |
154 | on_delayed_changed_selection FOR EVENT delayed_changed_sel_callback OF cl_gui_alv_grid
155 | IMPORTING
156 | sender,
157 |
158 | _check_f4_table
159 | IMPORTING
160 | io_grid TYPE REF TO cl_gui_alv_grid
161 | CHANGING
162 | ct_fieldcat TYPE lvc_t_fcat,
163 |
164 | _self_f4
165 | IMPORTING
166 | io_grid TYPE REF TO cl_gui_alv_grid
167 | iv_fieldname TYPE csequence
168 | is_row_no TYPE lvc_s_roid
169 | RETURNING VALUE(rv_self) TYPE abap_bool,
170 |
171 | _get_std_table
172 | IMPORTING
173 | ir_ant_table TYPE REF TO data
174 | EXPORTING er_std_table TYPE REF TO data
175 | et_std_field TYPE tttext255,
176 |
177 | _fill_std_corresponding
178 | IMPORTING
179 | ir_any_f4_table TYPE REF TO data
180 | ir_std_f4_table TYPE REF TO data,
181 |
182 | _sort_source_table_by_key
183 | IMPORTING
184 | ir_table_desc TYPE REF TO cl_abap_tabledescr.
185 | ENDCLASS.
186 |
187 | CLASS zcl_eui_alv DEFINITION LOCAL FRIENDS lcl_helper.
188 |
--------------------------------------------------------------------------------
/src/zcl_eui_prog.clas.abap:
--------------------------------------------------------------------------------
1 | class ZCL_EUI_PROG definition
2 | public
3 | final
4 | create public .
5 |
6 | public section.
7 | type-pools ABAP .
8 |
9 | data MV_CPROG type SYCPROG read-only .
10 |
11 | methods CONSTRUCTOR
12 | importing
13 | !IV_CPROG type SYCPROG optional .
14 | class-methods GENERATE
15 | importing
16 | !IT_CODE type STRINGTAB
17 | !IV_CPROG type SYCPROG
18 | returning
19 | value(RV_PROG) type SYCPROG .
20 | methods GET_ATTRIBUTE
21 | importing
22 | !IV_KEY type CSEQUENCE
23 | returning
24 | value(RV_VALUE) type STRING .
25 | protected section.
26 | private section.
27 |
28 | types:
29 | BEGIN OF ts_hash,
30 | hash TYPE hash160,
31 | prog TYPE programm,
32 | END OF ts_hash .
33 | types:
34 | tt_hash TYPE SORTED TABLE OF ts_hash WITH UNIQUE KEY hash .
35 | types:
36 | BEGIN OF ts_attribute,
37 | key TYPE string,
38 | val TYPE string,
39 | END OF ts_attribute .
40 | types:
41 | tt_attribute TYPE SORTED TABLE OF ts_attribute WITH UNIQUE KEY key .
42 |
43 | data MT_ATTRIBUTE type TT_ATTRIBUTE .
44 | class-data MT_HASH type TT_HASH .
45 |
46 | class-methods _SAVE_PROG
47 | importing
48 | !IT_CODE type STRINGTAB
49 | !IV_CPROG type SYCPROG .
50 | class-methods _GENERATE_SUBROUTINE
51 | importing
52 | !IT_CODE type STRINGTAB
53 | returning
54 | value(RV_PROG) type SYCPROG .
55 | ENDCLASS.
56 |
57 |
58 |
59 | CLASS ZCL_EUI_PROG IMPLEMENTATION.
60 |
61 |
62 | METHOD constructor.
63 | CHECK iv_cprog IS NOT INITIAL.
64 |
65 | mv_cprog = iv_cprog.
66 |
67 | " Name that cannot be created in SE38
68 | IF mv_cprog NS `%`.
69 | CONCATENATE mv_cprog(1) `%` mv_cprog+1 INTO mv_cprog.
70 | ENDIF.
71 |
72 | DATA lt_code TYPE stringtab.
73 | READ REPORT mv_cprog INTO lt_code.
74 | CHECK sy-subrc = 0.
75 |
76 | " Tech info in the firts line
77 | DATA: lv_line TYPE string, lt_line TYPE stringtab.
78 | READ TABLE lt_code INTO lv_line INDEX 1.
79 | SPLIT lv_line+1 AT `,` INTO TABLE lt_line.
80 |
81 | DATA ls_attribute LIKE LINE OF mt_attribute.
82 | LOOP AT lt_line INTO lv_line.
83 | SPLIT lv_line AT `=` INTO ls_attribute-key
84 | ls_attribute-val.
85 | INSERT ls_attribute INTO TABLE mt_attribute.
86 | ENDLOOP.
87 |
88 | CHECK get_attribute( `EUI` ) IS INITIAL.
89 | zcx_eui_no_check=>raise_sys_error( iv_message = `The app is not auto-generated!` ).
90 | ENDMETHOD.
91 |
92 |
93 | METHOD generate.
94 | " Already created ?
95 | DATA ls_hash TYPE ts_hash.
96 | ls_hash-hash = zcl_eui_crc64=>calc_string_hash( it_table = it_code ).
97 |
98 | READ TABLE mt_hash INTO ls_hash
99 | WITH TABLE KEY hash = ls_hash-hash.
100 | IF sy-subrc = 0.
101 | rv_prog = ls_hash-prog.
102 | RETURN.
103 | ENDIF.
104 |
105 | IF iv_cprog IS INITIAL.
106 | ls_hash-prog = _generate_subroutine( it_code ).
107 | ELSE.
108 | " Permanently in in SE38!
109 | ls_hash-prog = iv_cprog.
110 |
111 | " Is already generated ?
112 | IF ls_hash-prog+1(1) = '%'.
113 | DO 39 TIMES. "#EC NUMBER_OK
114 | ls_hash-prog+sy-index(1) = '%'.
115 | READ TABLE mt_hash TRANSPORTING NO FIELDS "#EC CI_SORTSEQ
116 | WITH KEY prog = ls_hash-prog.
117 | IF sy-subrc <> 0.
118 | EXIT.
119 | ENDIF.
120 | ENDDO.
121 | ENDIF.
122 |
123 | _save_prog( it_code = it_code
124 | iv_cprog = ls_hash-prog ).
125 | ENDIF.
126 |
127 | rv_prog = ls_hash-prog.
128 | INSERT ls_hash INTO TABLE mt_hash.
129 | ENDMETHOD.
130 |
131 |
132 | METHOD get_attribute.
133 | FIELD-SYMBOLS LIKE LINE OF mt_attribute.
134 | READ TABLE mt_attribute ASSIGNING
135 | WITH TABLE KEY key = iv_key.
136 | CHECK sy-subrc = 0.
137 |
138 | rv_value = -val.
139 | ENDMETHOD.
140 |
141 |
142 | METHOD _generate_subroutine.
143 | DATA lv_message TYPE string.
144 | DATA lv_pos TYPE i. "#EC NEEDED <-- dump info
145 | DATA lv_word TYPE string. "#EC NEEDED <-- dump info
146 | GENERATE SUBROUTINE POOL it_code NAME rv_prog
147 | MESSAGE lv_message
148 | LINE lv_pos
149 | WORD lv_word. "#EC CI_GENERATE. <--- in lt_code[]
150 | CHECK sy-subrc <> 0.
151 |
152 | " Ooops! wrong syntax in MT_ABAP_CODE!
153 | zcx_eui_no_check=>raise_sys_error( iv_message = lv_message ). "<-- dump info
154 | ENDMETHOD.
155 |
156 |
157 | METHOD _save_prog.
158 | " Saving directly is prohibited
159 | DATA lt_saver TYPE stringtab.
160 |
161 | APPEND `REPORT SAVER.` TO lt_saver.
162 | APPEND `` TO lt_saver.
163 | APPEND `FORM START USING it_code TYPE stringtab` TO lt_saver.
164 | APPEND ` iv_cprog TYPE sycprog.` TO lt_saver.
165 | APPEND ` INSERT REPORT iv_cprog FROM it_code.` TO lt_saver.
166 | APPEND ` DATA lv_message TYPE string.` TO lt_saver.
167 | APPEND ` DATA lv_pos TYPE i.` TO lt_saver.
168 | APPEND ` DATA lv_word TYPE string.` TO lt_saver.
169 | APPEND ` GENERATE REPORT iv_cprog` TO lt_saver.
170 | APPEND ` MESSAGE lv_message` TO lt_saver.
171 | APPEND ` LINE lv_pos` TO lt_saver.
172 | APPEND ` WORD lv_word.` TO lt_saver.
173 | APPEND ` IF sy-subrc = 0.` TO lt_saver.
174 | APPEND ` COMMIT WORK AND WAIT.` TO lt_saver.
175 | APPEND ` RETURN.` TO lt_saver.
176 | APPEND ` ENDIF.` TO lt_saver.
177 | APPEND ` ZCX_EUI_NO_CHECK=>RAISE_SYS_ERROR( iv_message = lv_message ).` TO lt_saver.
178 | APPEND `ENDFORM.` TO lt_saver.
179 |
180 | DATA lv_saver TYPE string.
181 | lv_saver = generate( it_code = lt_saver
182 | iv_cprog = `` ).
183 |
184 | PERFORM start IN PROGRAM (lv_saver) " IF FOUND
185 | USING it_code
186 | iv_cprog.
187 | ENDMETHOD.
188 | ENDCLASS.
189 |
--------------------------------------------------------------------------------
/src/demo/zeui_test_screen_02.prog.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZEUI_TEST_SCREEN_02
7 | 1
8 | E
9 | X
10 | X
11 |
12 |
13 |
14 | 000001
15 | 000002
16 |
17 |
18 |
19 | START_STATUS
20 | D
21 | 000001
22 | 000002
23 | 0001
24 | Main status
25 |
26 |
27 |
28 |
29 | CMD_01
30 | 001
31 | S
32 | 01-Statically decl. screen
33 |
34 |
35 | CMD_02
36 | 001
37 | S
38 | 02-Free selection screen
39 |
40 |
41 | CMD_03
42 | 001
43 | S
44 | 03-Dynamic popup
45 |
46 |
47 | CMD_04
48 | 001
49 | S
50 | 04-Dynamically decl. screen
51 |
52 |
53 | DCAN
54 | 001
55 | E
56 | S
57 | ICON_CANCEL
58 | @0W@
59 | Cancel
60 | Cancel
61 |
62 |
63 |
64 |
65 | 000002
66 | 0001
67 | 01
68 | 25
69 |
70 |
71 | 000002
72 | 0001
73 | 02
74 | 26
75 |
76 |
77 | 000002
78 | 0001
79 | 03
80 | 27
81 |
82 |
83 |
84 |
85 | 000002
86 | 12
87 | DCAN
88 | 001
89 |
90 |
91 | 000002
92 | 25
93 | CMD_01
94 | 001
95 |
96 |
97 | 000002
98 | 26
99 | CMD_02
100 | 001
101 |
102 |
103 | 000002
104 | 27
105 | CMD_03
106 | 001
107 |
108 |
109 | 000002
110 | 28
111 | CMD_04
112 | 001
113 |
114 |
115 |
116 |
117 | START_STATUS
118 | CMD_01
119 |
120 |
121 | START_STATUS
122 | CMD_02
123 |
124 |
125 | START_STATUS
126 | CMD_03
127 |
128 |
129 | START_STATUS
130 | CMD_04
131 |
132 |
133 | START_STATUS
134 | DCAN
135 |
136 |
137 |
138 |
139 | A
140 | 000001
141 | D
142 | Main status
143 |
144 |
145 | P
146 | 000002
147 | D
148 | Main status
149 |
150 |
151 | B
152 | 000002
153 | 0001
154 | D
155 | Main status
156 |
157 |
158 |
159 |
160 | -
161 | I
162 | TIT
163 | Launch type
164 | 21
165 |
166 | -
167 | R
168 | Screen example 02
169 | 17
170 |
171 | -
172 | S
173 | P_BDC_M
174 | .
175 | 23
176 | D
177 |
178 | -
179 | S
180 | P_BUKRS
181 | .
182 | 20
183 | D
184 |
185 | -
186 | S
187 | P_CHECK
188 | Checkbox
189 | 17
190 |
191 | -
192 | S
193 | P_FLD_I
194 | .
195 | 18
196 | D
197 |
198 | -
199 | S
200 | P_FLD_I2
201 | .
202 | 17
203 | D
204 |
205 | -
206 | S
207 | P_LAND1
208 | .
209 | 19
210 | D
211 |
212 | -
213 | S
214 | P_MANDT
215 | .
216 | 9
217 | D
218 |
219 | -
220 | S
221 | S_USER
222 | .
223 | 12
224 | D
225 |
226 |
227 |
228 |
229 |
230 |
--------------------------------------------------------------------------------
/src/zcl_eui_tree.clas.abap:
--------------------------------------------------------------------------------
1 | class ZCL_EUI_TREE definition
2 | public
3 | inheriting from ZCL_EUI_MANAGER
4 | final
5 | create public .
6 |
7 | public section.
8 | *"* public components of class ZCL_EUI_TREE
9 | *"* do not include other source files here!!!
10 | type-pools ABAP .
11 |
12 | class CL_GUI_COLUMN_TREE definition load .
13 | methods CONSTRUCTOR
14 | importing
15 | !IR_TABLE type ref to DATA
16 | !IS_HEADER type TREEV_HHDR
17 | !IT_MOD_CATALOG type LVC_T_FCAT optional
18 | !NODE_SELECTION_MODE type I default CL_GUI_COLUMN_TREE=>NODE_SEL_MODE_SINGLE
19 | !HIDE_SELECTION type ABAP_BOOL optional
20 | !ITEM_SELECTION type ABAP_BOOL default ABAP_TRUE
21 | !NO_TOOLBAR type ABAP_BOOL optional
22 | !NO_HTML_HEADER type ABAP_BOOL optional
23 | !IV_EDITABLE type ABAP_BOOL default ABAP_FALSE .
24 | methods GET_TREE
25 | returning
26 | value(RO_TREE) type ref to CL_GUI_ALV_TREE .
27 |
28 | methods ZIF_EUI_MANAGER~PBO
29 | redefinition .
30 | protected section.
31 | *"* protected components of class ZCL_EUI_TREE
32 | *"* do not include other source files here!!!
33 | private section.
34 | *"* private components of class ZCL_EUI_TREE
35 | *"* do not include other source files here!!!
36 |
37 | types:
38 | BEGIN OF ts_constructor,
39 | node_selection_mode TYPE i,
40 | hide_selection TYPE abap_bool,
41 | item_selection TYPE abap_bool,
42 | no_toolbar TYPE abap_bool,
43 | no_html_header TYPE abap_bool,
44 | END OF ts_constructor .
45 | types:
46 | BEGIN OF ts_first_display,
47 | s_header TYPE treev_hhdr,
48 | t_catalog TYPE lvc_t_fcat,
49 | END OF ts_first_display .
50 |
51 | data MR_TABLE type ref to DATA .
52 | data MO_TREE type ref to CL_GUI_ALV_TREE .
53 | data MS_CONSTRUCTOR type TS_CONSTRUCTOR .
54 | data MS_FIRST_DISPLAY type TS_FIRST_DISPLAY .
55 |
56 | methods _SET_HANDLERS .
57 | methods _ON_LINK_CLICK
58 | for event LINK_CLICK of CL_GUI_ALV_TREE
59 | importing
60 | !SENDER
61 | !FIELDNAME
62 | !NODE_KEY .
63 | methods _ON_EXPAND_NC
64 | for event EXPAND_NC of CL_GUI_ALV_TREE
65 | importing
66 | !SENDER
67 | !NODE_KEY .
68 | ENDCLASS.
69 |
70 |
71 |
72 | CLASS ZCL_EUI_TREE IMPLEMENTATION.
73 |
74 |
75 | METHOD constructor.
76 | super->constructor( iv_editable = iv_editable ).
77 | mr_table = ir_table.
78 |
79 | ms_constructor-node_selection_mode = node_selection_mode.
80 | ms_constructor-hide_selection = hide_selection.
81 | ms_constructor-item_selection = item_selection.
82 | ms_constructor-no_toolbar = no_toolbar.
83 | ms_constructor-no_html_header = no_html_header.
84 |
85 | ms_first_display-s_header = is_header.
86 | ms_first_display-t_catalog = zcl_eui_type=>get_mod_catalog(
87 | ir_table = mr_table
88 | it_mod_catalog = it_mod_catalog ).
89 |
90 | FIELD-SYMBOLS TYPE STANDARD TABLE.
91 | ASSIGN mr_table->* TO .
92 | IF sy-subrc <> 0 OR [] IS NOT INITIAL.
93 | zcx_eui_no_check=>raise_sys_error( iv_message = 'Please pass valid empty standard table'(ppv) ).
94 | ENDIF.
95 | ENDMETHOD.
96 |
97 |
98 | METHOD get_tree.
99 | ro_tree = mo_tree.
100 | ENDMETHOD.
101 |
102 |
103 | METHOD zif_eui_manager~pbo.
104 | " Initialize 1 time
105 | IF io_container IS NOT INITIAL AND mo_tree IS INITIAL.
106 | CREATE OBJECT mo_tree
107 | EXPORTING
108 | parent = io_container
109 | node_selection_mode = ms_constructor-node_selection_mode
110 | hide_selection = ms_constructor-hide_selection
111 | item_selection = ms_constructor-item_selection
112 | no_toolbar = ms_constructor-no_toolbar
113 | no_html_header = ms_constructor-no_html_header.
114 |
115 | _set_handlers( ).
116 |
117 | FIELD-SYMBOLS TYPE STANDARD TABLE.
118 | ASSIGN mr_table->* TO .
119 |
120 | mo_tree->set_table_for_first_display(
121 | EXPORTING is_hierarchy_header = ms_first_display-s_header
122 | CHANGING it_outtab =
123 | it_fieldcatalog = ms_first_display-t_catalog[] ).
124 | ENDIF.
125 |
126 | super->pbo(
127 | io_container = io_container
128 | iv_set_status = iv_set_status ).
129 | ENDMETHOD.
130 |
131 |
132 | METHOD _on_expand_nc.
133 | mo_event_caller->call_handlers(
134 | iv_of_class = 'CL_GUI_ALV_TREE'
135 | iv_for_event = 'EXPAND_NC'
136 | iv_param_nam_00 = 'SENDER' iv_param_val_00 = sender
137 | iv_param_nam_01 = 'NODE_KEY' iv_param_val_01 = node_key ).
138 | ENDMETHOD.
139 |
140 |
141 | METHOD _on_link_click.
142 | mo_event_caller->call_handlers(
143 | iv_of_class = 'CL_GUI_ALV_TREE'
144 | iv_for_event = 'LINK_CLICK'
145 | iv_param_nam_00 = 'SENDER' iv_param_val_00 = sender
146 | iv_param_nam_01 = 'FIELDNAME' iv_param_val_01 = fieldname
147 | iv_param_nam_02 = 'NODE_KEY' iv_param_val_02 = node_key ).
148 | ENDMETHOD.
149 |
150 |
151 | METHOD _set_handlers.
152 | SET HANDLER: _on_link_click FOR mo_tree,
153 | _on_expand_nc FOR mo_tree.
154 |
155 | DATA lt_event TYPE cntl_simple_events.
156 | DATA ls_event TYPE cntl_simple_event.
157 | mo_tree->get_registered_events( IMPORTING events = lt_event
158 | EXCEPTIONS OTHERS = 0 ).
159 |
160 | DATA lv_has_handler TYPE abap_bool.
161 | lv_has_handler = mo_event_caller->has_handler(
162 | iv_of_class = 'CL_GUI_ALV_TREE'
163 | iv_for_event = 'LINK_CLICK' ).
164 | IF lv_has_handler = abap_true.
165 | ls_event-eventid = cl_gui_column_tree=>eventid_link_click.
166 | APPEND ls_event TO lt_event.
167 | ENDIF.
168 |
169 | lv_has_handler = mo_event_caller->has_handler(
170 | iv_of_class = 'CL_GUI_ALV_TREE'
171 | iv_for_event = 'EXPAND_NC' ).
172 | IF lv_has_handler = abap_true.
173 | ls_event-eventid = cl_gui_column_tree=>eventid_expand_no_children.
174 | APPEND ls_event TO lt_event.
175 | ENDIF.
176 |
177 | SORT lt_event.
178 | DELETE ADJACENT DUPLICATES FROM lt_event COMPARING ALL FIELDS.
179 | mo_tree->set_registered_events( EXPORTING events = lt_event
180 | EXCEPTIONS OTHERS = 1 ).
181 | CHECK sy-subrc <> 0.
182 | zcx_eui_no_check=>raise_sys_error( iv_message = 'Cannot registere events for TREE').
183 | ENDMETHOD.
184 | ENDCLASS.
185 |
--------------------------------------------------------------------------------
/src/demo/zeui_test_alv_filter.prog.abap:
--------------------------------------------------------------------------------
1 | *&---------------------------------------------------------------------*
2 | *&---------------------------------------------------------------------*
3 | REPORT zeui_test_alv_filter.
4 |
5 | TYPE-POOLS:
6 | abap,
7 | icon,
8 | col.
9 |
10 | SELECTION-SCREEN BEGIN OF BLOCK bl_grp WITH FRAME.
11 | PARAMETERS:
12 | p_max TYPE i DEFAULT 255 OBLIGATORY,
13 | p_menu AS CHECKBOX.
14 | SELECTION-SCREEN END OF BLOCK bl_grp.
15 |
16 |
17 | **********************************************************************
18 | **********************************************************************
19 | CLASS lcl_report DEFINITION FINAL.
20 | PUBLIC SECTION.
21 | TYPES:
22 | BEGIN OF ts_alv.
23 | INCLUDE TYPE sflight.
24 | TYPES:
25 | t_color TYPE lvc_t_scol,
26 | END OF ts_alv.
27 | DATA:
28 | mt_alv TYPE STANDARD TABLE OF ts_alv WITH DEFAULT KEY.
29 |
30 | METHODS:
31 | start_of_selection,
32 |
33 | _on_user_command FOR EVENT user_command OF cl_gui_alv_grid
34 | IMPORTING
35 | sender
36 | e_ucomm,
37 |
38 | _add_color_filters
39 | IMPORTING
40 | io_alv TYPE REF TO zcl_eui_alv,
41 |
42 | _make_filter
43 | IMPORTING
44 | fieldname TYPE lvc_s_filt-fieldname
45 | option TYPE lvc_s_filt-option OPTIONAL
46 | low TYPE lvc_s_filt-low
47 | RETURNING VALUE(rt_filter) TYPE lvc_t_filt.
48 | ENDCLASS.
49 |
50 | **********************************************************************
51 | **********************************************************************
52 | CLASS lcl_report IMPLEMENTATION.
53 | METHOD start_of_selection.
54 | SELECT carrid connid fldate price currency
55 | planetype seatsmax seatsocc paymentsum seatsmax_b
56 | seatsocc_b seatsmax_f seatsocc_f INTO CORRESPONDING FIELDS OF TABLE mt_alv "#EC CI_NOWHERE
57 | FROM sflight
58 | UP TO p_max ROWS.
59 |
60 | DATA lr_table TYPE REF TO data.
61 | GET REFERENCE OF mt_alv INTO lr_table.
62 |
63 | DATA ls_layout TYPE lvc_s_layo.
64 | ls_layout-ctab_fname = 'T_COLOR'.
65 |
66 | DATA lt_toolbar TYPE ttb_button.
67 | DATA lr_toolbar TYPE REF TO stb_button.
68 | APPEND INITIAL LINE TO lt_toolbar REFERENCE INTO lr_toolbar.
69 | lr_toolbar->function = '_ADD_ROWS_'.
70 | lr_toolbar->text = 'Add selected rows'(add).
71 | lr_toolbar->icon = icon_insert_row.
72 |
73 | DATA lo_alv TYPE REF TO zcl_eui_alv.
74 | CREATE OBJECT lo_alv
75 | EXPORTING
76 | ir_table = lr_table
77 | is_layout = ls_layout
78 | it_toolbar = lt_toolbar.
79 |
80 | _add_color_filters( lo_alv ).
81 | lo_alv->show( io_handler = me ).
82 | ENDMETHOD.
83 |
84 | METHOD _on_user_command.
85 | CHECK e_ucomm = '_ADD_ROWS_'.
86 |
87 | DATA lt_sel_rows TYPE lvc_t_row.
88 | sender->get_selected_rows( IMPORTING et_index_rows = lt_sel_rows ).
89 | IF lt_sel_rows IS INITIAL.
90 | MESSAGE 'Please select rows first' TYPE 'S' DISPLAY LIKE 'E'.
91 | RETURN.
92 | ENDIF.
93 |
94 | DATA lt_alv LIKE mt_alv.
95 | FIELD-SYMBOLS LIKE LINE OF lt_sel_rows.
96 | LOOP AT lt_sel_rows ASSIGNING .
97 | DATA ls_alv LIKE LINE OF lt_alv.
98 | READ TABLE mt_alv INDEX -index INTO ls_alv.
99 |
100 | " Without any rules (colors)
101 | CLEAR ls_alv-t_color[].
102 | APPEND ls_alv TO lt_alv.
103 | ENDLOOP.
104 |
105 | " In the begining
106 | INSERT LINES OF lt_alv INTO mt_alv INDEX 1.
107 |
108 | " And update
109 | DATA ls_stable TYPE lvc_s_stbl.
110 | ls_stable-col = ls_stable-row = 'X'.
111 | sender->refresh_table_display( is_stable = ls_stable ).
112 | ENDMETHOD.
113 |
114 | METHOD _add_color_filters.
115 | DATA lo_filter TYPE REF TO zcl_eui_alv_filter.
116 | CREATE OBJECT lo_filter.
117 |
118 | DATA lt_filter TYPE lvc_t_filt.
119 | DATA ls_color TYPE lvc_s_colo.
120 |
121 | **********************************************************************
122 | " SIGN='I' & OPTION='EQ' by default
123 |
124 | " --1--
125 | lt_filter = _make_filter( fieldname = 'PRICE' " <--- color this field
126 | option = 'LE'
127 | low = '500' ).
128 | ls_color-col = col_positive.
129 | lo_filter->add_rule( it_filter = lt_filter
130 | iv_desc = 'Low price'
131 | is_color = ls_color
132 | " iv_field = '' " Use 'PRICE' field for column
133 | ).
134 |
135 | " --2--
136 | lt_filter = _make_filter( fieldname = 'SEATSMAX'
137 | option = 'GE'
138 | low = '400' ).
139 | ls_color-col = col_heading.
140 | lo_filter->add_rule( it_filter = lt_filter
141 | " iv_desc = 'Very big planes' " <--- Get description from filter
142 | is_color = ls_color
143 | iv_field = 'PLANETYPE,SEATSMAX' " <--- color 2 fields
144 | ).
145 |
146 | " --3--
147 | lt_filter = _make_filter( fieldname = 'SEATSOCC'
148 | low = '0' ).
149 | ls_color-col = col_negative.
150 | lo_filter->add_rule( it_filter = lt_filter
151 | " iv_desc = 'Occupied seats is equal to zero' " <--- Get description from filter
152 | is_color = ls_color
153 | iv_field = '*' " <--- all fields in row
154 | ).
155 |
156 | lo_filter->add_button( io_alv = io_alv
157 | " is_button = use own button style
158 | iv_menu = p_menu ).
159 | ENDMETHOD.
160 |
161 | METHOD _make_filter.
162 | FIELD-SYMBOLS LIKE LINE OF rt_filter.
163 | APPEND INITIAL LINE TO rt_filter ASSIGNING .
164 | -fieldname = fieldname.
165 | -option = option.
166 | -low = low.
167 | ENDMETHOD.
168 | ENDCLASS.
169 | **********************************************************************
170 | **********************************************************************
171 |
172 | DATA:
173 | go_report TYPE REF TO lcl_report. "#EC NEEDED
174 |
175 | INITIALIZATION.
176 | CREATE OBJECT go_report.
177 |
178 | START-OF-SELECTION.
179 | go_report->start_of_selection( ).
180 |
--------------------------------------------------------------------------------
/src/zcl_eui_screen.clas.locals_def.abap:
--------------------------------------------------------------------------------
1 | *"* use this source file for any type of declarations (class
2 | *"* definitions, interfaces or type declarations) you need for
3 | *"* components in the private section
4 |
5 | CLASS lcl_screen DEFINITION.
6 | PUBLIC SECTION.
7 | DATA:
8 | " Parent
9 | mo_eui_screen TYPE REF TO zcl_eui_screen,
10 |
11 | " Screen context & map of fields
12 | mr_context TYPE REF TO data,
13 | mv_unq_rollname TYPE abap_bool,
14 | mt_map TYPE zcl_eui_screen=>tt_map,
15 |
16 | " For pbo
17 | mt_screen TYPE zcl_eui_screen=>tt_screen,
18 |
19 | " Initilize with values & Set lables
20 | mv_pbo_init_params TYPE abap_bool VALUE abap_true,
21 | mv_pbo_set_labels TYPE abap_bool.
22 |
23 | METHODS:
24 | constructor
25 | IMPORTING
26 | io_eui_screen TYPE REF TO zcl_eui_screen
27 | ir_context TYPE REF TO data
28 | iv_unq_rollname TYPE abap_bool DEFAULT abap_false,
29 |
30 | fill_from_context FINAL
31 | RAISING zcx_eui_exception,
32 |
33 | _check_is_list_box
34 | CHANGING
35 | cs_map TYPE zcl_eui_screen=>ts_map,
36 |
37 | get_parameter_name
38 | IMPORTING
39 | is_comp TYPE REF TO abap_compdescr
40 | iv_index TYPE num2
41 | RETURNING VALUE(rv_name) TYPE string,
42 |
43 | customize
44 | IMPORTING
45 | it_customize TYPE zcl_eui_screen=>tt_customize,
46 |
47 | get_screen_by_map
48 | IMPORTING
49 | iv_name TYPE zcl_eui_screen=>ts_map-name
50 | RETURNING VALUE(rs_screen) TYPE zcl_eui_screen=>ts_screen,
51 |
52 | pbo
53 | IMPORTING
54 | iv_before TYPE abap_bool OPTIONAL
55 | iv_after TYPE abap_bool OPTIONAL
56 | CHANGING
57 | cv_set_status TYPE abap_bool OPTIONAL,
58 |
59 | set_initial_values
60 | IMPORTING
61 | iv_force TYPE abap_bool OPTIONAL,
62 |
63 | _get_hash
64 | IMPORTING
65 | iv_value TYPE any
66 | RETURNING VALUE(rv_hash) TYPE char16,
67 |
68 | show
69 | IMPORTING
70 | iv_before TYPE abap_bool OPTIONAL
71 | iv_after TYPE abap_bool OPTIONAL
72 | CHANGING
73 | cv_close_cmd TYPE syucomm
74 | RAISING zcx_eui_exception,
75 |
76 | " PAI
77 | check_pai
78 | IMPORTING
79 | iv_command TYPE syucomm
80 | CHANGING
81 | cv_map_index TYPE i
82 | cv_close TYPE abap_bool
83 | cv_read_after TYPE abap_bool
84 | RAISING cx_sy_conversion_no_number,
85 |
86 | call_editor FINAL
87 | IMPORTING
88 | iv_map_index TYPE i,
89 |
90 | read_from_screen
91 | IMPORTING
92 | ir_map TYPE REF TO zcl_eui_screen=>ts_map,
93 |
94 | _find_f4_tables
95 | IMPORTING
96 | is_field_desc TYPE zcl_eui_type=>ts_field_desc
97 | io_alv TYPE REF TO zcl_eui_alv.
98 |
99 | CLASS-METHODS:
100 | is_fixed_values_list
101 | IMPORTING is_catalog TYPE lvc_s_fcat
102 | iv_read_only TYPE abap_bool
103 | EXPORTING ev_update TYPE abap_bool
104 | ev_is_fixed TYPE abap_bool
105 | CHANGING ct_range TYPE STANDARD TABLE.
106 | ENDCLASS.
107 |
108 | CLASS lcl_scr_free DEFINITION INHERITING FROM lcl_screen FINAL.
109 | PUBLIC SECTION.
110 | METHODS:
111 | constructor
112 | IMPORTING
113 | io_eui_screen TYPE REF TO zcl_eui_screen
114 | ir_context TYPE REF TO data,
115 |
116 | get_text_value
117 | IMPORTING
118 | is_data TYPE any
119 | is_field_desc TYPE zcl_eui_type=>ts_field_desc OPTIONAL
120 | iv_field TYPE csequence OPTIONAL
121 | RETURNING
122 | VALUE(rv_text) TYPE rsdsselopt-low,
123 |
124 | read_free_sel_value
125 | IMPORTING
126 | is_map TYPE REF TO zcl_eui_screen=>ts_map
127 | it_range TYPE STANDARD TABLE
128 | RETURNING VALUE(rv_ok) TYPE abap_bool,
129 |
130 | get_parameter_name REDEFINITION,
131 | pbo REDEFINITION,
132 | check_pai REDEFINITION,
133 | show REDEFINITION,
134 | read_from_screen REDEFINITION.
135 | ENDCLASS.
136 |
137 | CLASS lcl_scr_dync DEFINITION INHERITING FROM lcl_screen FINAL.
138 | PUBLIC SECTION.
139 | METHODS:
140 | _create_program,
141 | _make_screen_code
142 | RETURNING VALUE(rt_code) TYPE stringtab,
143 |
144 | get_parameter_name REDEFINITION,
145 | show REDEFINITION,
146 | check_pai REDEFINITION,
147 | pbo REDEFINITION.
148 | ENDCLASS.
149 |
150 | CLASS zcl_eui_screen DEFINITION LOCAL FRIENDS lcl_screen.
151 | CLASS zcl_eui_screen DEFINITION LOCAL FRIENDS lcl_scr_free.
152 | CLASS zcl_eui_screen DEFINITION LOCAL FRIENDS lcl_scr_dync.
153 |
154 |
155 | CLASS lcl_fv_dialog DEFINITION.
156 | PUBLIC SECTION.
157 | CONSTANTS:
158 | BEGIN OF mc_cmd,
159 | show_range TYPE syucomm VALUE '_SHOW_RANGE',
160 | select_all TYPE syucomm VALUE '_SELECT_ALL',
161 | deselect_all TYPE syucomm VALUE '_DESELECT_ALL',
162 | END OF mc_cmd.
163 |
164 | TYPES: BEGIN OF ts_f4,
165 | mark TYPE abap_bool,
166 | key TYPE char30,
167 | text TYPE string,
168 | END OF ts_f4,
169 | tt_f4 TYPE STANDARD TABLE OF ts_f4 WITH DEFAULT KEY.
170 |
171 | DATA:
172 | _mr_alv TYPE REF TO tt_f4.
173 |
174 | METHODS: show IMPORTING it_range TYPE STANDARD TABLE
175 | iv_read_only TYPE abap_bool
176 | iv_title TYPE csequence
177 | EXPORTING ev_cmd TYPE syucomm
178 | et_f4 TYPE tt_f4
179 | CHANGING ct_dropdown TYPE lvc_t_dral,
180 |
181 | _on_toolbar FOR EVENT toolbar OF cl_gui_alv_grid
182 | IMPORTING e_object,
183 |
184 | _on_user_command FOR EVENT user_command OF cl_gui_alv_grid
185 | IMPORTING sender e_ucomm,
186 |
187 | _on_pai_event FOR EVENT pai_event OF zif_eui_manager
188 | IMPORTING
189 | sender
190 | iv_command
191 | cv_close.
192 | ENDCLASS.
193 |
--------------------------------------------------------------------------------
/src/zcl_eui_manager.clas.abap:
--------------------------------------------------------------------------------
1 | class ZCL_EUI_MANAGER definition
2 | public
3 | create public .
4 |
5 | public section.
6 | *"* public components of class ZCL_EUI_MANAGER
7 | *"* do not include other source files here!!!
8 | type-pools ABAP .
9 |
10 | interfaces ZIF_EUI_MANAGER .
11 |
12 | aliases MC_CMD
13 | for ZIF_EUI_MANAGER~MC_CMD .
14 | aliases MS_POPUP
15 | for ZIF_EUI_MANAGER~MS_POPUP .
16 | aliases MS_SCREEN
17 | for ZIF_EUI_MANAGER~MS_SCREEN .
18 | aliases MS_STATUS
19 | for ZIF_EUI_MANAGER~MS_STATUS .
20 | aliases PAI
21 | for ZIF_EUI_MANAGER~PAI .
22 | aliases PBO
23 | for ZIF_EUI_MANAGER~PBO .
24 | aliases POPUP
25 | for ZIF_EUI_MANAGER~POPUP .
26 | aliases SET_STATUS
27 | for ZIF_EUI_MANAGER~SET_STATUS .
28 | aliases SHOW
29 | for ZIF_EUI_MANAGER~SHOW .
30 | aliases TS_STATUS
31 | for ZIF_EUI_MANAGER~TS_STATUS .
32 |
33 | constants MC_EUI_SCREEN_FUGR type SYCPROG value 'SAPLZFG_EUI_SCREEN'. "#EC NOTEXT
34 |
35 | methods ADD_HANDLER
36 | importing
37 | !IO_HANDLER type ref to OBJECT
38 | !IV_HANDLERS_MAP type CSEQUENCE optional
39 | returning
40 | value(RO_MANAGER) type ref to ZCL_EUI_MANAGER .
41 | methods CONSTRUCTOR
42 | importing
43 | !IV_EDITABLE type ABAP_BOOL .
44 | protected section.
45 |
46 | data MO_EVENT_CALLER type ref to ZCL_EUI_EVENT_CALLER .
47 | data MV_READ_ONLY type ABAP_BOOL .
48 | data MV_CLOSE_CMD type SYUCOMM .
49 | private section.
50 | *"* private components of class ZCL_EUI_MANAGER
51 | *"* do not include other source files here!!!
52 | ENDCLASS.
53 |
54 |
55 |
56 | CLASS ZCL_EUI_MANAGER IMPLEMENTATION.
57 |
58 |
59 | METHOD add_handler.
60 | ro_manager = me. " for chain calls
61 | CHECK io_handler IS NOT INITIAL.
62 |
63 | DATA lo_error TYPE REF TO zcx_eui_exception.
64 | TRY.
65 | mo_event_caller->add_handler(
66 | io_handler = io_handler
67 | iv_handlers_map = iv_handlers_map ).
68 | CATCH zcx_eui_exception INTO lo_error.
69 | MESSAGE lo_error TYPE 'S' DISPLAY LIKE 'E'.
70 | ENDTRY.
71 | ENDMETHOD.
72 |
73 |
74 | METHOD constructor.
75 | " Invert xsdbool( <> 'X' )
76 | IF iv_editable <> abap_true.
77 | mv_read_only = abap_true.
78 | ENDIF.
79 |
80 | CREATE OBJECT mo_event_caller.
81 | ENDMETHOD.
82 |
83 |
84 | METHOD zif_eui_manager~pai.
85 | DATA lr_close LIKE REF TO cv_close.
86 |
87 | CASE iv_command.
88 | WHEN mc_cmd-ok OR mc_cmd-return.
89 | cv_close = abap_true.
90 |
91 | WHEN mc_cmd-cancel.
92 | cv_close = abap_true.
93 | IF mv_read_only <> abap_true.
94 | MESSAGE 'The action was cancelled'(opc) TYPE 'S' DISPLAY LIKE 'W'.
95 | ENDIF.
96 | ENDCASE.
97 |
98 | " No need
99 | IF mo_event_caller IS NOT INITIAL.
100 | GET REFERENCE OF cv_close INTO lr_close.
101 | mo_event_caller->call_handlers(
102 | iv_of_class = 'ZIF_EUI_MANAGER'
103 | iv_for_event = 'PAI_EVENT'
104 | iv_param_nam_00 = 'SENDER' iv_param_val_00 = me
105 | iv_param_nam_01 = 'IV_COMMAND' iv_param_val_01 = iv_command
106 | iv_param_nam_02 = 'CV_CLOSE' iv_param_val_02 = lr_close ).
107 | ENDIF.
108 |
109 | IF cv_close = abap_true.
110 | mv_close_cmd = iv_command.
111 | ENDIF.
112 | ENDMETHOD.
113 |
114 |
115 | METHOD zif_eui_manager~pbo.
116 | " No need to update
117 | IF ms_status-is_fixed <> abap_true AND iv_set_status = abap_true.
118 | CLEAR ms_status.
119 | ENDIF.
120 |
121 | IF mo_event_caller IS NOT INITIAL.
122 | mo_event_caller->call_handlers(
123 | iv_of_class = 'ZIF_EUI_MANAGER'
124 | iv_for_event = 'PBO_EVENT'
125 | iv_param_nam_00 = 'SENDER' iv_param_val_00 = me
126 | iv_param_nam_01 = 'IO_CONTAINER' iv_param_val_01 = io_container ).
127 | ENDIF.
128 |
129 | **********************************************************************
130 | " Set PF-STATUS
131 | IF ms_status-name IS INITIAL AND ms_status-prog IS INITIAL.
132 | ms_status-prog = mc_eui_screen_fugr.
133 |
134 | IF ms_popup-col_beg IS INITIAL.
135 | " Full screen
136 | ms_status-name = 'OK_CANCEL_FULL_SCR'.
137 | ELSE.
138 | " Popup
139 | ms_status-name = 'OK_CANCEL_POPUP'.
140 | ENDIF.
141 | ENDIF.
142 |
143 | " Edit or read only
144 | IF ms_status-prog = mc_eui_screen_fugr.
145 | CASE ms_status-name.
146 | WHEN 'OK_CANCEL_POPUP'.
147 | IF mv_read_only = abap_true.
148 | APPEND mc_cmd-ok TO ms_status-exclude.
149 | ENDIF.
150 |
151 | WHEN 'OK_CANCEL_FULL_SCR'.
152 | IF mv_read_only = abap_true.
153 | APPEND mc_cmd-ok TO ms_status-exclude.
154 | ELSE.
155 | APPEND mc_cmd-return TO ms_status-exclude.
156 | ENDIF.
157 | ENDCASE.
158 | ENDIF.
159 |
160 | " Just for speed
161 | SORT ms_status-exclude.
162 | DELETE ADJACENT DUPLICATES FROM ms_status-exclude.
163 |
164 | " And set
165 | CHECK iv_set_status = abap_true.
166 | SET PF-STATUS ms_status-name EXCLUDING ms_status-exclude OF PROGRAM ms_status-prog.
167 |
168 | " Set title bar
169 | IF ms_status-title IS INITIAL.
170 | SELECT SINGLE text INTO ms_status-title
171 | FROM trdirt
172 | WHERE name = sy-cprog
173 | AND sprsl = sy-langu.
174 | ENDIF.
175 |
176 | CHECK ms_status-title IS NOT INITIAL.
177 | SET TITLEBAR 'TITLE_100' OF PROGRAM mc_eui_screen_fugr WITH ms_status-title.
178 | ENDMETHOD.
179 |
180 |
181 | METHOD zif_eui_manager~popup.
182 | DATA ls_popup LIKE ms_popup.
183 |
184 | ls_popup-col_beg = iv_col_beg.
185 | ls_popup-col_end = iv_col_end.
186 | ls_popup-row_beg = iv_row_beg.
187 | ls_popup-row_end = iv_row_end.
188 | ls_popup-no_shift = iv_no_shift.
189 |
190 | IF ls_popup-col_beg IS INITIAL.
191 | ls_popup-col_beg = 1.
192 | ENDIF.
193 |
194 | IF ls_popup-col_end IS INITIAL.
195 | ls_popup-col_end = 150. "#EC NUMBER_OK
196 | ENDIF.
197 |
198 | IF ls_popup-row_beg IS INITIAL.
199 | ls_popup-row_beg = 1.
200 | ENDIF.
201 |
202 | IF ls_popup-row_end IS INITIAL.
203 | ls_popup-row_end = 30. "#EC NUMBER_OK
204 | ENDIF.
205 |
206 | " And set
207 | ms_popup = ls_popup.
208 |
209 | " For chains
210 | ro_manager = me.
211 | ENDMETHOD.
212 |
213 |
214 | METHOD zif_eui_manager~set_status.
215 | ms_status = is_status.
216 | IF ms_status IS NOT INITIAL.
217 | ms_status-is_fixed = abap_true.
218 | ENDIF.
219 |
220 | ro_manager = me.
221 | ENDMETHOD.
222 |
223 |
224 | METHOD zif_eui_manager~show.
225 | add_handler( io_handler = io_handler
226 | iv_handlers_map = iv_handlers_map ).
227 |
228 | " Just call nect screen
229 | CALL FUNCTION 'ZFM_EUI_NEXT_SCREEN'
230 | EXPORTING
231 | io_scr_manager = me
232 | * iv_read_only = me->mv_read_only
233 | .
234 |
235 | " return as a result
236 | rv_close_cmd = mv_close_cmd.
237 | ENDMETHOD.
238 | ENDCLASS.
239 |
--------------------------------------------------------------------------------
/src/zcl_eui_event_caller.clas.abap:
--------------------------------------------------------------------------------
1 | class ZCL_EUI_EVENT_CALLER definition
2 | public
3 | final
4 | create public .
5 |
6 | public section.
7 | type-pools ABAP .
8 |
9 | methods ADD_HANDLER
10 | importing
11 | !IO_HANDLER type ref to OBJECT
12 | !IV_HANDLERS_MAP type CSEQUENCE optional
13 | !IV_FIRST type ABAP_BOOL default ABAP_FALSE
14 | !IV_ACTIVATE type ABAP_BOOL default ABAP_TRUE
15 | raising
16 | ZCX_EUI_EXCEPTION .
17 | methods CALL_HANDLERS
18 | importing
19 | !IV_OF_CLASS type ABAP_CLASSNAME
20 | !IV_FOR_EVENT type ABAP_EVNTNAME
21 | !IV_PARAM_NAM_00 type CSEQUENCE optional
22 | !IV_PARAM_VAL_00 type ANY optional
23 | !IV_PARAM_NAM_01 type CSEQUENCE optional
24 | !IV_PARAM_VAL_01 type ANY optional
25 | !IV_PARAM_NAM_02 type CSEQUENCE optional
26 | !IV_PARAM_VAL_02 type ANY optional
27 | !IV_PARAM_NAM_03 type CSEQUENCE optional
28 | !IV_PARAM_VAL_03 type ANY optional
29 | !IV_PARAM_NAM_04 type CSEQUENCE optional
30 | !IV_PARAM_VAL_04 type ANY optional
31 | !IV_PARAM_NAM_05 type CSEQUENCE optional
32 | !IV_PARAM_VAL_05 type ANY optional
33 | !IV_PARAM_NAM_06 type CSEQUENCE optional
34 | !IV_PARAM_VAL_06 type ANY optional
35 | !IV_PARAM_NAM_07 type CSEQUENCE optional
36 | !IV_PARAM_VAL_07 type ANY optional
37 | !IV_PARAM_NAM_08 type CSEQUENCE optional
38 | !IV_PARAM_VAL_08 type ANY optional
39 | !IV_PARAM_NAM_09 type CSEQUENCE optional
40 | !IV_PARAM_VAL_09 type ANY optional
41 | !IV_PARAM_NAM_10 type CSEQUENCE optional
42 | !IV_PARAM_VAL_10 type ANY optional
43 | !IV_PARAM_NAM_11 type CSEQUENCE optional
44 | !IV_PARAM_VAL_11 type ANY optional
45 | !IV_PARAM_NAM_12 type CSEQUENCE optional
46 | !IV_PARAM_VAL_12 type ANY optional
47 | !IV_PARAM_NAM_13 type CSEQUENCE optional
48 | !IV_PARAM_VAL_13 type ANY optional
49 | !IV_PARAM_NAM_14 type CSEQUENCE optional
50 | !IV_PARAM_VAL_14 type ANY optional .
51 | methods HAS_HANDLER
52 | importing
53 | !IV_OF_CLASS type ABAP_CLASSNAME
54 | !IV_FOR_EVENT type ABAP_EVNTNAME
55 | returning
56 | value(RV_OK) type ABAP_BOOL .
57 | protected section.
58 | private section.
59 |
60 | types:
61 | BEGIN OF TS_LISTENER,
62 | listener type ref to object,
63 | t_methdescr type abap_methdescr_tab,
64 | t_friend type abap_frndtypes_tab,
65 | END OF TS_LISTENER .
66 | types:
67 | TT_LISTENER type STANDARD TABLE OF TS_LISTENER WITH DEFAULT KEY .
68 |
69 | data MT_LISTENER type TT_LISTENER .
70 | ENDCLASS.
71 |
72 |
73 |
74 | CLASS ZCL_EUI_EVENT_CALLER IMPLEMENTATION.
75 |
76 |
77 | METHOD add_handler.
78 | DATA:
79 | lt_event TYPE STANDARD TABLE OF abap_methname,
80 | lo_object_descr TYPE REF TO cl_abap_classdescr,
81 | lv_tabix TYPE sytabix,
82 | ls_method TYPE REF TO abap_methdescr,
83 | ls_item LIKE LINE OF mt_listener.
84 | FIELD-SYMBOLS:
85 | LIKE LINE OF lt_event.
86 |
87 | " No need to call anything
88 | CHECK io_handler IS NOT INITIAL.
89 |
90 | " Deactivate
91 | IF iv_activate <> abap_true.
92 | DELETE mt_listener WHERE listener = io_handler.
93 | RETURN.
94 | ENDIF.
95 |
96 | " Already exist ?
97 | READ TABLE mt_listener TRANSPORTING NO FIELDS
98 | WITH KEY listener = io_handler.
99 | CHECK sy-subrc <> 0.
100 |
101 | " Call public methods of ...
102 | ls_item-listener = io_handler.
103 |
104 | " Get all handler methods
105 | lo_object_descr ?= cl_abap_objectdescr=>describe_by_object_ref( ls_item-listener ).
106 | ls_item-t_methdescr = lo_object_descr->methods.
107 | ls_item-t_friend = lo_object_descr->get_friend_types( ).
108 | DELETE ls_item-t_methdescr WHERE for_event IS INITIAL.
109 |
110 | " Exact only specefic methods
111 | IF iv_handlers_map IS NOT INITIAL.
112 | SPLIT iv_handlers_map AT ';' INTO TABLE lt_event.
113 |
114 | " Check declared or not
115 | LOOP AT lt_event ASSIGNING .
116 | READ TABLE ls_item-t_methdescr TRANSPORTING NO FIELDS
117 | WITH TABLE KEY name = .
118 | CHECK sy-subrc <> 0.
119 |
120 | MESSAGE s007(zeui_message) WITH INTO sy-msgli.
121 | zcx_eui_exception=>raise_sys_error( ).
122 | ENDLOOP.
123 |
124 | " Could be many similar EVENT handlers
125 | SORT lt_event BY table_line.
126 | LOOP AT ls_item-t_methdescr REFERENCE INTO ls_method.
127 | lv_tabix = sy-tabix.
128 |
129 | " Delete unnecessary
130 | READ TABLE lt_event TRANSPORTING NO FIELDS BINARY SEARCH
131 | WITH KEY table_line = ls_method->name.
132 | CHECK sy-subrc <> 0.
133 |
134 | DELETE ls_item-t_methdescr INDEX lv_tabix.
135 | ENDLOOP.
136 | ENDIF.
137 |
138 | " More proiority
139 | IF iv_first = abap_true.
140 | INSERT ls_item INTO mt_listener INDEX 1.
141 | ELSE.
142 | APPEND ls_item TO mt_listener.
143 | ENDIF.
144 | ENDMETHOD.
145 |
146 |
147 | METHOD call_handlers.
148 | DATA:
149 | lt_param_input TYPE abap_parmbind_tab,
150 | lt_param_call LIKE lt_param_input,
151 | ls_param TYPE abap_parmbind,
152 | lo_error TYPE REF TO cx_sy_dyn_call_error,
153 | lv_is_friend TYPE abap_bool.
154 | FIELD-SYMBOLS:
155 | LIKE LINE OF lt_param_input,
156 | TYPE abap_methdescr,
157 | LIKE LINE OF -parameters,
158 | LIKE LINE OF mt_listener.
159 |
160 |
161 | **********************************************************************
162 | DATA lv_index TYPE numc2.
163 | DATA lv_name TYPE string.
164 | FIELD-SYMBOLS TYPE csequence.
165 | FIELD-SYMBOLS TYPE any.
166 |
167 | DO 15 TIMES. "#EC NUMBER_OK
168 | " get next parameter
169 | lv_index = sy-index - 1.
170 | CONCATENATE 'IV_PARAM_NAM_' lv_index INTO lv_name.
171 | ASSIGN (lv_name) TO .
172 |
173 | " Stop no params
174 | IF IS INITIAL.
175 | EXIT.
176 | ENDIF.
177 |
178 | CONCATENATE 'IV_PARAM_VAL_' lv_index INTO lv_name.
179 | ASSIGN (lv_name) TO .
180 |
181 | ls_param-name = .
182 | ls_param-kind = cl_abap_objectdescr=>exporting.
183 | GET REFERENCE OF INTO ls_param-value.
184 |
185 | INSERT ls_param INTO TABLE lt_param_input.
186 | ENDDO.
187 | **********************************************************************
188 |
189 | LOOP AT mt_listener ASSIGNING .
190 | " Public or friend
191 | lv_is_friend = abap_false.
192 | READ TABLE -t_friend TRANSPORTING NO FIELDS
193 | WITH KEY table_line->absolute_name = '\CLASS=ZCL_EUI_EVENT_CALLER'.
194 | IF sy-subrc = 0.
195 | lv_is_friend = abap_true.
196 | ENDIF.
197 |
198 | LOOP AT -t_methdescr ASSIGNING
199 | WHERE of_class = iv_of_class
200 | AND for_event = iv_for_event.
201 |
202 | " Make method public!
203 | IF -visibility <> cl_abap_objectdescr=>public AND lv_is_friend <> abap_true.
204 | DATA lv_message TYPE c LENGTH 255.
205 | MESSAGE s008(zeui_message) WITH -name INTO lv_message.
206 | zcx_eui_exception=>raise_dump( iv_message = lv_message ).
207 | ENDIF.
208 |
209 | " Fill each time
210 | CLEAR lt_param_call.
211 | LOOP AT -parameters ASSIGNING .
212 | " If have decalaration in method
213 | READ TABLE lt_param_input ASSIGNING
214 | WITH TABLE KEY name = -name.
215 | CHECK sy-subrc = 0.
216 |
217 | INSERT INTO TABLE lt_param_call.
218 | ENDLOOP.
219 |
220 | TRY.
221 | CALL METHOD -listener->(-name)
222 | PARAMETER-TABLE
223 | lt_param_call.
224 | CATCH cx_sy_dyn_call_error INTO lo_error.
225 | zcx_eui_exception=>raise_dump( io_error = lo_error ).
226 | ENDTRY.
227 | ENDLOOP.
228 | ENDLOOP.
229 | ENDMETHOD.
230 |
231 |
232 | METHOD has_handler.
233 | FIELD-SYMBOLS LIKE LINE OF mt_listener.
234 |
235 | rv_ok = abap_false.
236 | LOOP AT mt_listener ASSIGNING .
237 | READ TABLE -t_methdescr TRANSPORTING NO FIELDS
238 | WITH KEY of_class = iv_of_class
239 | for_event = iv_for_event.
240 |
241 | " Use the method for express test
242 | CHECK sy-subrc = 0.
243 | rv_ok = abap_true.
244 | RETURN.
245 | ENDLOOP.
246 | ENDMETHOD.
247 | ENDCLASS.
248 |
--------------------------------------------------------------------------------
/src/zcl_eui_alv.clas.abap:
--------------------------------------------------------------------------------
1 | class ZCL_EUI_ALV definition
2 | public
3 | inheriting from ZCL_EUI_MSG_MANAGER
4 | final
5 | create public
6 |
7 | global friends ZCL_EUI_ALV_FILTER .
8 |
9 | public section.
10 | type-pools ABAP .
11 |
12 | types:
13 | BEGIN OF ts_f4_table,
14 | field TYPE string,
15 | tab TYPE REF TO data,
16 | END OF ts_f4_table .
17 | types:
18 | tt_f4_table TYPE SORTED TABLE OF ts_f4_table WITH UNIQUE KEY field .
19 |
20 | methods CONSTRUCTOR
21 | importing
22 | !IR_TABLE type ref to DATA
23 | !IT_TOOLBAR type TTB_BUTTON optional
24 | !IT_MOD_CATALOG type LVC_T_FCAT optional
25 | !IS_LAYOUT type LVC_S_LAYO optional
26 | !IS_VARIANT type DISVARIANT optional
27 | !IT_FILTER type LVC_T_FILT optional
28 | !IT_SORT type LVC_T_SORT optional .
29 | methods GET_GRID
30 | returning
31 | value(RO_GRID) type ref to CL_GUI_ALV_GRID .
32 | methods SET_FIELD_DESC
33 | importing
34 | !IS_FIELD_DESC type ref to ZCL_EUI_TYPE=>TS_FIELD_DESC .
35 | methods SET_F4_TABLE
36 | importing
37 | !IT_F4_TABLE type TT_F4_TABLE .
38 | methods SET_TOP_OF_PAGE_HEIGHT
39 | importing
40 | !IV_TOP_OF_PAGE_HEIGHT type I default 12 "#EC NUMBER_OK
41 | returning
42 | value(RO_ALV) type ref to ZCL_EUI_ALV .
43 | methods ADD_BUTTON
44 | importing
45 | !IS_BUTTON type STB_BUTTON
46 | !IO_HANDLER type ref to OBJECT optional
47 | !IV_HANDLERS_MAP type CSEQUENCE optional .
48 | class-methods UPDATE_COMPLEX_FIELDS
49 | importing
50 | !IR_TABLE type ref to DATA
51 | !IT_SUB_FIELD type ZCL_EUI_TYPE=>TT_FIELD_DESC optional
52 | !IS_SUB_FIELD type ZCL_EUI_TYPE=>TS_FIELD_DESC optional .
53 |
54 | methods ZIF_EUI_MANAGER~PAI
55 | redefinition .
56 | methods ZIF_EUI_MANAGER~PBO
57 | redefinition .
58 | protected section.
59 | private section.
60 |
61 | data MO_GRID type ref to CL_GUI_ALV_GRID .
62 | data MR_TABLE type ref to DATA .
63 | data MT_TOOLBAR type TTB_BUTTON .
64 | data MT_MOD_CATALOG type LVC_T_FCAT .
65 | data MS_LAYOUT type LVC_S_LAYO .
66 | data MS_VARIANT type DISVARIANT .
67 | data MT_FILTER type LVC_T_FILT .
68 | data MT_SORT type LVC_T_SORT .
69 | data MO_HELPER type ref to LCL_HELPER .
70 | ENDCLASS.
71 |
72 |
73 |
74 | CLASS ZCL_EUI_ALV IMPLEMENTATION.
75 |
76 |
77 | METHOD add_button.
78 | APPEND is_button TO mt_toolbar.
79 |
80 | CHECK io_handler IS NOT INITIAL.
81 | DATA lo_error TYPE REF TO zcx_eui_exception.
82 | TRY.
83 | mo_event_caller->add_handler(
84 | io_handler = io_handler
85 | iv_handlers_map = iv_handlers_map
86 | iv_first = abap_true ).
87 | CATCH zcx_eui_exception INTO lo_error.
88 | MESSAGE lo_error TYPE 'S' DISPLAY LIKE 'E'.
89 | ENDTRY.
90 | ENDMETHOD.
91 |
92 |
93 | METHOD constructor.
94 | super->constructor( iv_editable = is_layout-edit ).
95 |
96 | mr_table = ir_table.
97 | mt_toolbar = it_toolbar.
98 | mt_mod_catalog = it_mod_catalog.
99 | ms_layout = is_layout.
100 | ms_variant = is_variant.
101 | mt_filter = it_filter.
102 | mt_sort = it_sort.
103 |
104 | CREATE OBJECT mo_helper
105 | EXPORTING
106 | io_eui_alv = me.
107 |
108 | CHECK mo_helper->is_editable( ) = abap_true.
109 | mv_read_only = abap_false.
110 | ENDMETHOD.
111 |
112 |
113 | METHOD get_grid.
114 | ro_grid = mo_grid.
115 | ENDMETHOD.
116 |
117 |
118 | METHOD set_f4_table.
119 | mo_helper->mt_f4_table = it_f4_table.
120 | ENDMETHOD.
121 |
122 |
123 | METHOD set_field_desc.
124 | mo_helper->set_field_desc( is_field_desc ).
125 | ENDMETHOD.
126 |
127 |
128 | METHOD set_top_of_page_height.
129 | ro_alv = me.
130 | mo_helper->mv_top_of_page_height = iv_top_of_page_height.
131 | ENDMETHOD.
132 |
133 |
134 | METHOD update_complex_fields.
135 | DATA:
136 | lt_sub_field LIKE it_sub_field,
137 | ls_sub_field TYPE REF TO zcl_eui_type=>ts_field_desc,
138 | lv_fld_name TYPE string,
139 | lv_beg_txt TYPE string,
140 | lv_end_txt TYPE string,
141 | BEGIN OF ls_range,
142 | sign TYPE char1,
143 | option TYPE char2,
144 | low TYPE text255,
145 | high TYPE text255,
146 | END OF ls_range.
147 | FIELD-SYMBOLS:
148 | TYPE STANDARD TABLE,
149 | TYPE any,
150 | TYPE string,
151 | TYPE ANY TABLE,
152 | TYPE any,
153 | TYPE any.
154 |
155 | " Create standard table for alv editing
156 | ASSIGN ir_table->* TO .
157 |
158 | " Show info about sub field
159 | LOOP AT it_sub_field REFERENCE INTO ls_sub_field
160 | WHERE ui_type = zcl_eui_type=>mc_ui_type-table
161 | OR ui_type = zcl_eui_type=>mc_ui_type-range. "#EC CI_HASHSEQ
162 | INSERT ls_sub_field->* INTO TABLE lt_sub_field.
163 | ENDLOOP.
164 |
165 | IF is_sub_field IS NOT INITIAL.
166 | INSERT is_sub_field INTO TABLE lt_sub_field.
167 | ENDIF.
168 |
169 | " No need
170 | CHECK lt_sub_field IS NOT INITIAL.
171 |
172 | " Update each row
173 | LOOP AT ASSIGNING .
174 | LOOP AT lt_sub_field REFERENCE INTO ls_sub_field.
175 | " Source table
176 | ASSIGN COMPONENT ls_sub_field->name OF STRUCTURE TO .
177 |
178 | " Destination string
179 | CONCATENATE ls_sub_field->name `_UI` INTO lv_fld_name.
180 | ASSIGN COMPONENT lv_fld_name OF STRUCTURE TO .
181 |
182 | " No text
183 | CLEAR .
184 |
185 | CASE ls_sub_field->ui_type.
186 | " Show count
187 | WHEN zcl_eui_type=>mc_ui_type-table.
188 | IF [] IS NOT INITIAL.
189 | = lines( ).
190 | CONCATENATE 'Count'(cnt) INTO SEPARATED BY space.
191 | ENDIF.
192 |
193 | " Show all values in range
194 | WHEN zcl_eui_type=>mc_ui_type-range.
195 | LOOP AT ASSIGNING .
196 | MOVE-CORRESPONDING TO ls_range.
197 |
198 | DATA: lv_option TYPE string,
199 | lv_beg TYPE string,
200 | lv_end TYPE string.
201 | lv_beg = lv_end = ``.
202 |
203 | " Do not show HIGH
204 | ASSIGN COMPONENT 'HIGH' OF STRUCTURE TO .
205 | IF IS INITIAL.
206 | CLEAR lv_end_txt.
207 | ELSE.
208 | CONCATENATE `-` ls_range-high INTO lv_end_txt.
209 | lv_beg = `{`.
210 | lv_end = `}`.
211 | ENDIF.
212 |
213 | IF ls_range-sign <> 'I'.
214 | lv_beg = `}`.
215 | lv_end = `{`.
216 | ENDIF.
217 |
218 | CASE ls_range-option.
219 | WHEN 'EQ'. lv_option = `=`.
220 | WHEN 'NE'. lv_option = `≠`.
221 | WHEN 'GT'. lv_option = `>`.
222 | WHEN 'LT'. lv_option = `<`.
223 | WHEN 'GE'. lv_option = `≥`.
224 | WHEN 'LE'. lv_option = `≤`.
225 | WHEN 'CP'. lv_option = ``.
226 | WHEN 'NP'. lv_option = `≠`.
227 | WHEN 'BT'. lv_option = ``.
228 | WHEN OTHERS.
229 | ASSERT 1 = 2.
230 | ENDCASE.
231 |
232 | CONCATENATE `,` lv_beg
233 | lv_option
234 | ls_range-low
235 | lv_end_txt lv_end INTO .
236 | ENDLOOP.
237 |
238 | " Delete first `,`
239 | IF sy-subrc = 0.
240 | = +1.
241 | ENDIF.
242 |
243 | ENDCASE.
244 | ENDLOOP.
245 | ENDLOOP.
246 | ENDMETHOD.
247 |
248 |
249 | METHOD zif_eui_manager~pai.
250 | " Write data back
251 | mo_grid->check_changed_data( ).
252 |
253 | super->pai(
254 | EXPORTING
255 | iv_command = iv_command
256 | CHANGING
257 | cv_close = cv_close ).
258 |
259 | CHECK cv_close = abap_true.
260 | mo_helper->after_close(
261 | EXPORTING
262 | iv_close_cmd = mv_close_cmd
263 | CHANGING
264 | cv_close = cv_close ).
265 | ENDMETHOD.
266 |
267 |
268 | METHOD zif_eui_manager~pbo.
269 | " Initialize 1 time
270 | IF io_container IS NOT INITIAL.
271 | mo_helper->pbo_init(
272 | io_container = io_container ).
273 | ENDIF.
274 |
275 | super->pbo(
276 | io_container = io_container
277 | iv_set_status = iv_set_status ).
278 | ENDMETHOD.
279 | ENDCLASS.
280 |
--------------------------------------------------------------------------------
/src/demo/zcl_eui_test_screen_02.clas.abap:
--------------------------------------------------------------------------------
1 | class ZCL_EUI_TEST_SCREEN_02 definition
2 | public
3 | final
4 | create public .
5 |
6 | public section.
7 | type-pools ABAP .
8 |
9 | class-methods SHOW_INITIAL_SCREEN .
10 | methods ON_START_PAI
11 | for event PAI_EVENT of ZIF_EUI_MANAGER
12 | importing
13 | !SENDER
14 | !IV_COMMAND
15 | !CV_CLOSE .
16 | protected section.
17 | private section.
18 | ENDCLASS.
19 |
20 |
21 |
22 | CLASS ZCL_EUI_TEST_SCREEN_02 IMPLEMENTATION.
23 |
24 |
25 | METHOD on_start_pai.
26 | DATA:
27 | lo_screen TYPE REF TO zcl_eui_screen,
28 | lr_context TYPE REF TO DATA.
29 | FIELD-SYMBOLS:
30 | TYPE any. " in real app use global -> TS_CONTEXT_MAIN
31 |
32 | " No data check. just close screen
33 | CHECK iv_command CP 'CMD_*'.
34 |
35 | " Get access to screen data
36 | lo_screen ?= sender.
37 | lr_context = lo_screen->get_context( ).
38 | ASSIGN lr_context->* TO .
39 |
40 | " For demo only
41 | IF IS INITIAL.
42 | MESSAGE 'Set at least one checkbox' TYPE 'S' DISPLAY LIKE 'E'.
43 | RETURN.
44 | ENDIF.
45 |
46 | cv_close->* = abap_true.
47 | ENDMETHOD.
48 |
49 |
50 | METHOD show_initial_screen.
51 | CONSTANTS
52 | c_cprog TYPE sycprog VALUE 'ZEUI_TEST_SCREEN_02'.
53 |
54 | TYPES:
55 | **********************************************************************
56 | " Screen declarations
57 | **********************************************************************
58 |
59 | " Start screen
60 | BEGIN OF ts_context_main,
61 | v_make_gray TYPE os_boolean,
62 | v_make_required TYPE os_boolean,
63 | v_make_lsitbox TYPE os_boolean,
64 | END OF ts_context_main,
65 |
66 | " Tested screen context
67 | BEGIN OF ts_context,
68 | " Check it after screen close
69 | p_bukrs TYPE bukrs,
70 |
71 | " listbox by domain
72 | p_bdc_m TYPE ettcd_mode,
73 |
74 | " listbox in runtime
75 | " FREE_SEL sometimes do not like T001-MANDT
76 | " Change type for SH
77 | p_mandt TYPE char3,
78 |
79 | " Checkbox
80 | p_check TYPE os_boolean,
81 |
82 | " Range <-- cl_ci_query_attributes no SH
83 | s_user TYPE offline_log_user_itab,
84 |
85 | " Make it GRAY
86 | p_land1 TYPE t005t-land1,
87 |
88 | " do not use types like I! use from dictionary
89 | p_fld_i TYPE syindex,
90 | p_fld_i2 TYPE sytabix,
91 |
92 | " String & tables also Ok
93 | p_memo TYPE stringval,
94 | t_table TYPE STANDARD TABLE OF t005t WITH DEFAULT KEY,
95 | END OF ts_context,
96 |
97 | " For listbox
98 | BEGIN OF ts_t000,
99 | mandt TYPE t000-mandt,
100 | mtext TYPE t000-mtext,
101 | END OF ts_t000.
102 |
103 | **********************************************************************
104 | **********************************************************************
105 | DATA lo_screen_main TYPE REF TO zcl_eui_screen.
106 | DATA lr_context_main TYPE REF TO ts_context_main.
107 | DATA lo_handler TYPE REF TO zcl_eui_test_screen_02.
108 | DATA lv_cmd TYPE syucomm.
109 | DATA lo_error TYPE REF TO zcx_eui_exception.
110 | " Checked screen
111 | DATA lo_screen TYPE REF TO zcl_eui_screen.
112 | DATA ls_context TYPE REF TO ts_context.
113 | DATA lt_scr TYPE zcl_eui_screen=>tt_screen.
114 | DATA ls_scr TYPE REF TO screen.
115 | DATA ls_user LIKE LINE OF ls_context->s_user.
116 | DATA lv_message TYPE string.
117 | DATA lv_dynnr TYPE sydynnr.
118 | DATA lv_prog TYPE sycprog.
119 | DATA lt_t000 TYPE STANDARD TABLE OF ts_t000 WITH DEFAULT KEY.
120 | DATA lr_t000 TYPE REF TO ts_t000.
121 | DATA lt_listbox TYPE vrm_values.
122 | DATA lr_listbox TYPE REF TO vrm_value.
123 | FIELD-SYMBOLS:
124 | TYPE string.
125 |
126 | " Pass data to main screen
127 | CREATE DATA lr_context_main.
128 | " all checked
129 | lr_context_main->v_make_gray =
130 | lr_context_main->v_make_required =
131 | lr_context_main->v_make_lsitbox = abap_true.
132 |
133 | " Event handler
134 | CREATE OBJECT lo_handler.
135 |
136 | " Endless loop
137 | WHILE 1 EQ 1.
138 | TRY.
139 | " Pass params
140 | CREATE OBJECT lo_screen_main
141 | EXPORTING
142 | iv_dynnr = zcl_eui_screen=>mc_dynnr-free_sel
143 | ir_context = lr_context_main.
144 |
145 | DATA ls_status TYPE zcl_eui_manager=>ts_status.
146 | ls_status-prog = c_cprog.
147 | ls_status-name = 'START_STATUS'.
148 | ls_status-title = 'Start screen'.
149 | lo_screen_main->set_status( ls_status ).
150 | CATCH zcx_eui_exception INTO lo_error.
151 | MESSAGE lo_error TYPE 'S' DISPLAY LIKE 'E'.
152 | RETURN.
153 | ENDTRY.
154 |
155 | " Prepare for PBO
156 | lo_screen_main->customize( name = 'V_MAKE_GRAY'
157 | iv_label = 'Make gray' ).
158 | lo_screen_main->customize( name = 'V_MAKE_REQUIRED'
159 | iv_label = 'Make required' ).
160 | lo_screen_main->customize( name = 'V_MAKE_LSITBOX'
161 | iv_label = 'Fill listbox' ).
162 |
163 |
164 | " Next screen interation
165 | lv_cmd = lo_screen_main->show(
166 | io_handler = lo_handler
167 | " For demo purpose
168 | iv_handlers_map = 'ON_START_PAI' ). " <- Optional (by default call all handlers)
169 |
170 | " Pressed cancel
171 | IF lv_cmd NP 'CMD_*'.
172 | RETURN. " Cancel pressed
173 | ENDIF.
174 |
175 | **********************************************************************
176 | " Fill context
177 | CREATE DATA ls_context.
178 | ls_context->p_bukrs = '1000'.
179 | ls_context->p_bdc_m = 'A'.
180 | ls_context->p_mandt = sy-mandt.
181 | ls_context->p_check = abap_true.
182 |
183 | " Dfault value for SELECT-OPTION
184 | ls_user-sign = 'I'.
185 | ls_user-option = 'CP'.
186 | ls_user-low = 'BC*'.
187 | APPEND ls_user TO ls_context->s_user.
188 |
189 | CASE lv_cmd.
190 | WHEN 'CMD_01'.
191 | " Just use declaration in another app
192 | lv_dynnr = 1020. "#EC NUMBER_OK
193 | lv_prog = c_cprog.
194 |
195 | WHEN 'CMD_02'.
196 | " @see SE37 -> FREE_SELECTIONS_DIALOG
197 | lv_dynnr = zcl_eui_screen=>mc_dynnr-free_sel.
198 |
199 | WHEN 'CMD_03'.
200 | lv_dynnr = zcl_eui_screen=>mc_dynnr-dynamic.
201 | lv_prog = c_cprog.
202 | ENDCASE.
203 |
204 | TRY.
205 | " Pass params
206 | CREATE OBJECT lo_screen
207 | EXPORTING
208 | iv_dynnr = lv_dynnr
209 | iv_cprog = lv_prog
210 | ir_context = ls_context. " <--- Set initial values
211 | " title is fixed
212 | lo_screen->ms_status-is_fixed = abap_true.
213 | lo_screen->ms_status-title = 'Test dynamic screens'.
214 | CATCH zcx_eui_exception INTO lo_error.
215 | MESSAGE lo_error TYPE 'S' DISPLAY LIKE 'E'.
216 | RETURN.
217 | ENDTRY.
218 |
219 | **********************************************************************
220 | " For pbo
221 | IF lr_context_main->v_make_required = abap_true.
222 | lo_screen->customize( name = 'P_BUKRS' required = '1' ).
223 | lo_screen->customize( name = 'S_USER' required = '1' ).
224 | lo_screen->customize( name = 'P_FLD_I' required = '1' ).
225 | ENDIF.
226 |
227 | " Check gray
228 | IF lr_context_main->v_make_gray = abap_true.
229 | lo_screen->customize( name = 'P_LAND1' input = '0' ). " <-- CMD_03!
230 | ENDIF.
231 |
232 | " Fill listbox runtime
233 | CLEAR lt_listbox.
234 | IF lr_context_main->v_make_lsitbox = abap_true.
235 | " Get all mandt
236 | CLEAR lt_t000.
237 | SELECT mandt mtext INTO TABLE lt_t000
238 | FROM t000.
239 |
240 | " Fill listbox
241 | LOOP AT lt_t000 REFERENCE INTO lr_t000.
242 | APPEND INITIAL LINE TO lt_listbox REFERENCE INTO lr_listbox.
243 | lr_listbox->key = lr_t000->mandt.
244 | lr_listbox->text = lr_t000->mtext.
245 | ENDLOOP.
246 | ENDIF.
247 |
248 | " Set listbox
249 | lo_screen->customize( name = 'P_MANDT' required = '1'
250 | iv_label = 'Client number (mandt)'
251 | it_listbox = lt_listbox ).
252 |
253 | lo_screen->customize( name = 'P_CHECK' iv_label = 'Checkbox' ).
254 | lo_screen->customize( name = 'P_BDC_M' iv_label = 'BDC mode' ).
255 |
256 | " As popup
257 | DATA lv_col_end TYPE i.
258 | lo_screen->get_dimension( IMPORTING ev_col_end = lv_col_end ).
259 | lo_screen->popup( iv_col_end = lv_col_end ).
260 |
261 | " If pressed OK
262 | CHECK lo_screen->show( ) = 'OK'.
263 | CONCATENATE `Bukrs value = ` ls_context->p_bukrs INTO lv_message.
264 | MESSAGE lv_message TYPE 'I'.
265 | ENDWHILE.
266 | ENDMETHOD.
267 | ENDCLASS.
268 |
--------------------------------------------------------------------------------
/src/zcl_eui_file_io.clas.locals_imp.abap:
--------------------------------------------------------------------------------
1 | *"* use this source file for the definition and implementation of
2 | *"* local helper classes, interface definitions and type
3 | *"* declarations
4 |
5 | CLASS lcl_helper IMPLEMENTATION.
6 | METHOD fill_mapping.
7 | DATA:
8 | lt_fieldcat LIKE et_fieldcat,
9 | ls_excel_map TYPE zcl_eui_file_io=>ts_excel_map.
10 | FIELD-SYMBOLS:
11 | TYPE zcl_eui_file_io=>tt_excel_map,
12 | TYPE zcl_eui_file_io=>ts_excel_map,
13 | TYPE lvc_s_fcat.
14 | IF ir_table IS INITIAL. " zcx_eui_no_check=>raise_sys_error ?
15 | zcx_eui_exception=>raise_dump( iv_message = `Pass 'IR_TABLE' parameter to ZCL_EUI_FILE_IO` ).
16 | ENDIF.
17 |
18 | " Use exiting
19 | IF ir_excel_map IS NOT INITIAL.
20 | er_excel_map = ir_excel_map.
21 | ELSE.
22 | " New mapping
23 | CREATE DATA er_excel_map.
24 | ENDIF.
25 |
26 | " Main mapping
27 | ASSIGN er_excel_map->* TO .
28 |
29 | " Detect fm for conversion exit
30 | lt_fieldcat = zcl_eui_type=>get_catalog( ir_table = ir_table ).
31 | CLEAR et_fieldcat.
32 |
33 | " No mapping
34 | IF IS INITIAL.
35 | LOOP AT lt_fieldcat ASSIGNING .
36 | ls_excel_map-field = -fieldname.
37 | ls_excel_map-column_index = sy-tabix.
38 | APPEND ls_excel_map TO .
39 | ENDLOOP.
40 | ENDIF.
41 |
42 | " Fill fm & gen type
43 | SORT lt_fieldcat BY fieldname.
44 | LOOP AT ASSIGNING .
45 | " If not in catalog skip it
46 | READ TABLE lt_fieldcat ASSIGNING BINARY SEARCH
47 | WITH KEY fieldname = -field.
48 | IF sy-subrc <> 0.
49 | -gen_type = mc_gen_type-skip.
50 | CONTINUE.
51 | ENDIF.
52 |
53 | " For export to excel
54 | IF et_fieldcat IS REQUESTED.
55 | APPEND TO et_fieldcat ASSIGNING .
56 | -col_pos = sy-tabix.
57 | ENDIF.
58 |
59 | " Only if not supplied
60 | IF -column_index IS INITIAL.
61 | -column_index = zcl_eui_file_io=>column_2_int( -column_name ).
62 | ENDIF.
63 |
64 | " Detect conversion Exit
65 | -fm = -edit_mask.
66 |
67 | CASE -inttype.
68 | WHEN cl_abap_typedescr=>typekind_packed OR cl_abap_typedescr=>typekind_float OR
69 | cl_abap_typedescr=>typekind_num OR cl_abap_typedescr=>typekind_int OR
70 | cl_abap_typedescr=>typekind_int1 OR cl_abap_typedescr=>typekind_int2 OR
71 | cl_abap_typedescr=>typekind_numeric OR
72 | '/' OR " cl_abap_typedescr=>typekind_decfloat
73 | 'a' OR " cl_abap_typedescr=>typekind_decfloat16
74 | 'e'. " cl_abap_typedescr=>typekind_decfloat34
75 | -gen_type = mc_gen_type-number.
76 |
77 | WHEN cl_abap_typedescr=>typekind_date.
78 | -gen_type = mc_gen_type-date.
79 |
80 | WHEN cl_abap_typedescr=>typekind_time.
81 | -gen_type = mc_gen_type-time.
82 |
83 | WHEN cl_abap_typedescr=>typekind_table. " xstring?
84 |
85 | ENDCASE.
86 |
87 | " Get FM name
88 | IF -fm IS NOT INITIAL.
89 | REPLACE `==` IN -fm WITH ``.
90 | CONCATENATE 'CONVERSION_EXIT_' -fm '_INPUT' INTO -fm.
91 | ENDIF.
92 | ENDLOOP.
93 |
94 | " delete table fields only
95 | DELETE WHERE gen_type = lcl_helper=>mc_gen_type-skip.
96 | ENDMETHOD.
97 |
98 | METHOD export_2_table.
99 | DATA lo_event_caller TYPE REF TO zcl_eui_event_caller.
100 | DATA lv_has_handler TYPE abap_bool.
101 | DATA lv_row TYPE sy-tabix.
102 | DATA lo_error TYPE REF TO cx_root.
103 | DATA lv_error_message TYPE text255.
104 | DATA lv_message TYPE text255.
105 | DATA lv_input TYPE text1000.
106 | DATA lr_value TYPE REF TO data.
107 | DATA lr_row TYPE REF TO data.
108 |
109 | FIELD-SYMBOLS TYPE STANDARD TABLE.
110 | FIELD-SYMBOLS TYPE STANDARD TABLE.
111 | FIELD-SYMBOLS TYPE any.
112 | FIELD-SYMBOLS TYPE zcl_eui_file_io=>ts_excel_map.
113 | FIELD-SYMBOLS TYPE any.
114 | FIELD-SYMBOLS TYPE any.
115 | FIELD-SYMBOLS TYPE any.
116 |
117 | " Ref to table
118 | ASSIGN ir_source->* TO .
119 |
120 | " Have any data?
121 | IF IS INITIAL.
122 | MESSAGE s003(zeui_message) WITH io_file->mv_file_name INTO sy-msgli.
123 | zcx_eui_exception=>raise_sys_error( ).
124 | ENDIF.
125 |
126 | " If have some errors
127 | DO 1 TIMES.
128 | CHECK io_handler IS NOT INITIAL.
129 |
130 | " Send events to IO_HANDLER
131 | CREATE OBJECT lo_event_caller.
132 | lo_event_caller->add_handler( io_handler = io_handler ).
133 |
134 | " Is ok ?
135 | lv_has_handler = lo_event_caller->has_handler(
136 | iv_of_class = 'ZCL_EUI_FILE_IO'
137 | iv_for_event = 'MAPPING_ERROR' ).
138 | CHECK lv_has_handler <> abap_true.
139 |
140 | " Cannot call
141 | CLEAR lo_event_caller.
142 | ENDDO.
143 |
144 | " Add one by one
145 | ASSIGN ir_table->* TO .
146 | CLEAR .
147 |
148 | LOOP AT ASSIGNING FROM iv_row_from.
149 | lv_row = sy-tabix.
150 | " New row
151 | APPEND INITIAL LINE TO ASSIGNING .
152 |
153 | " Fill items
154 | LOOP AT ir_excel_map->* ASSIGNING .
155 | UNASSIGN:
156 | ,
157 | .
158 |
159 | ASSIGN COMPONENT:
160 | -column_index OF STRUCTURE TO ,
161 | -field OF STRUCTURE TO .
162 |
163 | " Oops
164 | IF IS NOT ASSIGNED.
165 | MESSAGE s005(zeui_message) WITH -column_name -column_index io_file->mv_file_name INTO sy-msgli.
166 | zcx_eui_exception=>raise_sys_error( ).
167 | ENDIF.
168 | " Sometimes have leading spaces
169 | lv_input = .
170 | CONDENSE lv_input.
171 |
172 | IF IS NOT ASSIGNED.
173 | MESSAGE s006(zeui_message) WITH -field INTO sy-msgli.
174 | zcx_eui_exception=>raise_sys_error( ).
175 | ENDIF.
176 |
177 | " No errors
178 | CLEAR lo_error.
179 |
180 | TRY.
181 | IF -fm IS NOT INITIAL.
182 | " Try to convert
183 | CALL FUNCTION -fm
184 | EXPORTING
185 | input = lv_input
186 | IMPORTING
187 | output =
188 | EXCEPTIONS
189 | error_message = 1
190 | OTHERS = 2.
191 | ELSE.
192 | CASE -gen_type.
193 | WHEN lcl_helper=>mc_gen_type-number.
194 | REPLACE FIRST OCCURRENCE OF ',' IN lv_input WITH '.'.
195 | CONDENSE lv_input NO-GAPS.
196 | = lv_input.
197 | sy-subrc = 0.
198 |
199 | WHEN lcl_helper=>mc_gen_type-time.
200 | REPLACE ALL OCCURRENCES OF `:` IN lv_input WITH ``.
201 | CONCATENATE lv_input+0(2) lv_input+2(2) lv_input+4(2) INTO .
202 | sy-subrc = 0.
203 |
204 | WHEN lcl_helper=>mc_gen_type-date.
205 | CALL FUNCTION 'CONVERT_DATE_TO_INTERNAL'
206 | EXPORTING
207 | date_external = lv_input
208 | IMPORTING
209 | date_internal =
210 | EXCEPTIONS
211 | error_message = 1
212 | OTHERS = 2.
213 |
214 | WHEN OTHERS.
215 | = lv_input.
216 | sy-subrc = 0.
217 | ENDCASE.
218 | ENDIF.
219 |
220 | " Just create own exception
221 | CHECK sy-subrc <> 0.
222 | MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO lv_error_message.
223 | zcx_eui_exception=>raise_sys_error( iv_message = lv_error_message ).
224 |
225 | CATCH cx_root INTO lo_error.
226 | ENDTRY.
227 |
228 | " All ok ?
229 | CHECK lo_error IS NOT INITIAL.
230 |
231 | " if have no handlers then dump
232 | IF lo_event_caller IS INITIAL.
233 | zcx_eui_exception=>raise_dump( io_error = lo_error ).
234 | ENDIF.
235 |
236 | " Send event to handler
237 | GET REFERENCE OF INTO lr_value.
238 | GET REFERENCE OF INTO lr_row.
239 |
240 | lo_event_caller->call_handlers(
241 | iv_of_class = 'ZCL_EUI_FILE_IO'
242 | iv_for_event = 'MAPPING_ERROR'
243 | iv_param_nam_00 = 'SENDER' iv_param_val_00 = io_file
244 | iv_param_nam_01 = 'IV_SOURCE' iv_param_val_01 =
245 | iv_param_nam_02 = 'IV_ROW' iv_param_val_02 = lv_row
246 | iv_param_nam_03 = 'IS_EXCEL_MAP' iv_param_val_03 =
247 | iv_param_nam_04 = 'IO_ERROR' iv_param_val_04 = lo_error
248 | iv_param_nam_05 = 'CV_VALUE' iv_param_val_05 = lr_value
249 | iv_param_nam_06 = 'CS_ROW' iv_param_val_06 = lr_row ).
250 |
251 | * RAISE EVENT mapping_error EXPORTING
252 | * IV_SOURCE =
253 | * IV_ROW = lv_row
254 | * IS_EXCEL_MAP =
255 | * IO_ERROR = lo_error
256 | * CV_VALUE = lr_value
257 | * CS_ROW = lr_row.
258 | ENDLOOP.
259 | ENDLOOP.
260 | ENDMETHOD.
261 | ENDCLASS.
262 |
--------------------------------------------------------------------------------
/src/zcl_eui_menu.clas.abap:
--------------------------------------------------------------------------------
1 | class ZCL_EUI_MENU definition
2 | public
3 | final
4 | create public .
5 |
6 | public section.
7 | type-pools ABAP .
8 |
9 | types:
10 | BEGIN OF ts_menu.
11 | INCLUDE TYPE stb_button.
12 | TYPES:
13 | " For menu
14 | par_function TYPE ui_func,
15 | ftype TYPE cua_ftyp,
16 | hidden TYPE cua_ftyp,
17 | accelerator TYPE cua_path,
18 | "top TYPE flag,
19 | " Do not show
20 | hide TYPE abap_bool,
21 | END OF ts_menu .
22 | types:
23 | tt_menu TYPE STANDARD TABLE OF ts_menu WITH DEFAULT KEY .
24 |
25 | methods CONSTRUCTOR
26 | importing
27 | !IO_HANDLER type ref to OBJECT optional
28 | !IO_CONTAINER type ref to CL_GUI_CONTAINER optional
29 | preferred parameter IO_HANDLER .
30 | methods CREATE_TOOLBAR
31 | importing
32 | !IT_MENU type TT_MENU
33 | !IV_WIDTH type I optional
34 | !IV_CHECK_TCODE type ABAP_BOOL default ABAP_TRUE
35 | returning
36 | value(RO_MENU) type ref to ZCL_EUI_MENU .
37 | methods GET_CONTAINER
38 | returning
39 | value(RO_CONTAINER) type ref to CL_GUI_CONTAINER .
40 | methods GET_TOOLBAR
41 | returning
42 | value(RO_TOOLBAR) type ref to CL_GUI_TOOLBAR .
43 | methods ADD_HANDLER
44 | importing
45 | !IO_HANDLER type ref to OBJECT .
46 | methods CHANGE_HANDLER
47 | importing
48 | !IO_HANDLER type ref to OBJECT .
49 | class-methods CAN_SHOW
50 | returning
51 | value(RV_OK) type ABAP_BOOL .
52 | protected section.
53 | private section.
54 |
55 | data MO_TOOLBAR type ref to CL_GUI_TOOLBAR .
56 | data MO_CONTAINER type ref to CL_GUI_CONTAINER .
57 | data MO_EVENT_CALLER type ref to ZCL_EUI_EVENT_CALLER .
58 |
59 | methods ON_FUNCTION_SELECTED
60 | for event FUNCTION_SELECTED of CL_GUI_TOOLBAR
61 | importing
62 | !SENDER
63 | !FCODE .
64 | ENDCLASS.
65 |
66 |
67 |
68 | CLASS ZCL_EUI_MENU IMPLEMENTATION.
69 |
70 |
71 | METHOD add_handler.
72 | DATA lo_error TYPE REF TO zcx_eui_exception.
73 |
74 | CHECK io_handler IS NOT INITIAL.
75 |
76 | TRY.
77 | " Specify receiver
78 | IF mo_event_caller IS INITIAL.
79 | CREATE OBJECT mo_event_caller.
80 | ENDIF.
81 |
82 | mo_event_caller->add_handler( io_handler ).
83 | CATCH zcx_eui_exception INTO lo_error.
84 | zcx_eui_exception=>raise_dump( io_error = lo_error ).
85 | ENDTRY.
86 | ENDMETHOD.
87 |
88 |
89 | METHOD can_show.
90 | DATA:
91 | lp_dialog_status TYPE char1,
92 | lp_gui TYPE char1,
93 | lp_cat TYPE char1.
94 |
95 | " if we are called by RFC in a dialogless BAPI or in update task or in batch suppress the starter
96 | GET PARAMETER ID 'FLAG_DIALOG_STATUS' FIELD lp_dialog_status.
97 |
98 | CALL FUNCTION 'CAT_IS_ACTIVE'
99 | IMPORTING
100 | active = lp_cat.
101 |
102 | CALL FUNCTION 'RFC_IS_GUI_ON'
103 | IMPORTING
104 | on = lp_gui.
105 |
106 | CHECK " TODO sy-binpt IS INITIAL
107 | sy-batch IS INITIAL
108 | AND sy-oncom <> 'V'
109 | AND lp_dialog_status IS INITIAL
110 | AND lp_cat = space
111 | AND lp_gui = 'Y'.
112 |
113 | rv_ok = abap_true.
114 | ENDMETHOD.
115 |
116 |
117 | METHOD change_handler.
118 | DATA lo_error TYPE REF TO zcx_eui_exception.
119 |
120 | CLEAR mo_event_caller.
121 | CHECK io_handler IS NOT INITIAL.
122 |
123 | TRY.
124 | " Specify receiver
125 | CREATE OBJECT mo_event_caller.
126 | mo_event_caller->add_handler( io_handler ).
127 | CATCH zcx_eui_exception INTO lo_error.
128 | zcx_eui_exception=>raise_dump( io_error = lo_error ).
129 | ENDTRY.
130 | ENDMETHOD.
131 |
132 |
133 | METHOD constructor.
134 | " Use SUPPLIED container
135 | IF io_container IS NOT INITIAL.
136 | mo_container = io_container.
137 | ENDIF.
138 |
139 | change_handler( io_handler ).
140 | ENDMETHOD.
141 |
142 |
143 | METHOD create_toolbar.
144 | DATA:
145 | lt_stb_menu TYPE SORTED TABLE OF stb_btnmnu WITH UNIQUE KEY function,
146 | ls_stb_menu TYPE stb_btnmnu,
147 | lv_icon TYPE icon-id,
148 | lv_width TYPE i,
149 | ls_event TYPE REF TO cntl_simple_event,
150 | lt_event TYPE cntl_simple_events.
151 | FIELD-SYMBOLS:
152 | LIKE LINE OF it_menu,
153 | TYPE stb_btnmnu.
154 |
155 | " For syntax like ---> new ZCL_EUI_MENU( lo_container )->CREATE_TOOLBAR( )->GET_TOOLBAR( )
156 | ro_menu = me.
157 |
158 | " Do not work in standard transactions (except SE38, SE80 ...)
159 | IF iv_check_tcode = abap_true.
160 | CHECK sy-tcode CP 'Z*'
161 | OR sy-tcode CP 'Y*'
162 | OR sy-tcode CP 'SE*'.
163 | ENDIF.
164 |
165 | CHECK can_show( ) = abap_true.
166 |
167 | **********************************************************************
168 | " Calc new width
169 | **********************************************************************
170 | lv_width = iv_width.
171 | IF lv_width = 0.
172 | LOOP AT it_menu ASSIGNING WHERE hide <> abap_true
173 | AND par_function IS INITIAL.
174 | CASE -butn_type.
175 | WHEN cntb_btype_menu.
176 | ADD 51 TO lv_width. "#EC NUMBER_OK
177 |
178 | WHEN cntb_btype_sep.
179 | ADD 6 TO lv_width. "#EC NUMBER_OK
180 |
181 | WHEN OTHERS.
182 | ADD 41 TO lv_width. "#EC NUMBER_OK
183 | ENDCASE.
184 | ENDLOOP.
185 | ENDIF.
186 |
187 | **********************************************************************
188 | " Create new toolbar. Could be different buttons each time
189 | **********************************************************************
190 |
191 | IF mo_toolbar IS NOT INITIAL.
192 | mo_toolbar->delete_all_buttons( ).
193 | ENDIF.
194 |
195 | " Create new container if needed
196 | IF mo_container IS INITIAL. " have to recretae for GOS. bug with contaoner width
197 | CREATE OBJECT mo_container TYPE cl_gui_gos_container
198 | EXPORTING
199 | width = lv_width
200 | no_autodef_progid_dynnr = abap_true
201 | EXCEPTIONS
202 | OTHERS = 5.
203 | CHECK sy-subrc = 0.
204 | ENDIF.
205 |
206 | " New toolbar
207 | IF mo_toolbar IS INITIAL.
208 | CREATE OBJECT mo_toolbar
209 | EXPORTING
210 | parent = mo_container.
211 |
212 | " 1 event only
213 | APPEND INITIAL LINE TO lt_event REFERENCE INTO ls_event.
214 | ls_event->appl_event = abap_true.
215 | ls_event->eventid = cl_gui_toolbar=>m_id_function_selected.
216 | mo_toolbar->set_registered_events( events = lt_event ).
217 |
218 | " Set new handler
219 | SET HANDLER on_function_selected FOR mo_toolbar ACTIVATION abap_true.
220 | ENDIF.
221 |
222 | **********************************************************************
223 | " Create buttons
224 | **********************************************************************
225 | LOOP AT it_menu ASSIGNING WHERE hide <> abap_true.
226 | " No search in ICON table
227 | lv_icon = -icon.
228 |
229 | IF -par_function IS INITIAL.
230 | mo_toolbar->add_button(
231 | fcode = -function
232 | icon = -icon
233 | is_disabled = -disabled
234 | butn_type = -butn_type
235 | text = -text
236 | quickinfo = -quickinfo
237 | is_checked = -checked ).
238 | " CHECK ERRORS
239 | ELSE.
240 | " Instead of CL_GUI_TOOLBAR=>M_TABLE_CTXMENU[]
241 | READ TABLE lt_stb_menu ASSIGNING
242 | WITH TABLE KEY function = -par_function.
243 |
244 | " Create new one
245 | IF sy-subrc <> 0.
246 | CREATE OBJECT ls_stb_menu-ctmenu.
247 | ls_stb_menu-function = -par_function.
248 | INSERT ls_stb_menu INTO TABLE lt_stb_menu ASSIGNING .
249 | ENDIF.
250 |
251 | CASE -butn_type.
252 | WHEN cntb_btype_sep.
253 | -ctmenu->add_separator( ).
254 |
255 | WHEN cntb_btype_menu.
256 | " Save for sub menu
257 | CREATE OBJECT ls_stb_menu-ctmenu.
258 | ls_stb_menu-function = -function.
259 | INSERT ls_stb_menu INTO TABLE lt_stb_menu.
260 |
261 | " And add it
262 | -ctmenu->add_submenu(
263 | menu = ls_stb_menu-ctmenu " <-- sub menu
264 | icon = lv_icon
265 | disabled = -disabled
266 | text = -text
267 | hidden = -hidden
268 | accelerator = -accelerator ).
269 |
270 | WHEN OTHERS.
271 | -ctmenu->add_function( " CALL METHOD -ctmenu->('ADD_FUNCTION')
272 | fcode = -function
273 | icon = lv_icon
274 | disabled = -disabled
275 | text = -text
276 | checked = -checked
277 | ftype = -ftype
278 | hidden = -hidden
279 | accelerator = -accelerator
280 | " insert_at_the_top = -top " <--- From 7.02, no param older versions
281 | ).
282 | ENDCASE.
283 |
284 | " Set menu or delete it
285 | mo_toolbar->set_static_ctxmenu(
286 | EXPORTING
287 | fcode = -par_function
288 | ctxmenu = -ctmenu
289 | EXCEPTIONS
290 | OTHERS = 1 ).
291 | ENDIF.
292 | ENDLOOP.
293 | ENDMETHOD.
294 |
295 |
296 | METHOD get_container.
297 | ro_container = me->mo_container.
298 | ENDMETHOD.
299 |
300 |
301 | METHOD get_toolbar.
302 | ro_toolbar = me->mo_toolbar.
303 | ENDMETHOD.
304 |
305 |
306 | METHOD on_function_selected.
307 | CHECK mo_event_caller IS NOT INITIAL.
308 |
309 | mo_event_caller->call_handlers(
310 | iv_of_class = 'CL_GUI_TOOLBAR'
311 | iv_for_event = 'FUNCTION_SELECTED'
312 | iv_param_nam_00 = 'SENDER' iv_param_val_00 = sender
313 | iv_param_nam_01 = 'FCODE' iv_param_val_01 = fcode ).
314 | ENDMETHOD.
315 | ENDCLASS.
316 |
--------------------------------------------------------------------------------
/src/zcl_eui_crc64.clas.abap:
--------------------------------------------------------------------------------
1 | class ZCL_EUI_CRC64 definition
2 | public
3 | final
4 | create public .
5 |
6 | public section.
7 | type-pools ABAP .
8 |
9 | constants:
10 | BEGIN OF mc_dref,
11 | data_value TYPE STRING VALUE 'DATA_VALUE',
12 | type_info TYPE STRING VALUE 'TYPE_INFO',
13 | no_info TYPE STRING VALUE 'NO_INFO',
14 | END OF mc_dref .
15 |
16 | methods CONSTRUCTOR
17 | importing
18 | !IV_DREF type STRING default MC_DREF-DATA_VALUE
19 | !IV_LOG type ABAP_BOOL optional .
20 | methods ADD_TO_HASH
21 | importing
22 | !IV_INPUT type ANY
23 | !IV_NAME type CSEQUENCE default 'R'
24 | returning
25 | value(RO_CRC64) type ref to ZCL_EUI_CRC64 .
26 | methods GET_HASH
27 | returning
28 | value(RV_HASH) type CHAR16 .
29 | class-methods CALC_STRING_HASH
30 | importing
31 | !IV_STRING type STRING optional
32 | !IT_TABLE type STRINGTAB optional
33 | returning
34 | value(RV_HASH) type HASH160 .
35 | class-methods CALC_XSTRING_HASH
36 | importing
37 | !IV_XSTRING type XSTRING
38 | returning
39 | value(RV_HASH) type HASH160 .
40 | protected section.
41 | private section.
42 | *"* private components of class ZCL_EUI_CRC64
43 | *"* do not include other source files here!!!
44 |
45 | types:
46 | BEGIN OF ts_LOG_info,
47 | name TYPE string.
48 | INCLUDE TYPE sci_crc64.
49 | TYPES:
50 | END OF ts_LOG_info .
51 | types:
52 | tt_LOG_info TYPE STANDARD TABLE OF ts_LOG_info WITH DEFAULT KEY .
53 |
54 | data MV_CRC64 type SCI_CRC64 .
55 | data MV_DREF type STRING .
56 | data MV_LOG type ABAP_BOOL .
57 | data MT_LOG type TT_LOG_INFO .
58 |
59 | methods _GET_SUB_NAME
60 | importing
61 | !IV_NAME type CSEQUENCE
62 | !IV_SUFFIX type CSEQUENCE
63 | !IV_DASH type STRING default '-'
64 | returning
65 | value(RV_SUB_NAME) type STRING .
66 | methods _ADD_TYPE_INFO
67 | importing
68 | !IO_TYPE type ref to CL_ABAP_TYPEDESCR
69 | !IV_NAME type CSEQUENCE .
70 | methods _ADD_TABLE
71 | importing
72 | !IV_INPUT type ANY
73 | !IV_NAME type CSEQUENCE .
74 | methods _ADD_STRUCTURE
75 | importing
76 | !IO_TYPE type ref to CL_ABAP_TYPEDESCR
77 | !IV_INPUT type ANY
78 | !IV_NAME type CSEQUENCE .
79 | methods _ADD_OBJECT
80 | importing
81 | !IV_INPUT type ANY
82 | !IV_NAME type CSEQUENCE .
83 | methods _SHOW_LOG .
84 | ENDCLASS.
85 |
86 |
87 |
88 | CLASS ZCL_EUI_CRC64 IMPLEMENTATION.
89 |
90 |
91 | METHOD add_to_hash.
92 | " For chain calls
93 | ro_crc64 = me.
94 | **********************************************************************
95 | **********************************************************************
96 |
97 | DATA: lo_type TYPE REF TO cl_abap_typedescr,
98 | lv_dref TYPE REF TO data.
99 |
100 | FIELD-SYMBOLS TYPE any.
101 | ASSIGN iv_input TO .
102 |
103 | DO.
104 | lo_type = cl_abap_typedescr=>describe_by_data( ).
105 |
106 | " 1 - DATA ref
107 | IF lo_type->type_kind = cl_abap_typedescr=>typekind_dref.
108 | lv_dref = .
109 | ASSIGN lv_dref->* TO .
110 | CONTINUE.
111 | ENDIF.
112 |
113 | EXIT.
114 | ENDDO.
115 |
116 | **********************************************************************
117 | **********************************************************************
118 |
119 | " 2 - DATA ref
120 | IF lv_dref IS NOT INITIAL AND mv_dref <> mc_dref-data_value.
121 | " Just same type?
122 | IF mv_dref = mc_dref-type_info.
123 | _add_type_info( io_type = lo_type
124 | iv_name = iv_name ).
125 | ENDIF.
126 | " or WHEN mc_dref-no_info
127 | RETURN.
128 | ENDIF.
129 |
130 | CASE lo_type->type_kind.
131 | WHEN cl_abap_typedescr=>typekind_table.
132 | _add_table( iv_input =
133 | iv_name = iv_name ).
134 | RETURN.
135 |
136 | WHEN cl_abap_typedescr=>typekind_struct1 OR cl_abap_typedescr=>typekind_struct2.
137 | _add_structure( io_type = lo_type
138 | iv_input =
139 | iv_name = iv_name ).
140 | RETURN.
141 |
142 | WHEN cl_abap_typedescr=>typekind_oref OR cl_abap_typedescr=>typekind_intf.
143 | _add_object( iv_input =
144 | iv_name = iv_name ).
145 | RETURN.
146 |
147 | WHEN cl_abap_typedescr=>typekind_string.
148 | DATA lv_input TYPE char40.
149 | lv_input = calc_string_hash( iv_string = ).
150 |
151 | WHEN cl_abap_typedescr=>typekind_xstring.
152 | lv_input = calc_xstring_hash( iv_xstring = ).
153 | ENDCASE.
154 |
155 | IF lv_input IS NOT INITIAL.
156 | ASSIGN lv_input TO .
157 | ENDIF.
158 |
159 | DATA l_length TYPE i.
160 | DESCRIBE FIELD LENGTH l_length IN BYTE MODE.
161 | CALL 'ABAP_CRC64'
162 | ID 'INPUT' FIELD
163 | ID 'LENGTH' FIELD l_length
164 | ID 'CRC1' FIELD mv_crc64-i1
165 | ID 'CRC2' FIELD mv_crc64-i2. "#EC CI_CCALL
166 |
167 | IF sy-subrc <> 0.
168 | DATA lv_message TYPE string.
169 | CONCATENATE iv_name 'parameter error'(par) INTO lv_message SEPARATED BY space.
170 | zcx_eui_no_check=>raise_sys_error( iv_message = lv_message ).
171 | ENDIF.
172 |
173 | CHECK mv_log = abap_true.
174 | DATA ls_log LIKE LINE OF mt_log.
175 | MOVE-CORRESPONDING mv_crc64 TO ls_log.
176 | ls_log-name = iv_name.
177 | APPEND ls_log TO mt_log.
178 | ENDMETHOD.
179 |
180 |
181 | METHOD calc_string_hash.
182 | DATA lv_line TYPE string.
183 |
184 | IF iv_string IS SUPPLIED.
185 | lv_line = iv_string.
186 | ELSEIF it_table IS SUPPLIED.
187 | CONCATENATE LINES OF it_table INTO lv_line.
188 | ELSE.
189 | zcx_eui_no_check=>raise_sys_error( iv_message = 'Wrong parameters of CALC_STRING_HASH' ).
190 | ENDIF.
191 |
192 | CALL FUNCTION 'CALCULATE_HASH_FOR_CHAR'
193 | EXPORTING
194 | data = lv_line
195 | IMPORTING
196 | hash = rv_hash
197 | EXCEPTIONS
198 | OTHERS = 1.
199 |
200 | CHECK sy-subrc <> 0.
201 | zcx_eui_no_check=>raise_sys_error( ).
202 | ENDMETHOD.
203 |
204 |
205 | METHOD calc_xstring_hash.
206 | CALL FUNCTION 'CALCULATE_HASH_FOR_RAW'
207 | EXPORTING
208 | data = iv_xstring
209 | IMPORTING
210 | hash = rv_hash
211 | EXCEPTIONS
212 | OTHERS = 1.
213 |
214 | CHECK sy-subrc <> 0.
215 | zcx_eui_no_check=>raise_sys_error( ).
216 | ENDMETHOD.
217 |
218 |
219 | METHOD constructor.
220 | mv_dref = iv_dref.
221 | mv_log = iv_log.
222 | ENDMETHOD.
223 |
224 |
225 | METHOD get_hash.
226 | _show_log( ).
227 |
228 | FIELD-SYMBOLS TYPE x.
229 | ASSIGN mv_crc64 TO CASTING.
230 | WRITE TO rv_hash.
231 | ENDMETHOD.
232 |
233 |
234 | METHOD _add_object.
235 | DATA lv_name TYPE string.
236 | DATA lo_object TYPE REF TO cl_abap_objectdescr.
237 | FIELD-SYMBOLS LIKE LINE OF lo_object->attributes.
238 | FIELD-SYMBOLS TYPE any.
239 |
240 | lo_object ?= cl_abap_objectdescr=>describe_by_object_ref( iv_input ).
241 | LOOP AT lo_object->attributes ASSIGNING .
242 | CONCATENATE 'IV_INPUT->' -name INTO lv_name.
243 |
244 | " Add ZCL_EUI_CRC64 as a friend to access private attributes
245 | ASSIGN (lv_name) TO .
246 | CHECK sy-subrc = 0.
247 |
248 | lv_name = _get_sub_name( iv_name = iv_name
249 | iv_dash = `->`
250 | iv_suffix = -name ).
251 | add_to_hash( iv_input =
252 | iv_name = lv_name ).
253 | ENDLOOP.
254 | ENDMETHOD.
255 |
256 |
257 | METHOD _add_structure.
258 | DATA lo_struc TYPE REF TO cl_abap_structdescr.
259 | DATA lv_name TYPE string.
260 | FIELD-SYMBOLS LIKE LINE OF lo_struc->components.
261 | FIELD-SYMBOLS TYPE any.
262 |
263 | lo_struc ?= io_type.
264 | LOOP AT lo_struc->components ASSIGNING .
265 | ASSIGN COMPONENT -name OF STRUCTURE iv_input TO .
266 | lv_name = _get_sub_name( iv_name = iv_name
267 | iv_suffix = -name ).
268 |
269 | add_to_hash( iv_input =
270 | iv_name = lv_name ).
271 | ENDLOOP.
272 | ENDMETHOD.
273 |
274 |
275 | METHOD _add_table.
276 | FIELD-SYMBOLS TYPE ANY TABLE.
277 | FIELD-SYMBOLS TYPE any.
278 | DATA lv_tabix TYPE sytabix VALUE 0.
279 | DATA lv_index TYPE string.
280 | DATA lv_name TYPE string.
281 |
282 | ASSIGN iv_input TO