├── .abapgit.xml
├── ABApTestinator
└── TestDeserialize
│ ├── Z8M_COMPARE_BIN_JSON.report.abap
│ ├── Z_CALLFUNC_UPD_BIN.func.abap
│ └── Z_CALLFUNC_UPD_JSON.func.abap
├── LICENSE
├── README.md
├── src
├── package.devc.xml
├── zc8a005_control.acid.xml
├── zc8a_005_demo
│ ├── README.md
│ ├── package.devc.xml
│ ├── zc8a_005_demo_rep.prog.abap
│ ├── zc8a_005_demo_rep.prog.xml
│ ├── zc8a_005_demo_rep_cls10.prog.abap
│ ├── zc8a_005_demo_rep_cls10.prog.xml
│ ├── zc8a_005_demo_rep_cls11.prog.abap
│ ├── zc8a_005_demo_rep_cls11.prog.xml
│ ├── zc8a_005_demo_rep_cls99.prog.abap
│ ├── zc8a_005_demo_rep_cls99.prog.xml
│ ├── zc8a_005_demo_rep_data.prog.abap
│ ├── zc8a_005_demo_rep_data.prog.xml
│ ├── zc8a_005_demo_rep_evnt.prog.abap
│ ├── zc8a_005_demo_rep_evnt.prog.xml
│ ├── zc8a_005_demo_rep_scrn.prog.abap
│ ├── zc8a_005_demo_rep_scrn.prog.xml
│ ├── zfg_c8a_005_demo_upd.fugr.lzfg_c8a_005_demo_updtop.abap
│ ├── zfg_c8a_005_demo_upd.fugr.lzfg_c8a_005_demo_updtop.xml
│ ├── zfg_c8a_005_demo_upd.fugr.saplzfg_c8a_005_demo_upd.abap
│ ├── zfg_c8a_005_demo_upd.fugr.saplzfg_c8a_005_demo_upd.xml
│ ├── zfg_c8a_005_demo_upd.fugr.xml
│ ├── zfg_c8a_005_demo_upd.fugr.z_c8a_005_demo_upd_head_item.abap
│ ├── zfg_c8a_005_demo_upd.fugr.z_c8a_005_demo_upd_sample.abap
│ ├── ztc8a005_head.tabl.xml
│ ├── ztc8a005_head_tab_type.ttyp.xml
│ ├── ztc8a005_item.tabl.xml
│ ├── ztc8a005_item_tab_type.ttyp.xml
│ ├── ztc8a005_sample.tabl.xml
│ └── ztc8a005_sample_tab_type.ttyp.xml
├── zcl_c8a005_group_tab.clas.abap
├── zcl_c8a005_group_tab.clas.testclasses.abap
├── zcl_c8a005_group_tab.clas.xml
├── zcl_c8a005_save2db.clas.abap
├── zcl_c8a005_save2db.clas.testclasses.abap
├── zcl_c8a005_save2db.clas.xml
├── zcl_c8a005_tab_json.clas.abap
├── zcl_c8a005_tab_json.clas.xml
├── zcl_c8a005_tabtype.clas.abap
├── zcl_c8a005_tabtype.clas.testclasses.abap
├── zcl_c8a005_tabtype.clas.xml
├── zcx_c8a005_error.clas.abap
├── zcx_c8a005_error.clas.xml
├── zfg_c8a005_upd.fugr.lzfg_c8a005_updd01.abap
├── zfg_c8a005_upd.fugr.lzfg_c8a005_updd01.xml
├── zfg_c8a005_upd.fugr.lzfg_c8a005_updp01.abap
├── zfg_c8a005_upd.fugr.lzfg_c8a005_updp01.xml
├── zfg_c8a005_upd.fugr.lzfg_c8a005_updtop.abap
├── zfg_c8a005_upd.fugr.lzfg_c8a005_updtop.xml
├── zfg_c8a005_upd.fugr.saplzfg_c8a005_upd.abap
├── zfg_c8a005_upd.fugr.saplzfg_c8a005_upd.xml
├── zfg_c8a005_upd.fugr.xml
├── zfg_c8a005_upd.fugr.z_c8a005_dest_byjson.abap
├── zfg_c8a005_upd.fugr.z_c8a005_upd_anytab.abap
└── zfg_c8a005_upd.fugr.z_c8a005_upd_byjson.abap
└── version_label.svg
/.abapgit.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | E
6 | /src/
7 | PREFIX
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/ABApTestinator/TestDeserialize/Z8M_COMPARE_BIN_JSON.report.abap:
--------------------------------------------------------------------------------
1 | REPORT z8m_compare_bin_json.
2 | PARAMETERS: p_mode TYPE char2 DEFAULT '10'.
3 | PARAMETERS: likebopf RADIOBUTTON GROUP rad1,
4 | imp_opt RADIOBUTTON GROUP rad1,
5 | json RADIOBUTTON GROUP rad1 DEFAULT 'X'.
6 |
7 | CLASS lcl_app_main DEFINITION.
8 | PUBLIC SECTION.
9 | METHODS start_of_sel.
10 | PROTECTED SECTION.
11 |
12 | PRIVATE SECTION.
13 | DATA mt_tab_change TYPE STANDARD TABLE OF ztab_changable.
14 |
15 | METHODS check_xstring IMPORTING no_handling TYPE abap_bool DEFAULT abap_false.
16 | METHODS check_string_json.
17 | METHODS commit_to_start_update_task.
18 | METHODS fill_itab.
19 | ENDCLASS.
20 |
21 | CLASS lcl_app_main IMPLEMENTATION.
22 | METHOD start_of_sel.
23 | fill_itab( ).
24 | CASE abap_true.
25 | WHEN likebopf.
26 | check_xstring( no_handling = abap_true ).
27 | WHEN imp_opt.
28 | check_xstring( ).
29 | WHEN OTHERS.
30 | check_string_json( ).
31 | ENDCASE.
32 | ENDMETHOD.
33 |
34 | METHOD check_xstring.
35 | DATA lv_tabx TYPE xstring.
36 | DATA lv_mode TYPE char2.
37 |
38 | EXPORT data = mt_tab_change TO DATA BUFFER lv_tabx.
39 |
40 | IF no_handling EQ abap_true.
41 | lv_mode = '99'. " magical for likeBOPF
42 | ELSE.
43 | lv_mode = p_mode.
44 | ENDIF.
45 |
46 | CALL FUNCTION 'Z_CALLFUNC_UPD_BIN'
47 | IN UPDATE TASK
48 | EXPORTING
49 | iv_tabname = 'ZTAB_CHANGABLE' " Имя таблицы
50 | iv_tabcontent = lv_tabx
51 | iv_structure_change = lv_mode.
52 |
53 | commit_to_start_update_task( ).
54 | ENDMETHOD.
55 |
56 | METHOD check_string_json.
57 | DATA lv_tab_string TYPE string.
58 | NEW zcl_c8a005_tab_json( )->get_json_string( EXPORTING it_tab_data = mt_tab_change
59 | IMPORTING ev_json_str = lv_tab_string ).
60 | CALL FUNCTION 'Z_CALLFUNC_UPD_JSON'
61 | IN UPDATE TASK
62 | EXPORTING
63 | iv_tabname = 'ZTAB_CHANGABLE' " Имя таблицы
64 | iv_tabcontent = lv_tab_string.
65 |
66 | commit_to_start_update_task( ).
67 | ENDMETHOD.
68 |
69 | METHOD fill_itab.
70 | mt_tab_change = VALUE #(
71 | ( field_key1 = 'KEY_102030401' field2 = '1' field3 = 'ANY_CHAR30_12345VAL1' field4 = 'CHAR10_01' )
72 | ( field_key1 = 'KEY_102030402' field2 = '2' field3 = 'ANY_CHAR30_12345VAL2' field4 = 'CHAR10_02' )
73 | ( field_key1 = 'KEY_102030403' field2 = '3' field3 = 'ANY_CHAR30_12345VAL3' field4 = 'CHAR10_03' ) ).
74 | ENDMETHOD.
75 |
76 | METHOD commit_to_start_update_task.
77 | BREAK-POINT.
78 | " before commit - start SE11 and do the changes from testCase with ZTAB_CHANGABLE
79 | " then GO via path (in Debugger User Interface)
80 | " Settings -> Change Debugger Profile/Settins (or SHIFT+F1)
81 | " ->>>>>>> mark option Update Debugging
82 | CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
83 | EXPORTING
84 | wait = abap_true.
85 | ENDMETHOD.
86 | ENDCLASS.
87 |
88 | START-OF-SELECTION.
89 | NEW lcl_app_main( )->start_of_sel( ).
90 |
--------------------------------------------------------------------------------
/ABApTestinator/TestDeserialize/Z_CALLFUNC_UPD_BIN.func.abap:
--------------------------------------------------------------------------------
1 | FUNCTION z_callfunc_upd_bin.
2 | *"----------------------------------------------------------------------
3 | *"*"Update Function Module:
4 | *"
5 | *"*"Local Interface:
6 | *" IMPORTING
7 | *" VALUE(IV_TABNAME) TYPE TABNAME OPTIONAL
8 | *" VALUE(IV_TABCONTENT) TYPE XSTRING OPTIONAL
9 | *" VALUE(IV_STRUCTURE_CHANGE) TYPE CHAR2 DEFAULT '10'
10 | *"----------------------------------------------------------------------
11 |
12 | DATA lc_tab_change_increase_f3 TYPE char2 VALUE '10'.
13 | DATA lc_tab_change_decrease_f3 TYPE char2 VALUE '20'.
14 | DATA lc_tab_change_add_new_f5 TYPE char2 VALUE '30'.
15 | DATA lc_tab_change_delete_f4 TYPE char2 VALUE '40'.
16 | DATA lc_tab_change_f2_to_char3 TYPE char2 VALUE '50'.
17 | DATA lc_deserialize_like_a_bopf TYPE char2 VALUE '99'.
18 |
19 | DATA lt_tab_in TYPE REF TO data.
20 | FIELD-SYMBOLS TYPE STANDARD TABLE.
21 |
22 | CREATE DATA lt_tab_in TYPE STANDARD TABLE OF (iv_tabname).
23 |
24 | ASSIGN lt_tab_in->* TO .
25 | IF sy-subrc EQ 0.
26 | CASE iv_structure_change.
27 | WHEN lc_tab_change_f2_to_char3.
28 | TRY .
29 | IMPORT data = FROM DATA BUFFER
30 | iv_tabcontent IGNORING STRUCTURE BOUNDARIES
31 | .
32 | CATCH cx_sy_import_mismatch_error.
33 | " write log ?=> just no runtime error
34 | ENDTRY.
35 |
36 | WHEN lc_deserialize_like_a_bopf.
37 | " no option - no exception handling
38 | IMPORT data TO FROM DATA BUFFER iv_tabcontent .
39 |
40 | WHEN OTHERS.
41 | TRY .
42 | IMPORT data = FROM DATA BUFFER
43 | iv_tabcontent ACCEPTING PADDING " if structure was changed
44 | ACCEPTING TRUNCATION
45 | .
46 | CATCH cx_sy_import_mismatch_error.
47 | " write log ?=> just no runtime error
48 | ENDTRY.
49 | ENDCASE.
50 | ENDIF.
51 | ENDFUNCTION.
52 |
--------------------------------------------------------------------------------
/ABApTestinator/TestDeserialize/Z_CALLFUNC_UPD_JSON.func.abap:
--------------------------------------------------------------------------------
1 | FUNCTION z_callfunc_upd_json.
2 | *"----------------------------------------------------------------------
3 | *" IMPORTING
4 | *" VALUE(IV_TABNAME) TYPE TABNAME OPTIONAL
5 | *" VALUE(IV_TABCONTENT) TYPE STRING OPTIONAL
6 | *"----------------------------------------------------------------------
7 | DATA lv_json_str TYPE string.
8 |
9 | DATA lt_tab_in TYPE REF TO data.
10 | FIELD-SYMBOLS TYPE STANDARD TABLE.
11 |
12 | CREATE DATA lt_tab_in TYPE STANDARD TABLE OF (iv_tabname).
13 |
14 | ASSIGN lt_tab_in->* TO .
15 | IF sy-subrc EQ 0.
16 | TRY.
17 | lv_json_str = '{"JSON":' && iv_tabcontent && '}'.
18 |
19 | CALL TRANSFORMATION id
20 | SOURCE XML lv_json_str
21 | RESULT json =
22 | OPTIONS value_handling = 'accept_data_loss'.
23 |
24 | CATCH cx_root.
25 | MESSAGE e000(cl).
26 | ENDTRY.
27 |
28 | ENDIF.
29 | ENDFUNCTION.
30 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2024 OlegBash599
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 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # AnyTabUpdateTask
2 |
Utility for DataBase Changes in Update Task and OOP&Functional working with internal tables
3 |
4 |
5 |
6 |
7 |
Utility is for avoiding creation additional function modules and table types for stable and fast code-writing.
8 | Utility is for object-oriented and functional approach of internal-table processing.
9 |
10 | Main functionality is in package ZC8A_005.
11 | Demo-report is in addtional sub-package [ZC8A_005_DEMO](https://github.com/OlegBash599/AnyTabUpdateTask/tree/main/src/zc8a_005_demo) which is in separate folder(https://github.com/OlegBash599/AnyTabUpdateTask/tree/main/src/zc8a_005_demo) in this repository.
12 |
13 |
14 | ____
15 |
16 | Simple Example for MODIFY table using this utility:
17 | ```ABAP
18 | DATA lc_db_tab_sample TYPE tabname VALUE 'ZTC8A005_SAMPLE'.
19 | DATA lt_sample_tab TYPE STANDARD TABLE OF ztc8a005_sample.
20 |
21 | lt_sample_tab = VALUE #(
22 | ( entity_guid = 'ANY_SIMPL_GUID_MOD' entity_param1 = 'CHAR10' entity_param2 = '0504030201' )
23 | ( entity_guid = 'ANY_SIMPL_GUID2_MOD' entity_param1 = '2CHAR10' entity_param2 = '0102030405' )
24 | ( entity_guid = 'ANY_SIMPL_GUID2_DEL' entity_param1 = '2CHAR10' entity_param2 = '777909034' )
25 | ).
26 |
27 | NEW zcl_c8a005_save2db(
28 | )->save2db( iv_tabname = lc_db_tab_sample
29 | it_tab_content = lt_sample_tab )->do_commit_if_any( ).
30 | ```
31 |
32 | Without this utlity it could be like that (with creation of additional objects)
33 |
34 |
35 | Show update by function (without the utility AnyTabUpdateTask)
36 |
37 | ```ABAP
38 | DATA lt_sample_tab TYPE STANDARD TABLE OF ztc8a005_sample.
39 |
40 | lt_sample_tab = VALUE #(
41 | ( entity_guid = 'ANY_SIMPL_GUID_MOD' entity_param1 = 'CHAR10' entity_param2 = '0504030201' )
42 | ( entity_guid = 'ANY_SIMPL_GUID2_MOD' entity_param1 = '2CHAR10' entity_param2 = '0102030405' )
43 | ( entity_guid = 'ANY_SIMPL_GUID2_DEL' entity_param1 = '2CHAR10' entity_param2 = '777909034' )
44 | ).
45 |
46 | CALL FUNCTION 'Z_C8A_005_DEMO_UPD_SAMPLE'
47 | IN UPDATE TASK
48 | EXPORTING
49 | it_sample = lt_sample_tab.
50 |
51 | CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
52 | EXPORTING
53 | wait = abap_true.
54 |
55 | ```
56 |
57 |
58 |
59 | Example for several tables
60 |
61 |
62 | Utility AnyTabUpdateTask for several Tables
63 |
64 | ```ABAP
65 | DATA lc_db_tab_sample TYPE tabname VALUE 'ZTC8A005_SAMPLE'.
66 | DATA lt_sample_tab TYPE STANDARD TABLE OF ztc8a005_sample.
67 | DATA lt_sample_empty_tab TYPE STANDARD TABLE OF ztc8a005_sample.
68 | DATA lt_head_tab TYPE STANDARD TABLE OF ztc8a005_head.
69 | DATA lt_item_tab TYPE STANDARD TABLE OF ztc8a005_item.
70 | DATA lv_ts TYPE timestamp.
71 | DATA lo_saver_anytab TYPE REF TO zcl_c8a005_save2db.
72 |
73 | GET TIME STAMP FIELD lv_ts.
74 |
75 | lt_sample_tab = VALUE #(
76 | ( entity_guid = 'ANY_GUID_MOD' entity_param1 = 'CHAR10' entity_param2 = '0504030201'
77 | entity_param3 = sy-uzeit entity_param4 = sy-datum entity_param5 = lv_ts )
78 | ( entity_guid = 'ANY_GUID2_MOD' entity_param1 = '2CHAR10' entity_param2 = '0102030405'
79 | entity_param3 = sy-uzeit entity_param4 = sy-datum entity_param5 = lv_ts )
80 | ( entity_guid = 'ANY_GUID2_DEL' entity_param1 = '2CHAR10' entity_param2 = '777909034'
81 | entity_param3 = sy-uzeit entity_param4 = sy-datum entity_param5 = lv_ts )
82 | ).
83 |
84 | lt_head_tab = VALUE #(
85 | ( head_guid = 'ANY_GUID_UPD' head_param1 = 'ANY_GUID_ADD' head_param2 = '9988776655'
86 | head_param3 = sy-uzeit head_param4 = sy-datum head_param5 = lv_ts )
87 | ( head_guid = 'ANY_GUID2_UPD' head_param1 = 'ANY_GUID2_ADD' head_param2 = '9988776655'
88 | head_param3 = sy-uzeit head_param4 = sy-datum head_param5 = lv_ts )
89 | ( head_guid = 'ANY_GUID_DEL' head_param1 = 'ANY_GUID_ADD' head_param2 = '9988774444'
90 | head_param3 = sy-uzeit head_param4 = sy-datum head_param5 = lv_ts )
91 | ( head_guid = 'ANY_GUID2_DEL' head_param1 = 'ANY_GUID2_ADD' head_param2 = '9988774444'
92 | head_param3 = sy-uzeit head_param4 = sy-datum head_param5 = lv_ts )
93 | ).
94 |
95 | lt_item_tab = VALUE #(
96 | ( head_guid = 'ANY_GUID_UPD' item_guid = 'ANY_ITEM_GUID_ADD' item_param1 = '2CHAR10' item_param2 = '9988776655'
97 | item_param3 = sy-uzeit item_param4 = sy-datum item_param5 = lv_ts )
98 | ( head_guid = 'ANY_GUID2_UPD' item_guid = 'ANY_ITEM_GUID2_ADD' item_param1 = '2CHAR10'
99 | item_param3 = sy-uzeit item_param4 = sy-datum item_param5 = lv_ts )
100 | ( head_guid = 'ANY_GUID_DEL' item_guid = 'ANY_ITEM_GUID_ADD' item_param2 = '9988776655'
101 | item_param3 = sy-uzeit item_param4 = sy-datum item_param5 = lv_ts )
102 | ( head_guid = 'ANY_GUID2_DEL' item_guid = 'ANY_ITEM_GUID2_ADD' item_param1 = '2CHAR10'
103 | item_param3 = sy-uzeit item_param4 = sy-datum item_param5 = lv_ts )
104 | ).
105 |
106 |
107 | CREATE OBJECT lo_saver_anytab.
108 | lo_saver_anytab->save2db( EXPORTING iv_tabname = lc_db_tab_sample
109 | it_tab_content = lt_sample_tab ).
110 |
111 | lo_saver_anytab->save2db( EXPORTING iv_tabname = 'ZTC8A005_HEAD'
112 | it_tab_content = lt_head_tab ).
113 |
114 | lo_saver_anytab->save2db( EXPORTING iv_tabname = 'ZTC8A005_ITEM'
115 | it_tab_content = lt_item_tab ).
116 |
117 | CLEAR lt_sample_empty_tab.
118 | lo_saver_anytab->save2db( EXPORTING iv_tabname = lc_db_tab_sample
119 | it_tab_content = lt_sample_empty_tab ).
120 |
121 |
122 | " #RU:обновление всех таблиц будет одномоментно после commit
123 | " #EN:database changes are to be after commit-command
124 | " #RU:а по пустой таблицы ничего происходить не будет (не будет поставлен Update Task)
125 | " #EN: empty table does not take into account while commit command
126 | lo_saver_anytab->do_commit_if_any( ).
127 |
128 | ```
129 |
130 |
131 | ____
132 |
133 |
134 |
135 | Option not to pass table name
136 |
137 | ```ABAP
138 | DATA lt_sample_tab TYPE STANDARD TABLE OF ztc8a005_sample.
139 |
140 | lt_sample_tab = VALUE #(
141 | ( entity_guid = 'ANY_SIMPL_GUID_MOD' entity_param1 = 'CHAR10' entity_param2 = '0504030201' )
142 | ( entity_guid = 'ANY_SIMPL_GUID2_MOD' entity_param1 = '2CHAR10' entity_param2 = '0102030405' )
143 | ( entity_guid = 'ANY_SIMPL_GUID2_DEL' entity_param1 = '2CHAR10' entity_param2 = '777909034' )
144 | ).
145 |
146 | CREATE OBJECT lo_saver_anytab.
147 | lo_saver_anytab->save2db( EXPORTING it_tab_content = lt_sample_tab )->do_commit_if_any( ).
148 | ```
149 |
150 |
151 | ____
152 | for the sake of fast debugging and tracing ControlGorup is added ZC8A005_CONTROL.
153 | So it is possible to switch on and off ControlGroup via tcode SAAB.
154 |
155 | ____
156 | Additional examples and descriptions are on https://olegbash.ru/anytabupdatetask
157 | ____
158 |
159 |
160 | The blog about the utility with commens is on https://blogs.sap.com/2022/08/21/database-update-with-utility-anytab-updatetask/
161 |
162 | ____
163 | The well-structured educational and library source SAPLAND.ru:
164 | https://sappro.sapland.ru/kb/articles/stats/konsistentnoe-obnovlenie-bazi-dannih-pri-pomoschi-phunktsionala-any-tab-update-t.html
165 |
166 | ____
167 |
168 | In Russian you can add your comments here:
169 | The Old-Merry **SAPFORUM**: https://sapboard.ru/forum/viewtopic.php?f=13&t=100324
170 |
171 | ____
172 | HABR-blog
173 | https://habr.com/ru/articles/787282/
174 |
175 |
176 | ## Object-Oriented grouping
177 | details are in [unit test](https://github.com/OlegBash599/AnyTabUpdateTask/blob/main/src/zcl_c8a005_group_tab.clas.testclasses.abap) and in demo-report
178 | ```ABAP
179 | DATA lt_fi_doc TYPE tt_fi_doc.
180 |
181 | DATA lt_fi_doc_sum_by_kunnr TYPE tt_fi_doc.
182 |
183 | _fill_mock( IMPORTING et_fi_doc = lt_fi_doc ).
184 |
185 | mo_cut->set_in( it = lt_fi_doc )->group_by(
186 | EXPORTING iv_f1 = 'KUNNR' ).
187 |
188 | CLEAR lt_fi_doc_sum_by_kunnr.
189 | WHILE mo_cut->has_next_grp( ) EQ abap_true.
190 | mo_cut->get_next_grp( ).
191 | _calc_sum_in_group( EXPORTING io_tab_group = mo_cut
192 | CHANGING ct_fi_doc_sum = lt_fi_doc_sum_by_kunnr ).
193 | ENDWHILE.
194 | ```
195 |
196 | ### TODO list
197 | - [ ] CheckValues
198 | - [ ] GTT-sampless like here(https://github.com/OlegBash599/ZC8A016/tree/main)
199 | - [ ] External Call to Save in External HTTP-service
200 | - [ ] Add Data Driven Testing Functions
201 |
202 |
--------------------------------------------------------------------------------
/src/package.devc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Any DbTab In Update Task
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/src/zc8a005_control.acid.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | AnyTab UpdateTask ControlGroup
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/src/zc8a_005_demo/README.md:
--------------------------------------------------------------------------------
1 | Core-functionality and Demo-report of AnyTabUpdateTask are in different packages.
2 |
3 | This is a separate ZIP-abapGit file for *Demo-functionality* **AnyTabUpdateTask**.
4 |
5 | If you want to check options in Debug mode, you can upload this package, but for core-functionality it is not necessary.
6 |
7 | v2208:
8 | 1) Added updation of empty fields (UPDATE-operator)
9 |
--------------------------------------------------------------------------------
/src/zc8a_005_demo/package.devc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Demo programs to ZC8A_005 (Any Tab Update Task)
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/src/zc8a_005_demo/zc8a_005_demo_rep.prog.abap:
--------------------------------------------------------------------------------
1 | *&---------------------------------------------------------------------*
2 | *& Report ZC8A_005_DEMO_REP
3 | *&---------------------------------------------------------------------*
4 | *&
5 | *&---------------------------------------------------------------------*
6 | REPORT zc8a_005_demo_rep.
7 |
8 |
9 | INCLUDE zc8a_005_demo_rep_data if FOUND. " types/data
10 | INCLUDE zc8a_005_demo_rep_cls10 if FOUND. " base demo
11 | INCLUDE zc8a_005_demo_rep_cls11 if FOUND. " add01 demo
12 |
13 | INCLUDE zc8a_005_demo_rep_scrn if FOUND. " selection screen
14 | INCLUDE zc8a_005_demo_rep_cls99 if FOUND. " all application
15 | INCLUDE zc8a_005_demo_rep_evnt if FOUND. " Executable report - events
16 |
--------------------------------------------------------------------------------
/src/zc8a_005_demo/zc8a_005_demo_rep.prog.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZC8A_005_DEMO_REP
7 | 1
8 | R
9 | X
10 | X
11 |
12 |
13 |
14 | I
15 | F21
16 | MODIFY
17 | 22
18 |
19 |
20 | I
21 | F22
22 | UPDATE (не пустых полей)
23 | 52
24 |
25 |
26 | I
27 | F23
28 | DELETE(по ключу)
29 | 16
30 |
31 |
32 | I
33 | F24
34 | UPDATE(пустых полей)
35 | 20
36 |
37 |
38 | I
39 | M01
40 | Показательный прогон завершен.
41 | 60
42 |
43 |
44 | R
45 | Прогр. ZC8A_005_DEMO_REP
46 | 24
47 |
48 |
49 | S
50 | ANYTAB
51 | Через Class AnyTab
52 | 26
53 |
54 |
55 | S
56 | BCKG
57 | В отдельном процессе
58 | 31
59 |
60 |
61 | S
62 | DO_BREAK
63 | ВклОтладку (Debug Mode)
64 | 31
65 |
66 |
67 | S
68 | FUNCWAY
69 | Через ФМы обновления
70 | 28
71 |
72 |
73 |
74 |
75 |
76 |
--------------------------------------------------------------------------------
/src/zc8a_005_demo/zc8a_005_demo_rep_cls10.prog.abap:
--------------------------------------------------------------------------------
1 | *&---------------------------------------------------------------------*
2 | *& Include ZC8A_005_DEMO_REP_CLS10
3 | *&---------------------------------------------------------------------*
4 |
5 | CLASS lcl_base_demo_anytab DEFINITION.
6 |
7 | PUBLIC SECTION.
8 | METHODS constructor
9 | IMPORTING is_screen_in TYPE ts_screen_in.
10 |
11 | METHODS sh.
12 |
13 | PRIVATE SECTION.
14 |
15 | DATA msr_screen_in TYPE REF TO ts_screen_in.
16 |
17 | METHODS demo_modify_if_need.
18 | METHODS demo_simple_modify.
19 | METHODS demo_few_tabs_modify.
20 | METHODS demo_upd_v1_non_emp_if_need.
21 | METHODS demo_upd_v2_empty.
22 | METHODS demo_upd_v1_full_key.
23 | METHODS demo_upd_v1_non_full_key.
24 | METHODS demo_delete_by_key.
25 |
26 | METHODS demo_function4modify.
27 |
28 | ENDCLASS.
29 |
30 |
31 | CLASS lcl_base_demo_anytab IMPLEMENTATION.
32 | METHOD constructor.
33 | msr_screen_in = REF #( is_screen_in ).
34 | ENDMETHOD.
35 |
36 | METHOD sh.
37 |
38 | IF msr_screen_in->do_break EQ abap_true.
39 | BREAK-POINT.
40 | ENDIF.
41 |
42 |
43 | IF msr_screen_in->use_anytab_upd_class EQ abap_true.
44 | demo_modify_if_need( ).
45 | ENDIF.
46 |
47 | IF msr_screen_in->update_by_non_empty EQ abap_true.
48 | demo_upd_v1_non_emp_if_need( ).
49 | ENDIF.
50 |
51 | IF msr_screen_in->update_empty_fields EQ abap_true.
52 | demo_upd_v2_empty( ).
53 | ENDIF.
54 |
55 | IF msr_screen_in->delete_by_tab_key EQ abap_true.
56 | demo_delete_by_key( ).
57 | ENDIF.
58 |
59 | IF msr_screen_in->use_function_module EQ abap_true.
60 | demo_function4modify( ).
61 | ENDIF.
62 |
63 | ENDMETHOD.
64 |
65 | METHOD demo_modify_if_need.
66 |
67 | IF msr_screen_in->modify_demo EQ abap_false.
68 | EXIT.
69 | ENDIF.
70 |
71 | demo_simple_modify( ).
72 | demo_few_tabs_modify( ).
73 |
74 | ENDMETHOD.
75 |
76 | METHOD demo_simple_modify.
77 | DATA lc_db_tab_sample TYPE tabname VALUE 'ZTC8A005_SAMPLE'.
78 | DATA lt_sample_tab TYPE STANDARD TABLE OF ztc8a005_sample.
79 |
80 | lt_sample_tab = VALUE #(
81 | ( entity_guid = 'ANY_SIMPL_GUID_MOD' entity_param1 = 'CHAR10' entity_param2 = '0504030201' )
82 | ( entity_guid = 'ANY_SIMPL_GUID2_MOD' entity_param1 = '2CHAR10' entity_param2 = '0102030405' )
83 | ( entity_guid = 'ANY_SIMPL_GUID2_DEL' entity_param1 = '2CHAR10' entity_param2 = '777909034' )
84 | ( entity_guid = 'ANY_SIMPL_GUID2_UPD2' entity_param1 = '2CHAR10' entity_param2 = '777909034' )
85 | ).
86 |
87 | NEW zcl_c8a005_save2db(
88 | )->save2db( iv_tabname = lc_db_tab_sample
89 | it_tab_content = lt_sample_tab )->do_commit_if_any( ).
90 |
91 | ENDMETHOD.
92 |
93 | METHOD demo_few_tabs_modify.
94 | DATA lc_db_tab_sample TYPE tabname VALUE 'ZTC8A005_SAMPLE'.
95 | DATA lt_sample_tab TYPE STANDARD TABLE OF ztc8a005_sample.
96 | DATA lt_sample_empty_tab TYPE STANDARD TABLE OF ztc8a005_sample.
97 | DATA lt_head_tab TYPE STANDARD TABLE OF ztc8a005_head.
98 | DATA lt_item_tab TYPE STANDARD TABLE OF ztc8a005_item.
99 | DATA lv_ts TYPE timestamp.
100 | DATA lo_saver_anytab TYPE REF TO zcl_c8a005_save2db.
101 |
102 | GET TIME STAMP FIELD lv_ts.
103 |
104 | lt_sample_tab = VALUE #(
105 | ( entity_guid = 'ANY_GUID_MOD' entity_param1 = 'CHAR10' entity_param2 = '0504030201'
106 | entity_param3 = sy-uzeit entity_param4 = sy-datum entity_param5 = lv_ts )
107 | ( entity_guid = 'ANY_GUID2_MOD' entity_param1 = '2CHAR10' entity_param2 = '0102030405'
108 | entity_param3 = sy-uzeit entity_param4 = sy-datum entity_param5 = lv_ts )
109 | ( entity_guid = 'ANY_GUID2_DEL' entity_param1 = '2CHAR10' entity_param2 = '777909034'
110 | entity_param3 = sy-uzeit entity_param4 = sy-datum entity_param5 = lv_ts )
111 | ).
112 |
113 | lt_head_tab = VALUE #(
114 | ( head_guid = 'ANY_GUID_UPD' head_param1 = 'ANY_GUID_ADD' head_param2 = '9988776655'
115 | head_param3 = sy-uzeit head_param4 = sy-datum head_param5 = lv_ts )
116 | ( head_guid = 'ANY_GUID2_UPD' head_param1 = 'ANY_GUID2_ADD' head_param2 = '9988776655'
117 | head_param3 = sy-uzeit head_param4 = sy-datum head_param5 = lv_ts )
118 | ( head_guid = 'ANY_GUID_DEL' head_param1 = 'ANY_GUID_ADD' head_param2 = '9988774444'
119 | head_param3 = sy-uzeit head_param4 = sy-datum head_param5 = lv_ts )
120 | ( head_guid = 'ANY_GUID2_DEL' head_param1 = 'ANY_GUID2_ADD' head_param2 = '9988774444'
121 | head_param3 = sy-uzeit head_param4 = sy-datum head_param5 = lv_ts )
122 | ).
123 |
124 | lt_item_tab = VALUE #(
125 | ( head_guid = 'ANY_GUID_UPD' item_guid = 'ANY_ITEM_GUID_ADD'
126 | item_param1 = '2CHAR10' item_param2 = '9988776655'
127 | item_param3 = sy-uzeit item_param4 = sy-datum item_param5 = lv_ts )
128 | ( head_guid = 'ANY_GUID2_UPD' item_guid = 'ANY_ITEM_GUID2_ADD' item_param1 = '2CHAR10'
129 | item_param3 = sy-uzeit item_param4 = sy-datum item_param5 = lv_ts )
130 | ( head_guid = 'ANY_GUID_DEL' item_guid = 'ANY_ITEM_GUID_ADD' item_param2 = '9988776655'
131 | item_param3 = sy-uzeit item_param4 = sy-datum item_param5 = lv_ts )
132 | ( head_guid = 'ANY_GUID2_DEL' item_guid = 'ANY_ITEM_GUID2_ADD' item_param1 = '2CHAR10'
133 | item_param3 = sy-uzeit item_param4 = sy-datum item_param5 = lv_ts )
134 | ).
135 |
136 |
137 | CREATE OBJECT lo_saver_anytab.
138 | lo_saver_anytab->save2db( EXPORTING iv_tabname = lc_db_tab_sample
139 | it_tab_content = lt_sample_tab ).
140 |
141 | lo_saver_anytab->save2db( EXPORTING iv_tabname = 'ZTC8A005_HEAD'
142 | it_tab_content = lt_head_tab ).
143 |
144 | lo_saver_anytab->save2db( EXPORTING iv_tabname = 'ZTC8A005_ITEM'
145 | it_tab_content = lt_item_tab ).
146 |
147 | CLEAR lt_sample_empty_tab.
148 | lo_saver_anytab->save2db( EXPORTING iv_tabname = lc_db_tab_sample
149 | it_tab_content = lt_sample_empty_tab ).
150 |
151 |
152 | " обновление всех таблиц будет одномоментно после commit
153 | " а по пустой таблицы ничего происходить не будет (не будет поставлен Update Task)
154 | lo_saver_anytab->do_commit_if_any( ).
155 | ENDMETHOD.
156 |
157 | METHOD demo_upd_v1_non_emp_if_need.
158 |
159 | IF msr_screen_in->update_by_non_empty EQ abap_false.
160 | EXIT.
161 | ENDIF.
162 |
163 | demo_upd_v1_full_key( ).
164 | demo_upd_v1_non_full_key( ).
165 |
166 | ENDMETHOD.
167 |
168 | METHOD demo_upd_v2_empty.
169 | DATA lc_db_tab_sample TYPE tabname VALUE 'ZTC8A005_SAMPLE'.
170 | DATA lt_sample_tab TYPE STANDARD TABLE OF ztc8a005_sample.
171 |
172 | " поля ENTITY_PARAM2 ENTITY_PARAM5 ENTITY_PARAM6
173 | " будут начальное (initial) значение
174 | " для их обновления явно указываем поля в параметре iv_empty_fields
175 | lt_sample_tab = VALUE #(
176 | ( entity_guid = 'ANY_SIMPL_GUID2_UPD2' entity_param1 = '2CHAR10' ) "
177 | ).
178 |
179 | NEW zcl_c8a005_save2db( )->save2db(
180 | EXPORTING
181 | iv_tabname = lc_db_tab_sample
182 | it_tab_content = lt_sample_tab
183 | iv_kz = 'U'
184 | iv_empty_fields = `ENTITY_PARAM2;ENTITY_PARAM5;ENTITY_PARAM6` " указываем поля через ;
185 | )->do_commit_if_any( ).
186 |
187 |
188 |
189 | ENDMETHOD.
190 |
191 | METHOD demo_upd_v1_full_key.
192 |
193 | DATA lt_tab_with_key_2fields TYPE STANDARD TABLE OF ztc8a005_item. "в таблице в ключе 2 поля
194 | DATA lc_tab_trg TYPE tabname VALUE 'ZTC8A005_ITEM'.
195 |
196 | lt_tab_with_key_2fields = VALUE #(
197 | ( head_guid = 'ANY_GUID_UPD' item_guid = 'ANY_ITEM_GUID_ADD' item_param2 = '1234563214' )
198 | ( head_guid = 'ANY_GUID2_UPD' item_guid = 'ANY_ITEM_GUID2_ADD' item_param1 = '2UPDCHAR' )
199 | ).
200 |
201 |
202 | " обновление по ключу, но в обновляемых параметрах непустые поля
203 | NEW zcl_c8a005_save2db( )->save2db(
204 | EXPORTING
205 | iv_tabname = lc_tab_trg
206 | it_tab_content = lt_tab_with_key_2fields
207 | iv_do_commit = ABAP_true " можно включать COMMIT сразу
208 | iv_kz = 'U'
209 | ).
210 |
211 |
212 | ENDMETHOD.
213 |
214 | METHOD demo_upd_v1_non_full_key.
215 |
216 | TYPES: BEGIN OF ts_field_tab
217 | , f TYPE fieldname
218 | , u TYPE abap_bool
219 | , w TYPE abap_bool
220 | , w_dyn TYPE string
221 | , END OF ts_field_tab
222 | , tt_field_tab TYPE STANDARD TABLE OF ts_field_tab WITH NON-UNIQUE KEY primary_key COMPONENTS f
223 | .
224 |
225 | DATA lt_tab_with_key_2fields TYPE STANDARD TABLE OF ztc8a005_item.
226 | DATA lc_tab_trg TYPE tabname VALUE 'ZTC8A005_ITEM'.
227 |
228 | DATA lv_ts TYPE timestamp.
229 | GET TIME STAMP FIELD lv_ts.
230 |
231 | DATA lt_field_tab TYPE tt_field_tab.
232 |
233 |
234 | lt_tab_with_key_2fields = VALUE #(
235 | ( head_guid = 'ANY_GUID_UPD' item_param1 = 'UPD10' item_param2 = '0504030201'
236 | item_param3 = sy-uzeit item_param4 = sy-datum item_param5 = lv_ts )
237 | ( head_guid = 'ANY_GUID2_UPD' item_param1 = '2UPD10' item_param2 = '0102030405'
238 | item_param3 = sy-uzeit item_param4 = sy-datum item_param5 = lv_ts )
239 | ).
240 |
241 | " обновление по не-ключевому параметру
242 | NEW zcl_c8a005_save2db( )->save2db(
243 | EXPORTING
244 | iv_tabname = lc_tab_trg
245 | it_tab_content = lt_tab_with_key_2fields
246 | iv_kz = 'U'
247 | )->do_commit_if_any( ).
248 |
249 |
250 | ENDMETHOD.
251 |
252 | METHOD demo_delete_by_key.
253 | DATA lt_sample_tab TYPE STANDARD TABLE OF ztc8a005_sample.
254 |
255 | IF msr_screen_in->delete_by_tab_key EQ abap_false.
256 | EXIT.
257 | ENDIF.
258 |
259 | lt_sample_tab = VALUE #(
260 | ( entity_guid = 'ANY_GUID2_DEL' )
261 | ).
262 |
263 | NEW zcl_c8a005_save2db( )->save2db(
264 | EXPORTING
265 | iv_tabname = 'ZTC8A005_SAMPLE'
266 | it_tab_content = lt_sample_tab
267 | iv_kz = 'D'
268 | )->do_commit_if_any( ).
269 |
270 | ENDMETHOD.
271 |
272 | METHOD demo_function4modify.
273 | DATA if_do_commit TYPE xfeld VALUE abap_true.
274 | DATA lt_sample_tab TYPE STANDARD TABLE OF ztc8a005_sample.
275 | DATA lt_head_tab TYPE STANDARD TABLE OF ztc8a005_head.
276 | DATA lt_item_tab TYPE STANDARD TABLE OF ztc8a005_item.
277 |
278 | lt_sample_tab = VALUE #(
279 | ( entity_guid = 'FUNC_GUID_MOD' entity_param1 = 'CHAR10' entity_param2 = '0504030201' )
280 | ( entity_guid = 'FUNC_GUID2_MOD' entity_param1 = '2CHAR10' entity_param2 = '0102030405' )
281 | ( entity_guid = 'FUNC_GUID2_DEL' entity_param1 = '2CHAR10' entity_param2 = '777909034' ) ).
282 |
283 | lt_head_tab = VALUE #(
284 | ( head_guid = 'FUNC_GUID_UPD' head_param1 = 'ANY_GUID_ADD' head_param2 = '9988776655' )
285 | ( head_guid = 'FUNC_GUID2_UPD' head_param1 = 'ANY_GUID2_ADD' head_param2 = '9988776655' )
286 | ( head_guid = 'FUNC_GUID_DEL' head_param1 = 'ANY_GUID_ADD' head_param2 = '9988774444' )
287 | ( head_guid = 'FUNC_GUID2_DEL' head_param1 = 'ANY_GUID2_ADD' head_param2 = '9988774444' ) ).
288 |
289 | lt_item_tab = VALUE #(
290 | ( head_guid = 'FUNC_GUID_UPD' item_guid = 'FUNC_ITEM_GUID_ADD' item_param1 = '2CHAR10' item_param2 = '9988776655' )
291 | ( head_guid = 'FUNC_GUID2_UPD' item_guid = 'FUNC_ITEM_GUID2_ADD' item_param1 = '2CHAR10' )
292 | ( head_guid = 'FUNC_GUID_DEL' item_guid = 'FUNC_ITEM_GUID_ADD' item_param2 = '9988776655' )
293 | ( head_guid = 'FUNC_GUID2_DEL' item_guid = 'FUNC_ITEM_GUID2_ADD' item_param1 = '2CHAR10' ) ).
294 |
295 | CALL FUNCTION 'Z_C8A_005_DEMO_UPD_SAMPLE'
296 | IN UPDATE TASK
297 | EXPORTING
298 | it_sample = lt_sample_tab.
299 |
300 | CALL FUNCTION 'Z_C8A_005_DEMO_UPD_HEAD_ITEM'
301 | IN UPDATE TASK
302 | EXPORTING
303 | it_head = lt_head_tab
304 | it_item = lt_item_tab.
305 |
306 | IF if_do_commit EQ abap_true.
307 | CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
308 | EXPORTING
309 | wait = abap_true.
310 | ENDIF.
311 | ENDMETHOD.
312 |
313 | ENDCLASS.
314 |
--------------------------------------------------------------------------------
/src/zc8a_005_demo/zc8a_005_demo_rep_cls10.prog.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZC8A_005_DEMO_REP_CLS10
7 | I
8 | R
9 | X
10 |
11 |
12 |
13 | R
14 | Include ZC8A_005_DEMO_REP_CLS10
15 | 31
16 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/src/zc8a_005_demo/zc8a_005_demo_rep_cls11.prog.abap:
--------------------------------------------------------------------------------
1 | *&---------------------------------------------------------------------*
2 | *& Include ZC8A_005_DEMO_REP_CLS11
3 | *&---------------------------------------------------------------------*
4 |
5 | CLASS lcl_add01_demo_anytab DEFINITION.
6 |
7 | PUBLIC SECTION.
8 | METHODS constructor
9 | IMPORTING is_screen_in TYPE ts_screen_in.
10 |
11 | METHODS sh.
12 |
13 | PRIVATE SECTION.
14 |
15 | DATA msr_screen_in TYPE REF TO ts_screen_in.
16 |
17 | METHODS avoid_commit_in_current_proc .
18 | ENDCLASS.
19 |
20 |
21 | CLASS lcl_add01_demo_anytab IMPLEMENTATION.
22 | METHOD constructor.
23 | msr_screen_in = REF #( is_screen_in ).
24 | ENDMETHOD.
25 |
26 | METHOD sh.
27 |
28 | IF msr_screen_in->do_break EQ abap_true.
29 | BREAK-POINT.
30 | ENDIF.
31 |
32 | avoid_commit_in_current_proc( ).
33 |
34 | ENDMETHOD.
35 |
36 | METHOD avoid_commit_in_current_proc.
37 | DATA lc_db_tab_sample TYPE tabname VALUE 'ZTC8A005_SAMPLE'.
38 | DATA lt_sample_tab TYPE STANDARD TABLE OF ztc8a005_sample.
39 |
40 |
41 | IF msr_screen_in->background_mode EQ abap_false.
42 | EXIT.
43 | ENDIF.
44 |
45 | lt_sample_tab = VALUE #(
46 | ( entity_guid = 'AVOID_CUR_COMMIT1_MOD' entity_param1 = 'DEST1NONE' entity_param2 = '1234512121' entity_param3 = sy-uzeit entity_param4 = sy-datum )
47 | ( entity_guid = 'AVOID_CUR_COMMIT2_MOD' entity_param1 = 'DEST2NONE' entity_param2 = '0102030405' entity_param3 = sy-uzeit entity_param4 = sy-datum )
48 | ( entity_guid = 'AVOID_CUR_COMMIT3_MOD' entity_param1 = 'DEST3NONE' entity_param2 = '220629909' entity_param3 = sy-uzeit entity_param4 = sy-datum )
49 | ).
50 |
51 | " обновление происходит не в текущем процессе, а параллельном через DESTINATION 'NONE'
52 | " нужно для случаев, когда в текущем процессе необходимость COMMIT пока не определена,
53 | " или он будет позже
54 | NEW zcl_c8a005_save2db(
55 | )->save2db( iv_tabname = lc_db_tab_sample
56 | it_tab_content = lt_sample_tab
57 | iv_dest_none = abap_true ).
58 | ENDMETHOD.
59 |
60 | ENDCLASS.
61 |
--------------------------------------------------------------------------------
/src/zc8a_005_demo/zc8a_005_demo_rep_cls11.prog.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZC8A_005_DEMO_REP_CLS11
7 | I
8 | R
9 | X
10 |
11 |
12 |
13 | R
14 | Include ZC8A_005_DEMO_REP_CLS11
15 | 31
16 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/src/zc8a_005_demo/zc8a_005_demo_rep_cls99.prog.abap:
--------------------------------------------------------------------------------
1 | *&---------------------------------------------------------------------*
2 | *& Include ZC8A_005_DEMO_REP_CLS99
3 | *&---------------------------------------------------------------------*
4 |
5 | CLASS lcl_app DEFINITION.
6 |
7 | PUBLIC SECTION.
8 | METHODS start_of_sel.
9 | METHODS end_of_sel.
10 |
11 | PRIVATE SECTION.
12 | DATA ms_screen_in TYPE ts_screen_in.
13 |
14 | METHODS fill_from_screen.
15 | METHODS demo_base_options.
16 | METHODS demo_add_options.
17 |
18 |
19 | ENDCLASS.
20 |
21 |
22 | CLASS lcl_app IMPLEMENTATION.
23 | METHOD start_of_sel.
24 | fill_from_screen( ).
25 |
26 | demo_base_options( ).
27 |
28 | demo_add_options( ).
29 |
30 | ENDMETHOD.
31 |
32 | METHOD end_of_sel.
33 |
34 | MESSAGE s000(cl) WITH 'Показательный прогон завершен.'(m01).
35 |
36 | ENDMETHOD.
37 |
38 | METHOD fill_from_screen.
39 | ms_screen_in-do_break = do_break.
40 | ms_screen_in-use_function_module = funcway.
41 | ms_screen_in-use_anytab_upd_class = anytab.
42 | ms_screen_in-modify_demo = modify.
43 | ms_screen_in-update_by_non_empty = upd_v1.
44 | ms_screen_in-update_empty_fields = upd_v2.
45 | ms_screen_in-delete_by_tab_key = del_key.
46 | ms_screen_in-background_mode = bckg.
47 | ENDMETHOD.
48 |
49 | METHOD demo_base_options.
50 |
51 | NEW lcl_base_demo_anytab( ms_screen_in )->sh( ).
52 |
53 | ENDMETHOD.
54 |
55 | METHOD demo_add_options.
56 |
57 | NEW lcl_add01_demo_anytab( ms_screen_in )->sh( ).
58 |
59 | ENDMETHOD.
60 |
61 | ENDCLASS.
62 |
--------------------------------------------------------------------------------
/src/zc8a_005_demo/zc8a_005_demo_rep_cls99.prog.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZC8A_005_DEMO_REP_CLS99
7 | I
8 | R
9 | X
10 |
11 |
12 |
13 | R
14 | Include ZC8A_005_DEMO_REP_CLS99
15 | 31
16 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/src/zc8a_005_demo/zc8a_005_demo_rep_data.prog.abap:
--------------------------------------------------------------------------------
1 | *&---------------------------------------------------------------------*
2 | *& Include ZC8A_005_DEMO_REP_DATA
3 | *&---------------------------------------------------------------------*
4 |
5 | TYPES: BEGIN OF ts_screen_in
6 | , do_break TYPE char1
7 | , use_function_module TYPE char1
8 | , use_anytab_upd_class TYPE char1
9 | , modify_demo TYPE char1
10 | , update_by_non_empty TYPE char1
11 | , update_empty_fields TYPE char1
12 | , delete_by_tab_key TYPE char1
13 | , background_mode TYPE char1
14 | , END OF ts_screen_in
15 | .
16 |
17 | CLASS lcl_app DEFINITION DEFERRED.
18 | DATA go_app TYPE REF TO lcl_app.
19 |
--------------------------------------------------------------------------------
/src/zc8a_005_demo/zc8a_005_demo_rep_data.prog.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZC8A_005_DEMO_REP_DATA
7 | I
8 | R
9 | X
10 |
11 |
12 |
13 | R
14 | Include ZC8A_005_DEMO_REP_DATA
15 | 30
16 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/src/zc8a_005_demo/zc8a_005_demo_rep_evnt.prog.abap:
--------------------------------------------------------------------------------
1 | *&---------------------------------------------------------------------*
2 | *& Include ZC8A_005_DEMO_REP_EVNT
3 | *&---------------------------------------------------------------------*
4 |
5 | INITIALIZATION.
6 | CREATE OBJECT go_app.
7 |
8 | START-OF-SELECTION.
9 | go_app->start_of_sel( ).
10 |
11 | end-of-SELECTION.
12 | go_app->end_of_sel( ).
13 |
--------------------------------------------------------------------------------
/src/zc8a_005_demo/zc8a_005_demo_rep_evnt.prog.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZC8A_005_DEMO_REP_EVNT
7 | I
8 | R
9 | X
10 |
11 |
12 |
13 | R
14 | Include ZC8A_005_DEMO_REP_EVNT
15 | 30
16 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/src/zc8a_005_demo/zc8a_005_demo_rep_scrn.prog.abap:
--------------------------------------------------------------------------------
1 | *&---------------------------------------------------------------------*
2 | *& Include ZC8A_005_DEMO_REP_SCRN
3 | *&---------------------------------------------------------------------*
4 |
5 | SELECTION-SCREEN BEGIN OF BLOCK b01 WITH FRAME TITLE TEXT-b01.
6 |
7 | PARAMETERS: do_break AS CHECKBOX DEFAULT 'X'
8 | , funcway AS CHECKBOX DEFAULT ' '
9 | , anytab AS CHECKBOX DEFAULT 'X'
10 | .
11 |
12 | SELECTION-SCREEN END OF BLOCK b01.
13 |
14 |
15 | SELECTION-SCREEN BEGIN OF BLOCK b02 WITH FRAME TITLE TEXT-b02.
16 |
17 |
18 | SELECTION-SCREEN BEGIN OF LINE.
19 | PARAMETERS: modify AS CHECKBOX DEFAULT 'X'.
20 | SELECTION-SCREEN COMMENT 2(10) TEXT-f21 FOR FIELD modify.
21 |
22 | PARAMETERS: upd_v1 AS CHECKBOX DEFAULT 'X'.
23 | SELECTION-SCREEN COMMENT 14(24) TEXT-f22 FOR FIELD upd_v1.
24 |
25 | PARAMETERS: upd_v2 AS CHECKBOX DEFAULT 'X'.
26 | SELECTION-SCREEN COMMENT 40(20) TEXT-f24 FOR FIELD upd_v2.
27 |
28 | PARAMETERS: del_key AS CHECKBOX DEFAULT 'X'.
29 | SELECTION-SCREEN COMMENT 64(20) TEXT-f23 FOR FIELD del_key.
30 |
31 |
32 | SELECTION-SCREEN END OF LINE.
33 |
34 | PARAMETERS: bckg AS CHECKBOX DEFAULT ''
35 | .
36 |
37 | SELECTION-SCREEN END OF BLOCK b02.
38 |
--------------------------------------------------------------------------------
/src/zc8a_005_demo/zc8a_005_demo_rep_scrn.prog.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZC8A_005_DEMO_REP_SCRN
7 | I
8 | R
9 | X
10 |
11 |
12 |
13 | R
14 | Include ZC8A_005_DEMO_REP_SCRN
15 | 30
16 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/src/zc8a_005_demo/zfg_c8a_005_demo_upd.fugr.lzfg_c8a_005_demo_updtop.abap:
--------------------------------------------------------------------------------
1 | FUNCTION-POOL ZFG_C8A_005_DEMO_UPD. "MESSAGE-ID ..
2 |
3 | * INCLUDE LZFG_C8A_005_DEMO_UPDD... " Local class definition
4 |
--------------------------------------------------------------------------------
/src/zc8a_005_demo/zfg_c8a_005_demo_upd.fugr.lzfg_c8a_005_demo_updtop.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | LZFG_C8A_005_DEMO_UPDTOP
7 | S
8 | D$
9 | I
10 | S
11 | X
12 | D$S
13 | X
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/src/zc8a_005_demo/zfg_c8a_005_demo_upd.fugr.saplzfg_c8a_005_demo_upd.abap:
--------------------------------------------------------------------------------
1 | *******************************************************************
2 | * System-defined Include-files. *
3 | *******************************************************************
4 | INCLUDE LZFG_C8A_005_DEMO_UPDTOP. " Global Declarations
5 | INCLUDE LZFG_C8A_005_DEMO_UPDUXX. " Function Modules
6 |
7 | *******************************************************************
8 | * User-defined Include-files (if necessary). *
9 | *******************************************************************
10 | * INCLUDE LZFG_C8A_005_DEMO_UPDF... " Subroutines
11 | * INCLUDE LZFG_C8A_005_DEMO_UPDO... " PBO-Modules
12 | * INCLUDE LZFG_C8A_005_DEMO_UPDI... " PAI-Modules
13 | * INCLUDE LZFG_C8A_005_DEMO_UPDE... " Events
14 | * INCLUDE LZFG_C8A_005_DEMO_UPDP... " Local class implement.
15 | * INCLUDE LZFG_C8A_005_DEMO_UPDT99. " ABAP Unit tests
16 |
--------------------------------------------------------------------------------
/src/zc8a_005_demo/zfg_c8a_005_demo_upd.fugr.saplzfg_c8a_005_demo_upd.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | SAPLZFG_C8A_005_DEMO_UPD
7 | S
8 | D$
9 | F
10 | S
11 | R
12 | X
13 | D$S
14 | X
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/src/zc8a_005_demo/zfg_c8a_005_demo_upd.fugr.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Function Group for Update Task
6 |
7 | LZFG_C8A_005_DEMO_UPDTOP
8 | SAPLZFG_C8A_005_DEMO_UPD
9 |
10 |
11 |
12 | Z_C8A_005_DEMO_UPD_HEAD_ITEM
13 | 1
14 | Update Task for Table ZTC8A005_SAMPLE
15 |
16 |
17 | IV_UPDKZ
18 | 'M'
19 | X
20 | UPDKZ
21 |
22 |
23 | IT_HEAD
24 | ZTC8A005_HEAD_TAB_TYPE
25 |
26 |
27 | IT_ITEM
28 | ZTC8A005_ITEM_TAB_TYPE
29 |
30 |
31 |
32 |
33 | IV_UPDKZ
34 | P
35 | Таблица для индикаторов обновления
36 |
37 |
38 | IT_HEAD
39 | P
40 | ZTC8A005_HEAD -> tab type
41 |
42 |
43 | IT_ITEM
44 | P
45 | ZTC8A005_ITEM -> tab type
46 |
47 |
48 |
49 |
50 | Z_C8A_005_DEMO_UPD_SAMPLE
51 | 1
52 | Update Task for Table ZTC8A005_SAMPLE
53 |
54 |
55 | IV_UPDKZ
56 | 'M'
57 | X
58 | UPDKZ
59 |
60 |
61 | IT_SAMPLE
62 | ZTC8A005_SAMPLE_TAB_TYPE
63 |
64 |
65 |
66 |
67 | IV_UPDKZ
68 | P
69 | Таблица для индикаторов обновления
70 |
71 |
72 | IT_SAMPLE
73 | P
74 | ZTC8A005_SAMPLE -> tab type
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
--------------------------------------------------------------------------------
/src/zc8a_005_demo/zfg_c8a_005_demo_upd.fugr.z_c8a_005_demo_upd_head_item.abap:
--------------------------------------------------------------------------------
1 | FUNCTION z_c8a_005_demo_upd_head_item.
2 | *"----------------------------------------------------------------------
3 | *"*"Функциональный модуль обновления:
4 | *"
5 | *"*"Локальный интерфейс:
6 | *" IMPORTING
7 | *" VALUE(IV_UPDKZ) TYPE UPDKZ DEFAULT 'M'
8 | *" VALUE(IT_HEAD) TYPE ZTC8A005_HEAD_TAB_TYPE
9 | *" VALUE(IT_ITEM) TYPE ZTC8A005_ITEM_TAB_TYPE
10 | *"----------------------------------------------------------------------
11 | DATA lc_modify_tab TYPE updkz VALUE 'M'.
12 | DATA lc_upd_tab TYPE updkz VALUE 'U'.
13 | DATA lc_del_tab TYPE updkz VALUE 'D'.
14 |
15 | IF it_head IS NOT INITIAL.
16 | CASE iv_updkz.
17 | WHEN lc_modify_tab.
18 | MODIFY ztc8a005_head FROM TABLE it_head.
19 | WHEN lc_upd_tab.
20 | UPDATE ztc8a005_head FROM TABLE it_head.
21 | WHEN lc_del_tab.
22 | DELETE ztc8a005_head FROM TABLE it_head.
23 | WHEN OTHERS.
24 | ENDCASE.
25 | ENDIF.
26 |
27 | IF it_item IS NOT INITIAL.
28 | CASE iv_updkz.
29 | WHEN lc_modify_tab.
30 | MODIFY ztc8a005_item FROM TABLE it_item.
31 | WHEN lc_upd_tab.
32 | UPDATE ztc8a005_item FROM TABLE it_item.
33 | WHEN lc_del_tab.
34 | DELETE ztc8a005_item FROM TABLE it_item.
35 | WHEN OTHERS.
36 | ENDCASE.
37 | ENDIF.
38 |
39 | ENDFUNCTION.
40 |
--------------------------------------------------------------------------------
/src/zc8a_005_demo/zfg_c8a_005_demo_upd.fugr.z_c8a_005_demo_upd_sample.abap:
--------------------------------------------------------------------------------
1 | FUNCTION z_c8a_005_demo_upd_sample.
2 | *"----------------------------------------------------------------------
3 | *"*"Функциональный модуль обновления:
4 | *"
5 | *"*"Локальный интерфейс:
6 | *" IMPORTING
7 | *" VALUE(IV_UPDKZ) TYPE UPDKZ DEFAULT 'M'
8 | *" VALUE(IT_SAMPLE) TYPE ZTC8A005_SAMPLE_TAB_TYPE
9 | *"----------------------------------------------------------------------
10 | DATA lc_modify_tab TYPE updkz VALUE 'M'.
11 | DATA lc_upd_tab TYPE updkz VALUE 'U'.
12 | DATA lc_del_tab TYPE updkz VALUE 'D'.
13 |
14 | IF it_sample IS INITIAL.
15 | EXIT.
16 | ENDIF.
17 |
18 | CASE iv_updkz.
19 | WHEN lc_modify_tab.
20 | MODIFY ztc8a005_sample FROM TABLE it_sample.
21 | WHEN lc_upd_tab.
22 | UPDATE ztc8a005_sample FROM TABLE it_sample.
23 | WHEN lc_del_tab.
24 | DELETE ztc8a005_sample FROM TABLE it_sample.
25 | WHEN OTHERS.
26 | ENDCASE.
27 | ENDFUNCTION.
28 |
--------------------------------------------------------------------------------
/src/zc8a_005_demo/ztc8a005_head.tabl.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZTC8A005_HEAD
7 | TRANSP
8 | X
9 | X
10 | A
11 | 1
12 |
13 |
14 | ZTC8A005_HEAD
15 | A
16 | 0
17 | APPL1
18 | N
19 |
20 |
21 |
22 | MANDT
23 | X
24 | MANDT
25 | 0
26 | X
27 | E
28 |
29 |
30 | HEAD_GUID
31 | X
32 | CHAR32
33 | 0
34 | X
35 | E
36 |
37 |
38 | HEAD_PARAM1
39 | CHAR10
40 | 0
41 | E
42 |
43 |
44 | HEAD_PARAM2
45 | NUMC10
46 | 0
47 | E
48 |
49 |
50 | HEAD_PARAM3
51 | SYUZEIT
52 | 0
53 | T
54 | E
55 |
56 |
57 | HEAD_PARAM4
58 | SYDATUM
59 | 0
60 | T
61 | E
62 |
63 |
64 | HEAD_PARAM5
65 | TIMESTAMP
66 | 0
67 | E
68 |
69 |
70 | HEAD_PARAM6
71 | INT4
72 | 0
73 | E
74 |
75 |
76 |
77 | R
78 |
79 |
80 |
81 | R
82 | Демо Пример таблицы (заголовочная таблица)
83 |
84 |
85 |
86 |
87 |
88 |
--------------------------------------------------------------------------------
/src/zc8a_005_demo/ztc8a005_head_tab_type.ttyp.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZTC8A005_HEAD_TAB_TYPE
7 | ZTC8A005_HEAD
8 | S
9 | STRU
10 | T
11 | D
12 | N
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/src/zc8a_005_demo/ztc8a005_item.tabl.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZTC8A005_ITEM
7 | TRANSP
8 | X
9 | X
10 | A
11 | 1
12 |
13 |
14 | ZTC8A005_ITEM
15 | A
16 | 0
17 | APPL1
18 | N
19 |
20 |
21 |
22 | MANDT
23 | X
24 | MANDT
25 | 0
26 | X
27 | E
28 |
29 |
30 | HEAD_GUID
31 | X
32 | CHAR32
33 | 0
34 | X
35 | E
36 |
37 |
38 | ITEM_GUID
39 | X
40 | CHAR32
41 | 0
42 | X
43 | E
44 |
45 |
46 | ITEM_PARAM1
47 | CHAR10
48 | 0
49 | E
50 |
51 |
52 | ITEM_PARAM2
53 | NUMC10
54 | 0
55 | E
56 |
57 |
58 | ITEM_PARAM3
59 | SYUZEIT
60 | 0
61 | T
62 | E
63 |
64 |
65 | ITEM_PARAM4
66 | SYDATUM
67 | 0
68 | T
69 | E
70 |
71 |
72 | ITEM_PARAM5
73 | TIMESTAMP
74 | 0
75 | E
76 |
77 |
78 | ITEM_PARAM6
79 | INT4
80 | 0
81 | E
82 |
83 |
84 |
85 | R
86 |
87 |
88 |
89 | R
90 | Демо Пример таблицы (позиции)
91 |
92 |
93 |
94 |
95 |
96 |
--------------------------------------------------------------------------------
/src/zc8a_005_demo/ztc8a005_item_tab_type.ttyp.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZTC8A005_ITEM_TAB_TYPE
7 | ZTC8A005_ITEM
8 | S
9 | STRU
10 | T
11 | D
12 | N
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/src/zc8a_005_demo/ztc8a005_sample.tabl.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZTC8A005_SAMPLE
7 | TRANSP
8 | X
9 | X
10 | A
11 | 1
12 |
13 |
14 | ZTC8A005_SAMPLE
15 | A
16 | 0
17 | APPL1
18 | N
19 |
20 |
21 |
22 | MANDT
23 | X
24 | MANDT
25 | 0
26 | X
27 | E
28 |
29 |
30 | ENTITY_GUID
31 | X
32 | CHAR32
33 | 0
34 | X
35 | E
36 |
37 |
38 | ENTITY_PARAM1
39 | CHAR10
40 | 0
41 | E
42 |
43 |
44 | ENTITY_PARAM2
45 | NUMC10
46 | 0
47 | E
48 |
49 |
50 | ENTITY_PARAM3
51 | SYUZEIT
52 | 0
53 | T
54 | E
55 |
56 |
57 | ENTITY_PARAM4
58 | SYDATUM
59 | 0
60 | T
61 | E
62 |
63 |
64 | ENTITY_PARAM5
65 | TIMESTAMP
66 | 0
67 | E
68 |
69 |
70 | ENTITY_PARAM6
71 | INT4
72 | 0
73 | E
74 |
75 |
76 |
77 | R
78 |
79 |
80 |
81 | R
82 | Демо Пример таблицы (одиночной)
83 |
84 |
85 |
86 |
87 |
88 |
--------------------------------------------------------------------------------
/src/zc8a_005_demo/ztc8a005_sample_tab_type.ttyp.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZTC8A005_SAMPLE_TAB_TYPE
7 | ZTC8A005_SAMPLE
8 | S
9 | STRU
10 | T
11 | D
12 | N
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/src/zcl_c8a005_group_tab.clas.abap:
--------------------------------------------------------------------------------
1 | class zcl_c8a005_group_tab definition
2 | public
3 | final
4 | create public .
5 |
6 | public section.
7 |
8 | methods SET_IN
9 | importing
10 | !IV_WH type STRING optional
11 | !IT type TABLE optional
12 | changing
13 | !CT type TABLE optional
14 | returning
15 | value(RO) type ref to zcl_c8a005_group_tab .
16 | methods GROUP_BY
17 | importing
18 | !IV_F1 type FIELDNAME optional
19 | !IV_F2 type FIELDNAME optional
20 | !IV_F3 type FIELDNAME optional
21 | !IV_F4 type FIELDNAME optional
22 | !IV_F5 type FIELDNAME optional
23 | returning
24 | value(RO) type ref to zcl_c8a005_group_tab .
25 | methods GET_INDEX_GRP
26 | returning
27 | value(RV) type SYINDEX .
28 | methods HAS_NEXT_GRP
29 | returning
30 | value(RV) type ABAP_BOOL .
31 | methods GET_NEXT_GRP
32 | returning
33 | value(RO) type ref to zcl_c8a005_group_tab .
34 | methods GET_INDEX_ROW
35 | returning
36 | value(RV) type SYINDEX .
37 | methods HAS_NEXT_ROW
38 | returning
39 | value(RV) type ABAP_BOOL .
40 | " returning value(rs) type ref to data
41 | " changing cr type any
42 | methods GET_NEXT_LINE_AS_DATA_REF
43 | exporting
44 | !ER type ref to DATA .
45 | methods READ_GROUP_KEY
46 | exporting
47 | !ER type ref to DATA .
48 | protected section.
49 | private section.
50 | types: begin of ts_grp_each
51 | , indx_in_grp type syindex
52 | , vec_r type ref to data
53 | , end of ts_grp_each
54 | , tt_grp_each_tab type standard table of ts_grp_each with default key
55 | .
56 |
57 | types: begin of ts_group_key
58 | , key1_val type string
59 | , key2_val type string
60 | , key3_val type string
61 | , grp_tab type tt_grp_each_tab
62 | , end of ts_group_key
63 | , tt_group_key type sorted table of ts_group_key with unique key
64 | key1_val key2_val key3_val
65 | .
66 |
67 | types: begin of ts_keys_in
68 | , f1 type fieldname
69 | , fv1 type ref to data
70 | , f2 type fieldname
71 | , fv2 type ref to data
72 | , f3 type fieldname
73 | , fv3 type ref to data
74 | , end of ts_keys_in
75 | .
76 |
77 | types: tt_indx type standard table of syindex with default key.
78 |
79 | data mtr_tab type ref to data.
80 | data mt_tab_grp type tt_group_key.
81 | data mv_add_where type string.
82 |
83 |
84 | data mv_current_grp type syindex.
85 | data mv_cur_row_in_grp type syindex.
86 | data msr_cur_grp type ref to ts_group_key.
87 | data msr_cur_row type ref to ts_grp_each.
88 |
89 | methods _proc_line_init
90 | importing is_line_init type any
91 | iv_tabix_init type sytabix
92 | changing ct_indx type tt_indx
93 | cs_keys_in type ts_keys_in.
94 |
95 |
96 | ENDCLASS.
97 |
98 |
99 |
100 | CLASS ZCL_C8A005_GROUP_TAB IMPLEMENTATION.
101 |
102 |
103 | method GET_INDEX_GRP.
104 | "returning value(rv) type syindex.
105 | rv = mv_current_grp.
106 | endmethod.
107 |
108 |
109 | method GET_INDEX_ROW.
110 | "returning value(rv) type syindex.
111 | rv = mv_cur_row_in_grp.
112 | endmethod.
113 |
114 |
115 | method GET_NEXT_GRP.
116 | "returning value(ro) type ref to zcl_fi0034_group_tab.
117 | mv_current_grp = mv_current_grp + 1.
118 |
119 | read table mt_tab_grp reference into msr_cur_grp index mv_current_grp.
120 | mv_cur_row_in_grp = 0.
121 |
122 | ro = me.
123 | endmethod.
124 |
125 |
126 | method GET_NEXT_LINE_AS_DATA_REF.
127 | "exporting es type any
128 |
129 | field-symbols type any.
130 |
131 | mv_cur_row_in_grp = mv_cur_row_in_grp + 1.
132 | read table msr_cur_grp->grp_tab reference into msr_cur_row index mv_cur_row_in_grp.
133 |
134 | " cr = msr_cur_row->vec_r .
135 | er = msr_cur_row->vec_r .
136 |
137 | " assign msr_cur_row->vec_r->* to .
138 | " if sy-subrc eq 0.
139 | " es = .
140 | " endif.
141 |
142 | endmethod.
143 |
144 |
145 | method GROUP_BY.
146 |
147 | data lt_sytabix_done type tt_indx.
148 |
149 | field-symbols type table.
150 |
151 | data ls_keys_in type ts_keys_in.
152 |
153 | ls_keys_in-f1 = iv_f1.
154 | ls_keys_in-f2 = iv_f2.
155 | ls_keys_in-f3 = iv_f3.
156 |
157 | assign mtr_tab->* to .
158 |
159 | if mv_add_where is initial.
160 | loop at assigning field-symbol().
161 |
162 | _proc_line_init( exporting is_line_init =
163 | iv_tabix_init = sy-tabix
164 | changing ct_indx = lt_sytabix_done
165 | cs_keys_in = ls_keys_in ).
166 | endloop.
167 | else.
168 | loop at assigning field-symbol() where (mv_add_where).
169 |
170 | _proc_line_init( exporting is_line_init =
171 | iv_tabix_init = sy-tabix
172 | changing ct_indx = lt_sytabix_done
173 | cs_keys_in = ls_keys_in ).
174 | endloop.
175 | endif.
176 |
177 | ro = me.
178 | endmethod.
179 |
180 |
181 | method HAS_NEXT_GRP.
182 | "returning value(rv) type abap_bool.
183 | rv = abap_true.
184 |
185 | if mv_current_grp >= lines( mt_tab_grp ).
186 | rv = abap_false.
187 | endif.
188 |
189 | endmethod.
190 |
191 |
192 | method HAS_NEXT_ROW.
193 | "returning value(rv) type abap_bool.
194 | rv = abap_true.
195 |
196 | if mv_cur_row_in_grp >= lines( msr_cur_grp->grp_tab ).
197 | rv = abap_false.
198 | endif.
199 | endmethod.
200 |
201 |
202 | method READ_GROUP_KEY.
203 | "exporting er type ref to data.
204 |
205 | field-symbols type any.
206 |
207 | read table msr_cur_grp->grp_tab reference into msr_cur_row index 1.
208 |
209 | " cr = msr_cur_row->vec_r .
210 | er = msr_cur_row->vec_r .
211 | endmethod.
212 |
213 |
214 | method SET_IN.
215 | "importing it_tab type table.
216 | if ct is not initial.
217 | mtr_tab = ref #( ct ).
218 | else.
219 | if it is not initial.
220 | mtr_tab = ref #( it ).
221 | else.
222 | message x000(cl) with 'Один из параметров должен быть заполнен'.
223 | endif.
224 | endif.
225 |
226 | mv_add_where = iv_wh.
227 |
228 | ro = me.
229 | endmethod.
230 |
231 |
232 | method _PROC_LINE_INIT.
233 | "importing is_line_init type any
234 | "changing ct_indx type tt_indx.
235 |
236 | data lv_where4group type string.
237 |
238 | data ls_group_key type ts_group_key.
239 | data ls_grp_each_tab type ts_grp_each.
240 |
241 | field-symbols type table.
242 |
243 | field-symbols type any.
244 |
245 | read table ct_indx transporting no fields
246 | with key table_line = sy-tabix binary search.
247 | if sy-subrc eq 0.
248 | exit.
249 | endif.
250 |
251 | clear lv_where4group.
252 | assign component cs_keys_in-f1 of structure is_line_init to .
253 | if sy-subrc eq 0.
254 | ls_group_key-key1_val = .
255 | lv_where4group = |{ cs_keys_in-f1 } = '{ }' |.
256 | endif.
257 |
258 | assign component cs_keys_in-f2 of structure is_line_init to .
259 | if sy-subrc eq 0.
260 | ls_group_key-key2_val = .
261 | lv_where4group = lv_where4group && | AND { cs_keys_in-f2 } = '{ }' |.
262 | endif.
263 |
264 |
265 | if mv_add_where is not initial.
266 | lv_where4group = |{ lv_where4group } AND { mv_add_where } |.
267 | endif.
268 |
269 | clear ls_grp_each_tab.
270 | assign mtr_tab->* to .
271 |
272 | loop at reference into ls_grp_each_tab-vec_r
273 | where (lv_where4group)
274 | .
275 | append sy-tabix to ct_indx.
276 |
277 | ls_grp_each_tab-indx_in_grp = ls_grp_each_tab-indx_in_grp + 1.
278 | append ls_grp_each_tab to ls_group_key-grp_tab.
279 | endloop.
280 |
281 | insert ls_group_key into table mt_tab_grp.
282 |
283 | clear ls_group_key.
284 |
285 | endmethod.
286 | ENDCLASS.
287 |
--------------------------------------------------------------------------------
/src/zcl_c8a005_group_tab.clas.testclasses.abap:
--------------------------------------------------------------------------------
1 | *"* use this source file for your ABAP unit test classes
2 | CLASS ltc_terun DEFINITION DEFERRED.
3 | CLASS zcl_c8a005_group_tab DEFINITION LOCAL FRIENDS ltc_terun.
4 |
5 | CLASS ltc_terun DEFINITION FOR TESTING
6 | RISK LEVEL HARMLESS
7 | DURATION SHORT INHERITING FROM cl_aunit_assert
8 | .
9 |
10 | PUBLIC SECTION.
11 | METHODS ut_run_01 FOR TESTING.
12 |
13 | PROTECTED SECTION.
14 |
15 | PRIVATE SECTION.
16 | TYPES: BEGIN OF ts_fi_doc
17 | , bukrs TYPE bukrs
18 | , belnr TYPE belnr_d
19 | , gjahr TYPE gjahr
20 | , koart TYPE koart
21 | , kunnr TYPE kunnr
22 | , waers TYPE waers
23 | , dmbtr TYPE dmbtr
24 | , matnr TYPE matnr18
25 | , qty TYPE mengv13
26 | , END OF ts_fi_doc
27 | , tt_fi_doc TYPE STANDARD TABLE OF ts_fi_doc WITH DEFAULT KEY
28 | .
29 |
30 | DATA mo_cut TYPE REF TO zcl_c8a005_group_tab.
31 |
32 | METHODS setup.
33 | METHODS teardown.
34 |
35 |
36 | METHODS _fill_mock
37 | EXPORTING et_fi_doc TYPE tt_fi_doc.
38 |
39 | METHODS _calc_sum_in_group
40 | IMPORTING io_tab_group TYPE REF TO zcl_c8a005_group_tab
41 | CHANGING ct_fi_doc_sum TYPE tt_fi_doc.
42 |
43 | ENDCLASS.
44 |
45 |
46 | CLASS ltc_terun IMPLEMENTATION.
47 |
48 | METHOD setup.
49 | mo_cut = NEW #( ).
50 |
51 | ENDMETHOD.
52 |
53 | METHOD teardown.
54 | CLEAR mo_cut .
55 | ENDMETHOD.
56 |
57 | METHOD ut_run_01.
58 |
59 | DATA lt_fi_doc TYPE tt_fi_doc.
60 |
61 | DATA lt_fi_doc_sum_by_kunnr TYPE tt_fi_doc.
62 |
63 | _fill_mock( IMPORTING et_fi_doc = lt_fi_doc ).
64 |
65 | mo_cut->set_in( it = lt_fi_doc )->group_by(
66 | EXPORTING iv_f1 = 'KUNNR' ).
67 |
68 | CLEAR lt_fi_doc_sum_by_kunnr.
69 | WHILE mo_cut->has_next_grp( ) EQ abap_true.
70 | mo_cut->get_next_grp( ).
71 | _calc_sum_in_group( EXPORTING io_tab_group = mo_cut
72 | CHANGING ct_fi_doc_sum = lt_fi_doc_sum_by_kunnr ).
73 | ENDWHILE.
74 |
75 | ENDMETHOD.
76 |
77 | METHOD _calc_sum_in_group.
78 | * IMPORTING io_tab_group TYPE REF TO zcl_c8a005_group_tab
79 | * CHANGING ct_fi_doc_sum TYPE tt_fi_doc.
80 | DATA ls_fi_doc_kunnr TYPE ts_fi_doc.
81 | FIELD-SYMBOLS TYPE ts_fi_doc.
82 | FIELD-SYMBOLS TYPE ts_fi_doc.
83 |
84 | io_tab_group->read_group_key( IMPORTING er = DATA(lrs_group_key) ).
85 | ASSIGN lrs_group_key->* TO .
86 |
87 | MOVE-CORRESPONDING to ls_fi_doc_kunnr.
88 | CLEAR ls_fi_doc_kunnr-dmbtr.
89 | WHILE mo_cut->has_next_row( ) EQ abap_true.
90 | mo_cut->get_next_line_as_data_ref(
91 | IMPORTING er = DATA(lrs_line_in_group) ).
92 | ASSIGN lrs_line_in_group->* TO .
93 | ls_fi_doc_kunnr-dmbtr += -dmbtr.
94 | ENDWHILE.
95 |
96 | APPEND ls_fi_doc_kunnr TO ct_fi_doc_sum.
97 |
98 | ENDMETHOD.
99 |
100 | METHOD _fill_mock.
101 | "EXPORTING et_fi_doc TYPE tt_fi_doc.
102 | et_fi_doc = VALUE #(
103 | ( bukrs = '1010' belnr = '1010201' gjahr = sy-datum koart = 'D' kunnr = '31010' waers = 'RUB' dmbtr = '5050.20' matnr = '2399' qty = '10' )
104 | ( bukrs = '1010' belnr = '1010202' gjahr = sy-datum koart = 'D' kunnr = '31010' waers = 'RUB' dmbtr = '5050.20' matnr = '2377' qty = '10' )
105 | ( bukrs = '1010' belnr = '1010203' gjahr = sy-datum koart = 'D' kunnr = '31012' waers = 'RUB' dmbtr = '5050.20' matnr = '2399' qty = '10' )
106 | ( bukrs = '1010' belnr = '1010204' gjahr = sy-datum koart = 'D' kunnr = '31012' waers = 'RUB' dmbtr = '5050.20' matnr = '2388' qty = '10' )
107 | ( bukrs = '1010' belnr = '1010205' gjahr = sy-datum koart = 'D' kunnr = '31015' waers = 'RUB' dmbtr = '5050.20' matnr = '2301' qty = '10' )
108 | ).
109 | ENDMETHOD.
110 |
111 | ENDCLASS.
112 |
--------------------------------------------------------------------------------
/src/zcl_c8a005_group_tab.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_C8A005_GROUP_TAB
7 | E
8 | Iterator - Grouping Tab
9 | 1
10 | X
11 | X
12 | X
13 | X
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/src/zcl_c8a005_save2db.clas.abap:
--------------------------------------------------------------------------------
1 | CLASS zcl_c8a005_save2db DEFINITION
2 | PUBLIC
3 | CREATE PUBLIC .
4 |
5 | PUBLIC SECTION.
6 |
7 | METHODS constructor .
8 | METHODS save2db
9 | IMPORTING
10 | !iv_tabname TYPE tabname OPTIONAL
11 | !it_tab_content TYPE any
12 | !iv_do_commit TYPE char1 DEFAULT abap_false
13 | !iv_kz TYPE updkz_d OPTIONAL
14 | !iv_dest_none TYPE abap_bool DEFAULT abap_false
15 | !iv_empty_fields TYPE string OPTIONAL
16 | !iv_strict TYPE abap_bool DEFAULT abap_false
17 | RETURNING
18 | VALUE(ro_obj) TYPE REF TO zcl_c8a005_save2db .
19 | METHODS save2db_line
20 | IMPORTING
21 | !iv_tabname TYPE tabname
22 | !is_tab_content TYPE any
23 | !iv_do_commit TYPE char1 DEFAULT abap_false
24 | !iv_dest_none TYPE abap_bool DEFAULT abap_false
25 | RETURNING
26 | VALUE(ro_obj) TYPE REF TO zcl_c8a005_save2db .
27 | METHODS do_commit_if_any
28 | IMPORTING
29 | !iv_do_commit TYPE abap_bool DEFAULT abap_false .
30 | METHODS do_rollback
31 | IMPORTING
32 | !iv_do_rollback TYPE abap_bool DEFAULT abap_false .
33 | PROTECTED SECTION.
34 | PRIVATE SECTION.
35 |
36 | DATA mv_data_was_sent2db TYPE abap_bool.
37 |
38 | METHODS get_absolute_tab_name_by_data
39 | IMPORTING it_tab_content TYPE any
40 | RETURNING VALUE(rv_val) TYPE tabname
41 | RAISING zcx_c8a005_error.
42 |
43 | METHODS validate_tabcontent
44 | IMPORTING iv_tabname TYPE tabname
45 | it_tab_content TYPE any
46 | RAISING zcx_c8a005_error.
47 |
48 | ENDCLASS.
49 |
50 |
51 |
52 | CLASS zcl_c8a005_save2db IMPLEMENTATION.
53 |
54 |
55 | METHOD constructor.
56 |
57 | ENDMETHOD. "CONSTRUCTOR
58 |
59 |
60 | METHOD do_commit_if_any.
61 | IF mv_data_was_sent2db EQ abap_false
62 | AND iv_do_commit EQ abap_false.
63 | RETURN.
64 | ENDIF.
65 |
66 | CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
67 | EXPORTING
68 | wait = abap_true
69 | * IMPORTING
70 | * return =
71 | .
72 |
73 | CLEAR mv_data_was_sent2db.
74 | ENDMETHOD.
75 |
76 |
77 | METHOD do_rollback.
78 | IF mv_data_was_sent2db EQ abap_false
79 | AND iv_do_rollback EQ abap_false.
80 | RETURN.
81 | ENDIF.
82 |
83 | CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
84 | EXPORTING
85 | wait = abap_true
86 | * IMPORTING
87 | * return =
88 | .
89 |
90 | CLEAR mv_data_was_sent2db.
91 |
92 | ENDMETHOD.
93 |
94 |
95 | METHOD save2db.
96 |
97 | DATA lv_tabname TYPE tabname.
98 |
99 | ro_obj = me.
100 |
101 | IF it_tab_content IS INITIAL.
102 | RETURN.
103 | ENDIF.
104 |
105 |
106 | IF iv_tabname IS INITIAL.
107 | TRY.
108 | lv_tabname = get_absolute_tab_name_by_data( it_tab_content ).
109 | CATCH zcx_c8a005_error.
110 | RETURN.
111 | ENDTRY.
112 | ELSE.
113 | lv_tabname = iv_tabname.
114 | ENDIF.
115 |
116 |
117 | IF lv_tabname IS INITIAL.
118 | RETURN.
119 | ELSE.
120 | BREAK-POINT ID zc8a005_control.
121 | ENDIF.
122 |
123 | IF iv_strict EQ abap_true.
124 | TRY.
125 | validate_tabcontent( EXPORTING iv_tabname = lv_tabname
126 | it_tab_content = it_tab_content ).
127 | CATCH zcx_c8a005_error.
128 | RETURN.
129 | ENDTRY.
130 | ENDIF.
131 |
132 | CALL FUNCTION 'Z_C8A005_UPD_ANYTAB'
133 | EXPORTING
134 | iv_tabname = lv_tabname
135 | it_tab_data = it_tab_content
136 | iv_do_commit = iv_do_commit
137 | iv_kz = iv_kz
138 | iv_dest_none = iv_dest_none
139 | iv_empty_fields = iv_empty_fields.
140 |
141 | IF iv_dest_none EQ abap_false.
142 | mv_data_was_sent2db = abap_true.
143 | ENDIF.
144 |
145 | ENDMETHOD. "SAVE2DB
146 |
147 |
148 | METHOD save2db_line.
149 | * IMPORTING
150 | * !iv_tabname TYPE tabname
151 | * !is_tab_content TYPE any
152 | * !iv_do_commit TYPE char1 DEFAULT abap_false .
153 | DATA lr_tab TYPE REF TO data.
154 | FIELD-SYMBOLS TYPE STANDARD TABLE.
155 |
156 | ro_obj = me.
157 |
158 | IF is_tab_content IS INITIAL.
159 | RETURN.
160 | ENDIF.
161 |
162 | CREATE DATA lr_tab TYPE STANDARD TABLE OF (iv_tabname).
163 |
164 | ASSIGN lr_tab->* TO .
165 | IF sy-subrc EQ 0.
166 | APPEND is_tab_content TO .
167 | CALL FUNCTION 'Z_C8A005_UPD_ANYTAB'
168 | EXPORTING
169 | iv_tabname = iv_tabname
170 | it_tab_data =
171 | iv_do_commit = iv_do_commit
172 | iv_dest_none = iv_dest_none.
173 | IF iv_dest_none EQ abap_false.
174 | mv_data_was_sent2db = abap_true.
175 | ENDIF.
176 | ENDIF.
177 |
178 | ENDMETHOD. "save2db_line
179 |
180 | METHOD get_absolute_tab_name_by_data.
181 | * IMPORTING it_tab_content TYPE any
182 | * RETURNING VALUE(rv_val) TYPE tabname.
183 | DATA lo_tabtype TYPE REF TO zcl_c8a005_tabtype.
184 | CREATE OBJECT lo_tabtype.
185 | rv_val =
186 | lo_tabtype->get_by_data( it_tab_content ).
187 |
188 | IF rv_val IS INITIAL.
189 | RAISE EXCEPTION TYPE zcx_c8a005_error.
190 | ENDIF.
191 |
192 |
193 | ENDMETHOD.
194 |
195 | METHOD validate_tabcontent.
196 | * IMPORTING iv_tabname TYPE tabname
197 | * it_tab_content TYPE any
198 | * RAISING zcx_c8a005_error.
199 |
200 | ENDMETHOD.
201 | ENDCLASS.
202 |
--------------------------------------------------------------------------------
/src/zcl_c8a005_save2db.clas.testclasses.abap:
--------------------------------------------------------------------------------
1 | *"* use this source file for your ABAP unit test classes
2 | CLASS ltc_event_run DEFINITION DEFERRED.
3 | CLASS zcl_c8a005_save2db DEFINITION LOCAL FRIENDS ltc_event_run.
4 |
5 | CLASS ltc_event_run DEFINITION FOR TESTING
6 | RISK LEVEL HARMLESS
7 | DURATION SHORT
8 | INHERITING FROM cl_aunit_assert.
9 |
10 | PUBLIC SECTION.
11 |
12 | METHODS run_insert_simple FOR TESTING.
13 | METHODS upd_by_key_non_initial FOR TESTING.
14 | METHODS run_update_no_key FOR TESTING.
15 | METHODS run_update_empty FOR TESTING.
16 | PROTECTED SECTION.
17 |
18 |
19 | PRIVATE SECTION.
20 |
21 |
22 | ENDCLASS.
23 |
24 |
25 | CLASS ltc_event_run IMPLEMENTATION.
26 | METHOD run_insert_simple.
27 | " moved to separate package ZC8A_005_DEMO
28 | " include ZC8A_005_DEMO_REP_CLS10
29 | ENDMETHOD.
30 |
31 | METHOD upd_by_key_non_initial.
32 | " moved to separate package ZC8A_005_DEMO
33 | " include ZC8A_005_DEMO_REP_CLS10
34 | ENDMETHOD.
35 |
36 | METHOD run_update_no_key.
37 | " moved to separate package ZC8A_005_DEMO
38 | " include ZC8A_005_DEMO_REP_CLS10
39 | ENDMETHOD.
40 |
41 | METHOD run_update_empty.
42 | " moved to separate package ZC8A_005_DEMO
43 | " include ZC8A_005_DEMO_REP_CLS10
44 | ENDMETHOD.
45 |
46 | ENDCLASS.
47 |
--------------------------------------------------------------------------------
/src/zcl_c8a005_save2db.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_C8A005_SAVE2DB
7 | E
8 | zcl_C8A005_save2db
9 | 1
10 | X
11 | X
12 | X
13 | X
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/src/zcl_c8a005_tab_json.clas.abap:
--------------------------------------------------------------------------------
1 | CLASS zcl_c8a005_tab_json DEFINITION
2 | PUBLIC
3 | FINAL
4 | CREATE PUBLIC .
5 |
6 | PUBLIC SECTION.
7 |
8 | METHODS constructor .
9 | METHODS get_json_string
10 | IMPORTING
11 | !it_tab_data TYPE any
12 | EXPORTING
13 | !ev_json_str TYPE string .
14 | METHODS put_json2update
15 | IMPORTING
16 | !iv_tabname TYPE tabname
17 | !iv_json_str TYPE string
18 | !iv_kz TYPE updkz_d OPTIONAL
19 | !iv_empty_fields TYPE string OPTIONAL .
20 | METHODS do_commit .
21 | METHODS get_from_json2tab
22 | IMPORTING
23 | !iv_tabname TYPE tabname
24 | !iv_json_str TYPE string
25 | !iv_kz TYPE updkz_d OPTIONAL
26 | !iv_empty_fields TYPE string OPTIONAL.
27 | METHODS put_json2dest_none
28 | IMPORTING
29 | !iv_tabname TYPE tabname
30 | !iv_json_str TYPE string
31 | !iv_kz TYPE updkz_d OPTIONAL
32 | !iv_empty_fields TYPE string OPTIONAL .
33 | PROTECTED SECTION.
34 |
35 | PRIVATE SECTION.
36 | CONSTANTS: BEGIN OF mc
37 | , json_open TYPE string VALUE '{"JSON":'
38 | , json_close TYPE string VALUE '}'
39 | , END OF mc.
40 |
41 | METHODS create_tab_n_line
42 | IMPORTING
43 | !iv_tabname TYPE tabname
44 | EXPORTING
45 | !ert_ref TYPE REF TO data
46 | !ers_ref TYPE REF TO data
47 | .
48 |
49 | METHODS get_tab_n_line_type
50 | IMPORTING
51 | !iv_tabname TYPE tabname
52 | EXPORTING
53 | !eo_line_type TYPE REF TO cl_abap_structdescr
54 | !eo_tab_type TYPE REF TO cl_abap_tabledescr.
55 |
56 | METHODS prepare_upd_lines
57 | IMPORTING !iv_tabname TYPE tabname
58 | !it_dyn_tab TYPE STANDARD TABLE
59 | !iv_empty_fields TYPE string OPTIONAL.
60 |
61 | METHODS prep_upd_lines_key_non_empty
62 | IMPORTING !iv_tabname TYPE tabname
63 | !it_dyn_tab TYPE STANDARD TABLE
64 | !iv_empty_fields TYPE string OPTIONAL.
65 |
66 | ENDCLASS.
67 |
68 |
69 |
70 | CLASS zcl_c8a005_tab_json IMPLEMENTATION.
71 |
72 |
73 | METHOD constructor.
74 |
75 | ENDMETHOD. "constructor
76 |
77 |
78 | METHOD create_tab_n_line.
79 | * IMPORTING
80 | * !iv_tabname TYPE tabname
81 | * EXPORTING
82 | * !ert_ref TYPE REF TO data
83 | * !ers_ref TYPE REF TO data
84 | * .
85 |
86 | DATA lv_tabname TYPE tabname.
87 |
88 | DATA lo_line_type TYPE REF TO cl_abap_structdescr.
89 | DATA lo_tab_type TYPE REF TO cl_abap_tabledescr.
90 |
91 | DATA lt_tab_ref TYPE REF TO data.
92 | DATA ls_line_ref TYPE REF TO data.
93 |
94 | lv_tabname = iv_tabname.
95 |
96 | TRY.
97 | me->get_tab_n_line_type(
98 | EXPORTING
99 | iv_tabname = lv_tabname " Имя таблицы
100 | IMPORTING
101 | eo_line_type = lo_line_type " Runtime Type Services
102 | eo_tab_type = lo_tab_type " Runtime Type Services
103 | ).
104 | " CATCH zcx_nm0002_templ. " Exceptions while template
105 |
106 | CREATE DATA lt_tab_ref TYPE HANDLE lo_tab_type.
107 | CREATE DATA ls_line_ref TYPE HANDLE lo_line_type.
108 |
109 | ert_ref ?= lt_tab_ref.
110 | ers_ref ?= ls_line_ref.
111 |
112 | CATCH cx_root.
113 | MESSAGE x000(cl).
114 |
115 | ENDTRY.
116 |
117 | ENDMETHOD. "create_tab_n_line
118 |
119 |
120 | METHOD do_commit .
121 | CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
122 | EXPORTING
123 | wait = abap_true " Use of Command `COMMIT AND WAIT`
124 | * IMPORTING
125 | * return = " Return Messages
126 | .
127 | ENDMETHOD. "do_commit
128 |
129 |
130 | METHOD get_from_json2tab.
131 | * IMPORTING
132 | * !iv_tabname TYPE tabname
133 | * !iv_json_str TYPE string
134 | * !iv_kz TYPE updkz_d OPTIONAL
135 | * !iv_empty_fields TYPE string OPTIONAL.
136 |
137 | DATA lv_json_str TYPE string.
138 | DATA lr_db_content TYPE REF TO data.
139 | DATA lr_reader TYPE REF TO if_sxml_reader.
140 |
141 | DATA lo_tab_type TYPE REF TO cl_abap_tabledescr.
142 |
143 | FIELD-SYMBOLS TYPE STANDARD TABLE.
144 |
145 |
146 | TRY .
147 | create_tab_n_line(
148 | EXPORTING
149 | iv_tabname = iv_tabname " Имя таблицы
150 | IMPORTING
151 | ert_ref = lr_db_content ).
152 |
153 | CATCH cx_root.
154 | MESSAGE e000(cl).
155 | RETURN.
156 | ENDTRY.
157 |
158 |
159 | ASSIGN lr_db_content->* TO .
160 | lv_json_str = mc-json_open && iv_json_str && mc-json_close.
161 |
162 |
163 | TRY.
164 |
165 | CLEAR .
166 |
167 | CALL TRANSFORMATION id
168 | SOURCE XML lv_json_str
169 | RESULT json = .
170 |
171 | CATCH cx_root.
172 | MESSAGE e000(cl).
173 | ENDTRY.
174 |
175 |
176 | TRY.
177 | CASE iv_kz.
178 | WHEN 'D'.
179 | DELETE (iv_tabname) FROM TABLE .
180 |
181 | WHEN 'U'.
182 | prepare_upd_lines( iv_tabname = iv_tabname
183 | it_dyn_tab =
184 | iv_empty_fields = iv_empty_fields ).
185 |
186 | WHEN OTHERS.
187 | MODIFY (iv_tabname) FROM TABLE .
188 | ENDCASE.
189 | " OK
190 | CATCH cx_sy_open_sql_db.
191 | MESSAGE e000(cl).
192 | RETURN.
193 | ENDTRY.
194 |
195 |
196 | ENDMETHOD. "get_from_json2tab
197 |
198 | METHOD prepare_upd_lines.
199 | * IMPORTING !iv_tabname TYPE tabname
200 | * !it_dyn_tab TYPE STANDARD TABLE
201 | * !iv_empty_fields TYPE string OPTIONAL.
202 |
203 | prep_upd_lines_key_non_empty(
204 | EXPORTING
205 | iv_tabname = iv_tabname
206 | it_dyn_tab = it_dyn_tab
207 | iv_empty_fields = iv_empty_fields
208 | ).
209 |
210 | ENDMETHOD.
211 |
212 | METHOD prep_upd_lines_key_non_empty.
213 | TYPES: BEGIN OF ts_dd03l_loc
214 | , tabname TYPE tabname
215 | , fieldname TYPE fieldname
216 | , as4local TYPE as4local
217 | , as4vers TYPE as4vers
218 | , position TYPE tabfdpos
219 | , keyflag TYPE keyflag
220 | , comptype TYPE dd03l-comptype
221 | , END OF ts_dd03l_loc
222 | , tt_dd03l_loc TYPE STANDARD TABLE OF ts_dd03l_loc
223 | .
224 | DATA lt_dd03l_loc TYPE tt_dd03l_loc.
225 |
226 | DATA lv_upd_where_line TYPE string.
227 | DATA lv_upd_set_line TYPE string.
228 | DATA lt_upd_set TYPE STANDARD TABLE OF string.
229 | DATA lt_upd_where TYPE STANDARD TABLE OF string.
230 | DATA lv_do_skip_line TYPE abap_bool.
231 |
232 | DATA lv_empty_fields2update TYPE string.
233 | DATA lt_list_of_empty_fields TYPE STANDARD TABLE OF string.
234 |
235 |
236 | FIELD-SYMBOLS TYPE any.
237 | FIELD-SYMBOLS TYPE ts_dd03l_loc.
238 | FIELD-SYMBOLS TYPE any.
239 |
240 | lv_empty_fields2update = iv_empty_fields.
241 | TRANSLATE lv_empty_fields2update TO UPPER CASE.
242 | REPLACE ALL OCCURRENCES OF ` ` IN lv_empty_fields2update WITH `` .
243 | SPLIT lv_empty_fields2update AT ';' INTO TABLE lt_list_of_empty_fields.
244 | DELETE lt_list_of_empty_fields WHERE table_line IS INITIAL.
245 | SORT lt_list_of_empty_fields.
246 | DELETE ADJACENT DUPLICATES FROM lt_list_of_empty_fields.
247 |
248 |
249 | SELECT tabname fieldname as4local as4vers position keyflag
250 | comptype
251 | FROM dd03l
252 | INTO TABLE lt_dd03l_loc
253 | WHERE tabname = iv_tabname
254 | AND as4local = 'A'
255 | ORDER BY position ASCENDING
256 | .
257 |
258 | " каждая запись - update line
259 | LOOP AT it_dyn_tab ASSIGNING .
260 | CLEAR lv_do_skip_line.
261 |
262 |
263 | """"""""""""""
264 | " ключ - для where
265 | CLEAR lt_upd_where.
266 | LOOP AT lt_dd03l_loc ASSIGNING WHERE keyflag = abap_true
267 | AND comptype EQ 'E'.
268 | IF -fieldname EQ 'MANDT'
269 | OR -fieldname EQ 'CLIENT'.
270 | CONTINUE.
271 | ENDIF.
272 |
273 | ASSIGN COMPONENT -fieldname OF STRUCTURE TO .
274 | IF sy-subrc EQ 0.
275 |
276 | IF IS INITIAL.
277 | CONTINUE.
278 | ENDIF.
279 |
280 | CLEAR lv_upd_where_line.
281 | lv_upd_where_line = -fieldname && ` = ` && `'` && && `'`.
282 | IF lines( lt_upd_where ) GT 0.
283 | lv_upd_where_line = ` AND ` && lv_upd_where_line.
284 | ENDIF.
285 | APPEND lv_upd_where_line TO lt_upd_where.
286 |
287 | * IF lv_upd_where_line IS INITIAL.
288 | * lv_upd_where =
289 | * ELSE.
290 | * lv_upd_where = lv_upd_where && ` AND ` && -fieldname && ` = ` && `'` && && `'`.
291 | * ENDIF.
292 | ELSE.
293 | lv_do_skip_line = abap_true.
294 | ENDIF.
295 | ENDLOOP.
296 |
297 | IF lv_do_skip_line EQ abap_true.
298 | CONTINUE.
299 | ENDIF.
300 |
301 | """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
302 | """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
303 | """"""""""""""
304 | " Значения целевых полей - which is not initial (if not in array empty_fields)
305 | CLEAR lt_upd_set.
306 | LOOP AT lt_dd03l_loc ASSIGNING WHERE keyflag = abap_false
307 | AND comptype EQ 'E'.
308 | ASSIGN COMPONENT -fieldname OF STRUCTURE TO .
309 | IF sy-subrc EQ 0.
310 | IF IS INITIAL.
311 | "CONTINUE.
312 | READ TABLE lt_list_of_empty_fields TRANSPORTING NO FIELDS WITH KEY
313 | table_line = -fieldname BINARY SEARCH.
314 | IF sy-subrc EQ 0.
315 | ELSE.
316 | CONTINUE.
317 | ENDIF.
318 | ENDIF.
319 |
320 | CLEAR lv_upd_set_line.
321 | lv_upd_set_line = -fieldname && ` = ` && `'` && && `'`.
322 | IF lines( lt_upd_set ) GT 0.
323 | lv_upd_set_line = ` , ` && lv_upd_set_line.
324 | ENDIF.
325 | APPEND lv_upd_set_line TO lt_upd_set.
326 | * IF lv_upd_set IS INITIAL.
327 | * lv_upd_set = -fieldname && ` = ` && `'` && && `'`.
328 | * ELSE.
329 | * lv_upd_set = lv_upd_where && ` AND ` && -fieldname && ` = ` && `'` && && `'`.
330 | * ENDIF.
331 | ELSE.
332 | lv_do_skip_line = abap_true.
333 | ENDIF.
334 | ENDLOOP.
335 |
336 |
337 | IF lv_do_skip_line EQ abap_true.
338 | CONTINUE.
339 | ENDIF.
340 |
341 | IF lt_upd_set IS INITIAL
342 | OR lt_upd_where IS INITIAL.
343 | CONTINUE.
344 | ENDIF.
345 |
346 | " update для LUW
347 | UPDATE (iv_tabname) SET (lt_upd_set) WHERE (lt_upd_where).
348 |
349 | ENDLOOP.
350 | ENDMETHOD.
351 |
352 | METHOD get_json_string.
353 | * IMPORTING it_tab_data TYPE any
354 | * EXPORTING ev_json_str TYPE string.
355 | DATA lo_writer TYPE REF TO cl_sxml_string_writer.
356 | DATA lv_xstr_json TYPE xstring.
357 | " DATA lv_str_json TYPE string.
358 | DATA lv_reponse2pend TYPE string.
359 | lo_writer = cl_sxml_string_writer=>create( type = if_sxml=>co_xt_json ).
360 |
361 | CALL TRANSFORMATION id SOURCE json = it_tab_data
362 | RESULT XML lo_writer.
363 |
364 | lv_xstr_json = lo_writer->get_output( ).
365 | TRY.
366 | ev_json_str = cl_abap_codepage=>convert_from(
367 | source = lv_xstr_json
368 | * codepage = `UTF-8`
369 | * endian =
370 | * replacement = '#'
371 | * ignore_cerr = ABAP_FALSE
372 | ).
373 | CATCH cx_parameter_invalid_range. " Parameter with Invalid Range
374 | CATCH cx_sy_codepage_converter_init. " System Exception for Code Page Converter Initialization
375 | CATCH cx_sy_conversion_codepage. " System Exception Converting Character Set
376 | CATCH cx_parameter_invalid_type. " Parameter with Invalid Type
377 | ENDTRY.
378 |
379 |
380 |
381 |
382 | "REPLACE FIRST OCCURRENCE OF '{"JSON":[' IN ev_json_str WITH '{"request":['.
383 | " REPLACE ALL OCCURRENCES OF '{"JSON":' IN lv_str_json WITH ''.
384 | REPLACE ALL OCCURRENCES OF mc-json_open IN ev_json_str WITH ''.
385 | ev_json_str = shift_right( val = ev_json_str places = 1 ).
386 |
387 | " ev_json_str = lv_str_json.
388 | ENDMETHOD. "get_json_string
389 |
390 |
391 | METHOD get_tab_n_line_type.
392 | * METHODS get_tab_n_line_type
393 | * IMPORTING
394 | * !iv_tabname TYPE tabname
395 | * EXPORTING
396 | * !eo_line_type TYPE REF TO cl_abap_structdescr
397 | * !eo_tab_type TYPE REF TO cl_abap_tabledescr.
398 | DATA lo_struct TYPE REF TO cl_abap_structdescr.
399 | DATA lt_comp TYPE cl_abap_structdescr=>component_table.
400 |
401 | DATA lv_msg TYPE string.
402 | DATA lo_typedescr TYPE REF TO cl_abap_typedescr.
403 |
404 | lo_struct ?= cl_abap_typedescr=>describe_by_name( iv_tabname ).
405 |
406 | lt_comp = lo_struct->get_components( ).
407 |
408 | TRY .
409 | eo_line_type = cl_abap_structdescr=>create(
410 | p_components = lt_comp
411 | * p_strict = true
412 | ).
413 | eo_tab_type = cl_abap_tabledescr=>create(
414 | p_line_type = eo_line_type
415 | * p_table_kind = tablekind_std
416 | * p_unique = abap_false
417 | * p_key =
418 | * p_key_kind = keydefkind_default
419 | ).
420 |
421 | CATCH cx_sy_table_creation. " Exception when Creating a Table Type
422 | MESSAGE e001(cl) WITH iv_tabname INTO lv_msg.
423 |
424 |
425 | ENDTRY.
426 | ENDMETHOD. "get_tab_n_line_type
427 |
428 |
429 | METHOD put_json2dest_none.
430 | * IMPORTING iv_tabname TYPE tabname
431 | * iv_json_str TYPE string
432 | * iv_kz TYPE updkz OPTIONAL.
433 |
434 | CALL FUNCTION 'Z_C8A005_DEST_BYJSON'
435 | DESTINATION 'NONE'
436 | EXPORTING
437 | iv_tabname = iv_tabname " Имя таблицы
438 | iv_json_str = iv_json_str
439 | iv_kz = iv_kz
440 | iv_empty_fields = iv_empty_fields.
441 |
442 |
443 | ENDMETHOD. "put_json2update
444 |
445 |
446 | METHOD put_json2update.
447 | * IMPORTING iv_tabname TYPE tabname
448 | * iv_json_str TYPE string
449 | * iv_kz TYPE updkz OPTIONAL.
450 |
451 | CALL FUNCTION 'Z_C8A005_UPD_BYJSON'
452 | IN UPDATE TASK
453 | EXPORTING
454 | iv_tabname = iv_tabname " Имя таблицы
455 | iv_json_str = iv_json_str
456 | iv_kz = iv_kz
457 | iv_empty_fields = iv_empty_fields.
458 |
459 |
460 | ENDMETHOD. "put_json2update
461 | ENDCLASS.
462 |
--------------------------------------------------------------------------------
/src/zcl_c8a005_tab_json.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_C8A005_TAB_JSON
7 | E
8 | ZCL_C8a005_TAB_JSON
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/src/zcl_c8a005_tabtype.clas.abap:
--------------------------------------------------------------------------------
1 | CLASS zcl_c8a005_tabtype DEFINITION
2 | PUBLIC
3 | FINAL
4 | CREATE PUBLIC .
5 |
6 | PUBLIC SECTION.
7 | METHODS get_by_data
8 | IMPORTING it_tabcontent TYPE any
9 | RETURNING VALUE(rv_val) TYPE tabname
10 | RAISING zcx_c8a005_error.
11 | PROTECTED SECTION.
12 | PRIVATE SECTION.
13 |
14 | TYPES: BEGIN OF ts_dd03l_join_in
15 | , fieldname TYPE dd03l-fieldname
16 | , inttype TYPE dd03l-inttype
17 | , position TYPE dd03l-position
18 | , intlen TYPE dd03l-intlen
19 | , decimals TYPE dd03l-decimals
20 | , END OF ts_dd03l_join_in
21 | , tt_dd03l_join_in TYPE STANDARD TABLE OF ts_dd03l_join_in WITH DEFAULT KEY
22 | .
23 |
24 | TYPES: BEGIN OF ts_dd03l_loc
25 | , tabname TYPE dd03l-tabname
26 | , fieldname TYPE dd03l-fieldname
27 | , as4local TYPE dd03l-as4local
28 | , as4vers TYPE dd03l-as4vers
29 | , position TYPE dd03l-position
30 | , keyflag TYPE dd03l-keyflag
31 | , mandatory TYPE dd03l-mandatory
32 | , rollname TYPE dd03l-rollname
33 | , comptype TYPE dd03l-comptype
34 | , END OF ts_dd03l_loc
35 | , tt_dd03l_loc TYPE STANDARD TABLE OF ts_dd03l_loc WITH DEFAULT KEY
36 | .
37 |
38 | TYPES: BEGIN OF ts_sel_strings
39 | , from_join_dyn TYPE STANDARD TABLE OF string WITH DEFAULT KEY
40 | , where_dyn TYPE STANDARD TABLE OF string WITH DEFAULT KEY
41 | , tab_result TYPE tt_dd03l_loc
42 | , END OF ts_sel_strings
43 | , tt_sel_strings TYPE STANDARD TABLE OF ts_sel_strings WITH DEFAULT KEY
44 | .
45 | CONSTANTS mc_max_joins TYPE syindex VALUE 42.
46 |
47 | METHODS get_by_components
48 | IMPORTING io_strcutdescr TYPE REF TO cl_abap_structdescr
49 | RETURNING VALUE(rv_val) TYPE tabname
50 | RAISING zcx_c8a005_error.
51 |
52 | METHODS prepare_sql_params
53 | IMPORTING io_strcutdescr TYPE REF TO cl_abap_structdescr
54 | EXPORTING et_dd03l_join_in TYPE tt_dd03l_join_in
55 | RAISING zcx_c8a005_error.
56 |
57 | METHODS prepare_sql_string
58 | IMPORTING it_dd03l_join_in TYPE tt_dd03l_join_in
59 | EXPORTING et_sel_strings TYPE tt_sel_strings
60 | RAISING zcx_c8a005_error.
61 |
62 | METHODS do_select
63 | CHANGING ct_sel_strings TYPE tt_sel_strings
64 | RAISING zcx_c8a005_error.
65 |
66 | METHODS get_tab_from_by_res
67 | EXPORTING ev_tabname TYPE tabname
68 | CHANGING ct_sel_strings TYPE tt_sel_strings
69 | RAISING zcx_c8a005_error.
70 |
71 | METHODS compare_components
72 | IMPORTING io_strcutdescr TYPE REF TO cl_abap_structdescr
73 | iv_tabname TYPE tabname
74 | RAISING zcx_c8a005_error.
75 |
76 | ENDCLASS.
77 |
78 |
79 |
80 | CLASS zcl_c8a005_tabtype IMPLEMENTATION.
81 | METHOD get_by_data.
82 | * IMPORTING it_tabcontent TYPE any
83 | * RETURNING VALUE(rv_val) TYPE tabname
84 | * RAISING zcx_c8a005_error.
85 | """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
86 | DATA lo_structdescr TYPE REF TO cl_abap_structdescr.
87 | DATA ls_X030L TYPE x030l.
88 | FIELD-SYMBOLS TYPE ANY TABLE.
89 | FIELD-SYMBOLS TYPE any.
90 |
91 | ASSIGN it_tabcontent TO .
92 | IF sy-subrc EQ 0.
93 | LOOP AT ASSIGNING .
94 | lo_structdescr ?= cl_abap_typedescr=>describe_by_data( ).
95 |
96 | IF lo_structdescr->is_ddic_type( ) EQ abap_true.
97 | lo_structdescr->get_ddic_header(
98 | RECEIVING p_header = ls_X030L
99 | EXCEPTIONS
100 | not_found = 1
101 | no_ddic_type = 2
102 | OTHERS = 3
103 | ).
104 | IF sy-subrc <> 0.
105 | * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
106 | * WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
107 | ELSE.
108 | IF ls_X030L-tabtype EQ 'T'.
109 | rv_val = ls_X030L-tabname.
110 | ENDIF.
111 | ENDIF.
112 | ELSE.
113 |
114 | rv_val = get_by_components( lo_structdescr ).
115 |
116 | ENDIF.
117 |
118 | EXIT.
119 | ENDLOOP.
120 | ENDIF.
121 |
122 | ENDMETHOD.
123 |
124 | METHOD get_by_components.
125 | * IMPORTING io_strcutdescr TYPE REF TO cl_abap_structdescr
126 | * RETURNING VALUE(rv_val) TYPE tabname
127 | * RAISING zcx_c8a005_error.
128 |
129 | DATA lt_all_join_params_in TYPE tt_dd03l_join_in.
130 | DATA lt_sel_strings TYPE tt_sel_strings.
131 | DATA lv_target_tabname TYPE tabname.
132 |
133 |
134 |
135 | """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
136 | prepare_sql_params( EXPORTING io_strcutdescr = io_strcutdescr
137 | IMPORTING et_dd03l_join_in = lt_all_join_params_in ).
138 | """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
139 |
140 | prepare_sql_string( EXPORTING it_dd03l_join_in = lt_all_join_params_in
141 | IMPORTING et_sel_strings = lt_sel_strings ).
142 |
143 |
144 | do_select( CHANGING ct_sel_strings = lt_sel_strings ).
145 |
146 | get_tab_from_by_res( IMPORTING ev_tabname = lv_target_tabname
147 | CHANGING ct_sel_strings = lt_sel_strings ).
148 |
149 | compare_components( EXPORTING io_strcutdescr = io_strcutdescr
150 | iv_tabname = lv_target_tabname ).
151 |
152 | rv_val = lv_target_tabname.
153 | ENDMETHOD.
154 |
155 | METHOD prepare_sql_params.
156 | * IMPORTING io_strcutdescr TYPE REF TO cl_abap_structdescr
157 | * EXPORTING et_dd03l_join_in TYPE tt_dd03l_join_in
158 | * RAISING zcx_c8a005_error.
159 |
160 | DATA lv_position_num TYPE tabfdpos.
161 |
162 | FIELD-SYMBOLS TYPE abap_compdescr.
163 | FIELD-SYMBOLS TYPE ts_dd03l_join_in.
164 |
165 | CLEAR et_dd03l_join_in.
166 |
167 | """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
168 |
169 | LOOP AT io_strcutdescr->components ASSIGNING .
170 | " lv_position_num += 1.
171 | lv_position_num = lv_position_num + 1.
172 |
173 | IF -name EQ 'MANDT' OR -name EQ 'CLIENT'.
174 | CONTINUE.
175 | ENDIF.
176 |
177 | APPEND INITIAL LINE TO et_dd03l_join_in ASSIGNING .
178 | -fieldname = -name.
179 | -inttype = -type_kind.
180 | -position = lv_position_num.
181 | -intlen = -length.
182 | -decimals = -decimals.
183 |
184 |
185 | ENDLOOP.
186 |
187 | ENDMETHOD.
188 |
189 | METHOD prepare_sql_string.
190 | * IMPORTING it_dd03l_join_in TYPE tt_dd03l_join_in
191 | * EXPORTING et_sel_strings TYPE tt_sel_strings
192 | * RAISING zcx_c8a005_error.
193 |
194 | DATA lv_select_times TYPE syindex.
195 | DATA lv_loop_from TYPE syindex.
196 | DATA lv_loop_to TYPE syindex.
197 | DATA lv_sql_trg_line TYPE string.
198 | DATA lv_join_index TYPE syindex.
199 | FIELD-SYMBOLS TYPE ts_dd03l_join_in.
200 | FIELD-SYMBOLS TYPE ts_sel_strings.
201 |
202 | * IF lines( it_dd03l_join_in ) LE mc_max_joins.
203 | * lv_select_times = 1.
204 | * ELSE.
205 | IF lines( it_dd03l_join_in ) MOD mc_max_joins EQ 0.
206 | lv_select_times = lines( it_dd03l_join_in ) / mc_max_joins.
207 | ELSE.
208 | lv_select_times = ( lines( it_dd03l_join_in ) DIV mc_max_joins ) + 1.
209 | ENDIF.
210 | " ENDIF.
211 |
212 |
213 | CLEAR et_sel_strings.
214 |
215 | DO lv_select_times TIMES.
216 | """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
217 | lv_loop_from = ( ( sy-index - 1 ) * mc_max_joins ) + 1.
218 | lv_loop_to = sy-index * mc_max_joins.
219 | CLEAR lv_sql_trg_line.
220 |
221 | APPEND INITIAL LINE TO et_sel_strings ASSIGNING .
222 |
223 | lv_join_index = 0.
224 | LOOP AT it_dd03l_join_in ASSIGNING FROM lv_loop_from TO lv_loop_to.
225 | lv_join_index = lv_join_index + 1.
226 | lv_sql_trg_line =
227 | |t{ lv_join_index }~fieldname EQ '{ -fieldname }'| &&
228 | " | AND t{ lv_join_index }~inttype = '{ -inttype }' | &&
229 | | AND t{ lv_join_index }~position >= '{ -position }' | &&
230 | | AND t{ lv_join_index }~intlen = '{ -intlen }' | &&
231 | | AND t{ lv_join_index }~decimals = '{ -decimals }'|.
232 |
233 | IF lv_join_index EQ 1.
234 | ELSE.
235 | lv_sql_trg_line = ` AND ` && lv_sql_trg_line.
236 | ENDIF.
237 | APPEND lv_sql_trg_line TO -where_dyn.
238 |
239 | ENDLOOP.
240 | """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
241 | DO lv_join_index TIMES.
242 | IF sy-index = 1.
243 | lv_sql_trg_line = |DD03L AS t1 join DD02L as DD02L on t1~tabname EQ DD02L~tabname and DD02L~TABCLASS = 'TRANSP'|.
244 | ELSE.
245 | lv_sql_trg_line = |INNER JOIN dd03l AS t{ sy-index } ON t1~tabname EQ t{ sy-index }~tabname|.
246 | ENDIF.
247 | APPEND lv_sql_trg_line TO -from_join_dyn.
248 | ENDDO.
249 | """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
250 | ENDDO.
251 |
252 | ENDMETHOD.
253 |
254 | METHOD do_select.
255 | * changing ct_sel_strings TYPE tt_sel_strings
256 | * RAISING zcx_c8a005_error.
257 | FIELD-SYMBOLS TYPE ts_sel_strings.
258 |
259 | LOOP AT ct_sel_strings ASSIGNING .
260 | SELECT t1~tabname t1~fieldname t1~as4local t1~as4vers t1~position t1~keyflag
261 | FROM (-from_join_dyn)
262 | INTO TABLE -tab_result
263 | WHERE (-where_dyn).
264 |
265 | IF -tab_result IS INITIAL.
266 | RAISE EXCEPTION TYPE zcx_c8a005_error.
267 | ENDIF.
268 |
269 | ENDLOOP.
270 |
271 | ENDMETHOD.
272 |
273 | METHOD get_tab_from_by_res.
274 | * EXPORTING ev_tabname TYPE tabname
275 | * CHANGING ct_sel_strings TYPE tt_sel_strings
276 | * RAISING zcx_c8a005_error.
277 | DATA lt_potential_tab_list TYPE STANDARD TABLE OF tabname.
278 | DATA lv_found_in_result TYPE syindex.
279 |
280 | FIELD-SYMBOLS TYPE ts_sel_strings.
281 | FIELD-SYMBOLS TYPE ts_sel_strings.
282 | FIELD-SYMBOLS TYPE ts_dd03l_loc.
283 | FIELD-SYMBOLS TYPE ts_dd03l_loc.
284 |
285 | CLEAR lt_potential_tab_list.
286 | LOOP AT ct_sel_strings ASSIGNING .
287 |
288 |
289 | IF -tab_result IS INITIAL.
290 | RAISE EXCEPTION TYPE zcx_c8a005_error.
291 | ENDIF.
292 |
293 |
294 | LOOP AT -tab_result ASSIGNING
295 | WHERE tabname IS NOT INITIAL.
296 |
297 | lv_found_in_result = 0.
298 | LOOP AT ct_sel_strings ASSIGNING .
299 | LOOP AT -tab_result ASSIGNING
300 | WHERE tabname = -tabname.
301 | lv_found_in_result = lv_found_in_result + 1.
302 | ENDLOOP.
303 | ENDLOOP.
304 | IF lv_found_in_result EQ lines( ct_sel_strings ).
305 | READ TABLE lt_potential_tab_list TRANSPORTING NO FIELDS
306 | WITH KEY table_line = -tabname.
307 | IF sy-subrc EQ 0.
308 | ELSE.
309 | APPEND -tabname TO lt_potential_tab_list.
310 | ENDIF.
311 | ENDIF.
312 |
313 | IF lines( lt_potential_tab_list ) GE 2.
314 | RAISE EXCEPTION TYPE zcx_c8a005_error.
315 | ENDIF.
316 |
317 | ENDLOOP.
318 | ENDLOOP.
319 |
320 | IF lt_potential_tab_list IS INITIAL.
321 | RAISE EXCEPTION TYPE zcx_c8a005_error.
322 | ENDIF.
323 |
324 | LOOP AT lt_potential_tab_list INTO ev_tabname.
325 | EXIT.
326 | ENDLOOP.
327 |
328 | ENDMETHOD.
329 |
330 | METHOD compare_components.
331 | * IMPORTING io_strcutdescr TYPE REF TO cl_abap_structdescr
332 | * iv_tabname TYPE tabname
333 | * RAISING zcx_c8a005_error.
334 |
335 | DATA lt_dd03l_loc TYPE tt_dd03l_loc.
336 |
337 | DATA lv_comp_index TYPE syindex.
338 |
339 | FIELD-SYMBOLS TYPE abap_compdescr.
340 | FIELD-SYMBOLS TYPE ts_dd03l_loc.
341 |
342 | SELECT tabname fieldname as4local as4vers position keyflag mandatory rollname comptype
343 | FROM dd03l
344 | INTO TABLE lt_dd03l_loc
345 | WHERE tabname = iv_tabname
346 | AND as4local = 'A'
347 | AND comptype = 'E'
348 | ORDER BY position ASCENDING
349 | .
350 |
351 | IF lines( lt_dd03l_loc ) EQ lines( io_strcutdescr->components ).
352 | " ok
353 | ELSE.
354 | RAISE EXCEPTION TYPE zcx_c8a005_error.
355 | ENDIF.
356 | """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
357 | """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
358 | lv_comp_index = 0.
359 | LOOP AT io_strcutdescr->components ASSIGNING .
360 | lv_comp_index = lv_comp_index + 1.
361 |
362 | READ TABLE lt_dd03l_loc ASSIGNING INDEX lv_comp_index.
363 | IF sy-subrc EQ 0.
364 |
365 | IF -name EQ -fieldname.
366 | ELSE.
367 | RAISE EXCEPTION TYPE zcx_c8a005_error.
368 | ENDIF.
369 |
370 | ENDIF.
371 |
372 | ENDLOOP.
373 |
374 | ENDMETHOD.
375 | ENDCLASS.
376 |
--------------------------------------------------------------------------------
/src/zcl_c8a005_tabtype.clas.testclasses.abap:
--------------------------------------------------------------------------------
1 | *"* use this source file for your ABAP unit test classes
2 |
3 | INTERFACE ltc_interface4type.
4 | TYPES ts_data TYPE ztc8a005_sample.
5 | TYPES tt_data TYPE STANDARD TABLE OF ts_data WITH DEFAULT KEY.
6 |
7 | TYPES ts_wide_tab TYPE bseg.
8 | TYPES tt_wide_tab TYPE STANDARD TABLE OF ts_wide_tab WITH DEFAULT KEY.
9 |
10 | TYPES: BEGIN OF ts_part_of_sample
11 | , entity_param1 TYPE ztc8a005_sample-entity_param1
12 | , entity_param2 TYPE ztc8a005_sample-entity_param2
13 | , entity_param3 TYPE ztc8a005_sample-entity_param3
14 | , entity_param4 TYPE ztc8a005_sample-entity_param4
15 | , END OF ts_part_of_sample
16 | , tt_part_of_sample TYPE STANDARD TABLE OF ts_part_of_sample WITH DEFAULT KEY
17 | .
18 |
19 | ENDINTERFACE.
20 |
21 | CLASS ltc_find_tab DEFINITION FOR TESTING
22 | DURATION SHORT
23 | RISK LEVEL HARMLESS
24 | INHERITING FROM cl_aunit_assert.
25 |
26 | PUBLIC SECTION.
27 | METHODS run_test_on_db_tab FOR TESTING.
28 | METHODS run_test_on_tab_type FOR TESTING.
29 | METHODS run_test_on_intf_type FOR TESTING.
30 | METHODS run_test_on_intf_widetype FOR TESTING.
31 | METHODS run_test_on_no_in_ddic FOR TESTING.
32 | PROTECTED SECTION.
33 |
34 | PRIVATE SECTION.
35 |
36 |
37 | ENDCLASS.
38 |
39 |
40 | CLASS ltc_find_tab IMPLEMENTATION.
41 |
42 | METHOD run_test_on_db_tab.
43 |
44 | DATA lo_tabtype TYPE REF TO zcl_c8a005_tabtype.
45 | CREATE OBJECT lo_tabtype.
46 |
47 | "DATA lt_sample TYPE STANDARD TABLE OF ztc8a005_sample.
48 | DATA lt_sample TYPE ztc8a005_sample_tab_type.
49 | DATA lv_tab_name TYPE tabname.
50 |
51 | lt_sample = VALUE #(
52 | ( entity_guid = 'XXXXXXGUID01' entity_param1 = 'CHAR11' entity_param2 = '1002003001' entity_param3 = sy-uzeit )
53 | ( entity_guid = 'XXXXXXGUID02' entity_param1 = 'CHAR12' entity_param2 = '1002003002' entity_param3 = ( sy-uzeit + 20 ) )
54 | ( entity_guid = 'XXXXXXGUID03' entity_param1 = 'CHAR13' entity_param2 = '1002003003' entity_param3 = ( sy-uzeit + 30 ) )
55 | ).
56 |
57 |
58 | BREAK-POINT.
59 |
60 | TRY.
61 | lv_tab_name =
62 | lo_tabtype->get_by_data( lt_sample ).
63 | CATCH zcx_c8a005_error.
64 | fail(
65 | * EXPORTING
66 | * msg =
67 | * level = if_aunit_constants=>severity-medium
68 | * quit = if_aunit_constants=>quit-test
69 | * detail =
70 | ).
71 | ENDTRY.
72 | ENDMETHOD.
73 |
74 | METHOD run_test_on_tab_type.
75 |
76 | DATA lo_tabtype TYPE REF TO zcl_c8a005_tabtype.
77 | CREATE OBJECT lo_tabtype.
78 |
79 | DATA lt_sample TYPE STANDARD TABLE OF ztc8a005_sample.
80 | DATA lv_tab_name TYPE tabname.
81 |
82 | lt_sample = VALUE #(
83 | ( entity_guid = 'XXXXXXGUID01' entity_param1 = 'CHAR11' entity_param2 = '1002003001' entity_param3 = sy-uzeit )
84 | ( entity_guid = 'XXXXXXGUID02' entity_param1 = 'CHAR12' entity_param2 = '1002003002' entity_param3 = ( sy-uzeit + 20 ) )
85 | ( entity_guid = 'XXXXXXGUID03' entity_param1 = 'CHAR13' entity_param2 = '1002003003' entity_param3 = ( sy-uzeit + 30 ) )
86 | ).
87 |
88 |
89 | BREAK-POINT.
90 |
91 | TRY.
92 | lv_tab_name =
93 | lo_tabtype->get_by_data( lt_sample ).
94 | CATCH zcx_c8a005_error.
95 | fail(
96 | * EXPORTING
97 | * msg =
98 | * level = if_aunit_constants=>severity-medium
99 | * quit = if_aunit_constants=>quit-test
100 | * detail =
101 | ).
102 | ENDTRY.
103 |
104 | ENDMETHOD.
105 |
106 | METHOD run_test_on_intf_type.
107 |
108 | DATA lo_tabtype TYPE REF TO zcl_c8a005_tabtype.
109 | CREATE OBJECT lo_tabtype.
110 |
111 | DATA lt_sample TYPE STANDARD TABLE OF ltc_interface4type=>ts_data.
112 | DATA lv_tab_name TYPE tabname.
113 |
114 | lt_sample = VALUE #(
115 | ( entity_guid = 'XXXXXXGUID01' entity_param1 = 'CHAR11' entity_param2 = '1002003001' entity_param3 = sy-uzeit )
116 | ( entity_guid = 'XXXXXXGUID02' entity_param1 = 'CHAR12' entity_param2 = '1002003002' entity_param3 = ( sy-uzeit + 20 ) )
117 | ( entity_guid = 'XXXXXXGUID03' entity_param1 = 'CHAR13' entity_param2 = '1002003003' entity_param3 = ( sy-uzeit + 30 ) )
118 | ).
119 |
120 |
121 | BREAK-POINT.
122 |
123 | TRY.
124 | lv_tab_name =
125 | lo_tabtype->get_by_data( lt_sample ).
126 | CATCH zcx_c8a005_error.
127 | fail(
128 | * EXPORTING
129 | * msg =
130 | * level = if_aunit_constants=>severity-medium
131 | * quit = if_aunit_constants=>quit-test
132 | * detail =
133 | ).
134 | ENDTRY.
135 |
136 | ENDMETHOD.
137 |
138 | METHOD run_test_on_intf_widetype.
139 |
140 | DATA lo_tabtype TYPE REF TO zcl_c8a005_tabtype.
141 | CREATE OBJECT lo_tabtype.
142 |
143 | DATA lt_sample TYPE STANDARD TABLE OF ltc_interface4type=>ts_wide_tab.
144 | DATA lv_tab_name TYPE tabname.
145 |
146 | lt_sample = VALUE #(
147 | ( bukrs = '2001' belnr = 'CHAR11' gjahr = sy-datum(4) buzei = '003' buzid = 'Z' augdt = ( sy-datum - 2 ) augcp = sy-datum )
148 | ( bukrs = '2001' belnr = 'CHAR12' gjahr = sy-datum(4) buzei = '003' buzid = 'Z' augdt = ( sy-datum - 2 ) augcp = sy-datum )
149 | ( bukrs = '2001' belnr = 'CHAR13' gjahr = sy-datum(4) buzei = '003' buzid = 'Z' augdt = ( sy-datum - 2 ) augcp = sy-datum )
150 | ).
151 |
152 |
153 | BREAK-POINT.
154 |
155 | TRY.
156 | lv_tab_name =
157 | lo_tabtype->get_by_data( lt_sample ).
158 | CATCH zcx_c8a005_error.
159 | fail(
160 | * EXPORTING
161 | * msg =
162 | * level = if_aunit_constants=>severity-medium
163 | * quit = if_aunit_constants=>quit-test
164 | * detail =
165 | ).
166 | ENDTRY.
167 |
168 | ENDMETHOD.
169 |
170 | METHOD run_test_on_no_in_ddic.
171 |
172 | DATA lo_tabtype TYPE REF TO zcl_c8a005_tabtype.
173 | CREATE OBJECT lo_tabtype.
174 |
175 | DATA lt_sample TYPE ltc_interface4type=>tt_part_of_sample.
176 | DATA lv_tab_name TYPE tabname.
177 |
178 | lt_sample = VALUE #( ( entity_param1 = 'CHAR11' entity_param2 = '1002003001' entity_param3 = sy-uzeit )
179 | ( entity_param1 = 'CHAR12' entity_param2 = '1002003002' entity_param3 = ( sy-uzeit + 20 ) )
180 | ( entity_param1 = 'CHAR13' entity_param2 = '1002003003' entity_param3 = ( sy-uzeit + 30 ) )
181 | ).
182 |
183 |
184 | BREAK-POINT.
185 |
186 | TRY.
187 | lv_tab_name =
188 | lo_tabtype->get_by_data( lt_sample ).
189 | fail(
190 | * EXPORTING
191 | * msg =
192 | * level = if_aunit_constants=>severity-medium
193 | * quit = if_aunit_constants=>quit-test
194 | * detail =
195 | ).
196 | CATCH zcx_c8a005_error.
197 | " test is ok
198 | ENDTRY.
199 |
200 |
201 | ENDMETHOD.
202 |
203 | ENDCLASS.
204 |
--------------------------------------------------------------------------------
/src/zcl_c8a005_tabtype.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_C8A005_TABTYPE
7 | E
8 | Get TabType
9 | 1
10 | X
11 | X
12 | X
13 | X
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/src/zcx_c8a005_error.clas.abap:
--------------------------------------------------------------------------------
1 | class ZCX_C8A005_ERROR definition
2 | public
3 | inheriting from CX_STATIC_CHECK
4 | create public .
5 |
6 | public section.
7 |
8 | interfaces IF_T100_DYN_MSG .
9 | interfaces IF_T100_MESSAGE .
10 |
11 | data MV_TXT type STRING .
12 |
13 | methods CONSTRUCTOR
14 | importing
15 | !TEXTID like IF_T100_MESSAGE=>T100KEY optional
16 | !PREVIOUS like PREVIOUS optional
17 | !MV_TXT type STRING optional .
18 | protected section.
19 | private section.
20 | ENDCLASS.
21 |
22 |
23 |
24 | CLASS ZCX_C8A005_ERROR IMPLEMENTATION.
25 |
26 |
27 | method CONSTRUCTOR.
28 | CALL METHOD SUPER->CONSTRUCTOR
29 | EXPORTING
30 | PREVIOUS = PREVIOUS
31 | .
32 | me->MV_TXT = MV_TXT .
33 | clear me->textid.
34 | if textid is initial.
35 | IF_T100_MESSAGE~T100KEY = IF_T100_MESSAGE=>DEFAULT_TEXTID.
36 | else.
37 | IF_T100_MESSAGE~T100KEY = TEXTID.
38 | endif.
39 | endmethod.
40 | ENDCLASS.
41 |
--------------------------------------------------------------------------------
/src/zcx_c8a005_error.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCX_C8A005_ERROR
7 | E
8 | AnyTab UpdateTask Exception
9 | 40
10 | 1
11 | X
12 | X
13 | X
14 |
15 |
16 |
17 | CONSTRUCTOR
18 | R
19 | CONSTRUCTOR
20 |
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/src/zfg_c8a005_upd.fugr.lzfg_c8a005_updd01.abap:
--------------------------------------------------------------------------------
1 | *&---------------------------------------------------------------------*
2 | *& Include LZFG_C8A005_UPDD01
3 | *&---------------------------------------------------------------------*
4 |
5 | CLASS lcl_tab_json DEFINITION.
6 |
7 | PUBLIC SECTION.
8 | METHODS constructor.
9 |
10 | METHODS get_json_string
11 | IMPORTING it_tab_data TYPE any
12 | EXPORTING ev_json_str TYPE string.
13 |
14 | METHODS put_json2update
15 | IMPORTING iv_tabname TYPE tabname
16 | iv_json_str TYPE string.
17 |
18 | METHODS do_commit .
19 | METHODS get_from_json2tab
20 | IMPORTING iv_tabname TYPE tabname
21 | iv_json_str TYPE string.
22 |
23 |
24 | PROTECTED SECTION.
25 |
26 | PRIVATE SECTION.
27 | CONSTANTS: BEGIN OF mc
28 | , json_open TYPE string VALUE '{"JSON":'
29 | , json_close TYPE string VALUE '}'
30 | , END OF mc.
31 |
32 | METHODS create_tab_n_line
33 | IMPORTING
34 | !iv_tabname TYPE tabname
35 | EXPORTING
36 | !ert_ref TYPE REF TO data
37 | !ers_ref TYPE REF TO data
38 | .
39 |
40 | METHODS get_tab_n_line_type
41 | IMPORTING
42 | !iv_tabname TYPE tabname
43 | EXPORTING
44 | !eo_line_type TYPE REF TO cl_abap_structdescr
45 | !eo_tab_type TYPE REF TO cl_abap_tabledescr.
46 |
47 | ENDCLASS.
48 |
--------------------------------------------------------------------------------
/src/zfg_c8a005_upd.fugr.lzfg_c8a005_updd01.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | LZFG_C8A005_UPDD01
7 | I
8 | S
9 | R
10 | X
11 |
12 |
13 |
14 | R
15 | Include LZFG_C8A005_UPDD01
16 | 26
17 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/src/zfg_c8a005_upd.fugr.lzfg_c8a005_updp01.abap:
--------------------------------------------------------------------------------
1 | *&---------------------------------------------------------------------*
2 | *& Include LZFG_C8A005_UPDP01
3 | *&---------------------------------------------------------------------*
4 |
5 | CLASS lcl_tab_json IMPLEMENTATION.
6 | METHOD constructor.
7 |
8 | ENDMETHOD. "constructor
9 |
10 | METHOD get_json_string.
11 | * IMPORTING it_tab_data TYPE any
12 | * EXPORTING ev_json_str TYPE string.
13 | DATA lo_writer TYPE REF TO cl_sxml_string_writer.
14 | DATA lv_xstr_json TYPE xstring.
15 | " DATA lv_str_json TYPE string.
16 | DATA lv_reponse2pend TYPE string.
17 | lo_writer = cl_sxml_string_writer=>create( type = if_sxml=>co_xt_json ).
18 |
19 | CALL TRANSFORMATION id SOURCE json = it_tab_data
20 | RESULT XML lo_writer.
21 |
22 | lv_xstr_json = lo_writer->get_output( ).
23 | TRY.
24 | ev_json_str = cl_abap_codepage=>convert_from(
25 | source = lv_xstr_json
26 | * codepage = `UTF-8`
27 | * endian =
28 | * replacement = '#'
29 | * ignore_cerr = ABAP_FALSE
30 | ).
31 | CATCH cx_parameter_invalid_range. " Parameter with Invalid Range
32 | CATCH cx_sy_codepage_converter_init. " System Exception for Code Page Converter Initialization
33 | CATCH cx_sy_conversion_codepage. " System Exception Converting Character Set
34 | CATCH cx_parameter_invalid_type. " Parameter with Invalid Type
35 | ENDTRY.
36 |
37 |
38 |
39 |
40 | "REPLACE FIRST OCCURRENCE OF '{"JSON":[' IN ev_json_str WITH '{"request":['.
41 | " REPLACE ALL OCCURRENCES OF '{"JSON":' IN lv_str_json WITH ''.
42 | REPLACE ALL OCCURRENCES OF mc-json_open IN ev_json_str WITH ''.
43 | ev_json_str = shift_right( val = ev_json_str places = 1 ).
44 |
45 | " ev_json_str = lv_str_json.
46 | ENDMETHOD. "get_json_string
47 |
48 | METHOD put_json2update.
49 | * IMPORTING iv_tabname TYPE tabname
50 | * iv_json_str TYPE string.
51 |
52 | CALL FUNCTION 'Z_C8A005_UPD_BYJSON'
53 | IN UPDATE TASK
54 | EXPORTING
55 | iv_tabname = iv_tabname " Имя таблицы
56 | iv_json_str = iv_json_str.
57 |
58 |
59 | ENDMETHOD. "put_json2update
60 |
61 | METHOD do_commit .
62 | CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
63 | EXPORTING
64 | wait = abap_true " Use of Command `COMMIT AND WAIT`
65 | * IMPORTING
66 | * return = " Return Messages
67 | .
68 | ENDMETHOD. "do_commit
69 |
70 | METHOD get_from_json2tab.
71 | * IMPORTING iv_tabname TYPE tabname
72 | * iv_json_str TYPE string.
73 |
74 | DATA lv_json_str TYPE string.
75 | DATA lr_db_content TYPE REF TO data.
76 | DATA lr_reader TYPE REF TO if_sxml_reader.
77 |
78 | FIELD-SYMBOLS TYPE STANDARD TABLE.
79 |
80 |
81 | TRY .
82 | create_tab_n_line(
83 | EXPORTING
84 | iv_tabname = iv_tabname " Имя таблицы
85 | IMPORTING
86 | ert_ref = lr_db_content ).
87 |
88 | CATCH cx_root.
89 | MESSAGE e000(cl).
90 | RETURN.
91 | ENDTRY.
92 |
93 |
94 | ASSIGN lr_db_content->* TO .
95 | lv_json_str = mc-json_open && iv_json_str && mc-json_close.
96 |
97 |
98 | TRY.
99 |
100 | CLEAR .
101 |
102 | CALL TRANSFORMATION id
103 | SOURCE XML lv_json_str
104 | RESULT json = .
105 |
106 | CATCH cx_root.
107 | MESSAGE e000(cl).
108 | ENDTRY.
109 |
110 |
111 | TRY.
112 | MODIFY (iv_tabname) FROM TABLE .
113 | " OK
114 | CATCH cx_sy_open_sql_db.
115 | MESSAGE e000(cl).
116 | RETURN.
117 | ENDTRY.
118 |
119 |
120 | ENDMETHOD. "get_from_json2tab
121 |
122 | METHOD create_tab_n_line.
123 | * IMPORTING
124 | * !iv_tabname TYPE tabname
125 | * EXPORTING
126 | * !ert_ref TYPE REF TO data
127 | * !ers_ref TYPE REF TO data
128 | * .
129 |
130 | DATA lv_tabname TYPE tabname.
131 |
132 | DATA lo_line_type TYPE REF TO cl_abap_structdescr.
133 | DATA lo_tab_type TYPE REF TO cl_abap_tabledescr.
134 |
135 | DATA lt_tab_ref TYPE REF TO data.
136 | DATA ls_line_ref TYPE REF TO data.
137 |
138 | lv_tabname = iv_tabname.
139 |
140 | TRY.
141 | me->get_tab_n_line_type(
142 | EXPORTING
143 | iv_tabname = lv_tabname " Имя таблицы
144 | IMPORTING
145 | eo_line_type = lo_line_type " Runtime Type Services
146 | eo_tab_type = lo_tab_type " Runtime Type Services
147 | ).
148 | " CATCH zcx_nm0002_templ. " Exceptions while template
149 |
150 | CREATE DATA lt_tab_ref TYPE HANDLE lo_tab_type.
151 | CREATE DATA ls_line_ref TYPE HANDLE lo_line_type.
152 |
153 | ert_ref ?= lt_tab_ref.
154 | ers_ref ?= ls_line_ref.
155 |
156 | CATCH cx_root.
157 | " dump any way
158 | MESSAGE x000(cl).
159 | ENDTRY.
160 |
161 | ENDMETHOD. "create_tab_n_line
162 |
163 | METHOD get_tab_n_line_type.
164 | * METHODS get_tab_n_line_type
165 | * IMPORTING
166 | * !iv_tabname TYPE tabname
167 | * EXPORTING
168 | * !eo_line_type TYPE REF TO cl_abap_structdescr
169 | * !eo_tab_type TYPE REF TO cl_abap_tabledescr.
170 | DATA lo_struct TYPE REF TO cl_abap_structdescr.
171 | DATA lt_comp TYPE cl_abap_structdescr=>component_table.
172 |
173 | DATA lv_msg TYPE string.
174 | DATA lo_typedescr TYPE REF TO cl_abap_typedescr.
175 |
176 | lo_struct ?= cl_abap_typedescr=>describe_by_name( iv_tabname ).
177 |
178 | lt_comp = lo_struct->get_components( ).
179 |
180 | TRY .
181 | eo_line_type = cl_abap_structdescr=>create(
182 | p_components = lt_comp
183 | * p_strict = true
184 | ).
185 | eo_tab_type = cl_abap_tabledescr=>create(
186 | p_line_type = eo_line_type
187 | * p_table_kind = tablekind_std
188 | * p_unique = abap_false
189 | * p_key =
190 | * p_key_kind = keydefkind_default
191 | ).
192 | CATCH cx_sy_table_creation. " Exception when Creating a Table Type
193 | MESSAGE e001(cl) WITH iv_tabname INTO lv_msg.
194 |
195 |
196 | ENDTRY.
197 | ENDMETHOD. "get_tab_n_line_type
198 |
199 | ENDCLASS. "lcl_tab_json IMPLEMENTATION
200 |
--------------------------------------------------------------------------------
/src/zfg_c8a005_upd.fugr.lzfg_c8a005_updp01.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | LZFG_C8A005_UPDP01
7 | I
8 | S
9 | R
10 | X
11 |
12 |
13 |
14 | R
15 | Include LZFG_C8A005_UPDP01
16 | 26
17 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/src/zfg_c8a005_upd.fugr.lzfg_c8a005_updtop.abap:
--------------------------------------------------------------------------------
1 | FUNCTION-POOL ZFG_C8A005_UPD. "MESSAGE-ID ..
2 |
3 | INCLUDE LZFG_C8A005_UPDD01. " Local class definition
4 |
--------------------------------------------------------------------------------
/src/zfg_c8a005_upd.fugr.lzfg_c8a005_updtop.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | LZFG_C8A005_UPDTOP
7 | S
8 | D$
9 | I
10 | S
11 | X
12 | D$S
13 | X
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/src/zfg_c8a005_upd.fugr.saplzfg_c8a005_upd.abap:
--------------------------------------------------------------------------------
1 | *******************************************************************
2 | * System-defined Include-files. *
3 | *******************************************************************
4 | INCLUDE LZFG_C8A005_UPDTOP. " Global Data
5 | INCLUDE LZFG_C8A005_UPDUXX. " Function Modules
6 |
7 | *******************************************************************
8 | * User-defined Include-files (if necessary). *
9 | *******************************************************************
10 | * INCLUDE LZFG_C8A005_UPDF... " Subroutines
11 | * INCLUDE LZFG_C8A005_UPDO... " PBO-Modules
12 | * INCLUDE LZFG_C8A005_UPDI... " PAI-Modules
13 | * INCLUDE LZFG_C8A005_UPDE... " Events
14 | INCLUDE LZFG_C8A005_UPDP01. " Local class implement.
15 |
--------------------------------------------------------------------------------
/src/zfg_c8a005_upd.fugr.saplzfg_c8a005_upd.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | SAPLZFG_C8A005_UPD
7 | S
8 | D$
9 | F
10 | S
11 | R
12 | X
13 | D$S
14 | X
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/src/zfg_c8a005_upd.fugr.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Function for Any Tab Update
6 |
7 | LZFG_C8A005_UPDD01
8 | LZFG_C8A005_UPDP01
9 | LZFG_C8A005_UPDTOP
10 | SAPLZFG_C8A005_UPD
11 |
12 |
13 |
14 | Z_C8A005_DEST_BYJSON
15 | R
16 | Update By tab TABNAME in Destination NONE
17 |
18 |
19 | IV_TABNAME
20 | TABNAME
21 |
22 |
23 | IV_JSON_STR
24 | STRING
25 |
26 |
27 | IV_KZ
28 | X
29 | UPDKZ_D
30 |
31 |
32 | IV_EMPTY_FIELDS
33 | X
34 | STRING
35 |
36 |
37 |
38 |
39 | IV_TABNAME
40 | P
41 | Имя таблицы
42 |
43 |
44 | IV_JSON_STR
45 | P
46 |
47 |
48 | IV_KZ
49 | P
50 | Таблица для индикаторов обновления
51 |
52 |
53 | IV_EMPTY_FIELDS
54 | P
55 |
56 |
57 |
58 |
59 | Z_C8A005_UPD_ANYTAB
60 | Update By tab TABNAME
61 |
62 |
63 | IV_TABNAME
64 | X
65 | TABNAME
66 |
67 |
68 | IT_TAB_DATA
69 | X
70 | ANY
71 |
72 |
73 | IV_DO_COMMIT
74 | ABAP_FALSE
75 | X
76 | X
77 | CHAR1
78 |
79 |
80 | IV_KZ
81 | X
82 | X
83 | UPDKZ_D
84 |
85 |
86 | IV_DEST_NONE
87 | ABAP_FALSE
88 | X
89 | X
90 | CHAR1
91 |
92 |
93 | IV_EMPTY_FIELDS
94 | X
95 | X
96 | STRING
97 |
98 |
99 |
100 |
101 | IV_TABNAME
102 | P
103 | Имя таблицы
104 |
105 |
106 | IT_TAB_DATA
107 | P
108 |
109 |
110 | IV_DO_COMMIT
111 | P
112 | Индикатор из одной позиции
113 |
114 |
115 | IV_KZ
116 | P
117 | Таблица для индикаторов обновления
118 |
119 |
120 | IV_DEST_NONE
121 | P
122 | Destination NONE call
123 |
124 |
125 | IV_EMPTY_FIELDS
126 | P
127 |
128 |
129 |
130 |
131 | Z_C8A005_UPD_BYJSON
132 | 1
133 | Update By tab TABNAME
134 |
135 |
136 | IV_TABNAME
137 | TABNAME
138 |
139 |
140 | IV_JSON_STR
141 | STRING
142 |
143 |
144 | IV_KZ
145 | X
146 | UPDKZ_D
147 |
148 |
149 | IV_EMPTY_FIELDS
150 | X
151 | STRING
152 |
153 |
154 |
155 |
156 | IV_TABNAME
157 | P
158 | Имя таблицы
159 |
160 |
161 | IV_JSON_STR
162 | P
163 |
164 |
165 | IV_KZ
166 | P
167 | Таблица для индикаторов обновления
168 |
169 |
170 | IV_EMPTY_FIELDS
171 | P
172 |
173 |
174 |
175 |
176 |
177 |
178 |
179 |
--------------------------------------------------------------------------------
/src/zfg_c8a005_upd.fugr.z_c8a005_dest_byjson.abap:
--------------------------------------------------------------------------------
1 | FUNCTION z_c8a005_dest_byjson.
2 | *"----------------------------------------------------------------------
3 | *"*"Локальный интерфейс:
4 | *" IMPORTING
5 | *" VALUE(IV_TABNAME) TYPE TABNAME
6 | *" VALUE(IV_JSON_STR) TYPE STRING
7 | *" VALUE(IV_KZ) TYPE UPDKZ_D OPTIONAL
8 | *" VALUE(IV_EMPTY_FIELDS) TYPE STRING OPTIONAL
9 | *"----------------------------------------------------------------------
10 |
11 |
12 | DATA lo_tab_json TYPE REF TO zcl_c8a005_tab_json.
13 |
14 | CALL FUNCTION 'Z_C8A005_UPD_BYJSON'
15 | IN UPDATE TASK
16 | EXPORTING
17 | iv_tabname = iv_tabname " Имя таблицы
18 | iv_json_str = iv_json_str
19 | iv_kz = iv_kz " Таблица для индикаторов обновления
20 | iv_empty_fields = iv_empty_fields.
21 |
22 |
23 | CREATE OBJECT lo_tab_json.
24 |
25 | lo_tab_json->do_commit( ).
26 |
27 | ENDFUNCTION.
28 |
--------------------------------------------------------------------------------
/src/zfg_c8a005_upd.fugr.z_c8a005_upd_anytab.abap:
--------------------------------------------------------------------------------
1 | FUNCTION z_c8a005_upd_anytab.
2 | *"----------------------------------------------------------------------
3 | *"*"Локальный интерфейс:
4 | *" IMPORTING
5 | *" REFERENCE(IV_TABNAME) TYPE TABNAME
6 | *" REFERENCE(IT_TAB_DATA) TYPE ANY
7 | *" REFERENCE(IV_DO_COMMIT) TYPE CHAR1 DEFAULT ABAP_FALSE
8 | *" REFERENCE(IV_KZ) TYPE UPDKZ_D OPTIONAL
9 | *" REFERENCE(IV_DEST_NONE) TYPE CHAR1 DEFAULT ABAP_FALSE
10 | *" REFERENCE(IV_EMPTY_FIELDS) TYPE STRING OPTIONAL
11 | *"----------------------------------------------------------------------
12 |
13 | " DATA lo_tab_json TYPE REF TO lcl_tab_json.
14 | DATA lo_tab_json TYPE REF TO zcl_c8a005_tab_json.
15 | DATA lv_json_str TYPE string.
16 |
17 | """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
18 | DATA lv_subkey_saab_log TYPE string.
19 | DATA lv_ts TYPE timestampl.
20 | DATA sycprog TYPE sycprog.
21 | DATA syuname TYPE syuname.
22 | DATA lv_bcs_mod TYPE bcs_blmodule.
23 |
24 | """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
25 | GET TIME STAMP FIELD lv_ts.
26 |
27 | lv_subkey_saab_log = iv_tabname && `_` && lv_ts.
28 | sycprog = sy-cprog.
29 | syuname = sy-uname.
30 |
31 | LOG-POINT ID zc8a005_control SUBKEY lv_subkey_saab_log
32 | FIELDS it_tab_data
33 | iv_do_commit
34 | iv_kz
35 | iv_dest_none
36 | iv_empty_fields
37 | sycprog
38 | syuname.
39 | lv_bcs_mod = iv_tabname.
40 | cl_bcs_breakloop=>execute_loop( iv_module = lv_bcs_mod ).
41 | """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
42 | CREATE OBJECT lo_tab_json.
43 |
44 | lo_tab_json->get_json_string( EXPORTING it_tab_data = it_tab_data
45 | IMPORTING ev_json_str = lv_json_str ).
46 |
47 |
48 | CASE abap_true.
49 | WHEN iv_dest_none.
50 | lo_tab_json->put_json2dest_none( EXPORTING iv_tabname = iv_tabname
51 | iv_json_str = lv_json_str
52 | iv_kz = iv_kz
53 | iv_empty_fields = iv_empty_fields ).
54 |
55 | WHEN OTHERS.
56 | lo_tab_json->put_json2update( EXPORTING iv_tabname = iv_tabname
57 | iv_json_str = lv_json_str
58 | iv_kz = iv_kz
59 | iv_empty_fields = iv_empty_fields ).
60 |
61 | IF iv_do_commit EQ abap_true.
62 | lo_tab_json->do_commit( ).
63 | ENDIF.
64 | ENDCASE.
65 |
66 |
67 |
68 | ENDFUNCTION.
69 |
--------------------------------------------------------------------------------
/src/zfg_c8a005_upd.fugr.z_c8a005_upd_byjson.abap:
--------------------------------------------------------------------------------
1 | FUNCTION z_c8a005_upd_byjson.
2 | *"----------------------------------------------------------------------
3 | *"*"Функциональный модуль обновления:
4 | *"
5 | *"*"Локальный интерфейс:
6 | *" IMPORTING
7 | *" VALUE(IV_TABNAME) TYPE TABNAME
8 | *" VALUE(IV_JSON_STR) TYPE STRING
9 | *" VALUE(IV_KZ) TYPE UPDKZ_D OPTIONAL
10 | *" VALUE(IV_EMPTY_FIELDS) TYPE STRING OPTIONAL
11 | *"----------------------------------------------------------------------
12 |
13 | DATA lo_tab_json TYPE REF TO zcl_c8a005_tab_json.
14 | DATA lv_json_str TYPE string.
15 |
16 | CREATE OBJECT lo_tab_json.
17 |
18 | lo_tab_json->get_from_json2tab( EXPORTING iv_tabname = iv_tabname
19 | iv_json_str = iv_json_str
20 | iv_kz = iv_kz
21 | iv_empty_fields = iv_empty_fields ).
22 |
23 |
24 |
25 |
26 |
27 |
28 | ENDFUNCTION.
29 |
--------------------------------------------------------------------------------
/version_label.svg:
--------------------------------------------------------------------------------
1 |
2 |
13 |
--------------------------------------------------------------------------------