1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | FORM vim_bc_logs_put CHANGING p_bc_entry_list LIKE |
12 | vim_bc_entry_list. |
13 | |
14 | DATA: corr_keytab_save LIKE TABLE OF e071k, first, |
15 | dummy LIKE sy-subrc, transport_active LIKE t000-cccoractiv, |
16 | w_tabkey_value TYPE scpractr, |
17 | tabkey_values_n TYPE vim_bc_tab_logs, |
18 | tabkey_values_u TYPE vim_bc_tab_logs, |
19 | tabkey_values_d TYPE vim_bc_tab_logs, |
20 | w_bc_entry TYPE scpr_viewdata, bc_entries TYPE scpr_viewdatas, |
21 | w_bc_entry_list TYPE vimty_bc_entry_list_type, |
22 | bc_keytab TYPE bc_keytab_type, |
23 | bc_keytab_wa LIKE LINE OF bc_keytab, |
24 | p_msgid, p_msgty, p_msgno, bc_key_needed(1) TYPE c, |
25 | foreign_langu TYPE sy-langu, |
26 | rc LIKE sy-subrc, keys_identical TYPE xfeld, |
27 | subrc TYPE sy-subrc, tabix TYPE sy-tabix. |
28 | |
29 | STATICS: viewname_old TYPE vimdesc-viewname, |
30 | keylen_real TYPE i. |
31 | |
32 | CONSTANTS: bc_id_length TYPE i VALUE 32, |
33 | bc_recno_length TYPE i VALUE 10. |
34 | |
35 | FIELD-SYMBOLS: <bc_entry_keyx> TYPE x, <key> TYPE x, |
36 | <vim_bc_keyx> TYPE x, <w_bc_entry_x> TYPE x, |
37 | <xlangu> TYPE x, <namtab> type vimnamtab. |
38 | |
39 | ASSIGN: w_bc_entry_list-keys(x_header-keylen) TO <bc_entry_keyx>. |
40 | ASSIGN: bc_keytab_wa-bc_tabkey TO <vim_bc_keyx> CASTING. |
41 | ASSIGN: w_bc_entry-data TO <w_bc_entry_x> CASTING. |
42 | |
43 | IF x_header-viewname NE viewname_old. "HCG: has table align gap? |
44 | viewname_old = x_header-viewname. |
45 | CLEAR keylen_real. |
46 | LOOP AT x_namtab ASSIGNING <namtab> WHERE keyflag = 'X' AND |
47 | texttabfld IS INITIAL. |
48 | keylen_real = keylen_real + <namtab>-flength. |
49 | ENDLOOP. |
50 | ENDIF. |
51 | LOOP AT p_bc_entry_list INTO w_bc_entry_list WHERE |
52 | viewname = x_header-viewname AND action <> original. |
53 |
54 |
55 |
56 | IF first = space. |
57 | first = 'X'. |
58 | INSERT LINES OF corr_keytab INTO TABLE corr_keytab_save. |
59 | REFRESH corr_keytab. |
60 | CLEAR <table1>. |
61 | transport_active = vim_client_state. |
62 | ENDIF. |
63 |
64 | IF x_header-keylen = keylen_real. |
65 | READ TABLE total WITH KEY <bc_entry_keyx> BINARY SEARCH. |
66 | ELSE. |
67 | PERFORM vim_read_table_with_gap |
68 | TABLES total |
69 | USING <bc_entry_keyx> |
70 | x_namtab[] |
71 | CHANGING subrc |
72 | tabix. |
73 | IF subrc = 0. |
74 | READ TABLE total INDEX tabix. |
75 | ENDIF. |
76 | ENDIF. |
77 | IF x_header-bastab EQ space. "view |
78 | MOVE <bc_entry_keyx> TO <f1_x>. |
79 | PERFORM (corr_formname) IN PROGRAM (sy-repid) USING |
80 | vim_writing_bc_imp_log |
81 | dummy. |
82 | REFRESH bc_keytab. |
83 | CLEAR bc_key_needed. |
84 | IF x_header-keylen > vim_max_trsp_keylength. "HCG tabkey up to 255 |
85 | bc_key_needed = 'X'. |
86 | ENDIF. |
87 | IF bc_key_needed NE 'X'. "Look for non-char field in key |
88 | LOOP AT x_namtab WHERE keyflag = 'X'. |
89 | IF 'CNDT' NS x_namtab-inttype. "non charlike field |
90 | bc_key_needed = 'X'. |
91 | EXIT. |
92 | ENDIF. |
93 | ENDLOOP. |
94 | ENDIF. |
95 | IF bc_key_needed NE 'X'. "Look if viewkey > primtabkey |
96 | CLEAR keys_identical. |
97 | PERFORM vim_comp_roottabkey USING x_header |
98 | x_namtab[] |
99 | CHANGING keys_identical |
100 | rc. |
101 | IF keys_identical EQ space. bc_key_needed = 'X'. ENDIF. |
102 | ENDIF. |
103 | IF bc_key_needed NE space. "Tabkeys via new coding |
104 | LOOP AT corr_keytab. |
105 | MOVE-CORRESPONDING corr_keytab TO bc_keytab_wa. |
106 | APPEND bc_keytab_wa TO bc_keytab. |
107 | ENDLOOP. |
108 | PERFORM vim_build_bc_tabkeys USING w_bc_entry_list |
109 | CHANGING bc_keytab. |
110 | ELSE. "Tabkeys as up to now via generated coding (corr_maint_...) |
111 | LOOP AT corr_keytab. |
112 | MOVE-CORRESPONDING corr_keytab TO bc_keytab_wa. |
113 | MOVE corr_keytab-tabkey TO bc_keytab_wa-bc_tabkey. |
114 | APPEND bc_keytab_wa TO bc_keytab. |
115 | ENDLOOP. |
116 |
117 | IF x_header-texttbexst NE space. |
118 | READ TABLE bc_keytab into bc_keytab_wa |
119 | with key objname = x_header-texttab. |
120 | LOOP AT w_bc_entry_list-forlangu INTO foreign_langu. |
121 | ASSIGN foreign_langu TO <xlangu> casting. |
122 | MOVE <xlangu> TO |
123 | <vim_bc_keyx>+x_header-sprasfdpos(cl_abap_char_utilities=>charsize). |
124 | APPEND bc_keytab_wa TO bc_keytab. |
125 | ENDLOOP. |
126 | ENDIF. |
127 | ENDIF. |
128 | ELSE. "base table |
129 | MOVE <vim_xtotal> TO <table1_x>. |
130 | MOVE-CORRESPONDING e071k TO bc_keytab_wa. |
131 | MOVE e071k-tabkey TO bc_keytab_wa-bc_tabkey. |
132 | bc_keytab_wa-objname = x_header-maintview. |
133 | MOVE <bc_entry_keyx> TO <vim_bc_keyx>(x_header-keylen). |
134 | APPEND bc_keytab_wa TO bc_keytab. |
135 | IF x_header-bastab <> space AND |
136 | x_header-texttbexst NE space AND "base table with |
137 | <vim_xtotal_text> NE <text_initial_x>. "text table |
138 | MOVE-CORRESPONDING e071k TO bc_keytab_wa. |
139 | MOVE e071k-tabkey TO bc_keytab_wa-bc_tabkey. |
140 | bc_keytab_wa-objname = x_header-texttab. |
141 | MOVE <vim_xtotal_text> TO <vim_bc_keyx>(x_header-textkeylen). |
142 | APPEND bc_keytab_wa TO bc_keytab. |
143 |
144 | READ TABLE x_namtab WITH KEY keyflag = 'X' "langu field |
145 | primtabkey = '0000'. |
146 | LOOP AT w_bc_entry_list-forlangu INTO foreign_langu. |
147 | ASSIGN foreign_langu TO <xlangu> CASTING. |
148 | MOVE <xlangu> TO |
149 | <vim_bc_keyx>+x_namtab-texttabpos(x_namtab-flength). |
150 | APPEND bc_keytab_wa TO bc_keytab. |
151 | ENDLOOP. |
152 | ENDIF. |
153 | ENDIF. "base table or view |
154 | CASE w_bc_entry_list-action. |
155 | WHEN neuer_eintrag. |
156 |
157 | PERFORM bc_entry_log_fill USING x_header |
158 | x_namtab[] |
159 | bc_keytab[] |
160 | w_bc_entry_list |
161 | CHANGING tabkey_values_n. |
162 | CLEAR w_bc_entry_list-action. |
163 | WHEN aendern. |
164 |
165 | PERFORM bc_entry_log_fill USING x_header |
166 | x_namtab[] |
167 | bc_keytab[] |
168 | w_bc_entry_list |
169 | CHANGING tabkey_values_u. |
170 | CLEAR w_bc_entry_list-action. |
171 | MOVE: w_bc_entry_list-id TO w_bc_entry-bcset_id, |
172 | w_bc_entry_list-recnumber TO w_bc_entry-recnumber, |
173 | x_header-viewname TO w_bc_entry-viewname, |
174 | <vim_xtotal> TO <w_bc_entry_x>. |
175 | APPEND w_bc_entry TO bc_entries. |
176 | WHEN geloescht. |
177 |
178 | PERFORM bc_entry_log_fill USING x_header |
179 | x_namtab[] |
180 | bc_keytab[] |
181 | w_bc_entry_list |
182 | CHANGING tabkey_values_d. |
183 | DELETE p_bc_entry_list. |
184 | ENDCASE. |
185 | REFRESH corr_keytab. "weg??? |
186 | REFRESH bc_keytab. |
187 | ENDLOOP. |
188 | IF NOT tabkey_values_n IS INITIAL. |
189 | DELETE ADJACENT DUPLICATES FROM tabkey_values_n COMPARING ALL |
190 | FIELDS. |
191 | LOOP AT tabkey_values_n INTO w_tabkey_value. |
192 | CALL FUNCTION 'SCPR_EXT_SCPRACTR_FILL' |
193 | EXPORTING |
194 | tablename = w_tabkey_value-tablename |
195 | profid = w_tabkey_value-profid |
196 | recnumber = w_tabkey_value-recnumber |
197 | viewname = x_header-maintview |
198 | viewvar = x_header-viewname |
199 | del_record = ' ' |
200 | new_record = 'X' |
201 | key = w_tabkey_value-tabkey |
202 | EXCEPTIONS |
203 | wrong_parameters = 1 |
204 | internal_error = 2 |
205 | key_not_supportet = 3 |
206 | fielddescr_error = 4 |
207 | OTHERS = 5. |
208 | IF sy-subrc <> 0. |
209 | p_msgid = 'SCPR'. |
210 | CASE sy-subrc. |
211 | WHEN 1. |
212 | p_msgty = 'E'. |
213 | p_msgno = '273'. |
214 | WHEN 3. |
215 | p_msgty = 'W'. |
216 | p_msgno = '408'. |
217 | WHEN 4. |
218 | p_msgty = 'E'. |
219 | p_msgno = '395'. |
220 | WHEN OTHERS. |
221 | p_msgty = 'E'. |
222 | p_msgno = '320'. |
223 | ENDCASE. |
224 | PERFORM vim_process_message USING sy-msgid sy-msgty sy-msgty |
225 | sy-msgno space space space space. |
226 | ENDIF. |
227 | ENDLOOP. |
228 | ENDIF. |
229 | IF NOT tabkey_values_u IS INITIAL. |
230 | DELETE ADJACENT DUPLICATES FROM tabkey_values_u COMPARING ALL |
231 | FIELDS. |
232 | LOOP AT tabkey_values_u INTO w_tabkey_value. |
233 | CALL FUNCTION 'SCPR_EXT_SCPRACTR_FILL' |
234 | EXPORTING |
235 | tablename = w_tabkey_value-tablename |
236 | profid = w_tabkey_value-profid |
237 | recnumber = w_tabkey_value-recnumber |
238 | viewname = x_header-maintview |
239 | viewvar = x_header-viewname |
240 | del_record = ' ' |
241 | new_record = ' ' |
242 | key = w_tabkey_value-tabkey |
243 | EXCEPTIONS |
244 | wrong_parameters = 1 |
245 | internal_error = 2 |
246 | key_not_supportet = 3 |
247 | fielddescr_error = 4 |
248 | OTHERS = 5. |
249 | IF sy-subrc <> 0. |
250 | p_msgid = 'SCPR'. |
251 | CASE sy-subrc. |
252 | WHEN 1. |
253 | p_msgty = 'E'. |
254 | p_msgno = '273'. |
255 | WHEN 3. |
256 | p_msgty = 'W'. |
257 | p_msgno = '408'. |
258 | WHEN 4. |
259 | p_msgty = 'E'. |
260 | p_msgno = '395'. |
261 | WHEN OTHERS. |
262 | p_msgty = 'E'. |
263 | p_msgno = '320'. |
264 | ENDCASE. |
265 | PERFORM vim_process_message USING sy-msgid sy-msgty sy-msgty |
266 | sy-msgno space space space space. |
267 | ENDIF. |
268 | ENDLOOP. |
269 | ENDIF. |
270 | IF NOT tabkey_values_d IS INITIAL. |
271 | DELETE ADJACENT DUPLICATES FROM tabkey_values_d COMPARING ALL |
272 | FIELDS. |
273 | LOOP AT tabkey_values_d INTO w_tabkey_value. |
274 | CALL FUNCTION 'SCPR_EXT_SCPRACTR_FILL' |
275 | EXPORTING |
276 | tablename = w_tabkey_value-tablename |
277 | profid = w_tabkey_value-profid |
278 | recnumber = w_tabkey_value-recnumber |
279 | viewname = x_header-maintview |
280 | viewvar = x_header-viewname |
281 | del_record = 'X' |
282 | new_record = ' ' |
283 | key = w_tabkey_value-tabkey |
284 | EXCEPTIONS |
285 | wrong_parameters = 1 |
286 | internal_error = 2 |
287 | key_not_supportet = 3 |
288 | fielddescr_error = 4 |
289 | OTHERS = 5. |
290 | IF sy-subrc <> 0. |
291 | p_msgid = 'SCPR'. |
292 | CASE sy-subrc. |
293 | WHEN 1. |
294 | p_msgty = 'E'. |
295 | p_msgno = '273'. |
296 | WHEN 3. |
297 | p_msgty = 'W'. |
298 | p_msgno = '408'. |
299 | WHEN 4. |
300 | p_msgty = 'E'. |
301 | p_msgno = '395'. |
302 | WHEN OTHERS. |
303 | p_msgty = 'E'. |
304 | p_msgno = '320'. |
305 | ENDCASE. |
306 | PERFORM vim_process_message USING sy-msgid sy-msgty sy-msgty |
307 | sy-msgno space space space space. |
308 | ENDIF. |
309 | ENDLOOP. |
310 | ENDIF. |
311 | IF NOT corr_keytab_save IS INITIAL. |
312 | INSERT LINES OF corr_keytab_save INTO TABLE corr_keytab. |
313 | ENDIF. |
314 | ENDFORM. " VIM_BC_LOGS_PUT |
315 | |
316 |
317 |
318 |
319 |
320 |
321 |
322 |
323 |
324 |
325 |
326 |
327 |
328 | FORM bc_entry_log_fill USING p_header TYPE vimdesc |
329 | p_namtab LIKE x_namtab[] |
330 | p_bc_keytab TYPE bc_keytab_type |
331 | p_bc_entry TYPE vimty_bc_entry_list_type |
332 | CHANGING p_tabkey_values TYPE vim_bc_tab_logs. |
333 | |
334 | STATICS: dd28j_tab TYPE TABLE OF dd28j. |
335 | DATA: w_dd28j TYPE dd28j, w_tabkey_value TYPE scpractr, |
336 | w_fields TYPE vimty_fields_type. |
337 | FIELD-SYMBOLS: <namtab> TYPE vimnamtab, <dfies> TYPE dfies, |
338 | <keytab> TYPE bc_key_type. |
339 | |
340 | IF p_header-bastab = space. |
341 | READ TABLE dd28j_tab INTO w_dd28j INDEX 1. |
342 | IF sy-subrc <> 0 OR p_header-viewname <> w_dd28j-viewname. |
343 |
344 | REFRESH dd28j_tab. |
345 | CALL FUNCTION 'DDIF_VIEW_GET' |
346 | EXPORTING |
347 | name = p_header-viewname |
348 | TABLES |
349 | dd28j_tab = dd28j_tab |
350 | EXCEPTIONS |
351 | illegal_input = 1 |
352 | OTHERS = 2. |
353 | IF sy-subrc <> 0. |
354 |
355 |
356 | ENDIF. |
357 | ENDIF. |
358 | ENDIF. |
359 | w_tabkey_value-client = sy-mandt. |
360 | w_tabkey_value-profid = p_bc_entry-id. |
361 | w_tabkey_value-recnumber = p_bc_entry-recnumber. |
362 | w_tabkey_value-viewname = p_header-maintview. "HCG 6.8.02 |
363 | LOOP AT p_namtab ASSIGNING <namtab> WHERE keyflag = space OR |
364 | texttabfld = space. |
365 | READ TABLE p_bc_entry-fields INTO w_fields WITH KEY fieldname = |
366 | <namtab>-viewfield. |
367 | CHECK sy-subrc = 0. |
368 | READ TABLE p_tabkey_values WITH KEY client = sy-mandt |
369 | tablename = <namtab>-bastabname profid = p_bc_entry-id |
370 | recnumber = p_bc_entry-recnumber viewname = p_header-viewname |
371 | TRANSPORTING NO FIELDS. |
372 | IF sy-subrc <> 0. |
373 | LOOP AT p_bc_keytab ASSIGNING <keytab> WHERE |
374 | pgmid = 'R3TR' AND |
375 | object = 'TABU' AND |
376 | objname = <namtab>-bastabname. |
377 | w_tabkey_value-tablename = <namtab>-bastabname. |
378 | w_tabkey_value-tabkey = <keytab>-bc_tabkey. |
379 | APPEND w_tabkey_value TO p_tabkey_values. |
380 | ENDLOOP. |
381 | CHECK sy-subrc = 0. |
382 | ENDIF. |
383 | IF x_header-bastab = space. |
384 |
385 | LOOP AT dd28j_tab INTO w_dd28j WHERE viewname = p_header-viewname |
386 | AND ltab = <namtab>-bastabname AND lfield = <namtab>-viewfield. |
387 | READ TABLE p_tabkey_values WITH KEY client = sy-mandt |
388 | tablename = w_dd28j-rtab profid = p_bc_entry-id |
389 | recnumber = p_bc_entry-recnumber viewname = p_header-viewname |
390 | TRANSPORTING NO FIELDS. |
391 | IF sy-subrc <> 0. |
392 | READ TABLE p_bc_keytab WITH KEY pgmid = 'R3TR' |
393 | object = 'TABU' |
394 | objname = w_dd28j-rtab ASSIGNING <keytab>. |
395 | CHECK sy-subrc = 0. |
396 | w_tabkey_value-tablename = w_dd28j-rtab. |
397 | w_tabkey_value-tabkey = <keytab>-bc_tabkey. |
398 | APPEND w_tabkey_value TO p_tabkey_values. |
399 | ENDIF. |
400 | ENDLOOP. |
401 | LOOP AT dd28j_tab INTO w_dd28j WHERE viewname = p_header-viewname |
402 | AND rtab = <namtab>-bastabname AND rfield = <namtab>-viewfield. |
403 | READ TABLE p_tabkey_values WITH KEY client = sy-mandt |
404 | tablename = w_dd28j-ltab profid = p_bc_entry-id |
405 | recnumber = p_bc_entry-recnumber viewname = p_header-viewname |
406 | TRANSPORTING NO FIELDS. |
407 | IF sy-subrc <> 0. |
408 | LOOP AT p_bc_keytab ASSIGNING <keytab> WHERE |
409 | pgmid = 'R3TR' AND |
410 | object = 'TABU' AND |
411 | objname = w_dd28j-ltab. |
412 | w_tabkey_value-tablename = w_dd28j-ltab. |
413 | w_tabkey_value-tabkey = <keytab>-bc_tabkey. |
414 | APPEND w_tabkey_value TO p_tabkey_values. |
415 | ENDLOOP. |
416 | CHECK sy-subrc = 0. |
417 | ENDIF. |
418 | ENDLOOP. |
419 | ENDIF. |
420 | ENDLOOP. |
421 | ENDFORM. " bc_entry_log_fill |
422 |
423 |
424 |
425 |
426 |
427 |
428 |
429 |
430 |
431 |
432 | FORM vim_bc_logs_get USING p_view_name TYPE tabname |
433 | p_header TYPE vimdesc |
434 | p_namtab LIKE x_namtab[] |
435 | CHANGING p_bc_entry_list TYPE vimty_bc_entry_list_ttype. |
436 | |
437 | STATICS: tablist TYPE TABLE OF scprxtabl, viewname TYPE tabname. |
438 | |
439 | DATA: tabkeys TYPE TABLE OF scpractr, w_tablist TYPE scprxtabl, |
440 | bc_entry_list_wa TYPE vimty_bc_entry_list_type, failed(1), |
441 | rc LIKE sy-subrc, keys_identical TYPE xfeld, |
442 | x030l_root TYPE x030l, |
443 | x030l_bastab TYPE x030l, |
444 | root_entry TYPE REF TO data, |
445 | bastab_entry TYPE REF TO data, |
446 | tabflags TYPE scpr_actfs, tabflags_wa TYPE scpr_actf, |
447 |
448 |
449 | tabflags_quick TYPE SORTED TABLE OF scpr_actf |
450 | WITH NON-UNIQUE KEY tablename fieldname bcset_id |
451 | recnumber tabkey INITIAL SIZE 100, |
452 | fields_wa TYPE vimty_fields_type, |
453 | bc_entry_list TYPE STANDARD TABLE OF |
454 | vimty_bc_entry_list_type WITH KEY viewname keys, |
455 | tabkey_wa TYPE scpractr-tabkey, |
456 | tabkeys_wa TYPE scpractr, |
457 | roottab TYPE tabname, |
458 | tabix TYPE sy-tabix, |
459 | tabkey_struc(1024) TYPE c. |
460 | FIELD-SYMBOLS: <namtab> TYPE vimnamtab, <tabkeys> TYPE scpractr, |
461 | <tabkeys_main> TYPE scpractr, |
462 | <bastab> TYPE ANY, <bastab_x> TYPE x, |
463 | <roottab> TYPE ANY, <roottab_x> TYPE x, |
464 | <rootfld> TYPE ANY, |
465 | <tabkey> TYPE x, <viewfld> TYPE ANY, |
466 | <clnt> TYPE ANY, |
467 | <tabkey_c> TYPE c. |
468 | |
469 | DELETE p_bc_entry_list WHERE viewname = p_header-maintview."HCG 6.8.02 |
470 | CHECK vim_import_profile = space. |
471 |
472 |
473 | IF viewname <> p_header-viewname. |
474 |
475 | viewname = p_header-viewname. |
476 | REFRESH tablist. |
477 | w_tablist-sign = 'I'. w_tablist-option = 'EQ'. |
478 | IF p_header-bastab EQ 'X'. "S-table |
479 | w_tablist-low = viewname. "HCG only roottab in tablist |
480 | roottab = viewname. |
481 | COLLECT w_tablist INTO tablist. |
482 | ELSE. "View |
483 | w_tablist-low = p_header-roottab. "HCG only roottab in tablist |
484 | roottab = p_header-roottab. |
485 | COLLECT w_tablist INTO tablist. |
486 | ENDIF. |
487 | ENDIF. |
488 | CALL FUNCTION 'SCPR_BCSET_PROT_GET_TABKEYS' |
489 | EXPORTING |
490 | viewname = viewname |
491 | IMPORTING |
492 | actkeys = tabkeys |
493 | tabflags = tabflags |
494 | TABLES |
495 | tabnames = tablist |
496 | EXCEPTIONS |
497 | no_data = 1 |
498 | OTHERS = 2. |
499 | CHECK sy-subrc = 0 AND NOT tabkeys IS INITIAL. |
500 | IF p_header-bastab EQ 'X'. "S-table |
501 | roottab = viewname. |
502 | ELSE. "View |
503 | roottab = p_header-roottab. |
504 | ENDIF. |
505 | LOOP AT tabkeys INTO tabkeys_wa. |
506 | tabkey_wa = tabkeys_wa-tabkey. |
507 | tabix = sy-tabix. |
508 | CALL FUNCTION 'SCPR_EXT_ACTKEY_TO_KEY' |
509 | EXPORTING |
510 | tablename = roottab |
511 | tablekey = tabkey_wa |
512 | IMPORTING |
513 | key = tabkey_struc |
514 | EXCEPTIONS |
515 | WRONG_PARAMETERS = 1 |
516 | KEY_TOO_LARGE = 2 |
517 | FIELDDESCR_ERROR = 3 |
518 | INTERNAL_ERROR = 4 |
519 | OTHERS = 5. |
520 | IF sy-subrc NE 0. |
521 | MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgno |
522 | WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. |
523 | ENDIF. |
524 | ASSIGN tabkey_struc TO <tabkey_c> CASTING. |
525 | tabkeys_wa-tabkey = <tabkey_c>. |
526 | MODIFY tabkeys FROM tabkeys_wa INDEX tabix. |
527 | ENDLOOP. |
528 | bc_entry_list_wa-viewname = p_header-maintview. "HCG 6.8.02 |
529 | IF p_header-clidep <> space. |
530 | READ TABLE p_namtab ASSIGNING <namtab> |
531 | WITH KEY datatype = 'CLNT'. |
532 | ASSIGN COMPONENT <namtab>-viewfield |
533 | OF STRUCTURE <table1_wa> TO <clnt>. |
534 | ENDIF. |
535 | IF p_header-bastab = space. |
536 |
537 |
538 |
539 | PERFORM vim_comp_roottabkey USING p_header |
540 | p_namtab |
541 | CHANGING keys_identical |
542 | rc. |
543 | CHECK rc = 0. |
544 | IF keys_identical = space. |
545 | PERFORM vim_get_x030l USING p_header-roottab |
546 | CHANGING x030l_root |
547 | rc. |
548 | CHECK rc = 0. |
549 | CREATE DATA root_entry TYPE (p_header-roottab). |
550 | ASSIGN: root_entry->* TO <roottab>, |
551 | <roottab> TO <roottab_x> CASTING. |
552 | ENDIF. |
553 | INSERT LINES OF tabflags INTO TABLE tabflags_quick. |
554 | LOOP AT tabkeys ASSIGNING <tabkeys_main> WHERE |
555 | tablename = p_header-roottab. |
556 | CLEAR: failed, <table1_wa>. |
557 |
558 | bc_entry_list_wa-id = <tabkeys_main>-profid. |
559 | bc_entry_list_wa-recnumber = <tabkeys_main>-recnumber. |
560 | ASSIGN <tabkeys_main>-tabkey TO <tabkey> CASTING. |
561 | IF keys_identical <> space. |
562 |
563 | MOVE <tabkey>(p_header-keylen) TO <f1_wax>. |
564 | ELSE. |
565 |
566 | CLEAR: <roottab>. |
567 | MOVE <tabkey>(x030l_root-keylen) |
568 | TO <roottab_x>(x030l_root-keylen). |
569 | LOOP AT p_namtab ASSIGNING <namtab> WHERE keyflag <> space AND |
570 | texttabfld = space. |
571 |
572 | CHECK <namtab>-datatype <> 'CLNT' OR p_header-clidep = space. |
573 | ASSIGN COMPONENT <namtab>-viewfield |
574 | OF STRUCTURE <table1_wa> TO <viewfld>. |
575 | IF <namtab>-bastabname = p_header-roottab. |
576 |
577 | ASSIGN COMPONENT <namtab>-bastabfld OF STRUCTURE <roottab> |
578 | TO <rootfld>. |
579 | MOVE <rootfld> TO <viewfld>. |
580 | ELSE. |
581 |
582 | failed = 'X'. |
583 | IF NOT <tabkeys> IS ASSIGNED |
584 | OR <tabkeys>-tablename <> <namtab>-bastabname. |
585 | READ TABLE tabkeys ASSIGNING <tabkeys> |
586 | WITH KEY tablename = <namtab>-bastabname |
587 | recnumber = <tabkeys_main>-recnumber |
588 | profid = <tabkeys_main>-profid. |
589 | IF sy-subrc <> 0. |
590 | UNASSIGN <tabkeys>. |
591 | EXIT. |
592 | ENDIF. |
593 | PERFORM vim_get_x030l USING <namtab>-bastabname |
594 | CHANGING x030l_bastab |
595 | rc. |
596 | CHECK rc = 0. |
597 | CREATE DATA bastab_entry TYPE (<namtab>-bastabname). |
598 | ASSIGN: bastab_entry->* TO <bastab>, |
599 | <bastab> TO <bastab_x> CASTING. |
600 | ENDIF. |
601 | MOVE <tabkey>(x030l_bastab-keylen) |
602 | TO <bastab_x>(x030l_bastab-keylen). |
603 | ASSIGN COMPONENT <namtab>-bastabfld OF STRUCTURE <bastab> |
604 | TO <rootfld>. |
605 | MOVE <rootfld> TO <viewfld>. |
606 | CLEAR failed. |
607 | ENDIF. |
608 | ENDLOOP. |
609 | CHECK failed IS INITIAL. |
610 | ENDIF. |
611 | IF p_header-clidep <> space. |
612 |
613 | MOVE sy-mandt TO <clnt>. |
614 | ENDIF. |
615 | MOVE <f1_wax> TO bc_entry_list_wa-keys. |
616 | REFRESH bc_entry_list_wa-fields. |
617 | LOOP AT p_namtab ASSIGNING <namtab>. |
618 | CHECK <namtab>-datatype <> 'CLNT' OR p_header-clidep = space. |
619 |
620 | READ TABLE tabflags_quick INTO tabflags_wa WITH KEY |
621 | tablename = p_header-viewname fieldname = <namtab>-viewfield |
622 | bcset_id = bc_entry_list_wa-id |
623 | recnumber = bc_entry_list_wa-recnumber. |
624 | CHECK sy-subrc = 0. |
625 | fields_wa-fieldname = <namtab>-viewfield. |
626 | fields_wa-flag = tabflags_wa-flag. |
627 | APPEND fields_wa TO bc_entry_list_wa-fields. |
628 | ENDLOOP. |
629 | INSERT bc_entry_list_wa INTO TABLE bc_entry_list. |
630 | ENDLOOP. |
631 | ELSE. |
632 |
633 |
634 | LOOP AT tabkeys ASSIGNING <tabkeys_main> WHERE |
635 | tablename = p_header-viewname. |
636 | bc_entry_list_wa-id = <tabkeys_main>-profid. |
637 | bc_entry_list_wa-recnumber = <tabkeys_main>-recnumber. |
638 | ASSIGN <tabkeys_main>-tabkey TO <tabkey> CASTING. |
639 | MOVE <tabkey>(p_header-keylen) TO <table1_wax>(p_header-keylen). |
640 | IF p_header-clidep <> space. |
641 |
642 | MOVE sy-mandt TO <clnt>. |
643 | ENDIF. |
644 | MOVE <f1_wax> TO bc_entry_list_wa-keys. |
645 |
646 | LOOP AT tabflags INTO tabflags_wa WHERE ( tablename = |
647 | p_header-viewname OR tablename = p_header-texttab ) AND |
648 | bcset_id = bc_entry_list_wa-id |
649 | AND recnumber = bc_entry_list_wa-recnumber. |
650 | fields_wa-fieldname = tabflags_wa-fieldname. |
651 | fields_wa-flag = tabflags_wa-flag. |
652 | APPEND fields_wa TO bc_entry_list_wa-fields. |
653 | ENDLOOP. |
654 | INSERT bc_entry_list_wa INTO TABLE bc_entry_list. |
655 | ENDLOOP. |
656 | ENDIF. |
657 | SORT bc_entry_list. |
658 |
659 | DELETE ADJACENT DUPLICATES FROM bc_entry_list. |
660 | DESCRIBE TABLE bc_entry_list. |
661 |
662 | CLEAR <status>-bcfixnochg. |
663 | IF sy-tfill > 0. |
664 | INSERT LINES OF bc_entry_list INTO TABLE p_bc_entry_list. |
665 | CALL FUNCTION 'SCPR_AUTHORITY_CHECK' |
666 | EXPORTING |
667 | task = 'CHGFIXVAL' |
668 | EXCEPTIONS |
669 | wrong_parameters = 1 |
670 | no_authority = 2 |
671 | OTHERS = 3. |
672 | IF sy-subrc <> 0. |
673 | <status>-bcfixnochg = 'N'. |
674 | ELSE. |
675 | <status>-bcfixnochg = 'Y'. |
676 | ENDIF. |
677 | ENDIF. |
678 | ENDFORM. " VIM_GET_BC_LOGS |
679 |
680 |
681 |
682 |
683 |
684 |
685 |
686 |
687 |
688 |
689 | FORM vim_bc_logs_maintain USING p_header TYPE vimdesc |
690 | p_background TYPE xfeld |
691 | CHANGING p_bc_entry_list LIKE |
692 | vim_bc_entry_list. |
693 | |
694 | DATA: fields_wa TYPE vimty_fields_type, |
695 | subrc TYPE sy-subrc, tabix TYPE sy-tabix. |
696 | STATICS: viewname_old TYPE vimdesc-viewname, |
697 | keylen_real TYPE i. |
698 | FIELD-SYMBOLS: <bc_entry> TYPE vimty_bc_entry_list_type, |
699 | <key> TYPE x, <namtab> type vimnamtab. |
700 | |
701 | IF p_background = space. |
702 |
703 | LOOP AT total. |
704 | CHECK ' N' NS <action>. |
705 | READ TABLE p_bc_entry_list ASSIGNING <bc_entry> WITH KEY |
706 | viewname = p_header-viewname keys = <vim_xtotal_key>. |
707 | CHECK sy-subrc = 0. |
708 | CASE <action>. |
709 | WHEN aendern. |
710 |
711 |
712 |
713 |
714 |
715 |
716 | WHEN geloescht. |
717 |
718 | CASE <bc_entry>-action. |
719 | WHEN neuer_eintrag. |
720 | <bc_entry>-action = neuer_geloescht. |
721 | WHEN OTHERS. |
722 | <bc_entry>-action = geloescht. |
723 | ENDCASE. |
724 |
725 |
726 |
727 |
728 |
729 |
730 |
731 | ENDCASE. |
732 | ENDLOOP. |
733 | ELSE. |
734 |
735 | DELETE vim_bc_entry_list WHERE viewname = p_header-viewname. |
736 | PERFORM vim_get_global_table IN PROGRAM saplsvim |
737 | USING 'VIM_BC_ENTRY_LIST' |
738 | vim_bc_entry_list |
739 | sy-subrc. |
740 | IF sy-subrc <> 0. |
741 | EXIT. |
742 | ENDIF. |
743 | IF p_header-viewname NE viewname_old. "HCG: has table align gap? |
744 | viewname_old = p_header-viewname. |
745 | CLEAR keylen_real. |
746 | LOOP AT x_namtab ASSIGNING <namtab> WHERE keyflag = 'X' AND |
747 | texttabfld IS INITIAL. |
748 | keylen_real = keylen_real + <namtab>-flength. |
749 | ENDLOOP. |
750 | ENDIF. |
751 | LOOP AT vim_bc_entry_list ASSIGNING <bc_entry> WHERE |
752 | viewname = p_header-viewname. |
753 | ASSIGN <bc_entry>-keys(x_header-keylen) TO <key>. |
754 | IF p_header-keylen = keylen_real. |
755 | READ TABLE total WITH KEY <key> BINARY SEARCH. |
756 | subrc = sy-subrc. |
757 | ELSE. |
758 | PERFORM vim_read_table_with_gap |
759 | TABLES total |
760 | USING <key> |
761 | x_namtab[] |
762 | CHANGING subrc |
763 | tabix. |
764 | IF subrc = 0. |
765 | READ TABLE total INDEX tabix. |
766 | ENDIF. |
767 | ENDIF. |
768 |
769 | IF subrc <> 0 OR 'NU' NS <action>. |
770 | DELETE vim_bc_entry_list. |
771 | ENDIF. |
772 | ENDLOOP. |
773 | ENDIF. |
774 | ENDFORM. " VIM_BC_LOGS_MAINTAIN |
775 |
776 |
777 |
778 |
779 |
780 |
781 |
782 |
783 |
784 |
785 | FORM vim_bc_logs_use USING p_field TYPE fieldname |
786 | p_vim_bc_entry TYPE vimty_bc_entry_list_type |
787 | CHANGING p_screen LIKE screen |
788 | p_modify_screen TYPE xfeld. |
789 | |
790 | DATA w_field TYPE vimty_fields_type. |
791 | |
792 | READ TABLE p_vim_bc_entry-fields INTO w_field |
793 | WITH TABLE KEY fieldname = p_field. |
794 | CHECK sy-subrc = 0. |
795 | IF w_field-flag = vim_profile_fix. |
796 | p_screen-input = 0. |
797 | p_modify_screen = 'X'. |
798 | ENDIF. |
799 | ENDFORM. " VIM_BC_LOGS_USE |
800 |
801 |
802 |
803 |
804 |
805 |
806 |
807 |
808 | FORM vim_chng_fix_flds. |
809 | IF <status>-bcfixnochg = 'Y'. |
810 | vim_bc_chng_allowed = 'X'. |
811 | ELSE. |
812 | MESSAGE e202(sv). |
813 |
814 | ENDIF. |
815 | ENDFORM. " vim_chng_fix_flds |
816 |
817 |
818 |
819 |
820 |
821 |
822 |
823 |
824 |
825 | FORM vim_get_x030l USING p_tabname TYPE tabname |
826 | CHANGING p_x030l TYPE x030l |
827 | p_rc LIKE sy-subrc. |
828 | CALL FUNCTION 'DDIF_NAMETAB_GET' |
829 | EXPORTING |
830 | tabname = p_tabname |
831 | IMPORTING |
832 | x030l_wa = p_x030l |
833 | EXCEPTIONS |
834 | OTHERS = 1. |
835 | p_rc = sy-subrc. |
836 | ENDFORM. " vim_get_x030l |
837 |
838 |
839 |
840 |
841 |
842 |
843 |
844 |
845 | FORM vim_bc_show_fix_flds. |
846 | DATA: p_tabtype TYPE objh-objecttype, |
847 | p_tabname TYPE scpr_tabl. |
848 | |
849 | p_tabname = x_header-maintview. "HCG 6.8.02 actlinks for maintview |
850 | if x_header-bastab = space. |
851 | p_tabtype = 'V'. |
852 | ELSE. |
853 | p_tabtype = 'S'. |
854 | ENDIF. |
855 | LOOP AT extract. |
856 | IF <xmark> NE markiert. |
857 | CONTINUE. |
858 | ELSE. |
859 | MOVE <vim_extract_struc> TO <table1>. |
860 | CALL FUNCTION 'SCPR_ACTIVATION_INFOS_SHOW' |
861 | EXPORTING |
862 | tablename = p_tabname |
863 | tabletype = p_tabtype |
864 | record = <table1> |
865 | EXCEPTIONS |
866 | FIELDDEFINITION_ERROR = 1 |
867 | NO_TVDIR_ENTRY = 2 |
868 | TABLE_NOT_FOUND = 3 |
869 | TABLE_TO_LARGE = 4 |
870 | DDIF_INTERNAL_ERROR = 5 |
871 | WRONG_PARAMETERS = 6 |
872 | INTERNAL_ERROR = 7 |
873 | NO_ACTLINKS = 8 |
874 | KEY_TOO_LARGE = 9 |
875 | OTHERS = 10. |
876 | case sy-subrc. |
877 | when 0. |
878 | when 1. |
879 | message e395(SCPR) raising FIELDDEFINITION_ERROR. |
880 | when 2. |
881 | message e028(SCPR) with p_tabname raising NO_TVDIR_ENTRY. |
882 | when 3. |
883 | message e120(SCPR) with p_tabname raising TABLE_NOT_FOUND. |
884 | when 4. |
885 | message e026(SCPR) with p_tabname raising TABLE_TO_LARGE. |
886 | when 5. |
887 | message e035(SCPR) raising DDIF_INTERNAL_ERROR. |
888 | when 6. |
889 | message e273(SCPR) raising WRONG_PARAMETERS. |
890 | when 8. |
891 | message s399(SCPR) raising NO_ACTLINKS. |
892 | when 9. |
893 | message e408(SCPR) raising KEY_TOO_LARGE. |
894 | when others. |
895 | message e320(SCPR) raising INTERNAL_ERROR. |
896 | endcase. |
897 | ENDIF. |
898 | ENDLOOP. |
899 | ENDFORM. " vim_bc_show_fix_flds |
900 |
901 |
902 |
903 |
904 |
905 |
906 |
907 |
908 | FORM vim_build_bc_tabkeys USING bc_entry_list_wa TYPE |
909 | vimty_bc_entry_list_type |
910 | CHANGING p_bc_keytab TYPE bc_keytab_type. |
911 | |
912 | TYPES: BEGIN OF tablist_type, |
913 | tabname TYPE objs-tabname, |
914 | END OF tablist_type. |
915 | |
916 | STATICS: cg_dd28j_tab LIKE dd28j OCCURS 30, |
917 | old_viewname LIKE vimdesc-viewname, |
918 | all_dfiestab LIKE dfies OCCURS 40. |
919 | |
920 | DATA: objstablist TYPE TABLE OF tablist_type, |
921 | namtab_wa TYPE vimnamtab, |
922 | tabname_wa TYPE objs-tabname, |
923 | dd28j_wa LIKE LINE OF cg_dd28j_tab, |
924 | primtab_entry TYPE REF TO data, |
925 | sektab_entry TYPE REF TO data, |
926 | p_bc_keytab_wa LIKE LINE OF p_bc_keytab, |
927 | keytab_index TYPE sy-tabix, |
928 | bc_keylen TYPE i, flag(1) TYPE c, |
929 | cg_langu(1) TYPE c, |
930 | cg_dfiestab LIKE dfies OCCURS 10, |
931 | dfies_wa LIKE LINE OF cg_dfiestab, |
932 | piecelist TYPE TABLE OF objs-tabname, |
933 | foreign_langu LIKE sy-langu, |
934 | langu_fieldname TYPE dfies-fieldname, |
935 | p_bc_keytab_langu TYPE bc_keytab_type, |
936 | w_bc_entry_list TYPE vimty_bc_entry_list_type. |
937 | |
938 | FIELD-SYMBOLS: <primtab> TYPE ANY, <sektab> TYPE ANY, |
939 | <viewfld> TYPE ANY, |
940 | <primtabfld> TYPE ANY, <sektabfld> TYPE ANY, |
941 | <bc_tabkey> TYPE bc_key_type-bc_tabkey, |
942 | <tabkey_x> TYPE x, <tabkey_struc_x> TYPE x. |
943 | |
944 | IF x_header-viewname NE old_viewname. |
945 | old_viewname = x_header-viewname. |
946 | CALL FUNCTION 'DDIF_VIEW_GET' |
947 | EXPORTING |
948 | name = x_header-viewname |
949 | state = 'A' |
950 | langu = sy-langu |
951 | IMPORTING |
952 | gotstate = flag |
953 | TABLES |
954 | dd28j_tab = cg_dd28j_tab |
955 | EXCEPTIONS |
956 | illegal_input = 1 |
957 | OTHERS = 2. |
958 | IF sy-subrc <> 0. |
959 | MESSAGE e164(sv) WITH tabname_wa RAISING view_not_found. |
960 | ENDIF. |
961 | IF flag = space. |
962 | MESSAGE e306(sv) WITH tabname_wa RAISING view_not_found. |
963 | ENDIF. |
964 |
965 | SELECT tabname FROM objs INTO tabname_wa |
966 | WHERE objectname = x_header-viewname |
967 | AND objecttype = 'V'. |
968 | APPEND tabname_wa TO piecelist. |
969 | ENDSELECT. |
970 | REFRESH all_dfiestab. |
971 | LOOP AT piecelist INTO tabname_wa. |
972 | REFRESH cg_dfiestab. |
973 | CALL FUNCTION 'DDIF_NAMETAB_GET' |
974 | EXPORTING |
975 | tabname = tabname_wa |
976 | TABLES |
977 | dfies_tab = cg_dfiestab[] |
978 | EXCEPTIONS |
979 | not_found = 1 |
980 | OTHERS = 2. |
981 | IF sy-subrc NE 0. |
982 | MESSAGE e028(sv) WITH tabname_wa RAISING view_not_found. |
983 | ENDIF. |
984 | LOOP AT cg_dfiestab INTO dfies_wa. |
985 | APPEND dfies_wa TO all_dfiestab. |
986 | ENDLOOP. |
987 | ENDLOOP. |
988 | ENDIF. |
989 | LOOP AT p_bc_keytab INTO p_bc_keytab_wa. |
990 | keytab_index = sy-tabix. |
991 | IF p_bc_keytab_wa-objname = x_header-roottab. |
992 |
993 | CREATE DATA primtab_entry TYPE (x_header-roottab). |
994 | ASSIGN primtab_entry->* TO <primtab>. |
995 | LOOP AT x_namtab WHERE keyflag = 'X' AND |
996 | bastabname = x_header-roottab. |
997 | ASSIGN COMPONENT x_namtab-viewfield OF STRUCTURE |
998 | <vim_total_struc> TO <viewfld>. |
999 | ASSIGN COMPONENT x_namtab-bastabfld OF STRUCTURE <primtab> |
1000 | TO <primtabfld>. |
1001 | MOVE <viewfld> TO <primtabfld>. |
1002 | ENDLOOP. " Primtabkey completely in <primtab> |
1003 | PERFORM vim_get_bc_keylen "Analog corr_maint_>>viewname<< |
1004 | USING x_header-roottab |
1005 | CHANGING bc_keylen. |
1006 | ASSIGN <primtab> TO <tabkey_struc_x> CASTING. |
1007 | ASSIGN p_bc_keytab_wa-bc_tabkey TO <tabkey_x> CASTING. |
1008 | MOVE <tabkey_struc_x>(bc_keylen) TO <tabkey_x>(bc_keylen). |
1009 | MODIFY p_bc_keytab INDEX keytab_index FROM p_bc_keytab_wa. |
1010 | ELSEIF p_bc_keytab_wa-objname EQ x_header-texttab. |
1011 |
1012 | REFRESH p_bc_keytab_langu. |
1013 | tabname_wa = p_bc_keytab_wa-objname. |
1014 | CREATE DATA sektab_entry TYPE (tabname_wa). |
1015 | ASSIGN sektab_entry->* TO <sektab>. |
1016 | PERFORM vim_get_bc_keylen "Analog corr_maint_>>viewname<< |
1017 | USING tabname_wa |
1018 | CHANGING bc_keylen. |
1019 | LOOP AT all_dfiestab INTO dfies_wa WHERE tabname = tabname_wa |
1020 | AND keyflag = 'X'. |
1021 | CLEAR cg_langu. |
1022 | READ TABLE cg_dd28j_tab WITH KEY rtab = tabname_wa |
1023 | rfield = dfies_wa-fieldname |
1024 | INTO dd28j_wa. |
1025 | IF sy-subrc EQ 0. |
1026 | READ TABLE x_namtab WITH KEY bastabname = dd28j_wa-ltab |
1027 | bastabfld = dd28j_wa-lfield. |
1028 | ELSE. "Field not in join -> additional keyfield in view |
1029 | READ TABLE x_namtab WITH KEY bastabname = tabname_wa |
1030 | bastabfld = dfies_wa-fieldname. |
1031 | IF sy-subrc NE 0. "Then it must be langu field of texttab |
1032 | cg_langu = 'X'. |
1033 | ENDIF. |
1034 | ENDIF. |
1035 | IF cg_langu EQ space. "Field is not langu field |
1036 | ASSIGN COMPONENT x_namtab-viewfield OF STRUCTURE |
1037 | <vim_total_struc> TO <viewfld>. |
1038 | ASSIGN COMPONENT dfies_wa-fieldname OF STRUCTURE |
1039 | <sektab> TO <sektabfld>. |
1040 | MOVE <viewfld> TO <sektabfld>. |
1041 | ELSE. "Field is langu field |
1042 | langu_fieldname = dfies_wa-fieldname. |
1043 | ASSIGN COMPONENT dfies_wa-fieldname OF STRUCTURE |
1044 | <sektab> TO <sektabfld>. |
1045 | MOVE sy-langu TO <sektabfld>. |
1046 | ENDIF. |
1047 | ASSIGN <sektab> TO <tabkey_struc_x> CASTING. |
1048 | ASSIGN p_bc_keytab_wa-bc_tabkey TO <tabkey_x> CASTING. |
1049 | MOVE <tabkey_struc_x>(bc_keylen) TO <tabkey_x>(bc_keylen). |
1050 | ENDLOOP. |
1051 | MODIFY p_bc_keytab INDEX keytab_index FROM p_bc_keytab_wa. |
1052 |
1053 | ASSIGN COMPONENT langu_fieldname OF STRUCTURE |
1054 | <sektab> TO <sektabfld>. |
1055 | LOOP AT bc_entry_list_wa-forlangu INTO foreign_langu. |
1056 | MOVE foreign_langu TO <sektabfld>. |
1057 | MOVE <tabkey_struc_x>(bc_keylen) TO <tabkey_x>(bc_keylen). |
1058 | APPEND p_bc_keytab_wa TO p_bc_keytab_langu. |
1059 | ENDLOOP. |
1060 | ELSE. |
1061 |
1062 | tabname_wa = p_bc_keytab_wa-objname. |
1063 | CREATE DATA sektab_entry TYPE (tabname_wa). |
1064 | ASSIGN sektab_entry->* TO <sektab>. |
1065 | PERFORM vim_get_bc_keylen "Analog corr_maint_>>viewname<< |
1066 | USING tabname_wa |
1067 | CHANGING bc_keylen. |
1068 | LOOP AT all_dfiestab INTO dfies_wa WHERE tabname = tabname_wa |
1069 | AND keyflag = 'X'. |
1070 | CLEAR cg_langu. |
1071 | READ TABLE cg_dd28j_tab WITH KEY rtab = tabname_wa |
1072 | rfield = dfies_wa-fieldname |
1073 | INTO dd28j_wa. |
1074 | IF sy-subrc EQ 0. |
1075 | READ TABLE x_namtab WITH KEY bastabname = dd28j_wa-ltab |
1076 | bastabfld = dd28j_wa-lfield. |
1077 | ELSE. "Field not in join -> additional keyfield in view |
1078 | READ TABLE x_namtab WITH KEY bastabname = tabname_wa |
1079 | bastabfld = dfies_wa-fieldname. |
1080 | IF sy-subrc NE 0. "Then it must be an error |
1081 |
1082 | ENDIF. |
1083 | ENDIF. |
1084 | ASSIGN COMPONENT x_namtab-viewfield OF STRUCTURE |
1085 | <vim_total_struc> TO <viewfld>. |
1086 | ASSIGN COMPONENT dfies_wa-fieldname OF STRUCTURE |
1087 | <sektab> TO <sektabfld>. |
1088 | MOVE <viewfld> TO <sektabfld>. |
1089 | ASSIGN <sektab> TO <tabkey_struc_x> CASTING. |
1090 | ASSIGN p_bc_keytab_wa-bc_tabkey TO <tabkey_x> CASTING. |
1091 | MOVE <tabkey_struc_x>(bc_keylen) TO <tabkey_x>(bc_keylen). |
1092 | ENDLOOP. |
1093 | MODIFY p_bc_keytab INDEX keytab_index FROM p_bc_keytab_wa. |
1094 | ENDIF. |
1095 | ENDLOOP. |
1096 | APPEND LINES OF p_bc_keytab_langu TO p_bc_keytab. |
1097 | ENDFORM. " vim_build_bc_tabkeys |
1098 |
1099 |
1100 |
1101 |
1102 |
1103 |
1104 |
1105 | * |
1106 |
1107 | * |
1108 |
1109 |
1110 |
1111 |
1112 | * |
1113 |
1114 |
1115 | * |
1116 |
1117 |
1118 |
1119 |
1120 |
1121 |
1122 | FORM vim_read_table_with_gap TABLES gap_table |
1123 | USING key TYPE x |
1124 | namtab LIKE x_namtab[] |
1125 | CHANGING subrc TYPE sy-subrc |
1126 | tabix TYPE sy-tabix. |
1127 | |
1128 | TYPES: scpr_x8192(8192) TYPE x. |
1129 | DATA: result TYPE scpr_txt20, |
1130 | tab_i TYPE sy-tabix, |
1131 | tab_j TYPE sy-tabix, |
1132 | tab_k TYPE sy-tabix, |
1133 | tab_len TYPE sy-tabix. |
1134 | |
1135 | DATA: align TYPE f, wa_8192 TYPE scpr_x8192, |
1136 | it_fldnames TYPE STANDARD TABLE OF scpr_flddescr, |
1137 | fldnames_wa LIKE LINE OF it_fldnames, |
1138 | gap_table_wa(2048) TYPE c. |
1139 | FIELD-SYMBOLS: <wa_it_data> TYPE x, |
1140 | <namtab> TYPE vimnamtab. |
1141 | |
1142 |
1143 | LOOP AT namtab ASSIGNING <namtab> WHERE keyflag = 'X' |
1144 | AND texttabfld = space. |
1145 | fldnames_wa-fieldname = <namtab>-viewfield. |
1146 | fldnames_wa-position = <namtab>-position. |
1147 | fldnames_wa-intlen = <namtab>-flength. |
1148 | fldnames_wa-keyflag = 'X'. |
1149 | fldnames_wa-flag = 'FKY'. "KEY would do the same job... |
1150 | APPEND fldnames_wa TO it_fldnames. |
1151 | ENDLOOP. |
1152 | |
1153 | DESCRIBE TABLE gap_table LINES tab_len. |
1154 | tab_i = 1. |
1155 | tab_j = tab_len. |
1156 | subrc = 8. |
1157 | tabix = tab_len + 1. |
1158 | ASSIGN wa_8192 TO <wa_it_data>. |
1159 | ASSIGN gap_table_wa TO <wa_it_data> CASTING. |
1160 | |
1161 | DO. |
1162 | IF tab_i > tab_j. |
1163 |
1164 | subrc = 4. |
1165 | tabix = tab_k + 1. |
1166 | EXIT. |
1167 | ENDIF. |
1168 | tab_k = ( tab_i + tab_j ) / 2. |
1169 | |
1170 | READ TABLE gap_table INTO gap_table_wa INDEX tab_k. |
1171 | |
1172 | CALL FUNCTION 'SCPR_CTRL_CT_COMP_TWO_RECORDS' |
1173 | EXPORTING |
1174 | cu_lines = <wa_it_data> |
1175 | bc_lines = key |
1176 | compare_key = 'X' |
1177 | IMPORTING |
1178 | RESULT = RESULT |
1179 | tables |
1180 | it_fldnames = it_fldnames. |
1181 | |
1182 | IF result = 'LT'. |
1183 | tab_j = tab_k - 1. |
1184 | ELSEIF result = 'GT'. |
1185 | tab_i = tab_k + 1. |
1186 | ELSE. |
1187 | subrc = 0. |
1188 | tabix = tab_k. |
1189 | EXIT. |
1190 | ENDIF. |
1191 | ENDDO. |
1192 | ENDFORM. " read_table_with_gap |