forked from WebworkApp/SAP_TRANSLATOR
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathZNM_TRANSLATOR.txt
1827 lines (1693 loc) · 75.7 KB
/
ZNM_TRANSLATOR.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
REPORT znm_translator MESSAGE-ID 00.
*--------------------------------------------------------- GLOBAL DATA *
TABLES t002. "Language Keys
TYPE-POOLS: abap, icon, ole2, sscr. "Only for old versions
*----------------------------------------------------------- Constants *
CONSTANTS:
gc_r3tr TYPE pgmid VALUE 'R3TR', "Main object
gc_temp TYPE developclass VALUE '$TMP', "Local development class
gc_excel_ext TYPE string VALUE 'XLSX', "Excel file extention
gc_ieq(3) TYPE c VALUE 'IEQ', "Ranges
gc_pgmid(5) TYPE c VALUE 'PGMID', "Fields names
gc_object(6) TYPE c VALUE 'OBJECT',
gc_lxe_object(3) TYPE c VALUE 'LXE',
gc_textkey(8) TYPE c VALUE 'TEXTPAIR',
gc_length(6) TYPE c VALUE 'LENGTH',
gc_desc(11) TYPE c VALUE 'DESCRIPTION'.
*---------------------------------------------------------- Structures *
*---------- Objects ----------*
TYPES:
BEGIN OF gty_objects,
status TYPE icon_d, "Check status
pgmid TYPE pgmid, "Program ID in Requests and Tasks
object TYPE trobjtype, "Object Type
obj_name TYPE sobj_name, "Object Name in Object Directory
obj_desc TYPE ddtext, "Object Explanatory short text
slang TYPE spras, "Source Language
tlangs TYPE string, "Target Languages
stattrn TYPE icon_d, "Initial Translation status of an Object
statproc TYPE icon_d, "Process Translation status of an Object
devclass TYPE developclass, "Development Package
target TYPE tr_target, "Transport Target of Request
END OF gty_objects.
*---------- LXE Object Lists ----------*
TYPES:
BEGIN OF gty_colob,
pgmid TYPE pgmid, "Program ID in Requests and Tasks
object TYPE trobjtype, "Object Type
obj_name TYPE sobj_name. "Object Name in Object Directory
INCLUDE TYPE lxe_colob. "Object Lists
TYPES:
END OF gty_colob.
*---------- Languages Informations ----------*
TYPES:
BEGIN OF gty_languages,
r3_lang(2) TYPE c, "R3 Language (Char 2)
laiso TYPE laiso, "Language according to ISO 639
o_language TYPE lxeisolang, "Translation Language
text TYPE sptxt, "Name of Language
END OF gty_languages.
SET EXTENDED CHECK OFF.
DATA:
gt_objects TYPE TABLE OF gty_objects, "Objects to transport
gt_objs_desc TYPE TABLE OF ko100, "Objects prograns IDs
gt_objs_colob TYPE TABLE OF gty_colob, "LXE Object Lists
gt_languages TYPE TABLE OF gty_languages. "Target Languages Informations
*----------------------------------------------------------- Variables *
DATA:
gv_percent TYPE i, "Progress bar percentage
gv_tlangs TYPE string, "Target Languages
gv_msg_text TYPE string, "All Global Exceptions Text
gv_object TYPE trobjtype.
*------------------------------------------------------------- Objects *
DATA:
go_objects TYPE REF TO cl_salv_table, "Objects ALV
go_exp TYPE REF TO cx_root. "Abstract Superclass for All Global Exceptions
SET EXTENDED CHECK ON.
*-------------------------------------- CLASS HANDLE EVENTS DEFINITION *
CLASS lcl_handle_events DEFINITION FINAL.
PUBLIC SECTION.
METHODS:
on_user_command FOR EVENT added_function OF cl_salv_events
IMPORTING e_salv_function,
on_double_click FOR EVENT double_click OF cl_salv_events_table
IMPORTING row column. "#EC NEEDED
ENDCLASS. "lcl_handle_events DEFINITION
*---------------------------------------------------- SELECTION SCREEN *
*---------------------------------------------------- Object selection *
SELECTION-SCREEN BEGIN OF BLOCK b01 WITH FRAME TITLE text-b01.
SELECTION-SCREEN SKIP 1.
*---------- Workbench object ----------*
PARAMETERS r_obj RADIOBUTTON GROUP rbt USER-COMMAND rbt DEFAULT 'X'.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 4.
PARAMETERS:
p_pgmid TYPE pgmid DEFAULT gc_r3tr, "Program ID in Requests and Tasks
p_object TYPE trobjtype, "Object Type
p_obj_n TYPE sobj_name. "Object Name in Object Directory
SELECTION-SCREEN END OF LINE.
*---------- Transport request ----------*
SELECTION-SCREEN SKIP 1.
PARAMETERS r_tr RADIOBUTTON GROUP rbt.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 4.
PARAMETERS p_tr TYPE trkorr. "Transport request
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN END OF BLOCK b01.
*-------------------------------------------------- Translation options *
SELECTION-SCREEN BEGIN OF BLOCK b02 WITH FRAME TITLE text-b02.
SELECTION-SCREEN SKIP 1.
PARAMETERS p_slang TYPE spras DEFAULT 'EN'. "Source Language
SELECT-OPTIONS so_tlang FOR t002-spras NO INTERVALS. "Target Languages
SELECTION-SCREEN SKIP 1.
PARAMETERS p_dep AS CHECKBOX DEFAULT abap_true. "Dependencies check
PARAMETERS p_ow AS CHECKBOX. "Overwrite existent translations
SELECTION-SCREEN END OF BLOCK b02.
*--------------------------------------------- SELECTION SCREEN EVENTS *
*------------------------------------------------------- Program ID F4 *
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_pgmid.
PERFORM pgmid_f4.
*------------------------------------------------------ Object Type F4 *
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_object.
PERFORM object_f4.
*------------------------------------------------------ Object Name F4 *
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_obj_n.
PERFORM object_name_f4.
*--------------------------------------------------- Transport request *
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_tr.
CALL FUNCTION 'TR_F4_REQUESTS'
IMPORTING
ev_selected_request = p_tr.
*----------------------------------------- Selection Screen Events PAI *
AT SELECTION-SCREEN.
PERFORM screen_pai.
*------------------------------------------------------- REPORT EVENTS *
*----------------------------------------------- Initialization events *
INITIALIZATION.
PERFORM load_of_program.
*---------------------------------------------------- Executing events *
START-OF-SELECTION.
PERFORM run_checks.
END-OF-SELECTION.
PERFORM display_objects.
*--------------------------------------------------------------- FORMS *
*------------------------------------------------ Form LOAD_OF_PROGRAM *
FORM load_of_program.
DATA:
lt_restrict TYPE sscr_restrict, "Select Options Restrict
lt_opt_list TYPE sscr_opt_list,
lt_associate TYPE sscr_ass. "selection screen object
*---------- Fill Program IDs ----------*
CALL FUNCTION 'TR_OBJECT_TABLE'
TABLES
wt_object_text = gt_objs_desc.
*---------- SC restrict SOs ----------*
lt_opt_list-name = gc_ieq+1(2).
lt_opt_list-options-eq = abap_true.
APPEND lt_opt_list TO lt_restrict-opt_list_tab.
lt_associate-kind = 'S'.
lt_associate-name = 'SO_TLANG'.
lt_associate-sg_main = gc_ieq(1).
lt_associate-sg_addy = space.
lt_associate-op_main = gc_ieq+1(2).
lt_associate-op_addy = gc_ieq+1(2).
APPEND lt_associate TO lt_restrict-ass_tab.
CALL FUNCTION 'SELECT_OPTIONS_RESTRICT'
EXPORTING
restriction = lt_restrict
EXCEPTIONS
too_late = 1
repeated = 2
selopt_without_options = 3
selopt_without_signs = 4
invalid_sign = 5
empty_option_list = 6
invalid_kind = 7
repeated_kind_a = 8
OTHERS = 9.
IF sy-subrc IS NOT INITIAL.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. " LOAD_OF_PROGRAM
*------------------------------------------------------- Form PGMID_F4 *
FORM pgmid_f4 .
DATA lt_pgmids TYPE TABLE OF ko101. "Program IDs with Description
*---------- Read PGMID ----------*
CALL FUNCTION 'TR_PGMID_TABLE'
TABLES
wt_pgmid_text = lt_pgmids.
*---------- Set PGMID F4 ----------*
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST' "#EC FB_RC
EXPORTING
retfield = 'PGMID'
dynpprog = sy-cprog
value_org = 'S'
dynpnr = '1000'
dynprofield = 'TRE071X-PGMID'
TABLES
value_tab = lt_pgmids
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
ENDFORM. " PGMID_F4
*------------------------------------------------------ Form OBJECT_F4 *
FORM object_f4.
DATA:
lt_shlp TYPE shlp_descr, "Description of Search Help
lt_return_values TYPE TABLE OF ddshretval, "Interface Structure Search Help
ls_return_values LIKE LINE OF lt_return_values,
lv_rc TYPE sysubrc. "Return Value of ABAP Statements
FIELD-SYMBOLS <interface> TYPE ddshiface. "Interface description of a F4 help method
*---------- Get search help ----------*
CALL FUNCTION 'F4IF_GET_SHLP_DESCR'
EXPORTING
shlpname = 'SCTSOBJECT'
IMPORTING
shlp = lt_shlp.
*---------- Fill search help ----------*
LOOP AT lt_shlp-interface ASSIGNING <interface>.
IF <interface>-shlpfield = gc_object.
<interface>-valfield = abap_true.
<interface>-value = gv_object.
ENDIF.
IF <interface>-shlpfield = gc_pgmid.
<interface>-valfield = abap_true.
<interface>-value = p_pgmid.
ENDIF.
ENDLOOP.
*---------- Call search help ----------*
CALL FUNCTION 'F4IF_START_VALUE_REQUEST'
EXPORTING
shlp = lt_shlp
IMPORTING
rc = lv_rc
TABLES
return_values = lt_return_values.
*---------- Set search help return ----------*
IF lv_rc IS INITIAL.
READ TABLE lt_return_values INTO ls_return_values WITH KEY fieldname = gc_object.
IF sy-subrc IS INITIAL.
p_object = ls_return_values-fieldval.
ENDIF.
READ TABLE lt_return_values INTO ls_return_values WITH KEY fieldname = gc_pgmid.
IF sy-subrc IS INITIAL.
p_pgmid = ls_return_values-fieldval.
ENDIF.
ENDIF.
ENDFORM." OBJECT_F4
*------------------------------------------------- Form OBJECT_NAME_F4 *
FORM object_name_f4.
DATA lv_object_type TYPE seu_obj. "Object type
*---------- Get objects repository information ----------*
lv_object_type = p_object.
CALL FUNCTION 'REPOSITORY_INFO_SYSTEM_F4' "#EC FB_RC
EXPORTING
object_type = lv_object_type
object_name = p_obj_n
IMPORTING
object_name_selected = p_obj_n
EXCEPTIONS
cancel = 1
wrong_type = 2
OTHERS = 3.
ENDFORM. " OBJECT_NAME_F4
*----------------------------------------------------- Form SCREEN_PAI *
FORM screen_pai .
gv_object = p_object.
*---------- Execute ----------*
IF sy-ucomm = 'ONLI'.
TRY.
*---------- Check and Read languages informations ----------*
PERFORM check_languages.
CASE abap_true.
*---------- Add object or dev class objects ----------*
WHEN r_obj.
PERFORM execute_add_objects.
*---------- Add TR objects ----------*
WHEN r_tr.
PERFORM execute_add_from_transport.
ENDCASE.
*---------- Check if objects found ----------*
IF gt_objects IS INITIAL.
MESSAGE e398 WITH text-m03 space space space DISPLAY LIKE 'W'. "Object not found
ENDIF.
IF p_ow IS NOT INITIAL.
MESSAGE w398 WITH text-m08 space space space. "Overwrite existent translations activated
ENDIF.
CATCH cx_root INTO go_exp. "#EC CATCH_ALL
gv_msg_text = go_exp->get_text( ).
MESSAGE s398 WITH gv_msg_text space space space DISPLAY LIKE 'E'. "Critical error
ENDTRY.
ENDIF.
ENDFORM. " SCREEN_PAI
*--------------------------------------------------- Form PROGRESS_BAR *
FORM progress_bar USING i_value TYPE itex132 i_tabix TYPE i.
DATA:
lv_text(40),
lv_percentage TYPE p,
lv_percent_char(3).
lv_percentage = ( i_tabix / 100 ) * 100.
lv_percent_char = lv_percentage.
SHIFT lv_percent_char LEFT DELETING LEADING space.
CONCATENATE i_value '...' INTO i_value.
CONCATENATE i_value lv_percent_char text-pb1 INTO lv_text SEPARATED BY space.
IF lv_percentage GT gv_percent OR i_tabix = 1.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
percentage = lv_percentage
text = lv_text.
gv_percent = lv_percentage.
ENDIF.
ENDFORM. " PROGRESS_BAR
*------------------------------------------------ Form DISPLAY_OBJECTS *
FORM display_objects.
DATA:
lr_events TYPE REF TO cl_salv_events_table, "ALV Events
lr_display TYPE REF TO cl_salv_display_settings, "ALV Output Appearance
lr_columns TYPE REF TO cl_salv_columns_table, "ALV Columns
lr_column TYPE REF TO cl_salv_column_table,
lr_selections TYPE REF TO cl_salv_selections, "ALV Selections
lr_layout TYPE REF TO cl_salv_layout, "ALV Layout
lo_event_handler TYPE REF TO lcl_handle_events. "ALV Events Handler
DATA:
lt_column_ref TYPE salv_t_column_ref, "Columns of ALV List
ls_column_ref TYPE salv_s_column_ref,
ls_key TYPE salv_s_layout_key. "Layout Key
DATA:
lv_title TYPE lvc_title, "ALV title
lv_lines TYPE i, "Number of objects
lv_lines_c TYPE string.
PERFORM progress_bar USING text-p04 '90'. "Display objects
IF go_objects IS NOT BOUND. "Create ALV
TRY.
IF lines( gt_objects ) = 1.
MESSAGE s398 WITH text-m06 space space space DISPLAY LIKE 'W'. "No dependecies found
ELSE.
SORT gt_objects BY pgmid object obj_name.
ENDIF.
*---------- Create ALV ----------*
cl_salv_table=>factory( IMPORTING r_salv_table = go_objects
CHANGING t_table = gt_objects ).
*---------- Set ALV Functions ----------*
go_objects->set_screen_status(
pfstatus = 'STATUS'
report = sy-cprog
set_functions = go_objects->c_functions_all ).
*---------- Set Layout ----------*
lr_layout = go_objects->get_layout( ).
ls_key-report = sy-repid.
lr_layout->set_key( ls_key ).
lr_layout->set_save_restriction( ).
*---------- Set ALV selections ----------*
lr_selections = go_objects->get_selections( ).
lr_selections->set_selection_mode( if_salv_c_selection_mode=>row_column ).
*---------- Set ALV Display and Title ----------*
lr_display = go_objects->get_display_settings( ).
lr_display->set_striped_pattern( if_salv_c_bool_sap=>true ).
lv_lines = lines( gt_objects ).
lv_lines_c = lv_lines.
CONDENSE lv_lines_c NO-GAPS.
CONCATENATE '(' lv_lines_c ')' INTO lv_lines_c.
IF p_dep IS INITIAL.
CONCATENATE text-t01 p_pgmid p_object p_obj_n text-t02 lv_lines_c INTO lv_title SEPARATED BY space.
ELSE.
CONCATENATE text-t01 p_pgmid p_object p_obj_n text-t02 text-t03 lv_lines_c INTO lv_title SEPARATED BY space.
ENDIF.
lr_display->set_list_header( lv_title ).
*---------- Set ALV Columns ----------*
lr_columns = go_objects->get_columns( ).
lr_columns->set_key_fixation( ).
lr_columns->set_optimize( ).
lt_column_ref = lr_columns->get( ).
LOOP AT lt_column_ref INTO ls_column_ref. "Default format for all columns
lr_column ?= lr_columns->get_column( ls_column_ref-columnname ).
lr_column->set_f4( if_salv_c_bool_sap=>false ).
lr_column->set_alignment( if_salv_c_alignment=>centered ).
*---------- Check status ----------*
IF ls_column_ref-columnname = 'STATUS'.
lr_column->set_key( if_salv_c_bool_sap=>true ).
lr_column->set_short_text( text-c06 ). "Check St.
lr_column->set_medium_text( text-c06 ).
lr_column->set_long_text( text-c06 ).
ENDIF.
*---------- Object Keys ----------*
IF ls_column_ref-columnname = gc_pgmid OR
ls_column_ref-columnname = gc_object OR
ls_column_ref-columnname = 'OBJ_NAME'.
lr_column->set_key( if_salv_c_bool_sap=>true ).
ENDIF.
*---------- Object name and development package ----------*
IF ls_column_ref-columnname = 'OBJ_NAME' OR
ls_column_ref-columnname = 'DEVCLASS'.
lr_column->set_alignment( if_salv_c_alignment=>left ).
ENDIF.
*---------- Object description ----------*
IF ls_column_ref-columnname = 'OBJ_DESC'.
lr_column->set_alignment( if_salv_c_alignment=>left ).
lr_column->set_short_text( text-c01 ). "Obj. Desc.
lr_column->set_medium_text( text-c01 ).
lr_column->set_long_text( text-c01 ).
ENDIF.
*---------- Source Language ----------*
IF ls_column_ref-columnname = 'SLANG'.
lr_column->set_short_text( text-c02 ). "Source
lr_column->set_medium_text( text-c02 ).
lr_column->set_long_text( text-c02 ).
ENDIF.
*---------- Target Languages ----------*
IF ls_column_ref-columnname = 'TLANGS'.
lr_column->set_short_text( text-c03 ). "Targets
lr_column->set_medium_text( text-c03 ).
lr_column->set_long_text( text-c03 ).
ENDIF.
*---------- Translation status ----------*
IF ls_column_ref-columnname = 'STATTRN'.
lr_column->set_short_text( text-c04 ). "Trans. St.
lr_column->set_medium_text( text-c04 ).
lr_column->set_long_text( text-c04 ).
ENDIF.
*---------- Process status ----------*
IF ls_column_ref-columnname = 'STATPROC'.
lr_column->set_short_text( text-c05 ). "Proc. St.
lr_column->set_medium_text( text-c05 ).
lr_column->set_long_text( text-c05 ).
ENDIF.
ENDLOOP.
*---------- Register ALV Events ----------*
lr_events = go_objects->get_event( ).
CREATE OBJECT lo_event_handler.
SET HANDLER lo_event_handler->on_user_command FOR lr_events.
SET HANDLER lo_event_handler->on_double_click FOR lr_events.
*---------- Display Objects ALV ----------*
go_objects->display( ).
CATCH cx_root INTO go_exp. "#EC CATCH_ALL
gv_msg_text = go_exp->get_text( ).
MESSAGE s398 WITH gv_msg_text space space space DISPLAY LIKE 'E'. "Critical error
ENDTRY.
ELSE. "Refresh ALV
go_objects->refresh( ).
ENDIF.
ENDFORM. " DISPLAY_OBJECTS
*---------------------------------------------------------- FORMS ADDS *
*&---------------------------------------------------------------------*
*& Form CHECK_LANGUAGES
*&---------------------------------------------------------------------*
FORM check_languages .
DATA:
ls_language LIKE LINE OF gt_languages, "Languages Informations
ls_tlang LIKE LINE OF so_tlang. "Target Languages
IF p_slang IS INITIAL OR so_tlang[] IS INITIAL.
MESSAGE e398 WITH text-m01 space space space DISPLAY LIKE 'W'. "Please fill all required fields
ENDIF.
ls_tlang = gc_ieq.
ls_tlang-low = p_slang.
APPEND ls_tlang TO so_tlang.
REFRESH gt_languages.
CLEAR gv_tlangs.
LOOP AT so_tlang INTO ls_tlang WHERE low IS NOT INITIAL.
CALL FUNCTION 'LXE_T002_CHECK_LANGUAGE' "#EC FB_RC "#EC CI_SUBRC
EXPORTING
r3_lang = ls_tlang-low
IMPORTING
text = ls_language-text "Name of Language
o_language = ls_language-o_language "Translation Language
EXCEPTIONS
language_not_in_cp = 1
unknown = 2
OTHERS = 3.
CALL FUNCTION 'CONVERSION_EXIT_ISOLA_OUTPUT'
EXPORTING
input = ls_tlang-low
IMPORTING
output = ls_language-r3_lang.
ls_language-laiso = ls_tlang-low. "Language according to ISO 639
IF ls_tlang-low <> p_slang.
IF gv_tlangs IS INITIAL.
gv_tlangs = ls_language-r3_lang.
ELSE.
CONCATENATE gv_tlangs ls_language-r3_lang INTO gv_tlangs SEPARATED BY space.
ENDIF.
ENDIF.
APPEND ls_language TO gt_languages.
CLEAR ls_language.
ENDLOOP.
DELETE so_tlang WHERE low = p_slang.
ENDFORM. " CHECK_LANGUAGES
*&---------------------------------------------------------------------*
*& Form EXECUTE_ADD_OBJECTS
*&---------------------------------------------------------------------*
FORM execute_add_objects .
DATA:
lt_objectlist TYPE TABLE OF rseui_set, "Transfer table (object list) - info system
ls_objectlist LIKE LINE OF lt_objectlist,
ls_env_dummy TYPE senvi. "Object in Development Environment
DATA lv_devclass TYPE devclass. "Package
IF p_pgmid IS INITIAL OR p_object IS INITIAL OR p_obj_n IS INITIAL.
MESSAGE e398 WITH text-m01 space space space DISPLAY LIKE 'W'. "Please fill all required fields
ENDIF.
PERFORM progress_bar USING text-p01 '10'. "Adding object
CASE p_object.
WHEN 'DEVC'. "Get all development package objects
lv_devclass = p_obj_n.
CALL FUNCTION 'RS_GET_OBJECTS_OF_DEVCLASS' "#EC FB_RC
EXPORTING
devclass = lv_devclass
TABLES
objectlist = lt_objectlist
EXCEPTIONS
no_objects_selected = 1
OTHERS = 2.
LOOP AT lt_objectlist INTO ls_objectlist.
PERFORM check_add_object USING gc_r3tr ls_objectlist-obj_type ls_objectlist-obj_name ls_env_dummy.
ENDLOOP.
WHEN OTHERS. "Add object
PERFORM check_add_object USING p_pgmid p_object p_obj_n ls_env_dummy.
ENDCASE.
ENDFORM. " EXECUTE_ADD_OBJECTS
*&---------------------------------------------------------------------*
*& Form EXECUTE_ADD_FROM_TRANSPORT
*&---------------------------------------------------------------------*
FORM execute_add_from_transport .
DATA:
lt_request_headers TYPE trwbo_request_headers,
ls_request_headers TYPE trwbo_request_header,
lt_objects TYPE tr_objects,
ls_object TYPE e071,
ls_env_dummy TYPE senvi.
IF p_tr IS INITIAL.
MESSAGE e398 WITH text-m01 space space space DISPLAY LIKE 'W'. "Please fill all required fields
ENDIF.
PERFORM progress_bar USING text-p01 '10'. "Adding object
*---------- Read Requests and Tasks ----------*
CALL FUNCTION 'TR_READ_REQUEST_WITH_TASKS'
EXPORTING
iv_trkorr = p_tr
IMPORTING
et_request_headers = lt_request_headers
EXCEPTIONS
invalid_input = 1
OTHERS = 2.
IF sy-subrc IS NOT INITIAL.
MESSAGE e398 WITH text-m14 space space space DISPLAY LIKE 'W'. "Error treating transport request
ENDIF.
*---------- Read objects inside main request ----------*
READ TABLE lt_request_headers INTO ls_request_headers WITH KEY trfunction = 'K'.
IF sy-subrc IS NOT INITIAL.
MESSAGE e398 WITH text-m14 space space space DISPLAY LIKE 'W'. "Error treating transport request
ENDIF.
CALL FUNCTION 'TR_GET_OBJECTS_OF_REQ_AN_TASKS'
EXPORTING
is_request_header = ls_request_headers
iv_condense_objectlist = 'X'
IMPORTING
et_objects = lt_objects
EXCEPTIONS
invalid_input = 1
OTHERS = 2.
IF sy-subrc IS NOT INITIAL.
MESSAGE e398 WITH text-m14 space space space DISPLAY LIKE 'W'. "Error treating transport request
ENDIF.
CALL FUNCTION 'TR_SORT_OBJECT_AND_KEY_LIST'
CHANGING
ct_objects = lt_objects.
LOOP AT lt_objects INTO ls_object. "Add found objects to processing
PERFORM check_add_object USING ls_object-pgmid ls_object-object ls_object-obj_name ls_env_dummy.
ENDLOOP.
ENDFORM. " EXECUTE_ADD_FROM_TRANSPORT
*----------------------------------------------- Form CHECK_ADD_OBJECT *
FORM check_add_object USING value(i_pgmid) TYPE pgmid i_object TYPE any i_obj_n TYPE any is_env_tab TYPE senvi.
DATA lo_wb_object TYPE REF TO cl_wb_object. "Repository Object
DATA:
ls_tadir TYPE tadir, "Directory of Repository Objects
ls_wb_object_type TYPE wbobjtype, "Global WB Type
ls_object LIKE LINE OF gt_objects. "Objects to transport line
DATA:
lv_tr_object TYPE trobjtype, "Object Type
lv_tr_obj_name TYPE trobj_name, "Object Name in Object List
lv_trans_pgmid TYPE pgmid. "Program ID in Requests and Tasks
*---------- Object convertions ----------*
IF i_pgmid <> gc_r3tr.
SELECT pgmid UP TO 1 ROWS FROM tadir "#EC CI_GENBUFF
INTO i_pgmid
WHERE object = i_object
AND obj_name = i_obj_n.
ENDSELECT.
*---------- Is not a TADIR object and Conversion required ----------*
IF sy-subrc IS NOT INITIAL.
lv_tr_object = i_object.
lv_tr_obj_name = i_obj_n.
cl_wb_object=>create_from_transport_key( EXPORTING p_object = lv_tr_object
p_obj_name = lv_tr_obj_name
RECEIVING p_wb_object = lo_wb_object
EXCEPTIONS objecttype_not_existing = 1
empty_object_key = 2
key_not_available = 3
OTHERS = 4 ).
IF sy-subrc IS INITIAL.
lo_wb_object->get_global_wb_key( IMPORTING p_object_type = ls_wb_object_type
EXCEPTIONS key_not_available = 1
OTHERS = 2 ).
IF sy-subrc IS INITIAL.
lo_wb_object->get_transport_key( IMPORTING p_pgmid = lv_trans_pgmid "#EC CI_SUBRC
EXCEPTIONS key_not_available = 1
OTHERS = 2 ).
*---------- Check Program ID ----------*
CASE lv_trans_pgmid.
WHEN gc_r3tr. "Main objects
i_pgmid = lv_trans_pgmid.
WHEN 'LIMU'. "Sub object
CALL FUNCTION 'GET_R3TR_OBJECT_FROM_LIMU_OBJ'
EXPORTING
p_limu_objtype = lv_tr_object
p_limu_objname = lv_tr_obj_name
IMPORTING
p_r3tr_objtype = lv_tr_object
p_r3tr_objname = lv_tr_obj_name
EXCEPTIONS
no_mapping = 1
OTHERS = 2.
IF sy-subrc IS INITIAL.
ls_object-pgmid = gc_r3tr.
ls_object-object = lv_tr_object.
ls_object-obj_name = lv_tr_obj_name.
PERFORM add_object USING ls_object.
RETURN.
ENDIF.
WHEN OTHERS. "Include objects
i_pgmid = gc_r3tr.
CALL FUNCTION 'GET_TADIR_TYPE_FROM_WB_TYPE'
EXPORTING
wb_objtype = ls_wb_object_type-subtype_wb
IMPORTING
transport_objtype = lv_tr_object
EXCEPTIONS
no_mapping_found = 1
no_unique_mapping = 2
OTHERS = 3.
IF sy-subrc IS INITIAL.
i_object = lv_tr_object.
IF is_env_tab-encl_obj IS NOT INITIAL.
i_obj_n = is_env_tab-encl_obj.
ENDIF.
ENDIF.
ENDCASE.
ENDIF. "Global WB key
ENDIF. "Transport_key
ENDIF. "No a TADIR
ENDIF. "Convertions
*---------- Check in TADIR ----------*
SELECT SINGLE * FROM tadir
INTO ls_tadir
WHERE pgmid = i_pgmid
AND object = i_object
AND obj_name = i_obj_n.
*---------- Add object ----------*
IF ls_tadir IS NOT INITIAL.
MOVE-CORRESPONDING ls_tadir TO ls_object.
*---------- Set SAP Generated object status ----------*
IF ls_tadir-genflag IS NOT INITIAL.
ls_object-status = icon_led_yellow.
ENDIF.
*---------- Add object to be checked ----------*
PERFORM add_object USING ls_object.
*---------- Error Object not valid ----------*
ELSE.
IF lines( gt_objects ) > 0. "Skip first object
ls_object-pgmid = i_pgmid.
ls_object-object = i_object.
ls_object-obj_name = i_obj_n.
ls_object-status = icon_led_red.
PERFORM add_object USING ls_object.
ENDIF.
ENDIF.
ENDFORM. "check_add_object
*----------------------------------------------------- Form ADD_OBJECT *
FORM add_object USING ps_object TYPE gty_objects.
DATA:
ls_objs_desc LIKE LINE OF gt_objs_desc, "Objects prograns ID line"Info Environment
lt_devclass TYPE scts_devclass, "Development Packages
ls_devclass TYPE trdevclass.
DATA:
lv_object TYPE trobjtype, "Object Type
lv_objname TYPE sobj_name, "Object Name in Object Directory
lv_namespace TYPE namespace. "Object Namespace
*---------- Check if already added ----------*
READ TABLE gt_objects TRANSPORTING NO FIELDS WITH KEY pgmid = ps_object-pgmid
object = ps_object-object
obj_name = ps_object-obj_name.
IF sy-subrc IS NOT INITIAL. "New object
*---------- Check if is customer object ----------*
lv_object = ps_object-object.
lv_objname = ps_object-obj_name.
CALL FUNCTION 'TRINT_GET_NAMESPACE' "#EC FB_RC
EXPORTING
iv_pgmid = ps_object-pgmid
iv_object = lv_object
iv_obj_name = lv_objname
IMPORTING
ev_namespace = lv_namespace
EXCEPTIONS
invalid_prefix = 1
invalid_object_type = 2
OTHERS = 3.
IF lv_namespace = '/0CUST/'. "Is customer object
*---------- Read object description ----------*
READ TABLE gt_objs_desc INTO ls_objs_desc WITH KEY object = ps_object-object.
IF sy-subrc IS INITIAL.
ps_object-obj_desc = ls_objs_desc-text. "Object type description
ENDIF.
*---------- Read development class tecnical information ----------*
IF ps_object-devclass IS INITIAL.
SELECT SINGLE devclass FROM tadir
INTO ps_object-devclass
WHERE pgmid = ps_object-pgmid
AND object = ps_object-object
AND obj_name = ps_object-obj_name.
ENDIF.
IF ps_object-devclass IS NOT INITIAL AND ps_object-devclass <> gc_temp.
ls_devclass-devclass = ps_object-devclass.
APPEND ls_devclass TO lt_devclass.
CALL FUNCTION 'TR_READ_DEVCLASSES'
EXPORTING
it_devclass = lt_devclass
IMPORTING
et_devclass = lt_devclass.
READ TABLE lt_devclass INTO ls_devclass INDEX 1.
IF sy-subrc IS INITIAL.
ps_object-target = ls_devclass-target. "Development package target
ENDIF.
ENDIF.
ps_object-slang = p_slang.
ps_object-tlangs = gv_tlangs.
*---------- Add object to transport ----------*
APPEND ps_object TO gt_objects.
ENDIF.
ENDIF.
ENDFORM. " ADD_OBJECT
*-------------------------------------------------------- FORMS CHECKS *
*----------------------------------------------------- Form RUN_CHECKS *
FORM run_checks .
TRY.
*---------- Dependecies check ----------*
PERFORM objects_dependencies_check.
*---------- Translations check ----------*
PERFORM objects_translations_check.
CATCH cx_root INTO go_exp. "#EC CATCH_ALL
gv_msg_text = go_exp->get_text( ).
MESSAGE s398 WITH gv_msg_text space space space DISPLAY LIKE 'E'. "Critical error
ENDTRY.
ENDFORM. " RUN_CHECKS
*------------------------------------- Form OBJECTS_DEPENDENCIES_CHECK *
FORM objects_dependencies_check .
DATA:
lv_obj_type TYPE seu_obj, "Object type
lt_env_tab TYPE TABLE OF senvi, "Object to check dependencies
ls_env_tab TYPE senvi. "Info Environment
FIELD-SYMBOLS <ls_object> LIKE LINE OF gt_objects. "Objects to transport
PERFORM progress_bar USING text-p02 '30'. "Checking Dependecies
LOOP AT gt_objects ASSIGNING <ls_object> WHERE status IS INITIAL.
*---------- Get object dependecies ----------*
IF p_dep IS NOT INITIAL.
REFRESH lt_env_tab.
lv_obj_type = <ls_object>-object.
CALL FUNCTION 'REPOSITORY_ENVIRONMENT_RFC'
EXPORTING
obj_type = lv_obj_type
object_name = <ls_object>-obj_name
TABLES
environment_tab = lt_env_tab.
DELETE lt_env_tab INDEX 1. "Delete first line
*---------- Add founded dependecies ----------*
LOOP AT lt_env_tab INTO ls_env_tab. "#EC CI_NESTED
PERFORM check_add_object USING space ls_env_tab-type ls_env_tab-object ls_env_tab.
ENDLOOP.
ENDIF.
<ls_object>-status = icon_led_green. "Status checked
ENDLOOP.
ENDFORM. " OBJECTS_DEPENDENCIES_CHECK
*------------------------------------- Form OBJECTS_TRANSLATIONS_CHECK *
FORM objects_translations_check .
DATA:
lt_colob TYPE TABLE OF lxe_colob, "Object Lists
ls_colob LIKE LINE OF lt_colob,
ls_objs_colob LIKE LINE OF gt_objs_colob, "LXE Objects
ls_tlang LIKE LINE OF so_tlang, "Target Languages
ls_language LIKE LINE OF gt_languages, "Languages Informations
ls_slanguage LIKE LINE OF gt_languages.
DATA:
lv_tr_obj_name TYPE trobj_name, "Object Name in Object List
lv_stattrn TYPE lxestattrn. "Translation Status of an Object
FIELD-SYMBOLS <ls_object> LIKE LINE OF gt_objects. "Objects to transport
PERFORM progress_bar USING text-p03 '60'. "Checking Translations
*---------- Checking Translations ----------*
REFRESH gt_objs_colob.
LOOP AT gt_objects ASSIGNING <ls_object> WHERE status = icon_led_green.
REFRESH lt_colob.
lv_tr_obj_name = <ls_object>-obj_name.
CALL FUNCTION 'LXE_OBJ_EXPAND_TRANSPORT_OBJ'
EXPORTING
pgmid = <ls_object>-pgmid
object = <ls_object>-object
obj_name = lv_tr_obj_name
TABLES
ex_colob = lt_colob
EXCEPTIONS
unknown_object = 1
unknown_ta_type = 2
OTHERS = 3.
*---------- Check Status ----------*
IF sy-subrc IS NOT INITIAL. "Error
<ls_object>-status = icon_led_red.
CONTINUE.
ENDIF.
IF lt_colob IS INITIAL. "No translation
<ls_object>-status = icon_led_yellow.
ENDIF.
*---------- Initial Translation status ----------*
*---------- Add to global LXE object tables ----------*
LOOP AT lt_colob INTO ls_colob. "#EC CI_NESTED
MOVE-CORRESPONDING <ls_object> TO ls_objs_colob.
MOVE-CORRESPONDING ls_colob TO ls_objs_colob.
APPEND ls_objs_colob TO gt_objs_colob.
CLEAR ls_objs_colob.
IF <ls_object>-stattrn <> icon_led_yellow.
*---------- Loop selected target language ----------*
LOOP AT so_tlang INTO ls_tlang. "#EC CI_NESTED
READ TABLE gt_languages INTO ls_language WITH KEY laiso = ls_tlang-low. "Read language tecnical info
READ TABLE gt_languages INTO ls_slanguage WITH KEY laiso = p_slang.
CLEAR lv_stattrn.
CALL FUNCTION 'LXE_OBJ_TRANSLATION_STATUS2'
EXPORTING
t_lang = ls_language-o_language
s_lang = ls_slanguage-o_language
custmnr = ls_colob-custmnr
objtype = ls_colob-objtype
objname = ls_colob-objname
IMPORTING
stattrn = lv_stattrn.
IF lv_stattrn = 'T'. "Translated
<ls_object>-stattrn = icon_led_green.
ELSE.
<ls_object>-stattrn = icon_led_yellow.
EXIT.
ENDIF.
ENDLOOP. "Target Languagues
ENDIF. "Status
ENDLOOP. "LXE Objects
ENDLOOP. "Objects
ENDFORM. " OBJECTS_TRANSLATIONS_CHECK
*------------------------------------------------------- FORMS OPTIONS *
*----------------------------------------------- Form CREATE_TRANSPORT *
FORM create_transport TABLES lt_objects TYPE STANDARD TABLE. "#EC PF_NO_TYPE
DATA:
lt_e071_temp TYPE TABLE OF e071, "Change & Transport System: Object Entries of Requests/Tasks
lt_e071 TYPE TABLE OF e071,
lt_e071k_temp TYPE TABLE OF e071k,
ls_object LIKE LINE OF gt_objects,
lt_targets TYPE TABLE OF tr_target, "Transport Target of Request
ls_target LIKE LINE OF lt_targets,
ls_objs_colob LIKE LINE OF gt_objs_colob, "LXE Objects
ls_tlang LIKE LINE OF so_tlang. "Target Languages
DATA:
lv_order TYPE trkorr, "Request/Task
lv_task TYPE trkorr.
*---------- Check selected objects to transport ----------*
LOOP AT lt_objects INTO ls_object.
IF ls_object-devclass = gc_temp.
MESSAGE i398 WITH text-m10 space space space DISPLAY LIKE 'E'. "Request canceled, at least one object $TEMP detected
RETURN.
ENDIF.
ls_target = ls_object-target.
APPEND ls_target TO lt_targets.
ENDLOOP.
*---------- Check targets ----------*
SORT lt_targets.
DELETE ADJACENT DUPLICATES FROM lt_targets.
IF lines( lt_targets ) > 1. "Only one valid target
MESSAGE i398 WITH text-m05 space space space. "Transport not allowed for multiple targets
RETURN.
ENDIF.
*---------- Add translations to transport ----------*
LOOP AT lt_objects INTO ls_object.
LOOP AT gt_objs_colob INTO ls_objs_colob WHERE pgmid = ls_object-pgmid "#EC CI_NESTED
AND object = ls_object-object
AND obj_name = ls_object-obj_name.
LOOP AT so_tlang INTO ls_tlang. "#EC CI_NESTED
CALL FUNCTION 'LXE_OBJ_CREATE_TRANSPORT_SE63'
EXPORTING
language = ls_tlang-low
custmnr = ls_objs_colob-custmnr
objtype = ls_objs_colob-objtype
objname = ls_objs_colob-objname
TABLES
ex_e071 = lt_e071_temp.
APPEND LINES OF lt_e071_temp TO lt_e071.
REFRESH lt_e071_temp.
ENDLOOP.
ENDLOOP.
ENDLOOP.
*---------- Check selected translations ----------*
IF lt_e071 IS INITIAL.
MESSAGE i398 WITH text-m04 space space space. "No objects selected
RETURN.
ENDIF.
*---------- Create or Select transport request ----------*
READ TABLE lt_targets INTO ls_target INDEX 1.
CALL FUNCTION 'TRINT_ORDER_CHOICE'
EXPORTING
iv_tarsystem = ls_target
IMPORTING
we_order = lv_order
we_task = lv_task
TABLES
wt_e071 = lt_e071_temp
wt_e071k = lt_e071k_temp
EXCEPTIONS
no_correction_selected = 1
display_mode = 2
object_append_error = 3
recursive_call = 4
wrong_order_type = 5
OTHERS = 6.
*---------- Add object to transport request ----------*
IF sy-subrc IS INITIAL AND lv_task IS NOT INITIAL.
REFRESH lt_e071k_temp.
CALL FUNCTION 'TRINT_APPEND_COMM'
EXPORTING
wi_exclusive = abap_false
wi_sel_e071 = abap_true
wi_sel_e071k = abap_true
wi_trkorr = lv_task
TABLES
wt_e071 = lt_e071
wt_e071k = lt_e071k_temp
EXCEPTIONS
e071k_append_error = 1
e071_append_error = 2
trkorr_empty = 3
OTHERS = 4.
*---------- Sort and compress request --------*
IF sy-subrc IS INITIAL. "Added with sucess