├── doc └── dummy ├── img ├── dummy ├── cute-logo.png └── really-cute-logo.png ├── src ├── zcute_test_selections.prog.abap ├── package.devc.xml ├── zcute_transport │ ├── package.devc.xml │ ├── zif_cute_customizing_request.intf.abap │ ├── zif_cute_customizing_request.intf.xml │ ├── zcl_cute_customizing_request.clas.xml │ └── zcl_cute_customizing_request.clas.abap ├── zcl_cute_listbox_helper.clas.xml ├── zcl_cute_source_info_tabl.clas.xml ├── zcl_cute_source_info_view.clas.xml ├── zcl_cute_todo.clas.abap ├── zcx_cute_selection_screen.clas.abap ├── zcute.tran.xml ├── zcute_test_selections.prog.xml ├── zcx_cute.clas.abap ├── zcx_cute_data.clas.abap ├── zcx_cute_get_type.clas.abap ├── zcx_cute_not_defined.clas.abap ├── zcx_cute_not_authorized.clas.abap ├── zcl_cute_apack.clas.xml ├── zcx_cute_data_duplicate_keys.clas.abap ├── zcx_cute_source_not_existent.clas.abap ├── zcx_cute_transport_no_request.clas.abap ├── zcx_cute_unsupported_category.clas.abap ├── zcx_cute_transport_invalid_key.clas.abap ├── zcl_cute_main.clas.xml ├── zcx_cute_selection_screen.clas.xml ├── zcute_field_display_type.dtel.xml ├── zcute_test_field_fix_value.dtel.xml ├── zcute_test_field_search_help.dtel.xml ├── zcute_test_field_foreign_key.dtel.xml ├── zcl_cute_main.clas.abap ├── zcl_cute_apack.clas.abap ├── zcx_cute_transport_not_exist.clas.abap ├── zif_cute_source_info.intf.xml ├── zif_cute_source_info.intf.abap ├── zcl_cute_source_information.clas.xml ├── zcute.msag.xml ├── zif_cute.intf.abap ├── zcl_cute_todo.clas.xml ├── zcute_test_key_two.dtel.xml ├── zcute_test_key_one.dtel.xml ├── zcute_incl.tabl.xml ├── zcute_test_field_checkbox.dtel.xml ├── zcute_test_field_simple.dtel.xml ├── zcl_cute_authorization.clas.xml ├── zcl_cute_tab_helper.clas.xml ├── zcx_cute_data.clas.xml ├── zcx_cute.clas.xml ├── zcx_cute_get_type.clas.xml ├── zcx_cute_data_duplicate_keys.clas.xml ├── zcx_cute_not_authorized.clas.xml ├── zcx_cute_source_not_existent.clas.xml ├── zcx_cute_not_defined.clas.xml ├── zcx_cute_transport_no_request.clas.xml ├── zcx_cute_transport_invalid_key.clas.xml ├── zcx_cute_unsupported_category.clas.xml ├── zcx_cute_transport_not_exist.clas.xml ├── zcl_cute_source_information.clas.abap ├── zcute_field_display_type.doma.xml ├── zcl_cute_listbox_helper.clas.abap ├── zcl_cute_selection_screen.clas.xml ├── zcl_cute_source_info_view.clas.abap ├── zcl_cute_source_info_tabl.clas.abap ├── zif_cute.intf.xml ├── zcl_cute_authorization.clas.abap ├── zcute_main.prog.abap ├── zcl_cute_table_edit.clas.xml ├── zcute_tech.tabl.xml ├── zcl_cute_selection_screen.clas.abap ├── zcute_field.tabl.xml ├── zcute_testt.tabl.xml ├── zcute_main.prog.xml ├── zcute_test_view.view.xml ├── zcl_cute_tab_helper.clas.abap ├── zcute_test.tabl.xml └── zcl_cute_table_edit.clas.abap ├── .abapgit.xml ├── .apack-manifest.xml ├── LICENSE └── README.md /doc/dummy: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /img/dummy: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /img/cute-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tricktresor/cute/HEAD/img/cute-logo.png -------------------------------------------------------------------------------- /img/really-cute-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tricktresor/cute/HEAD/img/really-cute-logo.png -------------------------------------------------------------------------------- /src/zcute_test_selections.prog.abap: -------------------------------------------------------------------------------- 1 | REPORT zcute_test_selections. 2 | 3 | PARAMETERS p_table TYPE typename DEFAULT 'ZCUTE_TEST'. 4 | 5 | START-OF-SELECTION. 6 | 7 | data(srcinfo) = zcl_cute_source_information=>get_instance( p_table ). 8 | DATA(selopt) = zcl_cute_selection_screen=>get_instance( srcinfo ). 9 | selopt->show( ). 10 | -------------------------------------------------------------------------------- /src/package.devc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | CUTE - Custom Table Editor 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/zcute_transport/package.devc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Transport Classes for ZCUTE 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/zcute_transport/zif_cute_customizing_request.intf.abap: -------------------------------------------------------------------------------- 1 | INTERFACE zif_cute_customizing_request 2 | PUBLIC . 3 | 4 | 5 | METHODS set_request_via_popup . 6 | METHODS get_request 7 | RETURNING 8 | VALUE(r_request) TYPE e071-trkorr . 9 | METHODS add_key_to_request 10 | IMPORTING 11 | !table_name TYPE tabname 12 | !table_key TYPE trobj_name 13 | RAISING 14 | zcx_cute_transport_no_request . 15 | ENDINTERFACE. 16 | -------------------------------------------------------------------------------- /src/zcl_cute_listbox_helper.clas.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCL_CUTE_LISTBOX_HELPER 7 | E 8 | CUTE - Listbox Helper 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/zcl_cute_source_info_tabl.clas.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCL_CUTE_SOURCE_INFO_TABL 7 | E 8 | CUTE - Info Table 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/zcl_cute_source_info_view.clas.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCL_CUTE_SOURCE_INFO_VIEW 7 | E 8 | CUTE - Info View 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/zcl_cute_todo.clas.abap: -------------------------------------------------------------------------------- 1 | CLASS zcl_cute_todo DEFINITION 2 | PUBLIC 3 | FINAL 4 | CREATE PUBLIC . 5 | 6 | PUBLIC SECTION. 7 | 8 | CLASS-METHODS check IMPORTING info TYPE clike. 9 | CLASS-METHODS bug IMPORTING info TYPE clike. 10 | CLASS-METHODS beautify IMPORTING info TYPE clike. 11 | PROTECTED SECTION. 12 | PRIVATE SECTION. 13 | ENDCLASS. 14 | 15 | 16 | 17 | CLASS ZCL_CUTE_TODO IMPLEMENTATION. 18 | 19 | 20 | METHOD beautify. 21 | ENDMETHOD. 22 | 23 | 24 | METHOD bug. 25 | ENDMETHOD. 26 | 27 | 28 | METHOD check. 29 | ENDMETHOD. 30 | ENDCLASS. 31 | -------------------------------------------------------------------------------- /src/zcx_cute_selection_screen.clas.abap: -------------------------------------------------------------------------------- 1 | class ZCX_CUTE_SELECTION_SCREEN definition 2 | public 3 | inheriting from ZCX_CUTE 4 | create public . 5 | 6 | public section. 7 | 8 | methods CONSTRUCTOR 9 | importing 10 | !TEXTID like TEXTID optional 11 | !PREVIOUS like PREVIOUS optional . 12 | protected section. 13 | private section. 14 | ENDCLASS. 15 | 16 | 17 | 18 | CLASS ZCX_CUTE_SELECTION_SCREEN IMPLEMENTATION. 19 | 20 | 21 | method CONSTRUCTOR. 22 | CALL METHOD SUPER->CONSTRUCTOR 23 | EXPORTING 24 | TEXTID = TEXTID 25 | PREVIOUS = PREVIOUS 26 | . 27 | endmethod. 28 | ENDCLASS. 29 | -------------------------------------------------------------------------------- /src/zcute.tran.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCUTE 7 | ZCUTE_MAIN 8 | 1000 9 | gA== 10 | 11 | 12 | ZCUTE 13 | 14 | 15 | E 16 | ZCUTE 17 | CUTE - table maintenance tool 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/zcute_test_selections.prog.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCUTE_TEST_SELECTIONS 7 | 1 8 | E 9 | X 10 | X 11 | 12 | 13 | 14 | R 15 | CUTE - Test selections dialog 16 | 29 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /.apack-manifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | tricktresor.de 6 | cute 7 | 0.1.1 8 | abapGit 9 | https://github.com/tricktresor/cute 10 | 11 | 12 | tricktresor.de 13 | dodo 14 | https://github.com/tricktresor/dodo 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /src/zcx_cute.clas.abap: -------------------------------------------------------------------------------- 1 | class ZCX_CUTE definition 2 | public 3 | inheriting from CX_DYNAMIC_CHECK 4 | create public . 5 | 6 | public section. 7 | 8 | constants ZCX_CUTE type SOTR_CONC value '005056A038571ED9BDDF401375BAD958' ##NO_TEXT. 9 | 10 | methods CONSTRUCTOR 11 | importing 12 | !TEXTID like TEXTID optional 13 | !PREVIOUS like PREVIOUS optional . 14 | protected section. 15 | private section. 16 | ENDCLASS. 17 | 18 | 19 | 20 | CLASS ZCX_CUTE IMPLEMENTATION. 21 | 22 | 23 | method CONSTRUCTOR. 24 | CALL METHOD SUPER->CONSTRUCTOR 25 | EXPORTING 26 | TEXTID = TEXTID 27 | PREVIOUS = PREVIOUS 28 | . 29 | IF textid IS INITIAL. 30 | me->textid = ZCX_CUTE . 31 | ENDIF. 32 | endmethod. 33 | ENDCLASS. 34 | -------------------------------------------------------------------------------- /src/zcx_cute_data.clas.abap: -------------------------------------------------------------------------------- 1 | class ZCX_CUTE_DATA definition 2 | public 3 | inheriting from ZCX_CUTE 4 | create public . 5 | 6 | public section. 7 | 8 | constants ZCX_CUTE_DATA type SOTR_CONC value '005056A038571ED9BDE11099EAF4196D' ##NO_TEXT. 9 | 10 | methods CONSTRUCTOR 11 | importing 12 | !TEXTID like TEXTID optional 13 | !PREVIOUS like PREVIOUS optional . 14 | protected section. 15 | private section. 16 | ENDCLASS. 17 | 18 | 19 | 20 | CLASS ZCX_CUTE_DATA IMPLEMENTATION. 21 | 22 | 23 | method CONSTRUCTOR. 24 | CALL METHOD SUPER->CONSTRUCTOR 25 | EXPORTING 26 | TEXTID = TEXTID 27 | PREVIOUS = PREVIOUS 28 | . 29 | IF textid IS INITIAL. 30 | me->textid = ZCX_CUTE_DATA . 31 | ENDIF. 32 | endmethod. 33 | ENDCLASS. 34 | -------------------------------------------------------------------------------- /src/zcx_cute_get_type.clas.abap: -------------------------------------------------------------------------------- 1 | class ZCX_CUTE_GET_TYPE definition 2 | public 3 | inheriting from ZCX_CUTE 4 | create public . 5 | 6 | public section. 7 | 8 | constants ZCX_CUTE_GET_TYPE type SOTR_CONC value '005056A038571ED9BDDF44E92725D958' ##NO_TEXT. 9 | 10 | methods CONSTRUCTOR 11 | importing 12 | !TEXTID like TEXTID optional 13 | !PREVIOUS like PREVIOUS optional . 14 | protected section. 15 | private section. 16 | ENDCLASS. 17 | 18 | 19 | 20 | CLASS ZCX_CUTE_GET_TYPE IMPLEMENTATION. 21 | 22 | 23 | method CONSTRUCTOR. 24 | CALL METHOD SUPER->CONSTRUCTOR 25 | EXPORTING 26 | TEXTID = TEXTID 27 | PREVIOUS = PREVIOUS 28 | . 29 | IF textid IS INITIAL. 30 | me->textid = ZCX_CUTE_GET_TYPE . 31 | ENDIF. 32 | endmethod. 33 | ENDCLASS. 34 | -------------------------------------------------------------------------------- /src/zcx_cute_not_defined.clas.abap: -------------------------------------------------------------------------------- 1 | class ZCX_CUTE_NOT_DEFINED definition 2 | public 3 | inheriting from ZCX_CUTE 4 | create public . 5 | 6 | public section. 7 | 8 | constants ZCX_CUTE_NOT_DEFINED type SOTR_CONC value '005056A038571ED9BDDF8A0C284DD95A' ##NO_TEXT. 9 | 10 | methods CONSTRUCTOR 11 | importing 12 | !TEXTID like TEXTID optional 13 | !PREVIOUS like PREVIOUS optional . 14 | protected section. 15 | private section. 16 | ENDCLASS. 17 | 18 | 19 | 20 | CLASS ZCX_CUTE_NOT_DEFINED IMPLEMENTATION. 21 | 22 | 23 | method CONSTRUCTOR. 24 | CALL METHOD SUPER->CONSTRUCTOR 25 | EXPORTING 26 | TEXTID = TEXTID 27 | PREVIOUS = PREVIOUS 28 | . 29 | IF textid IS INITIAL. 30 | me->textid = ZCX_CUTE_NOT_DEFINED . 31 | ENDIF. 32 | endmethod. 33 | ENDCLASS. 34 | -------------------------------------------------------------------------------- /src/zcx_cute_not_authorized.clas.abap: -------------------------------------------------------------------------------- 1 | class ZCX_CUTE_NOT_AUTHORIZED definition 2 | public 3 | inheriting from ZCX_CUTE 4 | create public . 5 | 6 | public section. 7 | 8 | constants ZCX_CUTE_NOT_AUTHORIZED type SOTR_CONC value '005056A038571ED9BDDF555D9F5FD958' ##NO_TEXT. 9 | 10 | methods CONSTRUCTOR 11 | importing 12 | !TEXTID like TEXTID optional 13 | !PREVIOUS like PREVIOUS optional . 14 | protected section. 15 | private section. 16 | ENDCLASS. 17 | 18 | 19 | 20 | CLASS ZCX_CUTE_NOT_AUTHORIZED IMPLEMENTATION. 21 | 22 | 23 | method CONSTRUCTOR. 24 | CALL METHOD SUPER->CONSTRUCTOR 25 | EXPORTING 26 | TEXTID = TEXTID 27 | PREVIOUS = PREVIOUS 28 | . 29 | IF textid IS INITIAL. 30 | me->textid = ZCX_CUTE_NOT_AUTHORIZED . 31 | ENDIF. 32 | endmethod. 33 | ENDCLASS. 34 | -------------------------------------------------------------------------------- /src/zcl_cute_apack.clas.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCL_CUTE_APACK 7 | E 8 | CUTE - dependencies 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | ZCL_CUTE_APACK 17 | CONSTRUCTOR 18 | E 19 | CONSTRUCTOR 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /src/zcx_cute_data_duplicate_keys.clas.abap: -------------------------------------------------------------------------------- 1 | class ZCX_CUTE_DATA_DUPLICATE_KEYS definition 2 | public 3 | inheriting from ZCX_CUTE 4 | create public . 5 | 6 | public section. 7 | 8 | constants ZCX_CUTE_DATA_DUPLICATE_KEYS type SOTR_CONC value '005056A038571ED9BDE20715ECCD5978' ##NO_TEXT. 9 | 10 | methods CONSTRUCTOR 11 | importing 12 | !TEXTID like TEXTID optional 13 | !PREVIOUS like PREVIOUS optional . 14 | protected section. 15 | private section. 16 | ENDCLASS. 17 | 18 | 19 | 20 | CLASS ZCX_CUTE_DATA_DUPLICATE_KEYS IMPLEMENTATION. 21 | 22 | 23 | method CONSTRUCTOR. 24 | CALL METHOD SUPER->CONSTRUCTOR 25 | EXPORTING 26 | TEXTID = TEXTID 27 | PREVIOUS = PREVIOUS 28 | . 29 | IF textid IS INITIAL. 30 | me->textid = ZCX_CUTE_DATA_DUPLICATE_KEYS . 31 | ENDIF. 32 | endmethod. 33 | ENDCLASS. 34 | -------------------------------------------------------------------------------- /src/zcx_cute_source_not_existent.clas.abap: -------------------------------------------------------------------------------- 1 | class ZCX_CUTE_SOURCE_NOT_EXISTENT definition 2 | public 3 | inheriting from ZCX_CUTE 4 | create public . 5 | 6 | public section. 7 | 8 | constants ZCX_CUTE_SOURCE_NOT_EXISTENT type SOTR_CONC value '005056A038571ED9BDDF60DD20BB9958' ##NO_TEXT. 9 | 10 | methods CONSTRUCTOR 11 | importing 12 | !TEXTID like TEXTID optional 13 | !PREVIOUS like PREVIOUS optional . 14 | protected section. 15 | private section. 16 | ENDCLASS. 17 | 18 | 19 | 20 | CLASS ZCX_CUTE_SOURCE_NOT_EXISTENT IMPLEMENTATION. 21 | 22 | 23 | method CONSTRUCTOR. 24 | CALL METHOD SUPER->CONSTRUCTOR 25 | EXPORTING 26 | TEXTID = TEXTID 27 | PREVIOUS = PREVIOUS 28 | . 29 | IF textid IS INITIAL. 30 | me->textid = ZCX_CUTE_SOURCE_NOT_EXISTENT . 31 | ENDIF. 32 | endmethod. 33 | ENDCLASS. 34 | -------------------------------------------------------------------------------- /src/zcx_cute_transport_no_request.clas.abap: -------------------------------------------------------------------------------- 1 | class ZCX_CUTE_TRANSPORT_NO_REQUEST definition 2 | public 3 | inheriting from ZCX_CUTE 4 | create public . 5 | 6 | public section. 7 | 8 | constants ZCX_CUTE_TRANSPORT_NO_REQUEST type SOTR_CONC value '005056A038571ED9BDDF4FE906499958' ##NO_TEXT. 9 | 10 | methods CONSTRUCTOR 11 | importing 12 | !TEXTID like TEXTID optional 13 | !PREVIOUS like PREVIOUS optional . 14 | protected section. 15 | private section. 16 | ENDCLASS. 17 | 18 | 19 | 20 | CLASS ZCX_CUTE_TRANSPORT_NO_REQUEST IMPLEMENTATION. 21 | 22 | 23 | method CONSTRUCTOR. 24 | CALL METHOD SUPER->CONSTRUCTOR 25 | EXPORTING 26 | TEXTID = TEXTID 27 | PREVIOUS = PREVIOUS 28 | . 29 | IF textid IS INITIAL. 30 | me->textid = ZCX_CUTE_TRANSPORT_NO_REQUEST . 31 | ENDIF. 32 | endmethod. 33 | ENDCLASS. 34 | -------------------------------------------------------------------------------- /src/zcx_cute_unsupported_category.clas.abap: -------------------------------------------------------------------------------- 1 | class ZCX_CUTE_UNSUPPORTED_CATEGORY definition 2 | public 3 | inheriting from ZCX_CUTE 4 | create public . 5 | 6 | public section. 7 | 8 | constants ZCX_CUTE_UNSUPPORTED_CATEGORY type SOTR_CONC value '005056A038571ED9BDDF665838879958' ##NO_TEXT. 9 | 10 | methods CONSTRUCTOR 11 | importing 12 | !TEXTID like TEXTID optional 13 | !PREVIOUS like PREVIOUS optional . 14 | protected section. 15 | private section. 16 | ENDCLASS. 17 | 18 | 19 | 20 | CLASS ZCX_CUTE_UNSUPPORTED_CATEGORY IMPLEMENTATION. 21 | 22 | 23 | method CONSTRUCTOR. 24 | CALL METHOD SUPER->CONSTRUCTOR 25 | EXPORTING 26 | TEXTID = TEXTID 27 | PREVIOUS = PREVIOUS 28 | . 29 | IF textid IS INITIAL. 30 | me->textid = ZCX_CUTE_UNSUPPORTED_CATEGORY . 31 | ENDIF. 32 | endmethod. 33 | ENDCLASS. 34 | -------------------------------------------------------------------------------- /src/zcx_cute_transport_invalid_key.clas.abap: -------------------------------------------------------------------------------- 1 | class ZCX_CUTE_TRANSPORT_INVALID_KEY definition 2 | public 3 | inheriting from ZCX_CUTE 4 | create public . 5 | 6 | public section. 7 | 8 | constants ZCX_CUTE_TRANSPORT_INVALID_KEY type SOTR_CONC value '005056A038571ED9BDDF4B1431F3D958' ##NO_TEXT. 9 | 10 | methods CONSTRUCTOR 11 | importing 12 | !TEXTID like TEXTID optional 13 | !PREVIOUS like PREVIOUS optional . 14 | protected section. 15 | private section. 16 | ENDCLASS. 17 | 18 | 19 | 20 | CLASS ZCX_CUTE_TRANSPORT_INVALID_KEY IMPLEMENTATION. 21 | 22 | 23 | method CONSTRUCTOR. 24 | CALL METHOD SUPER->CONSTRUCTOR 25 | EXPORTING 26 | TEXTID = TEXTID 27 | PREVIOUS = PREVIOUS 28 | . 29 | IF textid IS INITIAL. 30 | me->textid = ZCX_CUTE_TRANSPORT_INVALID_KEY . 31 | ENDIF. 32 | endmethod. 33 | ENDCLASS. 34 | -------------------------------------------------------------------------------- /src/zcl_cute_main.clas.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCL_CUTE_MAIN 7 | E 8 | CUTE - main class for calling maintenance tool 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | ZCL_CUTE_MAIN 17 | GET_INSTANCE 18 | E 19 | get instance of maintenance tool 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /src/zcute_transport/zif_cute_customizing_request.intf.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZIF_CUTE_CUSTOMIZING_REQUEST 7 | E 8 | CUTE - Customizing Transport Request 9 | 2 10 | 1 11 | X 12 | 13 | 14 | 15 | ZIF_CUTE_CUSTOMIZING_REQUEST 16 | ADD_KEY_TO_REQUEST 17 | E 18 | add table key to request 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /src/zcx_cute_selection_screen.clas.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCX_CUTE_SELECTION_SCREEN 7 | E 8 | CUTE - error in dynamic selection screen 9 | 40 10 | 1 11 | X 12 | X 13 | X 14 | 15 | 16 | 17 | ZCX_CUTE_SELECTION_SCREEN 18 | CONSTRUCTOR 19 | E 20 | CONSTRUCTOR 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /src/zcute_field_display_type.dtel.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCUTE_FIELD_DISPLAY_TYPE 7 | E 8 | ZCUTE_FIELD_DISPLAY_TYPE 9 | 55 10 | 10 11 | 20 12 | 40 13 | CUTE: Field display type 14 | Field display type 15 | Disp type 16 | Display type 17 | Field display type 18 | E 19 | D 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /src/zcute_test_field_fix_value.dtel.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCUTE_TEST_FIELD_FIX_VALUE 7 | E 8 | TABCLASS 9 | 12 10 | 10 11 | 20 12 | 40 13 | CUTE Test: field with fix value value 14 | Fix value 15 | Fix value 16 | Fix value 17 | CUTE Fix value 18 | E 19 | FIELD_FIX_VALUE 20 | D 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /src/zcute_test_field_search_help.dtel.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCUTE_TEST_FIELD_SEARCH_HELP 7 | E 8 | S_CARR_ID 9 | 55 10 | 10 11 | 20 12 | 40 13 | CUTE Test: Field with search help 14 | Searchhelp 15 | Searchhelp 16 | Searchhelp 17 | CUTE Searchhelp 18 | E 19 | FIELD_SEARCH_HELP 20 | D 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /src/zcute_test_field_foreign_key.dtel.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCUTE_TEST_FIELD_FOREIGN_KEY 7 | E 8 | XUBNAME 9 | 12 10 | 10 11 | 20 12 | 40 13 | CUTE Test: field with foreign key value 14 | Foreign Key 15 | Forgn Key 16 | Foreign Key 17 | CUTE Foreign Key 18 | E 19 | FIELD_FOREIGN_KEY 20 | D 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /src/zcl_cute_main.clas.abap: -------------------------------------------------------------------------------- 1 | class ZCL_CUTE_MAIN definition 2 | public 3 | create public . 4 | 5 | public section. 6 | 7 | class-methods GET_INSTANCE 8 | importing 9 | !SOURCE type TYPENAME 10 | returning 11 | value(INSTANCE) type ref to ZIF_CUTE 12 | raising 13 | ZCX_CUTE . 14 | protected section. 15 | private section. 16 | ENDCLASS. 17 | 18 | 19 | 20 | CLASS ZCL_CUTE_MAIN IMPLEMENTATION. 21 | 22 | 23 | METHOD get_instance. 24 | 25 | DATA(source_info) = zcl_cute_source_information=>get_instance( source ). 26 | 27 | CASE source_info->class. 28 | WHEN 'TRANSP'. 29 | instance = NEW zcl_cute_table_edit( ). 30 | instance->set_source( source_info ). 31 | WHEN 'VIEW'. 32 | RAISE EXCEPTION TYPE zcx_cute_unsupported_category. 33 | WHEN OTHERS. 34 | RAISE EXCEPTION TYPE zcx_cute_unsupported_category. 35 | ENDCASE. 36 | ENDMETHOD. 37 | ENDCLASS. 38 | -------------------------------------------------------------------------------- /src/zcl_cute_apack.clas.abap: -------------------------------------------------------------------------------- 1 | class ZCL_CUTE_APACK definition 2 | public 3 | final 4 | create public . 5 | 6 | public section. 7 | 8 | interfaces ZIF_APACK_MANIFEST . 9 | 10 | methods CONSTRUCTOR . 11 | protected section. 12 | private section. 13 | ENDCLASS. 14 | 15 | 16 | 17 | CLASS ZCL_CUTE_APACK IMPLEMENTATION. 18 | 19 | 20 | METHOD constructor. 21 | 22 | zif_apack_manifest~descriptor-group_id = 'tricktresor.de'. 23 | zif_apack_manifest~descriptor-artifact_id = 'cute'. 24 | zif_apack_manifest~descriptor-version = '0.1.1'. 25 | zif_apack_manifest~descriptor-git_url = 'https://github.com/tricktresor/cute'. 26 | zif_apack_manifest~descriptor-dependencies = VALUE #( 27 | ( group_id = 'tricktresor.de' 28 | artifact_id = 'dodo' 29 | git_url = 'https://github.com/tricktresor/dodo' ) ). 30 | zif_apack_manifest~descriptor-repository_type = ``. 31 | 32 | ENDMETHOD. 33 | ENDCLASS. 34 | -------------------------------------------------------------------------------- /src/zcx_cute_transport_not_exist.clas.abap: -------------------------------------------------------------------------------- 1 | class ZCX_CUTE_TRANSPORT_NOT_EXIST definition 2 | public 3 | inheriting from ZCX_CUTE 4 | create public . 5 | 6 | public section. 7 | 8 | constants ZCX_CUTE_TRANSPORT_NOT_EXIST type SOTR_CONC value '005056A038571EEA8099310F40FE83AE' ##NO_TEXT. 9 | data OBJ_NAME type STRING . 10 | data OBJECT type STRING . 11 | 12 | methods CONSTRUCTOR 13 | importing 14 | !TEXTID like TEXTID optional 15 | !PREVIOUS like PREVIOUS optional 16 | !OBJ_NAME type STRING optional 17 | !OBJECT type STRING optional . 18 | protected section. 19 | private section. 20 | ENDCLASS. 21 | 22 | 23 | 24 | CLASS ZCX_CUTE_TRANSPORT_NOT_EXIST IMPLEMENTATION. 25 | 26 | 27 | method CONSTRUCTOR. 28 | CALL METHOD SUPER->CONSTRUCTOR 29 | EXPORTING 30 | TEXTID = TEXTID 31 | PREVIOUS = PREVIOUS 32 | . 33 | IF textid IS INITIAL. 34 | me->textid = ZCX_CUTE_TRANSPORT_NOT_EXIST . 35 | ENDIF. 36 | me->OBJ_NAME = OBJ_NAME . 37 | me->OBJECT = OBJECT . 38 | endmethod. 39 | ENDCLASS. 40 | -------------------------------------------------------------------------------- /src/zif_cute_source_info.intf.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZIF_CUTE_SOURCE_INFO 7 | E 8 | CUTE - source info 9 | 2 10 | 1 11 | X 12 | 13 | 14 | 15 | ZIF_CUTE_SOURCE_INFO 16 | GET_FIELD_INFO 17 | E 18 | Get information about field of source 19 | 20 | 21 | ZIF_CUTE_SOURCE_INFO 22 | READ 23 | E 24 | read information about source 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /src/zif_cute_source_info.intf.abap: -------------------------------------------------------------------------------- 1 | interface ZIF_CUTE_SOURCE_INFO 2 | public . 3 | 4 | 5 | types: 6 | BEGIN OF ts_fieldinfo, 7 | fieldname TYPE fieldname, 8 | dfies TYPE dfies, 9 | catalog TYPE lvc_s_fcat, 10 | cute TYPE zcute_field, 11 | domvalues TYPE dd07v_tab, 12 | END OF ts_fieldinfo . 13 | types: 14 | tt_fieldinfos TYPE SORTED TABLE OF ts_fieldinfo WITH UNIQUE KEY fieldname WITH UNIQUE SORTED KEY position COMPONENTS dfies-position . 15 | 16 | data NAME type TYPENAME . 17 | data CLASS type TABCLASS . 18 | data FIELDINFOS type TT_FIELDINFOS . 19 | data CUTE_TECH type ZCUTE_TECH . 20 | data: 21 | cute_fields TYPE SORTED TABLE OF zcute_field WITH UNIQUE KEY fieldname . 22 | 23 | methods READ 24 | importing 25 | !SOURCE type CLIKE 26 | raising 27 | ZCX_CUTE . 28 | methods GET_FIELD_INFO 29 | importing 30 | !FIELDNAME type CLIKE 31 | returning 32 | value(FIELDINFO) type ZIF_CUTE_SOURCE_INFO=>TS_FIELDINFO . 33 | endinterface. 34 | -------------------------------------------------------------------------------- /src/zcl_cute_source_information.clas.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCL_CUTE_SOURCE_INFORMATION 7 | E 8 | CUTE - Source Information 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | ZCL_CUTE_SOURCE_INFORMATION 17 | GET_INSTANCE 18 | E 19 | get instance of source information 20 | 21 | 22 | ZCL_CUTE_SOURCE_INFORMATION 23 | GET_SOURCE_TYPE 24 | E 25 | read type of source (TABL or VIEW) 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /src/zcute.msag.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCUTE 7 | E 8 | CUTE - messages 9 | 10 | 11 | 12 | E 13 | ZCUTE 14 | 000 15 | & & & & 16 | 17 | 18 | E 19 | ZCUTE 20 | 001 21 | data error: duplicate keys 22 | 23 | 24 | E 25 | ZCUTE 26 | 004 27 | No authorization for table &. 28 | 29 | 30 | E 31 | ZCUTE 32 | 005 33 | Selection cancelled. 34 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Enno 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /src/zif_cute.intf.abap: -------------------------------------------------------------------------------- 1 | interface ZIF_CUTE 2 | public . 3 | 4 | 5 | data SOURCE_INFORMATION type ref to ZIF_CUTE_SOURCE_INFO . 6 | data TABLE_HELPER type ref to ZCL_CUTE_TAB_HELPER . 7 | data CONTAINER type ref to CL_GUI_CONTAINER . 8 | data AUTHORIZED_TO type ZCL_CUTE_AUTHORIZATION=>AUTHORIZATION_TYPE . 9 | data UNSAVED_DATA type FLAG . 10 | data SELECTION_SCREEN type ref to ZCL_CUTE_SELECTION_SCREEN . 11 | 12 | methods CHECK_AUTHORITY 13 | raising 14 | ZCX_CUTE_NOT_AUTHORIZED . 15 | methods CHECK_INPUT 16 | returning 17 | value(VALID) type FLAG . 18 | methods CHECK_UNSAVED_DATA 19 | returning 20 | value(UNSAVED_DATA) type FLAG . 21 | methods EDIT 22 | raising 23 | ZCX_CUTE . 24 | methods MAP_EDIT_TO_ORIGIN . 25 | methods MAP_ORIGIN_TO_EDIT . 26 | methods READ . 27 | methods SAVE . 28 | methods SET_CONTAINER 29 | importing 30 | !CONTAINER type ref to CL_GUI_CONTAINER . 31 | methods SET_SOURCE 32 | importing 33 | !SOURCE_INFO type ref to ZIF_CUTE_SOURCE_INFO . 34 | methods SHOW . 35 | methods SELECTION 36 | raising 37 | ZCX_CUTE_SELECTION_SCREEN . 38 | endinterface. 39 | -------------------------------------------------------------------------------- /src/zcl_cute_todo.clas.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCL_CUTE_TODO 7 | E 8 | CUTE - known todos 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | ZCL_CUTE_TODO 17 | BEAUTIFY 18 | E 19 | should be made better 20 | 21 | 22 | ZCL_CUTE_TODO 23 | BUG 24 | E 25 | known error 26 | 27 | 28 | ZCL_CUTE_TODO 29 | CHECK 30 | E 31 | mark to check 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /src/zcute_test_key_two.dtel.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCUTE_TEST_KEY_TWO 7 | E 8 | CHAR03 9 | 55 10 | 10 11 | 20 12 | 40 13 | CUTE test: Key Two 14 | Key Two 15 | Key Two 16 | Key Two 17 | CUTE Key Two 18 | E 19 | KEY_TWO 20 | D 21 | 22 | 23 | D 24 | 25 | 26 | 27 | D 28 | CUTE Test: Schlüssel Zwei 29 | Schlüssel Zwei 30 | Schl. Zwei 31 | Schlüssel Zwei 32 | Cute Schlüssel Zwei 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /src/zcute_test_key_one.dtel.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCUTE_TEST_KEY_ONE 7 | E 8 | CHAR005 9 | 55 10 | 10 11 | 20 12 | 40 13 | CUTE test: Key one 14 | Key One 15 | Key One 16 | Key One 17 | CUTE Key One 18 | E 19 | KEY_ONE 20 | D 21 | 22 | 23 | D 24 | 25 | 26 | 27 | D 28 | CUTE Test: Schlüssel Eins 29 | Schlüssel Eins 30 | Schl. Eins 31 | Schlüssel Eins 32 | CUTE Schlüssel Eins 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /src/zcute_incl.tabl.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCUTE_INCL 7 | E 8 | INTTAB 9 | CUTE: Include 10 | 1 11 | 12 | 13 | 14 | ZCUTE_INCL 15 | INCL_A 16 | 0001 17 | CHAR04 18 | 0 19 | E 20 | 21 | 22 | ZCUTE_INCL 23 | INCL_B 24 | 0002 25 | CHAR05 26 | 0 27 | E 28 | 29 | 30 | ZCUTE_INCL 31 | INCL_INT 32 | 0003 33 | INT4 34 | 0 35 | E 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /src/zcute_test_field_checkbox.dtel.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCUTE_TEST_FIELD_CHECKBOX 7 | E 8 | FLAG 9 | 55 10 | 10 11 | 20 12 | 40 13 | CUTE Test: field for checkbox 14 | Checkbox 15 | Checkbox 16 | Checkbox 17 | CUTE Checkbox 18 | E 19 | FIELD_CHECKBOX 20 | D 21 | 22 | 23 | D 24 | 25 | 26 | 27 | D 28 | CUTE Test: Feld für Checkbox 29 | Checkbox 30 | Checkbox 31 | Checkbox 32 | CUTE Checkbox 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /src/zcute_transport/zcl_cute_customizing_request.clas.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCL_CUTE_CUSTOMIZING_REQUEST 7 | E 8 | CUTE - Customizing Request for Cute 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | ZCL_CUTE_CUSTOMIZING_REQUEST 17 | CONSTRUCTOR 18 | E 19 | CONSTRUCTOR 20 | 21 | 22 | ZCL_CUTE_CUSTOMIZING_REQUEST 23 | REQUEST 24 | E 25 | Request/Task 26 | 27 | 28 | ZCL_CUTE_CUSTOMIZING_REQUEST 29 | VALIDATE_INPUT 30 | E 31 | check if input is ok 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /src/zcute_test_field_simple.dtel.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCUTE_TEST_FIELD_SIMPLE 7 | E 8 | CHAR10 9 | 55 10 | 10 11 | 20 12 | 40 13 | CUTE Test: Simple field 14 | Simple field 15 | Simple 16 | Simple field 17 | CUTE Simple field 18 | E 19 | FIELD_SIMPLE 20 | D 21 | 22 | 23 | D 24 | 25 | 26 | 27 | D 28 | CUTE Test: Einfaches Feld 29 | Einfaches Feld 30 | Einf. Feld 31 | Einfaches Feld 32 | CUTE Einfaches Feld 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /src/zcl_cute_authorization.clas.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCL_CUTE_AUTHORIZATION 7 | E 8 | CUTE - authorization helper 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | ZCL_CUTE_AUTHORIZATION 17 | CHECK_ALL 18 | E 19 | check all authorizations for group and source name 20 | 21 | 22 | ZCL_CUTE_AUTHORIZATION 23 | SM30_GROUP 24 | E 25 | check authorization for SM30 authority group 26 | 27 | 28 | ZCL_CUTE_AUTHORIZATION 29 | SOURCE_NAME 30 | E 31 | check authoriation for table or view 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /src/zcl_cute_tab_helper.clas.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCL_CUTE_TAB_HELPER 7 | E 8 | CUTE - Tab Helper 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | ZCL_CUTE_TAB_HELPER 17 | LINE_CHANGED 18 | E 19 | Update indicator 20 | 21 | 22 | ZCL_CUTE_TAB_HELPER 23 | LINE_DELETED 24 | E 25 | Update indicator 26 | 27 | 28 | ZCL_CUTE_TAB_HELPER 29 | LINE_INSERTED 30 | E 31 | Update indicator 32 | 33 | 34 | ZCL_CUTE_TAB_HELPER 35 | LINE_UNCHANGED 36 | E 37 | Update indicator 38 | 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /src/zcx_cute_data.clas.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCX_CUTE_DATA 7 | E 8 | CUTE - data error 9 | 40 10 | 1 11 | X 12 | X 13 | X 14 | 15 | 16 | 17 |
18 | 005056A038571ED9BDE11099EAF4196D 19 | E 20 | 1 21 | CA== 22 |
23 | 24 | 25 | 005056A038571ED9BDE11099EAF4196D 26 | E 27 | 0001 28 | X 29 | R 30 | 255 31 | error in data 32 | 33 | 34 |
35 |
36 | 37 | 38 | ZCX_CUTE_DATA 39 | CONSTRUCTOR 40 | E 41 | CONSTRUCTOR 42 | 43 | 44 |
45 |
46 |
47 | -------------------------------------------------------------------------------- /src/zcx_cute.clas.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCX_CUTE 7 | E 8 | CUTE - base exception 9 | 40 10 | 1 11 | X 12 | X 13 | X 14 | 15 | 16 | 17 |
18 | 005056A038571ED9BDDF401375BAD958 19 | E 20 | 1 21 | CA== 22 |
23 | 24 | 25 | 005056A038571ED9BDDF401375BAD958 26 | E 27 | 0001 28 | X 29 | R 30 | 255 31 | internal unspecified error 32 | 33 | 34 |
35 |
36 | 37 | 38 | ZCX_CUTE 39 | CONSTRUCTOR 40 | E 41 | CONSTRUCTOR 42 | 43 | 44 |
45 |
46 |
47 | -------------------------------------------------------------------------------- /src/zcx_cute_get_type.clas.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCX_CUTE_GET_TYPE 7 | E 8 | CUTE - get type 9 | 40 10 | 1 11 | X 12 | X 13 | X 14 | 15 | 16 | 17 |
18 | 005056A038571ED9BDDF44E92725D958 19 | E 20 | 1 21 | CA== 22 |
23 | 24 | 25 | 005056A038571ED9BDDF44E92725D958 26 | E 27 | 0001 28 | X 29 | R 30 | 255 31 | Error get type for source 32 | 33 | 34 |
35 |
36 | 37 | 38 | ZCX_CUTE_GET_TYPE 39 | CONSTRUCTOR 40 | E 41 | CONSTRUCTOR 42 | 43 | 44 |
45 |
46 |
47 | -------------------------------------------------------------------------------- /src/zcx_cute_data_duplicate_keys.clas.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCX_CUTE_DATA_DUPLICATE_KEYS 7 | E 8 | CUTE - data error 9 | 40 10 | 1 11 | X 12 | X 13 | X 14 | 15 | 16 | 17 |
18 | 005056A038571ED9BDE20715ECCD5978 19 | E 20 | 1 21 | CA== 22 |
23 | 24 | 25 | 005056A038571ED9BDE20715ECCD5978 26 | E 27 | 0001 28 | X 29 | R 30 | 255 31 | error in data: duplicate keys 32 | 33 | 34 |
35 |
36 | 37 | 38 | ZCX_CUTE_DATA_DUPLICATE_KEYS 39 | CONSTRUCTOR 40 | E 41 | CONSTRUCTOR 42 | 43 | 44 |
45 |
46 |
47 | -------------------------------------------------------------------------------- /src/zcx_cute_not_authorized.clas.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCX_CUTE_NOT_AUTHORIZED 7 | E 8 | CUTE - missing authorization 9 | 40 10 | 1 11 | X 12 | X 13 | X 14 | 15 | 16 | 17 |
18 | 005056A038571ED9BDDF555D9F5FD958 19 | E 20 | 1 21 | CA== 22 |
23 | 24 | 25 | 005056A038571ED9BDDF555D9F5FD958 26 | E 27 | 0001 28 | X 29 | R 30 | 255 31 | not authorized for table maintenance 32 | 33 | 34 |
35 |
36 | 37 | 38 | ZCX_CUTE_NOT_AUTHORIZED 39 | CONSTRUCTOR 40 | E 41 | CONSTRUCTOR 42 | 43 | 44 |
45 |
46 |
47 | -------------------------------------------------------------------------------- /src/zcx_cute_source_not_existent.clas.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCX_CUTE_SOURCE_NOT_EXISTENT 7 | E 8 | CUTE - source does not exist 9 | 40 10 | 1 11 | X 12 | X 13 | X 14 | 15 | 16 | 17 |
18 | 005056A038571ED9BDDF60DD20BB9958 19 | E 20 | 1 21 | CA== 22 |
23 | 24 | 25 | 005056A038571ED9BDDF60DD20BB9958 26 | E 27 | 0001 28 | X 29 | R 30 | 255 31 | source does not exist 32 | 33 | 34 |
35 |
36 | 37 | 38 | ZCX_CUTE_SOURCE_NOT_EXISTENT 39 | CONSTRUCTOR 40 | E 41 | CONSTRUCTOR 42 | 43 | 44 |
45 |
46 |
47 | -------------------------------------------------------------------------------- /src/zcx_cute_not_defined.clas.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCX_CUTE_NOT_DEFINED 7 | E 8 | CUTE - unspecific error 9 | 40 10 | 1 11 | X 12 | X 13 | X 14 | 15 | 16 | 17 |
18 | 005056A038571ED9BDDF8A0C284DD95A 19 | E 20 | 1 21 | CA== 22 |
23 | 24 | 25 | 005056A038571ED9BDDF8A0C284DD95A 26 | E 27 | 0001 28 | X 29 | R 30 | 255 31 | source not valid for table maintenance (missing entry ZCUTE_TECH) 32 | 33 | 34 |
35 |
36 | 37 | 38 | ZCX_CUTE_NOT_DEFINED 39 | CONSTRUCTOR 40 | E 41 | CONSTRUCTOR 42 | 43 | 44 |
45 |
46 |
47 | -------------------------------------------------------------------------------- /src/zcx_cute_transport_no_request.clas.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCX_CUTE_TRANSPORT_NO_REQUEST 7 | E 8 | CUTE - no transport request given 9 | 40 10 | 1 11 | X 12 | X 13 | X 14 | 15 | 16 | 17 |
18 | 005056A038571ED9BDDF4FE906499958 19 | E 20 | 1 21 | CA== 22 |
23 | 24 | 25 | 005056A038571ED9BDDF4FE906499958 26 | E 27 | 0001 28 | X 29 | R 30 | 255 31 | No transport request given 32 | 33 | 34 |
35 |
36 | 37 | 38 | ZCX_CUTE_TRANSPORT_NO_REQUEST 39 | CONSTRUCTOR 40 | E 41 | CONSTRUCTOR 42 | 43 | 44 |
45 |
46 |
47 | -------------------------------------------------------------------------------- /src/zcx_cute_transport_invalid_key.clas.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCX_CUTE_TRANSPORT_INVALID_KEY 7 | E 8 | CUTE - transport request invalid key 9 | 40 10 | 1 11 | X 12 | X 13 | X 14 | 15 | 16 | 17 |
18 | 005056A038571ED9BDDF4B1431F3D958 19 | E 20 | 1 21 | CA== 22 |
23 | 24 | 25 | 005056A038571ED9BDDF4B1431F3D958 26 | E 27 | 0001 28 | X 29 | R 30 | 255 31 | invalid key in transport order 32 | 33 | 34 |
35 |
36 | 37 | 38 | ZCX_CUTE_TRANSPORT_INVALID_KEY 39 | CONSTRUCTOR 40 | E 41 | CONSTRUCTOR 42 | 43 | 44 |
45 |
46 |
47 | -------------------------------------------------------------------------------- /src/zcx_cute_unsupported_category.clas.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCX_CUTE_UNSUPPORTED_CATEGORY 7 | E 8 | CUTE - source category not supported 9 | 40 10 | 1 11 | X 12 | X 13 | X 14 | 15 | 16 | 17 |
18 | 005056A038571ED9BDDF665838879958 19 | E 20 | 1 21 | CA== 22 |
23 | 24 | 25 | 005056A038571ED9BDDF665838879958 26 | E 27 | 0001 28 | X 29 | R 30 | 255 31 | source category not supported for maintenance 32 | 33 | 34 |
35 |
36 | 37 | 38 | ZCX_CUTE_UNSUPPORTED_CATEGORY 39 | CONSTRUCTOR 40 | E 41 | CONSTRUCTOR 42 | 43 | 44 |
45 |
46 |
47 | -------------------------------------------------------------------------------- /src/zcx_cute_transport_not_exist.clas.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCX_CUTE_TRANSPORT_NOT_EXIST 7 | E 8 | CUTE - transport request table/ view does not exist 9 | 40 10 | 1 11 | X 12 | X 13 | X 14 | 15 | 16 | 17 |
18 | 005056A038571EEA8099310F40FE83AE 19 | E 20 | 1 21 | CA== 22 |
23 | 24 | 25 | 005056A038571EEA8099310F40FE83AE 26 | E 27 | 0001 28 | X 29 | R 30 | 255 31 | object &object& &obj_name& does not exist 32 | 33 | 34 |
35 |
36 | 37 | 38 | ZCX_CUTE_TRANSPORT_NOT_EXIST 39 | CONSTRUCTOR 40 | E 41 | CONSTRUCTOR 42 | 43 | 44 |
45 |
46 |
47 | -------------------------------------------------------------------------------- /src/zcl_cute_source_information.clas.abap: -------------------------------------------------------------------------------- 1 | class ZCL_CUTE_SOURCE_INFORMATION definition 2 | public 3 | final 4 | create public . 5 | 6 | public section. 7 | 8 | class-methods GET_INSTANCE 9 | importing 10 | !SOURCE type CLIKE 11 | returning 12 | value(INSTANCE) type ref to ZIF_CUTE_SOURCE_INFO 13 | raising 14 | ZCX_CUTE . 15 | class-methods GET_SOURCE_TYPE 16 | importing 17 | !SOURCE type CLIKE 18 | returning 19 | value(TYPEKIND) type DDTYPEKIND 20 | raising 21 | ZCX_CUTE_GET_TYPE . 22 | protected section. 23 | private section. 24 | ENDCLASS. 25 | 26 | 27 | 28 | CLASS ZCL_CUTE_SOURCE_INFORMATION IMPLEMENTATION. 29 | 30 | 31 | METHOD get_instance. 32 | 33 | CASE get_source_type( source ). 34 | WHEN 'TABL'. 35 | instance = NEW zcl_cute_source_info_tabl( ). 36 | WHEN 'VIEW'. 37 | instance = NEW zcl_cute_source_info_view( ). 38 | WHEN OTHERS. 39 | RAISE EXCEPTION TYPE zcx_cute_unsupported_category. 40 | ENDCASE. 41 | 42 | IF instance IS BOUND. 43 | TRY. 44 | instance->read( source ). 45 | CATCH zcx_cute INTO DATA(error). 46 | MESSAGE error TYPE 'E'. 47 | ENDTRY. 48 | ENDIF. 49 | ENDMETHOD. 50 | 51 | 52 | METHOD get_source_type. 53 | DATA source_name TYPE typename. 54 | DATA gotstate TYPE ddgotstate. 55 | 56 | source_name = source. 57 | 58 | CALL FUNCTION 'DDIF_TYPEINFO_GET' 59 | EXPORTING 60 | typename = source_name 61 | IMPORTING 62 | typekind = typekind 63 | gotstate = gotstate. 64 | IF typekind IS INITIAL. 65 | RAISE EXCEPTION TYPE zcx_cute_source_not_existent. 66 | ENDIF. 67 | 68 | ENDMETHOD. 69 | ENDCLASS. 70 | -------------------------------------------------------------------------------- /src/zcute_field_display_type.doma.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCUTE_FIELD_DISPLAY_TYPE 7 | E 8 | CHAR 9 | 000002 10 | 000002 11 | X 12 | CUTE. Field display types 13 | 14 | 15 | 16 | ZCUTE_FIELD_DISPLAY_TYPE 17 | 0001 18 | E 19 | LK 20 | Listbox (only key) 21 | 22 | 23 | ZCUTE_FIELD_DISPLAY_TYPE 24 | 0002 25 | E 26 | LT 27 | Listbox (only text) 28 | 29 | 30 | ZCUTE_FIELD_DISPLAY_TYPE 31 | 0003 32 | E 33 | LB 34 | Listbox (key + text) 35 | 36 | 37 | ZCUTE_FIELD_DISPLAY_TYPE 38 | 0004 39 | E 40 | CB 41 | Checkbox 42 | 43 | 44 | ZCUTE_FIELD_DISPLAY_TYPE 45 | 0005 46 | E 47 | IC 48 | Icon 49 | 50 | 51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /src/zcl_cute_listbox_helper.clas.abap: -------------------------------------------------------------------------------- 1 | class ZCL_CUTE_LISTBOX_HELPER definition 2 | public 3 | final 4 | create public . 5 | 6 | public section. 7 | 8 | class-methods GET_LISTBOX_FOR_FIX_VALUES 9 | importing 10 | !DOMNAME type DOMNAME 11 | !HANDLE type I 12 | !TYPE type ZCUTE_FIELD_DISPLAY_TYPE 13 | !OBLIGATORY type FLAG optional 14 | returning 15 | value(LISTBOX_ALIAS) type LVC_T_DRAL . 16 | protected section. 17 | private section. 18 | ENDCLASS. 19 | 20 | 21 | 22 | CLASS ZCL_CUTE_LISTBOX_HELPER IMPLEMENTATION. 23 | 24 | 25 | METHOD get_listbox_for_fix_values. 26 | DATA fix_values TYPE STANDARD TABLE OF dd07v. 27 | 28 | CALL FUNCTION 'DD_DOMVALUES_GET' 29 | EXPORTING 30 | domname = domname 31 | text = 'X' 32 | langu = sy-langu 33 | TABLES 34 | dd07v_tab = fix_values 35 | EXCEPTIONS 36 | wrong_textflag = 1 37 | OTHERS = 2. 38 | IF sy-subrc = 0. 39 | CASE type. 40 | WHEN 'LK'. "Listbox only key 41 | listbox_alias = VALUE #( FOR value IN fix_values ( handle = handle int_value = value-domvalue_l value = value-domvalue_l ) ). 42 | WHEN 'LT'. "Listbox only text 43 | listbox_alias = VALUE #( FOR value IN fix_values ( handle = handle int_value = value-domvalue_l value = value-ddtext ) ). 44 | WHEN 'LB'. "Listbox key + text 45 | listbox_alias = VALUE #( FOR value IN fix_values ( handle = handle int_value = value-domvalue_l value = |{ value-domvalue_l } { value-ddtext }| ) ). 46 | ENDCASE. 47 | IF obligatory IS INITIAL. 48 | "insert initial value 49 | INSERT VALUE #( handle = handle int_value = space value = space ) INTO listbox_alias INDEX 1. 50 | ENDIF. 51 | ENDIF. 52 | 53 | ENDMETHOD. 54 | ENDCLASS. 55 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # cute 2 | Custom Table Editor - Alternative to SM30 3 | 4 | ![cute Logo](/img/really-cute-logo.png) 5 | 6 | # abstract 7 | 8 | Table maintenance in SAP systems is mainly done via generated table maintenance views and transaction SM30. These generated maintenance views have some annoying limitations. The project *CUTE - CUstom Table Editor* wants to offer an alternative to this. 9 | 10 | https://blogs.sap.com/2019/10/15/replacing-the-good-old-maintenance-view-generator/ 11 | 12 | # dependencies 13 | 14 | project dodo for displaying the documentation of edited table in docking container 15 | 16 | https://github.com/tricktresor/dodo 17 | 18 | # planned features 19 | 20 | * simple use without any generations needed 21 | * customizing entry or kind of marker interface that a table can be used for editing 22 | * Authorizations settings 23 | * automatic check for foreign key definitions 24 | * automatic search help for table or data element 25 | * automatic descriptive text for fields if check table or domain values exist 26 | * custom checks and data manipulation with table specific code 27 | * locking for key values not the complete table 28 | * visualizing edited, deleted and inserted lines/ values 29 | * transportation function for changed lines (customizing) 30 | * display of all input errors at once without limiting the correction to the one false entry 31 | * as in SM30 maintain also the description of the assigned text table. 32 | * this gives the chance to maintain different languages at once (each language in a different column). 33 | * ... 34 | 35 | # technique 36 | 37 | An ALV-grid seems to be the best tool for most common SAP systems. Dynamic creation for internal tables plus editable ALV-grid already provides the main features for editing. 38 | 39 | # known challenges 40 | 41 | * the grid control only loads the lines into the frontend which are displayed on the screen. With many table lines there might be some issues that only the displayed entries are copied/ changed 42 | * changing / copying key values might be some work... 43 | * there are some issues with wrong F4 value help in a grid when using generated internal tables 44 | * SM30 automatically generated the maintenance of the assigned text table. Might be okay for a simple table but eventually complex for views. 45 | 46 | -------------------------------------------------------------------------------- /src/zcl_cute_selection_screen.clas.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCL_CUTE_SELECTION_SCREEN 7 | E 8 | CUTE - selection screen 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | I 17 | 001 18 | Selection 19 | 19 20 | 21 | 22 | 23 | 24 | ZCL_CUTE_SELECTION_SCREEN 25 | CONSTRUCTOR 26 | E 27 | CONSTRUCTOR 28 | 29 | 30 | ZCL_CUTE_SELECTION_SCREEN 31 | GET_INSTANCE 32 | E 33 | Get instance for table/view 34 | 35 | 36 | ZCL_CUTE_SELECTION_SCREEN 37 | GET_WHERE_CLAUSE 38 | E 39 | Get where clause for table 40 | 41 | 42 | ZCL_CUTE_SELECTION_SCREEN 43 | INIT 44 | E 45 | Iinitialize free selections 46 | 47 | 48 | ZCL_CUTE_SELECTION_SCREEN 49 | SELECTIONS_ID 50 | E 51 | Dynamic selection ID 52 | 53 | 54 | ZCL_CUTE_SELECTION_SCREEN 55 | SHOW 56 | E 57 | Show free selections dialog 58 | 59 | 60 | ZCL_CUTE_SELECTION_SCREEN 61 | SOURCE_INFO 62 | E 63 | CUTE - Source Information 64 | 65 | 66 | ZCL_CUTE_SELECTION_SCREEN 67 | SOURCE_NAME 68 | E 69 | OLE type information 70 | 71 | 72 | 73 | 74 | 75 | -------------------------------------------------------------------------------- /src/zcl_cute_source_info_view.clas.abap: -------------------------------------------------------------------------------- 1 | CLASS zcl_cute_source_info_view DEFINITION 2 | PUBLIC 3 | FINAL 4 | CREATE PUBLIC. 5 | PUBLIC SECTION. 6 | INTERFACES zif_cute_source_info. 7 | 8 | DATA header TYPE dd25v. 9 | DATA technical TYPE dd09l. 10 | DATA components TYPE STANDARD TABLE OF dd27p. 11 | DATA selection_criteria TYPE STANDARD TABLE OF dd28v. 12 | DATA joins TYPE STANDARD TABLE OF dd28j. 13 | DATA base_tables TYPE STANDARD TABLE OF dd26v. 14 | 15 | ENDCLASS. 16 | 17 | 18 | 19 | CLASS ZCL_CUTE_SOURCE_INFO_VIEW IMPLEMENTATION. 20 | 21 | 22 | METHOD zif_cute_source_info~get_field_info. 23 | 24 | READ TABLE zif_cute_source_info~fieldinfos WITH TABLE KEY fieldname = fieldname INTO fieldinfo. 25 | IF sy-subrc > 0. 26 | fieldinfo-fieldname = fieldname. 27 | 28 | CALL FUNCTION 'DDIF_FIELDINFO_GET' 29 | EXPORTING 30 | tabname = zif_cute_source_info~name 31 | fieldname = CONV fieldname( fieldname ) 32 | langu = sy-langu 33 | all_types = 'X' 34 | group_names = ' ' 35 | do_not_write = 'X' 36 | IMPORTING 37 | dfies_wa = fieldinfo-dfies 38 | EXCEPTIONS 39 | not_found = 1 40 | internal_error = 2 41 | OTHERS = 3. 42 | IF sy-subrc = 0. 43 | INSERT fieldinfo INTO TABLE zif_cute_source_info~fieldinfos. 44 | ENDIF. 45 | 46 | ENDIF. 47 | 48 | ENDMETHOD. 49 | 50 | 51 | METHOD zif_cute_source_info~read. 52 | 53 | zif_cute_source_info~class = 'VIEW'. 54 | zif_cute_source_info~name = source. 55 | SELECT SINGLE * FROM zcute_tech INTO zif_cute_source_info~cute_tech WHERE typename = source. 56 | IF sy-subrc > 0. 57 | RAISE EXCEPTION TYPE zcx_cute_not_defined. 58 | ELSE. 59 | SELECT * FROM zcute_field INTO TABLE zif_cute_source_info~cute_fields 60 | WHERE typename = source. 61 | ENDIF. 62 | 63 | CALL FUNCTION 'DDIF_VIEW_GET' 64 | EXPORTING 65 | name = zif_cute_source_info~name 66 | state = 'A' 67 | langu = sy-langu 68 | IMPORTING 69 | dd25v_wa = header 70 | dd09l_wa = technical 71 | TABLES 72 | dd26v_tab = base_tables 73 | dd27p_tab = components 74 | dd28j_tab = joins 75 | dd28v_tab = selection_criteria 76 | EXCEPTIONS 77 | illegal_input = 1 78 | OTHERS = 2. 79 | IF sy-subrc <> 0. 80 | RAISE EXCEPTION TYPE zcx_cute_get_type. 81 | ENDIF. 82 | 83 | ENDMETHOD. 84 | ENDCLASS. 85 | -------------------------------------------------------------------------------- /src/zcl_cute_source_info_tabl.clas.abap: -------------------------------------------------------------------------------- 1 | CLASS zcl_cute_source_info_tabl DEFINITION 2 | PUBLIC 3 | FINAL 4 | CREATE PUBLIC . 5 | 6 | PUBLIC SECTION. 7 | 8 | INTERFACES zif_cute_source_info . 9 | 10 | DATA header TYPE dd02v . 11 | DATA technical TYPE dd09v . 12 | DATA: 13 | components TYPE STANDARD TABLE OF dd03p WITH DEFAULT KEY. 14 | protected section. 15 | private section. 16 | ENDCLASS. 17 | 18 | 19 | 20 | CLASS ZCL_CUTE_SOURCE_INFO_TABL IMPLEMENTATION. 21 | 22 | 23 | METHOD zif_cute_source_info~get_field_info. 24 | 25 | DATA dfies_table TYPE STANDARD TABLE OF dfies. 26 | 27 | READ TABLE zif_cute_source_info~fieldinfos 28 | WITH TABLE KEY fieldname = fieldname INTO fieldinfo. 29 | IF sy-subrc > 0. 30 | fieldinfo-fieldname = fieldname. 31 | 32 | CALL FUNCTION 'DDIF_FIELDINFO_GET' 33 | EXPORTING 34 | tabname = zif_cute_source_info~name 35 | fieldname = CONV fieldname( fieldname ) 36 | langu = sy-langu 37 | all_types = 'X' 38 | group_names = ' ' 39 | do_not_write = 'X' 40 | TABLES 41 | dfies_tab = dfies_table 42 | EXCEPTIONS 43 | not_found = 1 44 | internal_error = 2 45 | OTHERS = 3. 46 | IF sy-subrc = 0. 47 | "dfies dictionary definition 48 | READ TABLE dfies_table INTO fieldinfo-dfies INDEX 1. 49 | IF sy-subrc > 0. 50 | fieldinfo-dfies-fieldname = '%%%'. 51 | ENDIF. 52 | "get cute definition 53 | READ TABLE zif_cute_source_info~cute_fields INTO fieldinfo-cute WITH TABLE KEY fieldname = fieldname. 54 | IF sy-subrc > 0. 55 | fieldinfo-cute-fieldname = '%%%'. 56 | ENDIF. 57 | "insert field information 58 | INSERT fieldinfo INTO TABLE zif_cute_source_info~fieldinfos. 59 | 60 | ENDIF. 61 | 62 | ENDIF. 63 | 64 | ENDMETHOD. 65 | 66 | 67 | METHOD zif_cute_source_info~read. 68 | 69 | DATA source_name TYPE typename. 70 | zif_cute_source_info~class = 'TRANSP'. 71 | zif_cute_source_info~name = source. 72 | 73 | SELECT SINGLE * FROM zcute_tech INTO zif_cute_source_info~cute_tech WHERE typename = source. 74 | IF sy-subrc > 0. 75 | RAISE EXCEPTION TYPE zcx_cute_not_defined. 76 | ELSE. 77 | SELECT * FROM zcute_field INTO TABLE zif_cute_source_info~cute_fields 78 | WHERE typename = source. 79 | ENDIF. 80 | 81 | CALL FUNCTION 'DDIF_TABL_GET' 82 | EXPORTING 83 | name = zif_cute_source_info~name 84 | state = 'A' 85 | langu = sy-langu 86 | IMPORTING 87 | dd02v_wa = header 88 | TABLES 89 | dd03p_tab = components 90 | EXCEPTIONS 91 | illegal_input = 1 92 | OTHERS = 2. 93 | IF sy-subrc > 0. 94 | RAISE EXCEPTION TYPE zcx_cute_get_type. 95 | ELSE. 96 | sort components by position. 97 | LOOP AT components INTO DATA(component). 98 | zif_cute_source_info~get_field_info( component-fieldname ). 99 | ENDLOOP. 100 | ENDIF. 101 | 102 | ENDMETHOD. 103 | ENDCLASS. 104 | -------------------------------------------------------------------------------- /src/zif_cute.intf.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZIF_CUTE 7 | E 8 | CUTE - Main Interface 9 | 2 10 | 1 11 | X 12 | 13 | 14 | 15 | ZIF_CUTE 16 | CHECK_AUTHORITY 17 | E 18 | check edit authority for this table 19 | 20 | 21 | ZIF_CUTE 22 | CHECK_INPUT 23 | E 24 | check data before saving or on request 25 | 26 | 27 | ZIF_CUTE 28 | CHECK_UNSAVED_DATA 29 | E 30 | check data before saving or on request 31 | 32 | 33 | ZIF_CUTE 34 | EDIT 35 | E 36 | Edit source data (table or view) 37 | 38 | 39 | ZIF_CUTE 40 | MAP_EDIT_TO_ORIGIN 41 | E 42 | Map data from display structure to database structure 43 | 44 | 45 | ZIF_CUTE 46 | MAP_ORIGIN_TO_EDIT 47 | E 48 | Map data from database structure to display structure 49 | 50 | 51 | ZIF_CUTE 52 | READ 53 | E 54 | read data from source (table or view) 55 | 56 | 57 | ZIF_CUTE 58 | SAVE 59 | E 60 | Save data 61 | 62 | 63 | ZIF_CUTE 64 | SELECTION 65 | E 66 | Show selection screen if needed 67 | 68 | 69 | ZIF_CUTE 70 | SELECTION_SCREEN 71 | E 72 | CUTE - selection screen 73 | 74 | 75 | ZIF_CUTE 76 | SET_SOURCE 77 | E 78 | Set name of source (table or view) 79 | 80 | 81 | ZIF_CUTE 82 | SHOW 83 | E 84 | Show source data (table or view) 85 | 86 | 87 | ZIF_CUTE 88 | UNSAVED_DATA 89 | E 90 | General Flag 91 | 92 | 93 | 94 | 95 | 96 | -------------------------------------------------------------------------------- /src/zcl_cute_authorization.clas.abap: -------------------------------------------------------------------------------- 1 | class ZCL_CUTE_AUTHORIZATION definition 2 | public 3 | final 4 | create public . 5 | 6 | public section. 7 | 8 | types: 9 | BEGIN OF authorization_type, 10 | maintain TYPE flag, "at least one of create, change or insert 11 | display TYPE flag, 12 | change TYPE flag, 13 | insert TYPE flag, 14 | delete TYPE flag, 15 | END OF authorization_type . 16 | 17 | constants ACTIVITY_CHANGE type ACTIV_AUTH value '02' ##NO_TEXT. 18 | constants ACTIVITY_ADD_OR_CREATE type ACTIV_AUTH value '02' ##NO_TEXT. 19 | constants ACTIVITY_DISPLAY type ACTIV_AUTH value '01' ##NO_TEXT. 20 | constants ACTIVITY_DELETE type ACTIV_AUTH value '06' ##NO_TEXT. 21 | constants ACTIVITY_TRANSPORT type ACTIV_AUTH value '21' ##NO_TEXT. 22 | 23 | class-methods SM30_GROUP 24 | importing 25 | !GROUP type BEGRU 26 | !ACTIVITY type ACTIV_AUTH 27 | returning 28 | value(AUTHORIZED) type FLAG . 29 | class-methods SOURCE_NAME 30 | importing 31 | !NAME type TYPENAME 32 | !ACTIVITY type ACTIV_AUTH 33 | returning 34 | value(AUTHORIZED) type FLAG . 35 | class-methods CHECK_ALL 36 | importing 37 | !GROUP type BEGRU 38 | !NAME type TYPENAME 39 | returning 40 | value(AUTHORIZED_TO) type AUTHORIZATION_TYPE . 41 | PROTECTED SECTION. 42 | PRIVATE SECTION. 43 | ENDCLASS. 44 | 45 | 46 | 47 | CLASS ZCL_CUTE_AUTHORIZATION IMPLEMENTATION. 48 | 49 | 50 | METHOD check_all. 51 | 52 | "Insert 53 | authorized_to-insert = sm30_group( 54 | group = group 55 | activity = activity_add_or_create ). 56 | 57 | authorized_to-insert = source_name( 58 | name = name 59 | activity = activity_add_or_create ). 60 | 61 | "Change 62 | authorized_to-change = zcl_cute_authorization=>sm30_group( 63 | group = group 64 | activity = activity_change ). 65 | 66 | authorized_to-change = source_name( 67 | name = name 68 | activity = activity_change ). 69 | 70 | "Delete 71 | authorized_to-delete = sm30_group( 72 | group = group 73 | activity = activity_delete ). 74 | 75 | authorized_to-delete = source_name( 76 | name = name 77 | activity = activity_delete ). 78 | 79 | "Maintain any? 80 | IF authorized_to-insert = abap_true 81 | OR authorized_to-change = abap_true 82 | OR authorized_to-delete = abap_true. 83 | authorized_to-maintain = abap_true. 84 | ENDIF. 85 | 86 | "Display 87 | authorized_to-display = sm30_group( 88 | group = group 89 | activity = activity_display ). 90 | 91 | authorized_to-display = source_name( 92 | name = name 93 | activity = activity_display ). 94 | 95 | ENDMETHOD. 96 | 97 | 98 | METHOD sm30_group. 99 | 100 | IF group IS INITIAL. 101 | authorized = abap_true. 102 | ELSE. 103 | "Check authority for SM30 group 104 | AUTHORITY-CHECK OBJECT 'S_TABU_DIS' 105 | ID 'DICBERCLS' FIELD group 106 | ID 'ACTVT' FIELD activity. 107 | IF sy-subrc = 0. 108 | authorized = abap_true. 109 | ELSE. 110 | authorized = abap_false. 111 | ENDIF. 112 | ENDIF. 113 | 114 | ENDMETHOD. 115 | 116 | 117 | METHOD source_name. 118 | 119 | "check authority for table name 120 | AUTHORITY-CHECK OBJECT 'S_TABU_NAM' 121 | ID 'ACTVT' FIELD activity 122 | ID 'TABLE' FIELD name. 123 | IF sy-subrc = 0. 124 | authorized = abap_true. 125 | ELSE. 126 | authorized = abap_false. 127 | ENDIF. 128 | 129 | ENDMETHOD. 130 | ENDCLASS. 131 | -------------------------------------------------------------------------------- /src/zcute_main.prog.abap: -------------------------------------------------------------------------------- 1 | REPORT zcute_main. 2 | 3 | 4 | PARAMETERS p_table TYPE typename DEFAULT 'ZCUTE_TEST'. 5 | PARAMETERS p_edit TYPE flag RADIOBUTTON GROUP m DEFAULT 'X' USER-COMMAND onli. 6 | PARAMETERS p_show TYPE flag RADIOBUTTON GROUP m . 7 | 8 | 9 | 10 | CLASS lcl_main DEFINITION. 11 | PUBLIC SECTION. 12 | METHODS pbo 13 | IMPORTING 14 | edit TYPE flag. 15 | METHODS pai 16 | IMPORTING 17 | ucomm TYPE syucomm. 18 | METHODS set_status. 19 | METHODS ask_save_data 20 | RETURNING 21 | VALUE(result) TYPE flag. 22 | 23 | PRIVATE SECTION. 24 | DATA cc TYPE REF TO cl_gui_custom_container. 25 | DATA cute TYPE REF TO zif_cute. 26 | ENDCLASS. 27 | 28 | CLASS lcl_main IMPLEMENTATION. 29 | METHOD pbo. 30 | 31 | set_status( ). 32 | 33 | TRY. 34 | cute = zcl_cute_main=>get_instance( p_table ). 35 | IF cc IS INITIAL. 36 | cc = NEW #( container_name = 'CC' ). 37 | ENDIF. 38 | 39 | cute->set_container( cc ). 40 | IF edit = abap_true. 41 | cute->edit( ). 42 | ELSE. 43 | cute->show( ). 44 | ENDIF. 45 | 46 | cl_gui_container=>set_focus( cc ). 47 | 48 | CATCH zcx_cute INTO DATA(error). 49 | MESSAGE error TYPE 'E' DISPLAY LIKE 'I'. 50 | 51 | ENDTRY. 52 | ENDMETHOD. 53 | 54 | METHOD pai. 55 | 56 | CASE sy-ucomm. 57 | WHEN 'BACK' OR 'HOME' OR 'CANCEL'. 58 | IF cute->check_input( ) = abap_false. 59 | MESSAGE 'input error' TYPE 'S'. 60 | ENDIF. 61 | 62 | IF cute->check_unsaved_data( ) = abap_true. 63 | DATA(answer) = ask_save_data( ). 64 | CASE answer. 65 | WHEN '1'. 66 | cute->save( ). 67 | SET SCREEN 0. 68 | LEAVE SCREEN. 69 | WHEN '2'. 70 | SET SCREEN 0. 71 | LEAVE SCREEN. 72 | WHEN 'A'. 73 | RETURN. 74 | ENDCASE. 75 | ELSE. 76 | SET SCREEN 0. 77 | LEAVE SCREEN. 78 | 79 | ENDIF. 80 | WHEN OTHERS. 81 | 82 | ENDCASE. 83 | 84 | 85 | ENDMETHOD. 86 | 87 | METHOD ask_save_data. 88 | DATA answer TYPE c LENGTH 1. 89 | 90 | CALL FUNCTION 'POPUP_TO_CONFIRM' 91 | EXPORTING 92 | titlebar = 'unsaved data'(001) 93 | text_question = 'Save data before leaving?'(002) 94 | text_button_1 = 'Yes, please'(yes) 95 | icon_button_1 = 'ICON_SYSTEM_SAVE' 96 | text_button_2 = 'No, thanks'(ano) 97 | icon_button_2 = 'ICON_SYSTEM_BACK' 98 | default_button = '1' 99 | display_cancel_button = 'X' 100 | start_column = 25 101 | start_row = 6 102 | popup_type = 'ICON_MESSAGE_QUESTION' 103 | IMPORTING 104 | answer = answer 105 | EXCEPTIONS 106 | text_not_found = 1 107 | OTHERS = 2. 108 | IF sy-subrc = 0. 109 | result = answer. 110 | ENDIF. 111 | 112 | 113 | ENDMETHOD. 114 | 115 | METHOD set_status. 116 | SET PF-STATUS '100'. 117 | IF p_edit = abap_true. 118 | SET TITLEBAR 'EDIT' WITH p_table. 119 | ELSE. 120 | SET TITLEBAR 'SHOW' WITH p_table. 121 | ENDIF. 122 | ENDMETHOD. 123 | 124 | ENDCLASS. 125 | 126 | DATA main TYPE REF TO lcl_main. 127 | 128 | START-OF-SELECTION. 129 | 130 | CALL SCREEN 100. 131 | 132 | 133 | 134 | *&---------------------------------------------------------------------* 135 | *& Module STATUS_0100 OUTPUT 136 | *&---------------------------------------------------------------------* 137 | MODULE status_0100 OUTPUT. 138 | 139 | CHECK main IS INITIAL. 140 | main = NEW #( ). 141 | main->pbo( p_edit ). 142 | 143 | ENDMODULE. 144 | 145 | *&---------------------------------------------------------------------* 146 | *& Module USER_COMMAND_0100 INPUT 147 | *&---------------------------------------------------------------------* 148 | MODULE user_command_0100 INPUT. 149 | 150 | main->pai( sy-ucomm ). 151 | 152 | ENDMODULE. 153 | -------------------------------------------------------------------------------- /src/zcl_cute_table_edit.clas.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCL_CUTE_TABLE_EDIT 7 | E 8 | CUTE - edit table 9 | 1 10 | X 11 | X 12 | X 13 | ZCUTE 14 | 15 | 16 | 17 | I 18 | DCT 19 | Documentation 20 | 23 21 | 22 | 23 | I 24 | DOC 25 | Show documentation 26 | 28 27 | 28 | 29 | 30 | 31 | ZCL_CUTE_TABLE_EDIT 32 | CHECK_KEYS 33 | E 34 | Check duplicate keys 35 | 36 | 37 | ZCL_CUTE_TABLE_EDIT 38 | EDIT_GRID 39 | E 40 | Edit grid 41 | 42 | 43 | ZCL_CUTE_TABLE_EDIT 44 | ERRORS_EXIST 45 | E 46 | General Flag 47 | 48 | 49 | ZCL_CUTE_TABLE_EDIT 50 | GRID 51 | E 52 | GRID 53 | 54 | 55 | ZCL_CUTE_TABLE_EDIT 56 | GRID_EXCLUDED_FUNCTIONS 57 | E 58 | get functions we do not want to offer in grid 59 | 60 | 61 | ZCL_CUTE_TABLE_EDIT 62 | HANDLE_AFTER_USER_COMMAND 63 | E 64 | Handle after user command 65 | 66 | 67 | ZCL_CUTE_TABLE_EDIT 68 | HANDLE_DATA_CHANGED 69 | E 70 | Handle Data_changed of grid 71 | 72 | 73 | ZCL_CUTE_TABLE_EDIT 74 | HANDLE_TOOLBAR 75 | E 76 | Handle Toolbar of grid 77 | 78 | 79 | ZCL_CUTE_TABLE_EDIT 80 | HANDLE_USER_COMMAND 81 | E 82 | Handle User_Command of grid 83 | 84 | 85 | ZCL_CUTE_TABLE_EDIT 86 | PROCESS_CHANGED_DATA 87 | E 88 | handle changed data 89 | 90 | 91 | ZCL_CUTE_TABLE_EDIT 92 | PROCESS_DELETED_DATA 93 | E 94 | handle deleted data 95 | 96 | 97 | ZCL_CUTE_TABLE_EDIT 98 | PROCESS_INSERTED_DATA 99 | E 100 | handle new data 101 | 102 | 103 | ZCL_CUTE_TABLE_EDIT 104 | REFRESH 105 | E 106 | refresh display due to color changes 107 | 108 | 109 | ZCL_CUTE_TABLE_EDIT 110 | SET_KEY_FIELDS_READ_ONLY 111 | E 112 | Set key fields to read only so that they cannot changed 113 | 114 | 115 | ZCL_CUTE_TABLE_EDIT 116 | SET_UPDATE_FLAG 117 | E 118 | set update flag for line 119 | 120 | 121 | ZCL_CUTE_TABLE_EDIT 122 | SPLITTER 123 | E 124 | SPLITTER 125 | 126 | 127 | 128 | 129 | 130 | -------------------------------------------------------------------------------- /src/zcute_transport/zcl_cute_customizing_request.clas.abap: -------------------------------------------------------------------------------- 1 | class ZCL_CUTE_CUSTOMIZING_REQUEST definition 2 | public 3 | final 4 | create public . 5 | 6 | public section. 7 | 8 | interfaces ZIF_CUTE_CUSTOMIZING_REQUEST . 9 | 10 | methods CONSTRUCTOR 11 | importing 12 | !I_REQUEST type E071-TRKORR optional 13 | !I_TASK type E071-TRKORR optional . 14 | PROTECTED SECTION. 15 | PRIVATE SECTION. 16 | 17 | DATA request TYPE e071-trkorr . 18 | DATA task TYPE e071-trkorr . 19 | DATA: 20 | e071_entries TYPE TABLE OF e071 . 21 | DATA: 22 | e071k_entries TYPE TABLE OF e071k . 23 | DATA ko200 TYPE ko200 . 24 | 25 | METHODS validate_input 26 | IMPORTING 27 | !table_name TYPE tabname 28 | !table_key TYPE trobj_name 29 | RAISING 30 | zcx_cute_transport_no_request 31 | zcx_cute_transport_not_exist 32 | zcx_cute_transport_invalid_key. 33 | ENDCLASS. 34 | 35 | 36 | 37 | CLASS ZCL_CUTE_CUSTOMIZING_REQUEST IMPLEMENTATION. 38 | 39 | 40 | METHOD constructor. 41 | request = i_request. 42 | task = i_task. 43 | ENDMETHOD. 44 | 45 | 46 | METHOD validate_input. 47 | DATA subrc LIKE sy-subrc. 48 | 49 | IF request IS INITIAL AND task IS INITIAL. 50 | RAISE EXCEPTION TYPE zcx_cute_transport_no_request. 51 | ENDIF. 52 | " another check if the table does exist in DDIC will come later 53 | IF table_name IS INITIAL. 54 | RAISE EXCEPTION TYPE zcx_cute_transport_not_exist 55 | EXPORTING 56 | object = 'R3TR-TABL' 57 | obj_name = `missing`. 58 | ENDIF. 59 | " another check if the key is more or less valid to the table key will come later ( empty key is not valid ^^ ) 60 | IF table_key IS INITIAL. 61 | RAISE EXCEPTION TYPE zcx_cute_transport_invalid_key. 62 | ENDIF. 63 | 64 | CALL FUNCTION 'DB_EXISTS_TABLE' 65 | EXPORTING 66 | tabname = table_name 67 | IMPORTING 68 | subrc = subrc. 69 | 70 | IF subrc <> 0. 71 | RAISE EXCEPTION TYPE zcx_cute_transport_not_exist 72 | EXPORTING 73 | object = 'TABL' 74 | obj_name = CONV #( table_name ). 75 | 76 | ENDIF. 77 | 78 | ENDMETHOD. 79 | 80 | 81 | METHOD zif_cute_customizing_request~add_key_to_request. 82 | validate_input( table_name = table_name table_key = table_key ). 83 | 84 | DATA(e071k) = VALUE e071k( object = 'TABU' 85 | objname = table_name 86 | tabkey = table_key 87 | pgmid = 'R3TR' 88 | objfunc = 'K' 89 | as4pos = 0 90 | mastername = table_name 91 | mastertype = 'TABU' ). 92 | 93 | ko200 = CORRESPONDING ko200( e071k ). 94 | 95 | APPEND e071k TO e071k_entries. 96 | 97 | CALL FUNCTION 'TR_OBJECT_CHECK' 98 | EXPORTING 99 | wi_ko200 = ko200. 100 | 101 | CALL FUNCTION 'TR_OBJECT_INSERT' 102 | EXPORTING 103 | wi_order = zif_cute_customizing_request~get_request( ) 104 | wi_ko200 = ko200 " Eingabe editiertes Objekt 105 | TABLES 106 | wt_e071k = e071k_entries " Eingabetabelle editierter Objekt-keys 107 | EXCEPTIONS 108 | cancel_edit_other_error = 1 109 | show_only_other_error = 2 110 | OTHERS = 3. 111 | 112 | IF sy-subrc <> 0. 113 | MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno 114 | WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. 115 | ENDIF. 116 | 117 | ENDMETHOD. 118 | 119 | 120 | METHOD zif_cute_customizing_request~get_request. 121 | IF task IS INITIAL. 122 | r_request = request. 123 | ELSE. 124 | r_request = task. 125 | ENDIF. 126 | ENDMETHOD. 127 | 128 | 129 | METHOD zif_cute_customizing_request~set_request_via_popup. 130 | 131 | CALL FUNCTION 'TRINT_ORDER_CHOICE' 132 | EXPORTING 133 | wi_order_type = 'W' 134 | wi_task_type = 'Q' 135 | wi_category = 'CUST' 136 | IMPORTING 137 | we_order = request 138 | we_task = task 139 | TABLES 140 | wt_e071 = e071_entries 141 | wt_e071k = e071k_entries 142 | EXCEPTIONS 143 | no_correction_selected = 1 144 | display_mode = 2 145 | object_append_error = 3 146 | recursive_call = 4 147 | wrong_order_type = 5 148 | OTHERS = 6. 149 | 150 | ENDMETHOD. 151 | ENDCLASS. 152 | -------------------------------------------------------------------------------- /src/zcute_tech.tabl.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCUTE_TECH 7 | E 8 | TRANSP 9 | X 10 | CUTE: Technical information 11 | X 12 | C 13 | 3 14 | 15 | 16 | ZCUTE_TECH 17 | A 18 | 0 19 | APPL2 20 | N 21 | 22 | 23 | 24 | ZCUTE_TECH 25 | MANDT 26 | 0001 27 | X 28 | MANDT 29 | 0 30 | X 31 | E 32 | 33 | 34 | ZCUTE_TECH 35 | TYPENAME 36 | 0002 37 | X 38 | TYPENAME 39 | 0 40 | X 41 | D 42 | E 43 | 44 | 45 | ZCUTE_TECH 46 | NO_EDIT 47 | 0003 48 | FLAG 49 | 0 50 | X 51 | X 52 | F 53 | E 54 | 55 | 56 | ZCUTE_TECH 57 | USER_GROUP 58 | 0004 59 | XUCLASS 60 | USGRP 61 | 0 62 | X 63 | P 64 | E 65 | 66 | 67 | ZCUTE_TECH 68 | CUTE_GROUP 69 | 0005 70 | CHAR20 71 | 0 72 | X 73 | E 74 | 75 | 76 | ZCUTE_TECH 77 | SM30_GROUP 78 | 0006 79 | BRGRU 80 | 0 81 | X 82 | E 83 | 84 | 85 | ZCUTE_TECH 86 | ALLOW_USER_SPEC_LAYOUT 87 | 0007 88 | FLAG 89 | 0 90 | X 91 | X 92 | F 93 | E 94 | 95 | 96 | ZCUTE_TECH 97 | CUST_CHECK_CLASS 98 | 0008 99 | SEOCLSNAME 100 | 0 101 | X 102 | E 103 | 104 | 105 | ZCUTE_TECH 106 | SHOW_SELOPT 107 | 0009 108 | FLAG 109 | 0 110 | X 111 | X 112 | F 113 | E 114 | 115 | 116 | 117 | 118 | ZCUTE_TECH 119 | USER_GROUP 120 | SYST 121 | MANDT 122 | USGRP 123 | MANDT 124 | 0001 125 | MANDT 126 | CLNT 127 | 000003 128 | 129 | 130 | ZCUTE_TECH 131 | USER_GROUP 132 | ZCUTE_TECH 133 | USER_GROUP 134 | USGRP 135 | USERGROUP 136 | 0002 137 | XUCLASS 138 | CHAR 139 | 000012 140 | 141 | 142 | 143 | 144 | ZCUTE_TECH 145 | USER_GROUP 146 | E 147 | USGRP 148 | 149 | 150 | 151 | 152 | 153 | -------------------------------------------------------------------------------- /src/zcl_cute_selection_screen.clas.abap: -------------------------------------------------------------------------------- 1 | class ZCL_CUTE_SELECTION_SCREEN definition 2 | public 3 | final 4 | create private . 5 | 6 | public section. 7 | 8 | data WHERE_CLAUSE type RSDS_TWHERE . 9 | data EXPRESSIONS type RSDS_TEXPR . 10 | data FIELD_RANGES type RSDS_TRANGE . 11 | data NUMBER_OF_ACTIVE_FIELDS type I . 12 | data: 13 | fields TYPE STANDARD TABLE OF rsdsfields WITH EMPTY KEY . 14 | data SOURCE_NAME type TYPEINFO . 15 | 16 | methods CONSTRUCTOR 17 | importing 18 | !SOURCE_INFO type ref to ZIF_CUTE_SOURCE_INFO . 19 | methods SHOW 20 | raising 21 | ZCX_CUTE_SELECTION_SCREEN . 22 | methods GET_WHERE_CLAUSE 23 | returning 24 | value(WHERE_CLAUSE) type RSDS_WHERE_TAB . 25 | class-methods GET_INSTANCE 26 | importing 27 | !SOURCE_INFO type ref to ZIF_CUTE_SOURCE_INFO 28 | returning 29 | value(INSTANCE) type ref to ZCL_CUTE_SELECTION_SCREEN . 30 | PROTECTED SECTION. 31 | private section. 32 | 33 | types: 34 | BEGIN OF ts_instance, 35 | name TYPE typename, 36 | ref TYPE REF TO zcl_cute_selection_screen, 37 | END OF ts_instance . 38 | types: 39 | tt_instances TYPE SORTED TABLE OF ts_instance WITH UNIQUE KEY name . 40 | 41 | data SELECTIONS_ID type DYNSELID . 42 | data SOURCE_INFO type ref to ZIF_CUTE_SOURCE_INFO . 43 | class-data INSTANCES type TT_INSTANCES . 44 | 45 | methods INIT 46 | raising 47 | ZCX_CUTE_SELECTION_SCREEN . 48 | ENDCLASS. 49 | 50 | 51 | 52 | CLASS ZCL_CUTE_SELECTION_SCREEN IMPLEMENTATION. 53 | 54 | 55 | METHOD constructor. 56 | me->source_info = source_info. 57 | source_name = source_info->name. 58 | init( ). 59 | ENDMETHOD. 60 | 61 | 62 | METHOD get_instance. 63 | 64 | READ TABLE instances INTO DATA(instance_exist) 65 | WITH TABLE KEY name = source_info->name. 66 | IF sy-subrc > 0. 67 | INSERT VALUE #( 68 | name = source_info->name 69 | ref = NEW zcl_cute_selection_screen( source_info ) ) 70 | INTO TABLE instances ASSIGNING FIELD-SYMBOL(). 71 | instance = -ref. 72 | ENDIF. 73 | 74 | ENDMETHOD. 75 | 76 | 77 | METHOD get_where_clause. 78 | 79 | READ TABLE me->where_clause 80 | WITH TABLE KEY tablename = source_info->name 81 | INTO DATA(where). 82 | IF sy-subrc = 0. 83 | where_clause = where-where_tab. 84 | ENDIF. 85 | 86 | ENDMETHOD. 87 | 88 | 89 | METHOD init. 90 | 91 | DATA tables TYPE STANDARD TABLE OF rsdstabs WITH EMPTY KEY. 92 | 93 | APPEND source_info->name TO tables. 94 | 95 | DATA(fieldinfos) = source_info->fieldinfos. 96 | 97 | LOOP AT fieldinfos INTO DATA(fieldinfo) USING KEY position. 98 | CHECK fieldinfo-dfies-datatype <> 'CLNT'. 99 | INSERT VALUE #( 100 | tablename = source_info->name 101 | fieldname = fieldinfo-dfies-fieldname ) 102 | INTO TABLE fields. 103 | ENDLOOP. 104 | 105 | 106 | CALL FUNCTION 'FREE_SELECTIONS_INIT' 107 | EXPORTING 108 | kind = 'T' 109 | IMPORTING 110 | selection_id = selections_id 111 | number_of_active_fields = number_of_active_fields 112 | expressions = expressions 113 | TABLES 114 | tables_tab = tables 115 | fields_tab = fields 116 | EXCEPTIONS 117 | fields_incomplete = 1 118 | fields_no_join = 2 119 | field_not_found = 3 120 | no_tables = 4 121 | table_not_found = 5 122 | expression_not_supported = 6 123 | incorrect_expression = 7 124 | illegal_kind = 8 125 | area_not_found = 9 126 | inconsistent_area = 10 127 | kind_f_no_fields_left = 11 128 | kind_f_no_fields = 12 129 | too_many_fields = 13 130 | dup_field = 14 131 | field_no_type = 15 132 | field_ill_type = 16 133 | dup_event_field = 17 134 | node_not_in_ldb = 18 135 | area_no_field = 19 136 | OTHERS = 20. 137 | IF sy-subrc <> 0. 138 | RAISE EXCEPTION TYPE zcx_cute_selection_screen. 139 | ENDIF. 140 | 141 | ENDMETHOD. 142 | 143 | 144 | METHOD show. 145 | 146 | "Call dynamic selections dialog 147 | CALL FUNCTION 'FREE_SELECTIONS_DIALOG' 148 | EXPORTING 149 | selection_id = selections_id 150 | title = 'Selection'(001) 151 | status = 1 "normal selection 152 | as_window = abap_false 153 | tree_visible = abap_true 154 | IMPORTING 155 | where_clauses = where_clause 156 | expressions = expressions 157 | field_ranges = field_ranges 158 | number_of_active_fields = number_of_active_fields 159 | TABLES 160 | fields_tab = fields 161 | EXCEPTIONS 162 | OTHERS = 1. 163 | IF sy-subrc > 0. 164 | RAISE EXCEPTION TYPE zcx_cute_selection_screen. 165 | ENDIF. 166 | 167 | ENDMETHOD. 168 | ENDCLASS. 169 | -------------------------------------------------------------------------------- /src/zcute_field.tabl.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCUTE_FIELD 7 | E 8 | TRANSP 9 | X 10 | CUTE: Field definition and layout 11 | X 12 | C 13 | 3 14 | 15 | 16 | ZCUTE_FIELD 17 | A 18 | 0 19 | APPL2 20 | N 21 | 22 | 23 | 24 | ZCUTE_FIELD 25 | MANDT 26 | 0001 27 | X 28 | MANDT 29 | 0 30 | X 31 | E 32 | 33 | 34 | ZCUTE_FIELD 35 | TYPENAME 36 | 0002 37 | X 38 | TYPENAME 39 | ZCUTE_TECH 40 | 0 41 | X 42 | P 43 | DD_TYPES 44 | TYPENAME 45 | E 46 | 47 | 48 | ZCUTE_FIELD 49 | FIELDNAME 50 | 0003 51 | X 52 | FIELDNAME 53 | 0 54 | X 55 | E 56 | 57 | 58 | ZCUTE_FIELD 59 | FIELDTYPE 60 | 0004 61 | ZCUTE_FIELD_DISPLAY_TYPE 62 | 0 63 | X 64 | X 65 | F 66 | E 67 | 68 | 69 | ZCUTE_FIELD 70 | COLOR 71 | 0005 72 | LVC_COL 73 | 0 74 | X 75 | E 76 | 77 | 78 | ZCUTE_FIELD 79 | INTENSIFIED 80 | 0006 81 | LVC_INT 82 | 0 83 | X 84 | E 85 | 86 | 87 | ZCUTE_FIELD 88 | INVERTED 89 | 0007 90 | LVC_INV 91 | 0 92 | X 93 | E 94 | 95 | 96 | ZCUTE_FIELD 97 | OUTPUT_LENGTH 98 | 0008 99 | LVC_OUTLEN 100 | 0 101 | X 102 | E 103 | 104 | 105 | ZCUTE_FIELD 106 | OBLIGATORY 107 | 0009 108 | FLAG 109 | 0 110 | X 111 | X 112 | F 113 | E 114 | 115 | 116 | ZCUTE_FIELD 117 | ADD_COLUMN_FOR_TEXT 118 | 0010 119 | FLAG 120 | 0 121 | X 122 | X 123 | F 124 | E 125 | 126 | 127 | ZCUTE_FIELD 128 | READ_ONLY 129 | 0011 130 | FLAG 131 | 0 132 | X 133 | X 134 | F 135 | E 136 | 137 | 138 | 139 | 140 | ZCUTE_FIELD 141 | TYPENAME 142 | ZCUTE_FIELD 143 | MANDT 144 | ZCUTE_TECH 145 | MANDT 146 | 0001 147 | MANDT 148 | CLNT 149 | 000003 150 | 151 | 152 | ZCUTE_FIELD 153 | TYPENAME 154 | ZCUTE_FIELD 155 | TYPENAME 156 | ZCUTE_TECH 157 | TYPENAME 158 | 0002 159 | OBJECTNAME 160 | CHAR 161 | 000030 162 | 163 | 164 | 165 | 166 | ZCUTE_FIELD 167 | TYPENAME 168 | E 169 | ZCUTE_TECH 170 | 171 | 172 | 173 | 174 | 175 | -------------------------------------------------------------------------------- /src/zcute_testt.tabl.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCUTE_TESTT 7 | E 8 | TRANSP 9 | X 10 | CUTE: Test database 11 | X 12 | C 13 | 3 14 | 15 | 16 | ZCUTE_TESTT 17 | A 18 | 0 19 | APPL2 20 | X 21 | N 22 | 23 | 24 | 25 | ZCUTE_TESTT 26 | MANDT 27 | 0001 28 | X 29 | MANDT 30 | 0 31 | X 32 | E 33 | 34 | 35 | ZCUTE_TESTT 36 | KEY_ONE 37 | 0002 38 | X 39 | ZCUTE_TEST_KEY_ONE 40 | ZCUTE_TEST 41 | 0 42 | X 43 | P 44 | E 45 | 46 | 47 | ZCUTE_TESTT 48 | KEY_TWO 49 | 0003 50 | X 51 | ZCUTE_TEST_KEY_TWO 52 | ZCUTE_TEST 53 | 0 54 | X 55 | P 56 | E 57 | 58 | 59 | ZCUTE_TESTT 60 | SPRAS 61 | 0004 62 | X 63 | SPRAS 64 | T002 65 | 0 66 | X 67 | P 68 | H_T002 69 | SPRAS 70 | E 71 | X 72 | 73 | 74 | ZCUTE_TESTT 75 | DESCRIPTION 76 | 0005 77 | TEXT40 78 | 0 79 | X 80 | E 81 | 82 | 83 | 84 | 85 | ZCUTE_TESTT 86 | KEY_ONE 87 | ZCUTE_TESTT 88 | MANDT 89 | ZCUTE_TEST 90 | MANDT 91 | 0001 92 | MANDT 93 | CLNT 94 | 000003 95 | 96 | 97 | ZCUTE_TESTT 98 | KEY_ONE 99 | ZCUTE_TESTT 100 | KEY_ONE 101 | ZCUTE_TEST 102 | KEY_ONE 103 | 0002 104 | CHAR05 105 | CHAR 106 | 000005 107 | 108 | 109 | ZCUTE_TESTT 110 | KEY_ONE 111 | ZCUTE_TESTT 112 | KEY_TWO 113 | ZCUTE_TEST 114 | KEY_TWO 115 | 0003 116 | CHAR03 117 | CHAR 118 | 000003 119 | 120 | 121 | ZCUTE_TESTT 122 | KEY_TWO 123 | ZCUTE_TESTT 124 | MANDT 125 | ZCUTE_TEST 126 | MANDT 127 | 0001 128 | MANDT 129 | CLNT 130 | 000003 131 | 132 | 133 | ZCUTE_TESTT 134 | KEY_TWO 135 | ZCUTE_TESTT 136 | KEY_ONE 137 | ZCUTE_TEST 138 | KEY_ONE 139 | 0002 140 | CHAR05 141 | CHAR 142 | 000005 143 | 144 | 145 | ZCUTE_TESTT 146 | KEY_TWO 147 | ZCUTE_TESTT 148 | KEY_TWO 149 | ZCUTE_TEST 150 | KEY_TWO 151 | 0003 152 | CHAR03 153 | CHAR 154 | 000003 155 | 156 | 157 | ZCUTE_TESTT 158 | SPRAS 159 | ZCUTE_TESTT 160 | SPRAS 161 | T002 162 | SPRAS 163 | 0001 164 | SPRAS 165 | LANG 166 | 000001 167 | 168 | 169 | 170 | 171 | ZCUTE_TESTT 172 | KEY_ONE 173 | E 174 | ZCUTE_TEST 175 | TEXT 176 | CN 177 | 1 178 | 179 | 180 | ZCUTE_TESTT 181 | KEY_TWO 182 | E 183 | ZCUTE_TEST 184 | TEXT 185 | CN 186 | 1 187 | 188 | 189 | ZCUTE_TESTT 190 | SPRAS 191 | E 192 | T002 193 | 194 | 195 | 196 | 197 | 198 | -------------------------------------------------------------------------------- /src/zcute_main.prog.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCUTE_MAIN 7 | 1 8 | E 9 | X 10 | X 11 | 12 | 13 | 14 |
15 | ZCUTE_MAIN 16 | 0100 17 | E 18 | CUTE - maintenance tool 19 | N 20 | 0100 21 | 055 22 | 255 23 | X 24 |
25 | 26 | 27 | SCREEN 28 | SCREEN 29 | 30 | 31 | CUST_CTRL 32 | CC 33 | SCREEN 34 | 001 35 | 001 36 | 255 37 | 055 38 | X 39 | X 40 | 027 41 | 127 42 | 43 | 44 | 45 | 46 | SCREEN 47 | SCREEN 48 | OKCODE 49 | SY-UCOMM 50 | ____________________ 51 | 020 52 | 020 53 | 001 54 | CHAR 55 | X 56 | 57 | 58 | 59 | 60 | PROCESS BEFORE OUTPUT. 61 | 62 | 63 | MODULE status_0100. 64 | 65 | 66 | * 67 | 68 | 69 | PROCESS AFTER INPUT. 70 | 71 | 72 | MODULE user_command_0100 at EXIT-COMMAND. 73 | 74 | 75 | MODULE user_command_0100. 76 | 77 | 78 | 79 | 0 80 | 2 81 | 0 82 | 0 83 | 2 84 | 2 85 | 86 |
87 |
88 | 89 | 90 | 000001 91 | 000001 92 | 93 | 94 | 95 | 100 96 | D 97 | 000001 98 | 000001 99 | 0001 100 | CUTE - maintenance tool 101 | 102 | 103 | 104 | 105 | BACK 106 | 001 107 | S 108 | Back 109 | 110 | 111 | CANCEL 112 | 001 113 | E 114 | S 115 | ICON_CANCEL 116 | @0W@ 117 | Cancel 118 | 119 | 120 | HOME 121 | 001 122 | S 123 | Exit 124 | 125 | 126 | 127 | 128 | 000001 129 | 03 130 | BACK 131 | 001 132 | 133 | 134 | 000001 135 | 12 136 | CANCEL 137 | 001 138 | 139 | 140 | 000001 141 | 15 142 | HOME 143 | 001 144 | 145 | 146 | 147 | 148 | 100 149 | BACK 150 | 151 | 152 | 100 153 | CANCEL 154 | 155 | 156 | 100 157 | HOME 158 | 159 | 160 | 161 | 162 | A 163 | 000001 164 | D 165 | CUTE - maintenance tool 166 | 167 | 168 | P 169 | 000001 170 | D 171 | CUTE - maintenance tool 172 | 173 | 174 | B 175 | 000001 176 | 0001 177 | D 178 | CUTE - maintenance tool 179 | 180 | 181 | 182 | 183 | EDIT 184 | Edit & 185 | 186 | 187 | SHOW 188 | Show & 189 | 190 | 191 | 192 | 193 | 194 | I 195 | 001 196 | unsaved data 197 | 22 198 | 199 | 200 | I 201 | 002 202 | Save data before leaving? 203 | 50 204 | 205 | 206 | I 207 | ANO 208 | No, thanks 209 | 20 210 | 211 | 212 | I 213 | SVE 214 | Error saving data... ;( 215 | 46 216 | 217 | 218 | I 219 | SVQ 220 | Save data 221 | 23 222 | 223 | 224 | I 225 | SVS 226 | data has been saved. 227 | 40 228 | 229 | 230 | I 231 | YES 232 | Yes, please 233 | 21 234 | 235 | 236 | R 237 | CUTE - Custom Table Editor - Main report 238 | 40 239 | 240 | 241 | S 242 | P_EDIT 243 | Edit 244 | 12 245 | 246 | 247 | S 248 | P_SHOW 249 | Show 250 | 12 251 | 252 | 253 | S 254 | P_TABLE 255 | . 256 | 9 257 | D 258 | 259 | 260 |
261 |
262 |
263 | -------------------------------------------------------------------------------- /src/zcute_test_view.view.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCUTE_TEST_VIEW 7 | A 8 | E 9 | V 10 | ZCUTE_TEST 11 | CUTE: test view 12 | C 13 | C 14 | X 15 | 16 | 17 | 18 | ZCUTE_TEST_VIEW 19 | ZCUTE_TEST 20 | 0001 21 | ZCUTE_TEST 22 | 23 | 24 | ZCUTE_TEST_VIEW 25 | USR02 26 | 0002 27 | ZCUTE_TEST 28 | FIELD_FOREIGN_KEY 29 | E 30 | 31 | 32 | ZCUTE_TEST_VIEW 33 | ZCUTE_TESTT 34 | 0003 35 | ZCUTE_TEST 36 | KEY_ONE 37 | I 38 | 39 | 40 | 41 | 42 | ZCUTE_TEST_VIEW 43 | 0001 44 | E 45 | MANDT 46 | ZCUTE_TEST 47 | MANDT 48 | X 49 | MANDT 50 | MANDT 51 | 52 | 53 | ZCUTE_TEST_VIEW 54 | 0002 55 | E 56 | KEY_ONE 57 | ZCUTE_TEST 58 | KEY_ONE 59 | X 60 | ZCUTE_TEST_KEY_ONE 61 | ZCUTE_TEST_KEY_ONE 62 | 63 | 64 | ZCUTE_TEST_VIEW 65 | 0003 66 | E 67 | KEY_TWO 68 | ZCUTE_TEST 69 | KEY_TWO 70 | X 71 | ZCUTE_TEST_KEY_TWO 72 | ZCUTE_TEST_KEY_TWO 73 | 74 | 75 | ZCUTE_TEST_VIEW 76 | 0004 77 | E 78 | FIELD_SIMPLE 79 | ZCUTE_TEST 80 | FIELD_SIMPLE 81 | ZCUTE_TEST_FIELD_SIMPLE 82 | ZCUTE_TEST_FIELD_SIMPLE 83 | 84 | 85 | ZCUTE_TEST_VIEW 86 | 0005 87 | E 88 | FIELD_FOREIGN_KEY 89 | ZCUTE_TEST 90 | FIELD_FOREIGN_KEY 91 | ZCUTE_TEST_FIELD_FOREIGN_KEY 92 | ZCUTE_TEST_FIELD_FOREIGN_KEY 93 | USR02 94 | P 95 | 96 | 97 | ZCUTE_TEST_VIEW 98 | 0006 99 | E 100 | FIELD_FIX_VALUE 101 | ZCUTE_TEST 102 | FIELD_FIX_VALUE 103 | ZCUTE_TEST_FIELD_FIX_VALUE 104 | ZCUTE_TEST_FIELD_FIX_VALUE 105 | F 106 | X 107 | 108 | 109 | ZCUTE_TEST_VIEW 110 | 0007 111 | E 112 | FIELD_CHECKBOX 113 | ZCUTE_TEST 114 | FIELD_CHECKBOX 115 | ZCUTE_TEST_FIELD_CHECKBOX 116 | ZCUTE_TEST_FIELD_CHECKBOX 117 | F 118 | X 119 | 120 | 121 | ZCUTE_TEST_VIEW 122 | 0008 123 | E 124 | FIELD_SEARCH_HELP 125 | ZCUTE_TEST 126 | FIELD_SEARCH_HELP 127 | ZCUTE_TEST_FIELD_SEARCH_HELP 128 | ZCUTE_TEST_FIELD_SEARCH_HELP 129 | X 130 | 131 | 132 | ZCUTE_TEST_VIEW 133 | 0009 134 | E 135 | USTYP 136 | USR02 137 | USTYP 138 | XUUSTYP 139 | XUUSTYP 140 | R 141 | F 142 | X 143 | 144 | 145 | ZCUTE_TEST_VIEW 146 | 0010 147 | E 148 | CLASS 149 | USR02 150 | CLASS 151 | XUCLASS 152 | XUCLASS 153 | R 154 | USGRP 155 | P 156 | 157 | 158 | ZCUTE_TEST_VIEW 159 | 0011 160 | E 161 | DESCRIPTION 162 | ZCUTE_TESTT 163 | DESCRIPTION 164 | TEXT40 165 | TEXT40 166 | 167 | 168 | 169 | 170 | ZCUTE_TEST_VIEW 171 | USR02 172 | MANDT 173 | EQ 174 | ZCUTE_TEST 175 | MANDT 176 | F 177 | ZCUTE_TEST 178 | FIELD_FOREIGN_KEY 179 | E 180 | 181 | 182 | ZCUTE_TEST_VIEW 183 | USR02 184 | BNAME 185 | EQ 186 | ZCUTE_TEST 187 | FIELD_FOREIGN_KEY 188 | F 189 | ZCUTE_TEST 190 | FIELD_FOREIGN_KEY 191 | E 192 | 193 | 194 | ZCUTE_TEST_VIEW 195 | ZCUTE_TEST 196 | MANDT 197 | EQ 198 | ZCUTE_TESTT 199 | MANDT 200 | F 201 | ZCUTE_TESTT 202 | KEY_ONE 203 | I 204 | 205 | 206 | ZCUTE_TEST_VIEW 207 | ZCUTE_TEST 208 | KEY_ONE 209 | EQ 210 | ZCUTE_TESTT 211 | KEY_ONE 212 | F 213 | ZCUTE_TESTT 214 | KEY_ONE 215 | I 216 | 217 | 218 | ZCUTE_TEST_VIEW 219 | ZCUTE_TEST 220 | KEY_TWO 221 | EQ 222 | ZCUTE_TESTT 223 | KEY_TWO 224 | F 225 | ZCUTE_TESTT 226 | KEY_ONE 227 | I 228 | 229 | 230 | 231 | 232 | ZCUTE_TEST_VIEW 233 | 0001 234 | ZCUTE_TEST 235 | KEY_ONE 236 | NE 237 | ' ' 238 | 239 | 240 | 241 | 242 | 243 | -------------------------------------------------------------------------------- /src/zcl_cute_tab_helper.clas.abap: -------------------------------------------------------------------------------- 1 | class ZCL_CUTE_TAB_HELPER definition 2 | public 3 | final 4 | create public . 5 | 6 | public section. 7 | 8 | constants LINE_DELETED type UPDKZ_D value 'D' ##NO_TEXT. 9 | constants LINE_INSERTED type UPDKZ_D value 'I' ##NO_TEXT. 10 | constants LINE_CHANGED type UPDKZ_D value 'U' ##NO_TEXT. 11 | constants LINE_UNCHANGED type UPDKZ_D value ' ' ##NO_TEXT. 12 | 13 | class-methods GET_INSTANCE 14 | importing 15 | !SOURCE_INFO type ref to ZIF_CUTE_SOURCE_INFO 16 | returning 17 | value(INSTANCE) type ref to ZCL_CUTE_TAB_HELPER . 18 | methods SET_SOURCE 19 | importing 20 | !SOURCE_INFO type ref to ZIF_CUTE_SOURCE_INFO . 21 | methods GET_COMPONENTS 22 | returning 23 | value(COMPONENTS) type CL_ABAP_STRUCTDESCR=>COMPONENT_TABLE . 24 | methods SET_COMPONENTS 25 | importing 26 | !COMPONENTS type CL_ABAP_STRUCTDESCR=>COMPONENT_TABLE . 27 | methods GET_DATA_REFERENCE_EDIT 28 | returning 29 | value(DATAREF) type ref to DATA . 30 | methods GET_DATA_REFERENCE_ORIGIN 31 | returning 32 | value(DATAREF) type ref to DATA . 33 | methods GET_FIELD_CATALOG 34 | importing 35 | !GRID type ref to CL_GUI_ALV_GRID 36 | !EDIT type FLAG 37 | returning 38 | value(FCAT) type LVC_T_FCAT . 39 | methods GET_DATA_REFERENCE_KEY 40 | returning 41 | value(DATAREF) type ref to DATA . 42 | protected section. 43 | private section. 44 | 45 | data COMPONENTS type CL_ABAP_STRUCTDESCR=>COMPONENT_TABLE . 46 | data: 47 | fields TYPE DDFIELDS. 48 | data: 49 | keyfields TYPE TABLE OF fieldname WITH DEFAULT KEY . 50 | data SOURCE_INFORMATION type ref to ZIF_CUTE_SOURCE_INFO . 51 | data STRUC_EDIT_DESCR type ref to CL_ABAP_STRUCTDESCR . 52 | data STRUC_ORIGIN_DATA_KEY type ref to DATA . 53 | data STRUC_ORIGIN_DESCR type ref to CL_ABAP_STRUCTDESCR . 54 | data STRUC_ORIGIN_DESCR_KEY type ref to CL_ABAP_STRUCTDESCR . 55 | data TABLE_EDIT_DATA type ref to DATA . 56 | data TABLE_EDIT_DESCR type ref to CL_ABAP_TABLEDESCR . 57 | data TABLE_ORIGIN_DATA type ref to DATA . 58 | data TABLE_ORIGIN_DESCR type ref to CL_ABAP_TABLEDESCR . 59 | 60 | methods CREATE . 61 | ENDCLASS. 62 | 63 | 64 | 65 | CLASS ZCL_CUTE_TAB_HELPER IMPLEMENTATION. 66 | 67 | 68 | METHOD create. 69 | 70 | DATA key_components TYPE cl_abap_structdescr=>component_table. 71 | 72 | struc_origin_descr = CAST cl_abap_structdescr( cl_abap_structdescr=>describe_by_name( source_information->name ) ). 73 | 74 | "Needed to save data 75 | table_origin_descr = cl_abap_tabledescr=>create( 76 | p_line_type = struc_origin_descr 77 | p_table_kind = cl_abap_tabledescr=>tablekind_std 78 | p_unique = abap_false ). 79 | 80 | CREATE DATA table_origin_data TYPE HANDLE table_origin_descr. 81 | 82 | "Adapt editable structure 83 | components = struc_origin_descr->get_components( ). 84 | 85 | APPEND VALUE #( 86 | name = '_COLOR_' 87 | type = CAST cl_abap_datadescr( cl_abap_structdescr=>describe_by_name( 'LVC_T_SCOL' ) ) ) 88 | TO components. 89 | 90 | APPEND VALUE #( 91 | name = '_STYLE_' 92 | type = CAST cl_abap_datadescr( cl_abap_structdescr=>describe_by_name( 'LVC_T_STYL' ) ) ) 93 | TO components. 94 | 95 | APPEND VALUE #( 96 | name = '_COLOR_ROW_' 97 | type = CAST cl_abap_datadescr( cl_abap_elemdescr=>describe_by_name( 'CHAR04' ) ) ) 98 | TO components. 99 | 100 | APPEND VALUE #( 101 | name = '_UPDKZ_' 102 | type = CAST cl_abap_datadescr( cl_abap_elemdescr=>describe_by_name( 'UPDKZ_D' ) ) ) 103 | TO components. 104 | 105 | "get dictionary info for fields to identify keys 106 | DATA(fields) = struc_origin_descr->get_ddic_field_list( ). 107 | 108 | 109 | "get field information (DFIES) and key flag 110 | DATA element TYPE REF TO cl_abap_elemdescr. 111 | LOOP AT components INTO DATA(component). 112 | READ TABLE fields 113 | WITH KEY fieldname = component-name 114 | INTO DATA(fieldinfo). 115 | IF sy-subrc = 0 AND fieldinfo-keyflag = abap_true AND fieldinfo-datatype <> 'CLNT'. 116 | APPEND component-name TO keyfields. 117 | INSERT component INTO TABLE key_components. 118 | ENDIF. 119 | ENDLOOP. 120 | 121 | "create structure for key 122 | IF key_components IS INITIAL. 123 | RAISE EXCEPTION TYPE zcx_cute. 124 | ELSE. 125 | struc_origin_descr_key = cl_abap_structdescr=>create( key_components ). 126 | CREATE DATA struc_origin_data_key TYPE HANDLE struc_origin_descr_key. 127 | ENDIF. 128 | 129 | "create structure for edit source 130 | struc_edit_descr = cl_abap_structdescr=>create( components ). 131 | 132 | table_edit_descr = cl_abap_tabledescr=>create( 133 | p_line_type = struc_edit_descr 134 | p_table_kind = cl_abap_tabledescr=>tablekind_std 135 | p_unique = abap_false ). 136 | 137 | CREATE DATA table_edit_data TYPE HANDLE table_edit_descr. 138 | 139 | ENDMETHOD. 140 | 141 | 142 | METHOD get_components. 143 | ENDMETHOD. 144 | 145 | 146 | METHOD get_data_reference_edit. 147 | dataref = table_edit_data. 148 | ENDMETHOD. 149 | 150 | 151 | METHOD get_data_reference_key. 152 | dataref = struc_origin_data_key. 153 | ENDMETHOD. 154 | 155 | 156 | METHOD get_data_reference_origin. 157 | dataref = table_origin_data. 158 | ENDMETHOD. 159 | 160 | 161 | METHOD get_field_catalog. 162 | DATA element_descr TYPE REF TO cl_abap_elemdescr. 163 | DATA field_descr TYPE dfies. 164 | 165 | LOOP AT components INTO DATA(component). 166 | TRY. 167 | element_descr ?= component-type. 168 | field_descr = element_descr->get_ddic_field( ). 169 | CHECK field_descr-datatype <> 'CLNT'. 170 | APPEND INITIAL LINE TO fcat ASSIGNING FIELD-SYMBOL(). 171 | MOVE-CORRESPONDING field_descr TO . 172 | -fieldname = component-name. 173 | -reptext = field_descr-fieldname. 174 | -scrtext_s = field_descr-fieldname. 175 | -scrtext_m = field_descr-fieldname. 176 | -scrtext_l = field_descr-fieldname. 177 | -ref_table = source_information->name. 178 | 179 | DATA(field_info) = source_information->get_field_info( component-name ). 180 | IF field_info-cute-read_only = abap_false. 181 | IF field_info-dfies-keyflag = abap_true. 182 | -edit = abap_true. 183 | -fix_column = abap_true. 184 | -key = abap_true. 185 | -emphasize = 'C600'. 186 | ELSE. 187 | -edit = edit. 188 | ENDIF. 189 | ENDIF. 190 | 191 | CASE -fieldname. 192 | WHEN '_UPDKZ_'. 193 | "do not display internal update flag 194 | -tech = abap_true. 195 | ENDCASE. 196 | 197 | IF field_info-cute-obligatory = abap_true. 198 | "mark obligatory fields orange 199 | -emphasize = 'C700'. 200 | ENDIF. 201 | 202 | 203 | CASE field_info-cute-fieldtype. 204 | WHEN 'CB'. 205 | "set checkbox 206 | -checkbox = abap_true. 207 | WHEN 'LK' OR 'LT' OR 'LB'. 208 | "set listbox 209 | -drdn_hndl = field_info-dfies-position. 210 | -drdn_alias = 'X'. 211 | grid->set_drop_down_table( 212 | it_drop_down_alias = zcl_cute_listbox_helper=>get_listbox_for_fix_values( 213 | handle = -drdn_hndl 214 | type = field_info-cute-fieldtype 215 | domname = field_info-dfies-domname 216 | obligatory = field_info-cute-obligatory ) ). 217 | IF field_info-cute-obligatory = abap_false. 218 | "deactivate foreign key check to let user choose field initial 219 | -valexi = '!'. 220 | ENDIF. 221 | WHEN 'IC'. 222 | -icon = abap_true. 223 | 224 | ENDCASE. 225 | 226 | CATCH cx_sy_move_cast_error. 227 | CONTINUE. 228 | ENDTRY. 229 | 230 | ENDLOOP. 231 | ENDMETHOD. 232 | 233 | 234 | METHOD get_instance. 235 | instance = NEW zcl_cute_tab_helper( ). 236 | instance->set_source( source_info ). 237 | instance->create( ). 238 | ENDMETHOD. 239 | 240 | 241 | METHOD set_components. 242 | ENDMETHOD. 243 | 244 | 245 | METHOD set_source. 246 | source_information = source_info. 247 | ENDMETHOD. 248 | ENDCLASS. 249 | -------------------------------------------------------------------------------- /src/zcute_test.tabl.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCUTE_TEST 7 | E 8 | TRANSP 9 | X 10 | X 11 | CUTE: Test database table 12 | X 13 | C 14 | 3 15 | 16 | 17 | ZCUTE_TEST 18 | A 19 | 0 20 | APPL2 21 | N 22 | 23 | 24 | 25 | ZCUTE_TEST 26 | MANDT 27 | 0001 28 | X 29 | MANDT 30 | 0 31 | X 32 | E 33 | 34 | 35 | ZCUTE_TEST 36 | KEY_ONE 37 | 0002 38 | X 39 | ZCUTE_TEST_KEY_ONE 40 | 0 41 | X 42 | E 43 | 44 | 45 | ZCUTE_TEST 46 | KEY_TWO 47 | 0003 48 | X 49 | ZCUTE_TEST_KEY_TWO 50 | 0 51 | X 52 | E 53 | 54 | 55 | ZCUTE_TEST 56 | FIELD_SIMPLE 57 | 0004 58 | ZCUTE_TEST_FIELD_SIMPLE 59 | 0 60 | X 61 | E 62 | 63 | 64 | ZCUTE_TEST 65 | FIELD_FOREIGN_KEY 66 | 0005 67 | ZCUTE_TEST_FIELD_FOREIGN_KEY 68 | USR02 69 | 0 70 | X 71 | P 72 | E 73 | 74 | 75 | ZCUTE_TEST 76 | FIELD_FIX_VALUE 77 | 0006 78 | ZCUTE_TEST_FIELD_FIX_VALUE 79 | 0 80 | X 81 | X 82 | F 83 | E 84 | 85 | 86 | ZCUTE_TEST 87 | FIELD_CHECKBOX 88 | 0007 89 | ZCUTE_TEST_FIELD_CHECKBOX 90 | 0 91 | X 92 | X 93 | F 94 | E 95 | 96 | 97 | ZCUTE_TEST 98 | FIELD_SEARCH_HELP 99 | 0008 100 | ZCUTE_TEST_FIELD_SEARCH_HELP 101 | 0 102 | X 103 | X 104 | E 105 | 106 | 107 | ZCUTE_TEST 108 | .INCLUDE 109 | E 110 | 0009 111 | 0 112 | ZCUTE_INCL 113 | X 114 | S 115 | CUTE: Include 116 | S 117 | TEST_INCLUDE 118 | 119 | 120 | ZCUTE_TEST 121 | .INCLU-001 122 | E 123 | 0013 124 | 0 125 | ZCUTE_INCL 126 | X 127 | S 128 | CUTE: Include 129 | S 130 | GROUP_001 131 | 132 | 133 | ZCUTE_TEST 134 | .INCLU-002 135 | E 136 | 0017 137 | 0 138 | ZCUTE_INCL 139 | X 140 | S 141 | CUTE: Include 142 | S 143 | GROUP_002 144 | 145 | 146 | 147 | 148 | ZCUTE_TEST 149 | FIELD_FOREIGN_KEY 150 | ZCUTE_TEST 151 | MANDT 152 | USR02 153 | MANDT 154 | 0001 155 | MANDT 156 | CLNT 157 | 000003 158 | 159 | 160 | ZCUTE_TEST 161 | FIELD_FOREIGN_KEY 162 | ZCUTE_TEST 163 | FIELD_FOREIGN_KEY 164 | USR02 165 | BNAME 166 | 0002 167 | XUBNAME 168 | CHAR 169 | 000012 170 | 171 | 172 | 173 | 174 | ZCUTE_TEST 175 | FIELD_FOREIGN_KEY 176 | E 177 | USR02 178 | 179 | 180 | 181 | 182 | ZCUTE_TEST 183 | FIELD_SEARCH_HELP 184 | DEMO_F4_DE 185 | 186 | 187 | 188 | 189 | ZCUTE_TEST 190 | FIELD_SEARCH_HELP 191 | DEMO_F4_DE 192 | CARRID 193 | 0001 194 | ZCUTE_TEST 195 | FIELD_SEARCH_HELP 196 | X 197 | S_CARR_ID 198 | S_CARR_ID 199 | CHAR 200 | 000003 201 | 202 | 203 | 204 | 205 | 206 | TB 207 | ZCUTE_TEST 208 | E 209 | E 210 | 0001 211 | X 212 | 00007 213 | A 214 | 215 | 216 | DOKU 217 | ZCUTE_TEST 218 | TB 219 | E 220 | S_DOCU_SHOW 221 | S_DOCUS1 222 | 00001 223 | 072 224 | 225 | 226 | 227 | U1 228 | &USE& 229 | 230 | 231 | AS 232 | Demonstration table for table maintenance tool "cute". 233 | 234 | 235 | U1 236 | &MAINTENANCE& 237 | 238 | 239 | AS 240 | There are fields for different purposes to test the editable grid: 241 | 242 | 243 | B1 244 | Key fields 245 | 246 | 247 | B1 248 | field with foreign key 249 | 250 | 251 | B1 252 | field with search help 253 | 254 | 255 | B1 256 | field for displaying as listbox 257 | 258 | 259 | B1 260 | field for displaying as checkbox 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | -------------------------------------------------------------------------------- /src/zcl_cute_table_edit.clas.abap: -------------------------------------------------------------------------------- 1 | class ZCL_CUTE_TABLE_EDIT definition 2 | public 3 | create public . 4 | 5 | public section. 6 | 7 | interfaces ZIF_CUTE . 8 | PROTECTED SECTION. 9 | private section. 10 | 11 | data GRID type ref to CL_GUI_ALV_GRID . 12 | data SPLITTER type ref to CL_GUI_EASY_SPLITTER_CONTAINER . 13 | data ERRORS_EXIST type FLAG . 14 | 15 | methods CHECK_KEYS 16 | raising 17 | ZCX_CUTE_DATA_DUPLICATE_KEYS . 18 | methods EDIT_GRID . 19 | methods GRID_EXCLUDED_FUNCTIONS 20 | returning 21 | value(FUNCTIONS) type UI_FUNCTIONS . 22 | methods HANDLE_AFTER_USER_COMMAND 23 | for event AFTER_USER_COMMAND of CL_GUI_ALV_GRID 24 | importing 25 | !E_UCOMM 26 | !E_SAVED 27 | !E_NOT_PROCESSED . 28 | methods HANDLE_DATA_CHANGED 29 | for event DATA_CHANGED of CL_GUI_ALV_GRID 30 | importing 31 | !ER_DATA_CHANGED 32 | !E_ONF4 33 | !E_ONF4_AFTER 34 | !E_ONF4_BEFORE 35 | !E_UCOMM . 36 | methods HANDLE_TOOLBAR 37 | for event TOOLBAR of CL_GUI_ALV_GRID 38 | importing 39 | !E_INTERACTIVE 40 | !E_OBJECT . 41 | methods HANDLE_USER_COMMAND 42 | for event USER_COMMAND of CL_GUI_ALV_GRID 43 | importing 44 | !E_UCOMM . 45 | methods PROCESS_CHANGED_DATA 46 | importing 47 | !ER_DATA_CHANGED type ref to CL_ALV_CHANGED_DATA_PROTOCOL . 48 | methods PROCESS_DELETED_DATA 49 | importing 50 | !ER_DATA_CHANGED type ref to CL_ALV_CHANGED_DATA_PROTOCOL . 51 | methods PROCESS_INSERTED_DATA 52 | importing 53 | !ER_DATA_CHANGED type ref to CL_ALV_CHANGED_DATA_PROTOCOL . 54 | methods REFRESH . 55 | methods SET_KEY_FIELDS_READ_ONLY . 56 | methods SET_UPDATE_FLAG 57 | importing 58 | !FLAG type UPDKZ_D 59 | changing 60 | !LINE type ANY . 61 | ENDCLASS. 62 | 63 | 64 | 65 | CLASS ZCL_CUTE_TABLE_EDIT IMPLEMENTATION. 66 | 67 | 68 | METHOD check_keys. 69 | 70 | errors_exist = abap_false. 71 | 72 | FIELD-SYMBOLS TYPE table. 73 | DATA(edit_data) = zif_cute~table_helper->get_data_reference_edit( ). 74 | ASSIGN edit_data->* TO . 75 | 76 | FIELD-SYMBOLS TYPE any. 77 | DATA(edit_key) = zif_cute~table_helper->get_data_reference_key( ). 78 | ASSIGN edit_key->* TO . 79 | 80 | DATA key_table TYPE STANDARD TABLE OF string. 81 | FIELD-SYMBOLS TYPE char04. 82 | 83 | LOOP AT ASSIGNING FIELD-SYMBOL(). 84 | 85 | "fill key 86 | MOVE-CORRESPONDING TO . 87 | 88 | "assign color table 89 | ASSIGN COMPONENT '_COLOR_ROW_' OF STRUCTURE TO . 90 | 91 | "check key values 92 | READ TABLE key_table WITH KEY table_line = TRANSPORTING NO FIELDS. 93 | IF sy-subrc > 0. 94 | APPEND TO key_table. 95 | CLEAR . 96 | ELSE. 97 | "more detailed information: if first of duplicate key has been changed, then 98 | "the 2nd line will be marked as duplicate. the changed line should be 99 | "marked because the user just edited it 100 | zcl_cute_todo=>beautify( 'maybe derive detailed information about wrong part of the key and line' ). 101 | errors_exist = abap_true. 102 | "color duplicate line RED 103 | = 'C600'. "red 104 | ENDIF. 105 | ENDLOOP. 106 | 107 | IF errors_exist = abap_true. 108 | "display colors 109 | RAISE EXCEPTION TYPE zcx_cute_data_duplicate_keys. 110 | ENDIF. 111 | 112 | ENDMETHOD. 113 | 114 | 115 | METHOD edit_grid. 116 | 117 | 118 | FIELD-SYMBOLS TYPE table. 119 | 120 | DATA(edit_data) = zif_cute~table_helper->get_data_reference_edit( ). 121 | ASSIGN edit_data->* TO . 122 | 123 | IF zif_cute~container IS INITIAL. 124 | zif_cute~container = NEW cl_gui_dialogbox_container( top = 10 left = 10 height = 600 width = 1500 ). 125 | ENDIF. 126 | 127 | IF zif_cute~authorized_to-maintain = abap_true. 128 | "use separate container for application log in edit mode 129 | splitter = NEW #( 130 | parent = zif_cute~container 131 | orientation = cl_gui_easy_splitter_container=>orientation_vertical 132 | sash_position = 70 ). 133 | DATA(container_grid) = splitter->top_left_container. 134 | DATA(container_prot) = splitter->bottom_right_container. 135 | ELSE. 136 | "no container for application log in display mode 137 | container_grid = zif_cute~container. 138 | ENDIF. 139 | 140 | grid = NEW #( 141 | i_parent = container_grid 142 | i_applogparent = container_prot 143 | i_appl_events = ' ' ). 144 | 145 | IF zif_cute~authorized_to-maintain = abap_true. 146 | "editable 147 | grid->register_edit_event( cl_gui_alv_grid=>mc_evt_enter ). 148 | grid->set_ready_for_input( 1 ). 149 | SET HANDLER handle_data_changed FOR grid. 150 | ENDIF. 151 | 152 | SET HANDLER handle_user_command FOR grid. 153 | SET HANDLER handle_after_user_command FOR grid. 154 | SET HANDLER handle_toolbar FOR grid. 155 | 156 | "layout settings 157 | DATA layout TYPE lvc_s_layo. 158 | layout-ctab_fname = '_COLOR_'. 159 | layout-stylefname = '_STYLE_'. 160 | layout-info_fname = '_COLOR_ROW_'. 161 | 162 | "Fieldcatalog 163 | DATA(fcat) = zif_cute~table_helper->get_field_catalog( 164 | grid = grid 165 | edit = zif_cute~authorized_to-maintain ). 166 | 167 | "layout settings for key values 168 | set_key_fields_read_only( ). 169 | 170 | "display grid 171 | grid->set_table_for_first_display( 172 | EXPORTING 173 | is_variant = VALUE #( handle = 'GRID' report = sy-repid username = sy-uname ) 174 | i_save = 'A' 175 | i_default = abap_true 176 | is_layout = layout 177 | it_toolbar_excluding = grid_excluded_functions( ) 178 | CHANGING 179 | it_outtab = 180 | it_fieldcatalog = fcat 181 | EXCEPTIONS 182 | invalid_parameter_combination = 1 183 | program_error = 2 184 | too_many_lines = 3 185 | OTHERS = 4 ). 186 | IF sy-subrc = 0. 187 | "Change toolbar 188 | grid->set_toolbar_interactive( ). 189 | ENDIF. 190 | 191 | ENDMETHOD. 192 | 193 | 194 | METHOD grid_excluded_functions. 195 | 196 | APPEND cl_gui_alv_grid=>mc_mb_view TO functions. 197 | APPEND cl_gui_alv_grid=>mc_fc_reprep TO functions. 198 | APPEND cl_gui_alv_grid=>mc_fc_maximum TO functions. 199 | APPEND cl_gui_alv_grid=>mc_fc_minimum TO functions. 200 | APPEND cl_gui_alv_grid=>mc_mb_sum TO functions. 201 | APPEND cl_gui_alv_grid=>mc_mb_subtot TO functions. 202 | APPEND cl_gui_alv_grid=>mc_fc_graph TO functions. 203 | 204 | 205 | ENDMETHOD. 206 | 207 | 208 | METHOD handle_after_user_command. 209 | 210 | CASE e_ucomm. 211 | WHEN '&CHECK'. 212 | TRY. 213 | check_keys( ). 214 | refresh( ). 215 | CATCH zcx_cute_data. 216 | MESSAGE 'Duplicate keys; please check!' TYPE 'I'. 217 | ENDTRY. 218 | ENDCASE. 219 | 220 | ENDMETHOD. 221 | 222 | 223 | METHOD handle_data_changed. 224 | 225 | CHECK e_onf4 IS INITIAL 226 | AND e_onf4_after IS INITIAL 227 | AND e_onf4_before IS INITIAL. 228 | 229 | 230 | process_deleted_data( er_data_changed ). 231 | process_inserted_data( er_data_changed ). 232 | process_changed_data( er_data_changed ). 233 | 234 | TRY. 235 | check_keys( ). 236 | CATCH zcx_cute_data_duplicate_keys. 237 | MESSAGE i001. 238 | ENDTRY. 239 | 240 | "activate color settings 241 | refresh( ). 242 | 243 | ENDMETHOD. 244 | 245 | 246 | METHOD handle_toolbar. 247 | 248 | "do not display SAVE icon if only in Display mode 249 | CHECK zif_cute~authorized_to-maintain = abap_true. 250 | 251 | DATA button TYPE stb_button. 252 | CLEAR button. 253 | button-butn_type = 3. "Separator 254 | APPEND button TO e_object->mt_toolbar. 255 | 256 | "add docu button 257 | CLEAR button. 258 | button-function = 'DOCU'. 259 | button-icon = icon_document. 260 | button-text = 'Documentation'(dct). 261 | button-quickinfo = 'Show documentation'(doc). 262 | button-butn_type = '0'. "normal Button 263 | button-disabled = ' '. 264 | APPEND button TO e_object->mt_toolbar. 265 | 266 | "do not display SAVE icon if only in Display mode 267 | CHECK zif_cute~authorized_to-maintain = abap_true. 268 | 269 | "add save button 270 | CLEAR button. 271 | button-function = 'SAVE'. 272 | button-icon = icon_system_save. 273 | button-quickinfo = 'Save data'(svq). 274 | button-butn_type = '0'. "normal Button 275 | button-disabled = ' '. 276 | APPEND button TO e_object->mt_toolbar. 277 | 278 | ENDMETHOD. 279 | 280 | 281 | METHOD handle_user_command. 282 | 283 | CASE e_ucomm. 284 | WHEN 'SAVE'. 285 | zif_cute~save( ). 286 | WHEN 'DOCU'. 287 | zdodo_main=>show( 288 | EXPORTING 289 | id = 'TB' 290 | name = zif_cute~source_information->name ). 291 | WHEN OTHERS. 292 | ENDCASE. 293 | 294 | ENDMETHOD. 295 | 296 | 297 | METHOD process_changed_data. 298 | 299 | FIELD-SYMBOLS