├── 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 | 
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 |
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