ABAP开发机与测试机正式机版本对象对比

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
*&---------------------------------------------------------------------*
*& Report ZVERCHECK
*&---------------------------------------------------------------------*
*& Baitianzhen
*& 系统间批量比对开发对象内容
*&---------------------------------------------------------------------*
REPORT zvercheck NO STANDARD PAGE HEADING.
 
TABLES: sci_dynp,versobj_alias.
DATA: gt_fldct TYPE lvc_t_fcat,
      gs_slayt TYPE lvc_s_layo.
DATA: gt_syst TYPE tmscsyslst_typ,
      gs_syst TYPE tmscsyslst,
      gt_vrmv TYPE vrm_values,
      gs_vrmv TYPE vrm_value.
DATA: gt_ko100 TYPE TABLE OF ko100,
      gs_ko100 TYPE ko100.
DATA: BEGIN OF gs_out,
        pgmid    TYPE e071-pgmid,
        object   TYPE e071-object,
        obj_name TYPE e071-obj_name,
        devclass TYPE tadir-devclass,
        author   TYPE tadir-author,
        objtxt   TYPE char40,
        result   TYPE char20,
        tract    TYPE trkorr,
        trloc    TYPE trkorr,
        trpre    TYPE trkorr,
        trrem    TYPE trkorr,
        trsta    TYPE char10,
      END OF gs_out.
DATA: gt_out LIKE TABLE OF gs_out.
DATA: gr_ext TYPE RANGE OF sci_dynp-i_obj_t. "排除类型
 
SELECTION-SCREEN BEGIN OF BLOCK b01 WITH FRAME TITLE btxt1.
  SELECT-OPTIONS: s_prog FOR sci_dynp-o_repo  MEMORY ID prog,
                  s_fugr FOR sci_dynp-o_fugr  MEMORY ID fugr,
                  s_clas FOR sci_dynp-o_clas  MEMORY ID clas,
                  s_ddic FOR sci_dynp-o_ddic  MEMORY ID ddic.
  SELECT-OPTIONS: s_pckg FOR sci_dynp-f_devc  MEMORY ID pckg,
                  s_tran FOR sci_dynp-o_order MEMORY ID tran.
SELECTION-SCREEN END OF BLOCK b01.
SELECTION-SCREEN BEGIN OF BLOCK b02 WITH FRAME TITLE btxt2.
  SELECT-OPTIONS: s_user FOR sci_dynp-f_resp,
                  s_otyp FOR sci_dynp-i_obj_t.
SELECTION-SCREEN END OF BLOCK b02.
SELECTION-SCREEN BEGIN OF BLOCK b03 WITH FRAME TITLE btxt3.
  PARAMETERS: p_dest TYPE versdest MEMORY ID rfc,
              p_syst TYPE verssysnam AS LISTBOX VISIBLE LENGTH 20 MEMORY ID verssysnam.
SELECTION-SCREEN END OF BLOCK b03.
 
SELECTION-SCREEN BEGIN OF BLOCK b04 WITH FRAME TITLE btxt4.
  PARAMETERS: p_same AS CHECKBOX DEFAULT 'X',
              p_diff AS CHECKBOX DEFAULT 'X',
              p_noex AS CHECKBOX DEFAULT 'X',
              p_unsu AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN END OF BLOCK b04.
 
INITIALIZATION.
  APPEND 'EEQAVAS' TO gr_ext.
  APPEND 'EEQTOBJ' TO gr_ext.
  APPEND 'EEQSTOB' TO gr_ext.
 
  CALL FUNCTION 'TRINT_OBJECT_TABLE'
    EXPORTING
      iv_complete  = 'X'
    TABLES
      tt_types_out = gt_ko100.
  SORT gt_ko100 BY object.
 
  CALL FUNCTION 'TMS_CI_GET_SYSTEMLIST'
    EXPORTING
      iv_only_active = 'X'
    TABLES
      tt_syslst      = gt_syst.
  LOOP AT gt_syst INTO gs_syst.
    gs_vrmv-key  = gs_syst-sysnam.
    gs_vrmv-text = gs_syst-systxt.
    APPEND gs_vrmv TO gt_vrmv.
  ENDLOOP.
  CALL FUNCTION 'VRM_SET_VALUES'
    EXPORTING
      id     = 'P_SYST'
      values = gt_vrmv.
 
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_prog-low.
  CALL FUNCTION 'RS_HELP_HANDLING'
    EXPORTING
      dynpfield = 'S_PROG-LOW'
      dynpname  = sy-dynnr
      object    = 'PR'
      progname  = sy-repid.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_fugr-low.
  CALL FUNCTION 'RS_HELP_HANDLING'
    EXPORTING
      dynpfield = 'S_FUGR-LOW'
      dynpname  = sy-dynnr
      object    = 'FG'
      progname  = sy-repid.
 
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_clas-low.
  CALL FUNCTION 'REPOSITORY_INFO_SYSTEM_F4'
    EXPORTING
      object_type          = 'CLIF'
    IMPORTING
      object_name_selected = s_clas-low
    EXCEPTIONS
      OTHERS               = 1.
 
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_ddic-low.
  CALL FUNCTION 'F4_DD_ALLTYPES'
    IMPORTING
      result = s_ddic-low.
 
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_tran-low.
  CALL FUNCTION 'TR_F4_REQUESTS'
    EXPORTING
      iv_trfunctions      = 'K'
      iv_trstatus         = 'RDL'
    IMPORTING
      ev_selected_request = s_tran-low.
 
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_otyp-low.
  CALL FUNCTION 'TRINT_PGMID_OBJECT_SELECT_F4'
    IMPORTING
      we_object = s_otyp-low.
 
AT SELECTION-SCREEN.
  IF sy-ucomm = 'ONLI'.
    IF p_dest = '' AND p_syst = ''.
      MESSAGE e000(oo) WITH 'RFC目标和目标系统至少输入一个'.
    ELSEIF p_dest = ''.
      READ TABLE gt_syst INTO gs_syst WITH KEY sysnam = p_syst.
      CONCATENATE 'TMSADM@' gs_syst-sysnam '.' gs_syst-domnam INTO p_dest.
    ENDIF.
  ENDIF.
 
AT SELECTION-SCREEN OUTPUT.
  btxt1 = '数据来源'.
  btxt2 = '数据限制'.
  btxt3 = '远程系统'.
  btxt4 = '结果显示包括'.
  %_p_syst_%_app_%-text   = '目标系统'.
  %_p_dest_%_app_%-text   = 'RFC目标(优先)'.
  %_s_clas_%_app_%-text  = '类/接口'.
  %_s_ddic_%_app_%-text  = '表/视图/数据类型/域/搜索帮助/锁'.
  %_s_fugr_%_app_%-text  = '函数组'.
  %_s_prog_%_app_%-text  = '程序(包含Z开头INCLUDE)'.
  %_s_tran_%_app_%-text  = '请求/任务号'.
  %_s_pckg_%_app_%-text  = '包/开发类'.
  %_s_user_%_app_%-text  = '创建者'.
  %_s_otyp_%_app_%-text  = '对象类型'.
  %_p_same_%_app_%-text  = '本地和远程相同'.
  %_p_diff_%_app_%-text  = '本地和远程不同'.
  %_p_noex_%_app_%-text  = '对象在远程不存在'.
  %_p_unsu_%_app_%-text  = '不支持对比的对象'.
 
START-OF-SELECTION.
  PERFORM get_objects.
  PERFORM expand_objects.
  PERFORM check_objects.
  PERFORM outdata.
 
*&---------------------------------------------------------------------*
*& get_objects
*&---------------------------------------------------------------------*
FORM get_objects.
  DATA ls_tadir TYPE tadir.
  DATA lt_progs LIKE gt_out.
  DATA ls_progs LIKE gs_out.
  DATA lt_incl  TYPE TABLE OF sobj_name.
  DATA lt_e070  TYPE TABLE OF e070.
  DATA lt_e071  TYPE TABLE OF e071.
  DATA ls_e071  TYPE e071.
 
  IF s_prog[] IS NOT INITIAL.
    SELECT pgmid object obj_name devclass author
      INTO CORRESPONDING FIELDS OF TABLE lt_progs
      FROM tadir INNER JOIN trdir ON obj_name = trdir~name
      WHERE pgmid    EQ 'R3TR' AND
            object   EQ 'PROG' AND
            obj_name IN s_prog AND
            author   IN s_user AND
            devclass NE '$TMP'.
    LOOP AT lt_progs INTO ls_progs.
      CLEAR lt_incl.
      CALL FUNCTION 'GET_INCLUDETAB'
        EXPORTING
          progname = ls_progs-obj_name
        TABLES
          incltab  = lt_incl.
      CHECK lt_incl[] IS NOT INITIAL.
 
      SELECT pgmid object obj_name devclass author
        INTO CORRESPONDING FIELDS OF ls_progs
        FROM tadir INNER JOIN trdir ON obj_name = trdir~name
        FOR ALL ENTRIES IN lt_incl
        WHERE pgmid    EQ 'R3TR' AND
              object   EQ 'PROG' AND
              obj_name EQ lt_incl-table_line AND
              obj_name LIKE 'Z%' AND
              devclass NE '$TMP'.
        COLLECT ls_progs INTO lt_progs.
      ENDSELECT.
    ENDLOOP.
 
    APPEND LINES OF lt_progs TO gt_out.
  ENDIF.
 
  IF s_fugr[] IS NOT INITIAL.
    SELECT pgmid object obj_name devclass author
      APPENDING CORRESPONDING FIELDS OF TABLE gt_out
      FROM tadir
      WHERE pgmid    EQ 'R3TR' AND
            object   IN ('FUGR','FUGS','FUGX') AND
            obj_name IN s_fugr AND
            author   IN s_user AND
            devclass NE '$TMP'.
  ENDIF.
 
  IF s_clas[] IS NOT INITIAL.
    SELECT pgmid object obj_name devclass author
      APPENDING CORRESPONDING FIELDS OF TABLE gt_out
      FROM tadir
      WHERE pgmid    EQ 'R3TR' AND
            object   IN ('CLAS','INTF') AND
            obj_name IN s_clas AND
            author   IN s_user AND
            devclass NE '$TMP'.
  ENDIF.
 
  IF s_ddic[] IS NOT INITIAL.
    SELECT pgmid object obj_name devclass author
      APPENDING CORRESPONDING FIELDS OF TABLE gt_out
      FROM tadir
      WHERE pgmid    EQ 'R3TR' AND
            object   IN ('DTEL','TABL','VIEW','SQLT','DOMA',
                         'SHLP','ENQU','DDLS','TTYP') AND
            obj_name IN s_ddic AND
            author   IN s_user AND
            devclass NE '$TMP'.
  ENDIF.
 
  IF s_tran[] IS NOT INITIAL.
    SELECT * INTO TABLE lt_e070 FROM e070
      WHERE strkorr IN s_tran OR trkorr IN s_tran.
    IF sy-subrc = 0.
      SELECT pgmid object obj_name
        INTO CORRESPONDING FIELDS OF TABLE lt_e071
        FROM e071
        FOR ALL ENTRIES IN lt_e070
        WHERE trkorr EQ lt_e070-trkorr  AND
              pgmid  IN ('LIMU','R3TR') AND
              object IN gr_ext.
      LOOP AT lt_e071 INTO ls_e071.
        CALL FUNCTION 'TR_CHECK_TYPE'
          EXPORTING
            wi_e071  = ls_e071
          IMPORTING
            we_tadir = ls_tadir.
 
        SELECT SINGLE * INTO ls_tadir FROM tadir
          WHERE pgmid    EQ ls_tadir-pgmid   AND
                object   EQ ls_tadir-object  AND
                obj_name EQ ls_tadir-obj_name AND
                author   IN s_user AND
                object   IN gr_ext AND
                devclass NE '$TMP'.
        CHECK sy-subrc = 0.
 
        gs_out-pgmid     = ls_e071-pgmid.
        gs_out-object    = ls_e071-object.
        gs_out-obj_name  = ls_e071-obj_name.
        gs_out-devclass  = ls_tadir-devclass.
        gs_out-author    = ls_tadir-author.
        APPEND gs_out TO gt_out.
      ENDLOOP.
    ENDIF.
  ENDIF.
 
  IF s_pckg[] IS NOT INITIAL.
    SELECT pgmid object obj_name devclass author
      APPENDING CORRESPONDING FIELDS OF TABLE gt_out
      FROM tadir
      WHERE devclass IN s_pckg AND
            author   IN s_user AND
            object   IN gr_ext AND
            devclass NE '$TMP'.
  ENDIF.
 
  IF gt_out IS INITIAL.
    MESSAGE s000(oo) WITH '无数据'.
  ENDIF.
ENDFORM.                    "get_objects
 
*&---------------------------------------------------------------------*
*& expand_objects
*&---------------------------------------------------------------------*
FORM expand_objects.
  DATA: ls_e071    TYPE e071,
        ls_object  LIKE gs_out,
        lt_object  LIKE gt_out,
        ls_ver_obj TYPE svrs2_versionable_object,
        ls_vrso    TYPE vrso,
        lt_vrso    TYPE STANDARD TABLE OF vrso.
 
  LOOP AT gt_out INTO gs_out.
    ls_object-author   = gs_out-author.
    ls_object-devclass = gs_out-devclass.
 
    CLEAR ls_e071.
    ls_e071-pgmid    = gs_out-pgmid.
    ls_e071-object   = gs_out-object.
    ls_e071-obj_name = gs_out-obj_name.
    CALL FUNCTION 'SVRS_RESOLVE_E071_OBJ'
      EXPORTING
        e071_obj        = ls_e071
      TABLES
        obj_tab         = lt_vrso
      EXCEPTIONS
        not_versionable = 1.
    IF sy-subrc = 0.
      LOOP AT lt_vrso INTO ls_vrso WHERE objtype NE 'DOCU'.
        CLEAR ls_ver_obj.
        ls_ver_obj-objtype = ls_vrso-objtype.
        ls_ver_obj-objname = ls_vrso-objname.
        ls_ver_obj-versno  = '00000'.
 
        CALL FUNCTION 'SVRS_GET_VERSION_LOCAL'
          CHANGING
            object             = ls_ver_obj
          EXCEPTIONS
            no_version         = 3
            version_unreadable = 4
            OTHERS             = 5.
        CHECK sy-subrc = 0.
        CHECK ls_ver_obj-objtype IN s_otyp.
 
        READ TABLE gt_ko100 INTO gs_ko100
                            WITH KEY object = ls_vrso-objtype BINARY SEARCH.
        ls_object-objtxt   = gs_ko100-text.
        ls_object-pgmid    = 'LIMU'.
        ls_object-object   = ls_vrso-objtype.
        ls_object-obj_name = ls_vrso-objname.
        APPEND ls_object TO lt_object.
      ENDLOOP.
    ELSE.
      CHECK gs_out-object IN s_otyp.
      READ TABLE gt_ko100 INTO gs_ko100
                          WITH KEY object = gs_out-object BINARY SEARCH.
      ls_object-objtxt   = gs_ko100-text.
      ls_object-object   = gs_out-object.
      ls_object-obj_name = gs_out-obj_name.
      ls_object-pgmid    = gs_out-pgmid.
      ls_object-result    = '@BZ@类型不支持'.
      APPEND ls_object TO lt_object.
      CLEAR ls_object.
    ENDIF.
  ENDLOOP.
 
  gt_out = lt_object.
  SORT gt_out BY object obj_name.
  DELETE ADJACENT DUPLICATES FROM gt_out COMPARING object obj_name.
ENDFORM.                    "expand_objects
 
*&---------------------------------------------------------------------*
*& check_objects
*&---------------------------------------------------------------------*
FORM check_objects.
  DATA: lv_text    TYPE char50,
        lv_lines   TYPE i,
        lv_empty   TYPE c,
        ls_loc_obj TYPE svrs2_versionable_object,
        ls_rem_obj TYPE svrs2_versionable_object,
        ls_delta   TYPE svrs2_xversionable_object.
 
  lv_lines = lines( gt_out ).
  LOOP AT gt_out INTO gs_out WHERE result = ''.
    MESSAGE s000(oo) WITH sy-tabix '/' lv_lines gs_out-obj_name INTO lv_text.
    CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
      EXPORTING
        percentage = 0
        text       = lv_text.
 
    PERFORM read_object USING gs_out '' CHANGING ls_loc_obj.
    PERFORM read_object USING gs_out p_dest CHANGING ls_rem_obj.
 
    IF ls_rem_obj IS INITIAL.
      gs_out-result = '@5C@不存在'.
    ELSE.
      PERFORM clear_data USING ls_loc_obj.
      PERFORM clear_data USING ls_rem_obj.
 
      CLEAR ls_delta.
      CALL FUNCTION 'SVRS_MAKE_OBJECT_DELTA'
        EXPORTING
          obj_old = ls_loc_obj
          obj_new = ls_rem_obj
        CHANGING
          delta   = ls_delta
        EXCEPTIONS
          OTHERS  = 2.
      CALL FUNCTION 'SVRS_CHECK_DELTA_EMPTY'
        EXPORTING
          obj_new       = ls_loc_obj
          delta         = ls_delta
        IMPORTING
          p_delta_empty = lv_empty.
      IF lv_empty = 'X'.
        gs_out-result = '@5B@相同'.
      ELSE.
        gs_out-result = '@5D@不同'.
      ENDIF.
    ENDIF.
 
    PERFORM get_trkorr USING p_dest gs_out-object gs_out-obj_name
                       CHANGING gs_out-tract gs_out-trloc gs_out-trpre gs_out-trrem.
    IF gs_out-trrem NE ''.
      IF gs_out-trrem = gs_out-trloc.
        gs_out-trsta = '最新请求'.
      ELSEIF gs_out-trrem = gs_out-trpre.
        gs_out-trsta = '次新请求'.
      ELSE.
        gs_out-trsta = '@5D@非最新/次新'.
      ENDIF.
    ENDIF.
 
    MODIFY gt_out FROM gs_out.
  ENDLOOP.
 
  IF p_same = ''.
    DELETE gt_out WHERE result = '@5B@相同'.
  ENDIF.
  IF p_diff = ''.
    DELETE gt_out WHERE result = '@5D@不同'.
  ENDIF.
  IF p_noex = ''.
    DELETE gt_out WHERE result = '@5C@不存在'.
  ENDIF.
  IF p_unsu = ''.
    DELETE gt_out WHERE result = '@BZ@类型不支持'.
  ENDIF.
ENDFORM.                    "check_objects
*&---------------------------------------------------------------------*
*& read_object
*&---------------------------------------------------------------------*
FORM read_object USING ps_object LIKE gs_out pv_dest
                 CHANGING cs_verobj TYPE svrs2_versionable_object.
 
  CLEAR: cs_verobj.
  cs_verobj-destination = pv_dest.
  cs_verobj-objtype     = ps_object-object.
  cs_verobj-objname     = ps_object-obj_name.
  cs_verobj-versno      = '00000'.
 
  CALL FUNCTION 'SVRS_GET_VERSION'
    CHANGING
      object              = cs_verobj
    EXCEPTIONS
      communication_error = 1
      system_error        = 2
      no_version          = 3
      version_unreadable  = 4
      OTHERS              = 5.
  IF sy-subrc NE 0.
    CLEAR: cs_verobj.
  ENDIF.
ENDFORM.                    "read_object
 
*&---------------------------------------------------------------------*
*& clear_data
*&---------------------------------------------------------------------*
FORM clear_data USING ps_verobj TYPE svrs2_versionable_object.
  DATA: lv_type  TYPE c,
        lv_count TYPE i.
  FIELD-SYMBOLS: <ls_part>  TYPE any,
                 <ls_row>   TYPE any,
                 <lt_table> TYPE ANY TABLE.
 
  IF ps_verobj-data_pointer IS INITIAL.
    ps_verobj-data_pointer = ps_verobj-objtype.
  ENDIF.
 
  ASSIGN COMPONENT ps_verobj-data_pointer OF STRUCTURE ps_verobj TO <ls_part>.
  CHECK sy-subrc = 0.
 
  PERFORM clear_stru_field USING: <ls_part> 'MDLOG' ,
                                  <ls_part> 'TRDIR' ,
                                  <ls_part> 'TFDIR' ,
                                  <ls_part> 'TRDIRT',
                                  <ls_part> 'CLASS' ,
                                  <ls_part> 'DD08TV'.
 
  DESCRIBE FIELD <ls_part> TYPE lv_type COMPONENTS lv_count.
  DO lv_count TIMES.
    ASSIGN COMPONENT sy-index OF STRUCTURE <ls_part> TO <lt_table>.
    CHECK sy-subrc = 0.
    LOOP AT <lt_table> ASSIGNING <ls_row>.
      PERFORM clear_stru_field USING: <ls_row> 'AUTHOR'   ,
                                      <ls_row> 'AUTH'     ,
                                      <ls_row> 'CREATEDON',
                                      <ls_row> 'CHANGEDBY',
                                      <ls_row> 'CHANGEDON',
                                      <ls_row> 'UDATE'    ,
                                      <ls_row> 'UTIME'    ,
                                      <ls_row> 'AS4DATE'  ,
                                      <ls_row> 'AS4TIME'  ,
                                      <ls_row> 'AS4USER'  ,
                                      <ls_row> 'DESCRIPT' ,
                                      <ls_row> 'EDITORDER',
                                      <ls_row> 'R3RELEASE'.
    ENDLOOP.
  ENDDO.
ENDFORM.                    "clear_data
 
*&---------------------------------------------------------------------*
*& clear_stru_field
*&---------------------------------------------------------------------*
FORM clear_stru_field USING ps_stru pv_fldnam.
  FIELD-SYMBOLS <lv_value> TYPE any.
 
  ASSIGN COMPONENT pv_fldnam OF STRUCTURE ps_stru TO <lv_value>.
  IF sy-subrc = 0.
    CLEAR <lv_value>.
  ENDIF.
ENDFORM.
 
*&---------------------------------------------------------------------*
*& outdata
*&---------------------------------------------------------------------*
FORM outdata.
  gs_slayt-zebra = 'X'.
 
  PERFORM catset1 TABLES gt_fldct
                  USING: 'OBJ_NAME ' '' '' '对象名称',
                         'OBJECT   ' '' '' '对象类型',
                         'OBJTXT   ' '' '' '类型描述',
                         'AUTHOR   ' '' '' '创建人',
                         'DEVCLASS ' '' '' '包',
                         'TRACT    ' '' '' '本地活动TASK',
                         'TRLOC    ' '' '' '本地最新请求号',
                         'TRPRE    ' '' '' '本地次新请求号',
                         'TRREM    ' '' '' '远程请求号',
                         'TRSTA    ' '' '' '远程请求状态',
                         'RESULT   ' '' '' '对比结果'.
 
  CHECK gt_out IS NOT INITIAL.
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      it_fieldcat_lvc         = gt_fldct
      is_layout_lvc           = gs_slayt
      i_callback_program      = sy-repid
      i_callback_user_command = 'USER_COMMAND'
    TABLES
      t_outtab                = gt_out.
ENDFORM.                    " outdata
 
*---------------------------------------------------------------------*
* catset1
*---------------------------------------------------------------------*
FORM catset1 TABLES t_fldcat USING pv_field pv_reftab pv_reffld pv_text.
  DATA: ls_fldcat TYPE lvc_s_fcat.
 
  ls_fldcat-fieldname =  pv_field.
  ls_fldcat-scrtext_l =  pv_text.
  ls_fldcat-coltext   =  pv_text.
  ls_fldcat-ref_table =  pv_reftab.
  ls_fldcat-ref_field =  pv_reffld.
  ls_fldcat-col_opt   = 'A'.
 
  APPEND ls_fldcat TO t_fldcat.
  CLEAR ls_fldcat.
ENDFORM.                    "catset1
 
*&--------------------------------------------------------------------*
*& user_command
*&--------------------------------------------------------------------*
FORM user_command USING pv_ucomm TYPE sy-ucomm        ##called
                        pv_field TYPE slis_selfield.
  DATA: lv_repid TYPE sy-repid.
 
  READ TABLE gt_out INTO gs_out INDEX pv_field-tabindex.
  CASE pv_ucomm.
    WHEN '&IC1'.
      CASE pv_field-fieldname.
        WHEN 'OBJ_NAME' OR 'OBJECT' OR 'OBJTXT'. "对象跳转
          CALL FUNCTION 'TR_OBJECT_JUMP_TO_TOOL'
            EXPORTING
              iv_pgmid          = gs_out-pgmid
              iv_object         = gs_out-object
              iv_obj_name       = gs_out-obj_name
              iv_action         = 'SHOW'
            EXCEPTIONS
              jump_not_possible = 1
              OTHERS            = 2.
        WHEN 'AUTHOR'.
          CALL FUNCTION 'SUSR_SHOW_USER_DETAILS'
            EXPORTING
              bname = gs_out-author.
        WHEN 'TRACT'.
          CALL FUNCTION 'SVRS_DISPLAY_DIRECTORY'
            EXPORTING
              object_name = gs_out-obj_name(110)
              object_type = gs_out-object.
        WHEN 'TRLOC'.
          PERFORM display_request USING gs_out-trloc.
        WHEN 'TRPRE'.
          PERFORM display_request USING gs_out-trpre.
        WHEN 'TRREM'.
          PERFORM display_request USING gs_out-trrem.
        WHEN 'TRSTA'.
          CALL FUNCTION 'SVRS_DISPLAY_REMOTE_DIR'
            EXPORTING
              destination  = p_dest
              object_name  = gs_out-obj_name(110)
              object_type  = gs_out-object
            EXCEPTIONS
              no_directory = 01
              no_selection = 02.
        WHEN 'RESULT'.  "对比版本
          SELECT SINGLE * FROM versobj_alias
            WHERE objtype_appl = gs_out-object.
          IF sy-subrc = 0.
            lv_repid = 'RSVRS_TLOGO_COMPARE_VERSIONS'.
          ELSE.
            SELECT SINGLE rep_comp INTO lv_repid
              FROM versobj
              WHERE object  = gs_out-object AND
                    versno  = '99999'       AND
                    actflag = 'A'.
            IF sy-subrc NE 0.
              MESSAGE s000(oo) WITH '未找到此对象类型的对比程序'.
              RETURN.
            ENDIF.
          ENDIF.
          SUBMIT (lv_repid)
                 WITH objname = gs_out-obj_name
                 WITH objnam2 = gs_out-obj_name
                 WITH objtyp1 = gs_out-object
                 WITH objtyp2 = gs_out-object
                 WITH versno1 = '00000'
                 WITH versno2 = '00000'
                 WITH log_dest = p_dest
                 WITH rem_syst = p_syst
                 AND RETURN.
      ENDCASE.
  ENDCASE.
ENDFORM.                    "user_command
 
*&--------------------------------------------------------------------*
*& 获取请求号
*&--------------------------------------------------------------------*
FORM get_trkorr USING pv_dest pv_objtype pv_objname
                CHANGING cv_tract cv_trloc cv_trpre cv_trrem.
  DATA: lt_vrsn TYPE vrsn_tab.
  DATA: lt_vrsd TYPE STANDARD TABLE OF vrsd,
        ls_vrsd TYPE vrsd.
 
  CLEAR: cv_trloc,cv_trpre,cv_trrem.
  CALL FUNCTION 'SVRS_GET_VERSION_DIRECTORY_46'
    EXPORTING
      destination  = ''
      objname      = pv_objname(110)
      objtype      = pv_objtype
    TABLES
      lversno_list = lt_vrsn
      version_list = lt_vrsd
    EXCEPTIONS
      no_entry     = 1.
 
  READ TABLE lt_vrsd INTO ls_vrsd WITH KEY versno = '00000'.
  IF sy-subrc = 0.
    cv_tract = ls_vrsd-korrnum.
  ENDIF.
 
  LOOP AT lt_vrsd INTO ls_vrsd WHERE korrnum NE ''.
    IF cv_trloc IS INITIAL.
      cv_trloc = ls_vrsd-korrnum.
    ELSEIF ls_vrsd-korrnum NE cv_trloc.
      cv_trpre = ls_vrsd-korrnum.
      EXIT.
    ENDIF.
  ENDLOOP.
 
  CALL FUNCTION 'SVRS_GET_VERSION_DIRECTORY_46'
    EXPORTING
      destination  = pv_dest
      objname      = pv_objname(110)
      objtype      = pv_objtype
    TABLES
      lversno_list = lt_vrsn
      version_list = lt_vrsd
    EXCEPTIONS
      no_entry     = 1.
  LOOP AT lt_vrsd INTO ls_vrsd WHERE korrnum NE ''.
    cv_trrem = ls_vrsd-korrnum.
    EXIT.
  ENDLOOP.
ENDFORM.                    "get_trkorr
 
*&---------------------------------------------------------------------*
*& 显示请求
*&---------------------------------------------------------------------*
FORM display_request USING pv_request.
  CHECK pv_request IS NOT INITIAL.
  CALL FUNCTION 'TR_PRESENT_REQUEST'
    EXPORTING
      iv_trkorr = pv_request.
ENDFORM.

  

posted @   東東東東  阅读(113)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
点击右上角即可分享
微信分享提示