├── _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 . 283 | LOOP AT ASSIGNING . 284 | IF mv_log = abap_true. 285 | " for hashed tables cannot use sy-tabix 286 | lv_tabix = lv_tabix + 1. 287 | lv_index = lv_tabix. 288 | CONDENSE lv_index. 289 | CONCATENATE `[` lv_index `]` INTO lv_index. 290 | lv_name = _get_sub_name( iv_name = iv_name 291 | iv_dash = `` 292 | iv_suffix = lv_index ). 293 | ENDIF. 294 | 295 | add_to_hash( iv_input = 296 | iv_name = lv_name ). 297 | ENDLOOP. 298 | ENDMETHOD. 299 | 300 | 301 | METHOD _add_type_info. 302 | DATA lv_name TYPE string. 303 | lv_name = _get_sub_name( iv_name = iv_name 304 | iv_suffix = 'TYPE_KIND' ). 305 | add_to_hash( iv_input = io_type->type_kind 306 | iv_name = lv_name ). 307 | 308 | lv_name = _get_sub_name( iv_name = iv_name 309 | iv_suffix = 'ABSOLUTE_NAME' ). 310 | add_to_hash( iv_input = io_type->absolute_name 311 | iv_name = lv_name ). 312 | ENDMETHOD. 313 | 314 | 315 | METHOD _get_sub_name. 316 | IF mv_log = abap_true. 317 | CONCATENATE iv_name iv_dash iv_suffix INTO rv_sub_name. 318 | ENDIF. 319 | ENDMETHOD. 320 | 321 | 322 | METHOD _show_log. 323 | CHECK mv_log = abap_true. 324 | 325 | DATA lr_table TYPE REF TO data. 326 | GET REFERENCE OF mt_log INTO lr_table. 327 | 328 | DATA lt_catalog TYPE lvc_t_fcat. 329 | DATA lr_catalog TYPE REF TO lvc_s_fcat. 330 | APPEND INITIAL LINE TO lt_catalog REFERENCE INTO lr_catalog. 331 | lr_catalog->fieldname = 'NAME'. 332 | lr_catalog->coltext = `Name`. 333 | 334 | APPEND INITIAL LINE TO lt_catalog REFERENCE INTO lr_catalog. 335 | lr_catalog->fieldname = 'I1'. 336 | lr_catalog->coltext = `Part 1`. 337 | 338 | APPEND INITIAL LINE TO lt_catalog REFERENCE INTO lr_catalog. 339 | lr_catalog->fieldname = 'I2'. 340 | lr_catalog->coltext = `Part 2`. 341 | 342 | DATA lo_alv TYPE REF TO zcl_eui_alv. 343 | CREATE OBJECT lo_alv 344 | EXPORTING 345 | ir_table = lr_table 346 | it_mod_catalog = lt_catalog. 347 | 348 | lo_alv->popup( iv_row_end = 25 ). "#EC NUMBER_OK 349 | lo_alv->show( ). 350 | ENDMETHOD. 351 | ENDCLASS. 352 | --------------------------------------------------------------------------------