ABAP 自动传输副本请求


1.SE37在开发机和目标系统建立函数:Z_TR_IMPORT

函数入参:(参数名称可以到函数代码中复制)

函数出参:

源代码:

  1 FUNCTION z_tr_import.
  2 *"----------------------------------------------------------------------
  3 *"*"本地接口:
  4 *"  IMPORTING
  5 *"     VALUE(IV_SYSTEM) TYPE  TMSCSYS-SYSNAM
  6 *"     VALUE(IV_DOMAIN) TYPE  TMSCSYS-DOMNAM OPTIONAL
  7 *"     VALUE(IV_REQUEST) TYPE  TMSBUFFER-TRKORR
  8 *"     VALUE(IV_CLIENT) TYPE  STPA-CLIENT OPTIONAL
  9 *"  EXPORTING
 10 *"     VALUE(SUCESS) TYPE  CHAR1
 11 *"     VALUE(MESSAGE) TYPE  CHAR100
 12 *"----------------------------------------------------------------------
 13   DATA: et_requests TYPE tmsiqreqs,
 14         es_requests LIKE LINE OF et_requests.
 15 
 16   "刷新请求号
 17   CALL FUNCTION 'TMS_UIQ_IQD_READ_QUEUE'
 18     EXPORTING
 19       iv_system         = iv_system
 20       iv_domain         = iv_domain
 21       iv_collect        = 'X'
 22       iv_read_shadow    = 'X'
 23       iv_max_exp        = '010'
 24       iv_monitor        = 'X'
 25     IMPORTING
 26 *     EV_COLLECT_DATE   =
 27 *     EV_COLLECT_TIME   =
 28 *     EV_NR_OF_GRPS     =
 29 *     EV_IS_A_QA_SYS    =
 30 *     EV_NO_IMP_ALL     =
 31 *     EV_IMP_SINGLE     =
 32 *     EV_FTP_INCOMPLETE =
 33 *     ES_SYSTEM         =
 34 *     ES_BUFCNT         =
 35       et_requests       = et_requests
 36 *     ET_CLIENTS        =
 37 *     ET_PROJECTS       =
 38 *   TABLES
 39 *     TT_SYSTEM         =
 40     EXCEPTIONS
 41       read_queue_failed = 1
 42       OTHERS            = 2.
 43   IF sy-subrc <> 0.
 44 * Implement suitable error handling here
 45   ENDIF.
 46 
 47   "开始传输
 48   SORT et_requests BY trkorr.
 49 
 50   DATA: ls_request  TYPE stms_tr_request,
 51         it_requests TYPE stms_tr_requests.
 52 
 53   READ TABLE et_requests INTO es_requests WITH KEY trkorr = iv_request BINARY SEARCH.
 54   IF sy-subrc = 0.
 55 
 56     MOVE-CORRESPONDING es_requests TO ls_request.
 57     APPEND ls_request TO it_requests.
 58   ELSE.
 59     sucess = 'E'.
 60     message = '刷新后未获取到该请求'.
 61     RETURN.
 62   ENDIF.
 63 
 64   FREE et_requests.
 65 
 66   DATA: lv_nr_of_inactive TYPE i,
 67         lv_nr_of_suspend  TYPE i,
 68         lv_nr_of_finished TYPE i,
 69         lv_nr_of_missing  TYPE i.
 70 
 71 * check finished, denied or not approved requests or missing files
 72   CLEAR lv_nr_of_inactive.
 73   CLEAR lv_nr_of_suspend.
 74   CLEAR lv_nr_of_finished.
 75   CLEAR lv_nr_of_missing.
 76 
 77   DATA:
 78     gc_tp_actflg_inactive LIKE tpbuffer-actflg     VALUE 'I',
 79     gc_tp_actflg_suspend  LIKE tpbuffer-actflg     VALUE 'D',
 80     gc_tp_impflg_2        LIKE tpbuffer-impflg     VALUE '2'.
 81 
 82   LOOP AT it_requests INTO ls_request.
 83     IF ls_request-actflg = gc_tp_actflg_inactive.
 84       ADD 1 TO lv_nr_of_inactive.
 85     ELSEIF ls_request-actflg = gc_tp_actflg_suspend.
 86       ADD 1 TO lv_nr_of_suspend.
 87     ELSEIF ls_request-impflg = gc_tp_impflg_2.
 88       ADD 1 TO lv_nr_of_finished.
 89     ELSEIF ls_request-nodataflg = 'X' AND
 90            ls_request-actflg <> gc_tp_actflg_suspend.
 91       ADD 1 TO lv_nr_of_missing.
 92     ENDIF.
 93   ENDLOOP.
 94   IF lv_nr_of_inactive > 0.                           " not approved
 95     READ TABLE it_requests INTO ls_request
 96                WITH KEY actflg = gc_tp_actflg_inactive.
 97     MESSAGE s657(xt) WITH ls_request-trkorr lv_nr_of_inactive INTO message.
 98     sucess = 'E'.
 99     RETURN.
100   ENDIF.
101   IF lv_nr_of_suspend > 0.                            " denied (deleted)
102     READ TABLE it_requests INTO ls_request
103                WITH KEY actflg = gc_tp_actflg_suspend.
104     MESSAGE s649(xt) WITH ls_request-trkorr lv_nr_of_suspend INTO message.
105     sucess = 'E'.
106     RETURN.
107   ENDIF.
108   IF lv_nr_of_finished > 0.                           " already imported
109     READ TABLE it_requests INTO ls_request
110                WITH KEY impflg = gc_tp_impflg_2.
111     MESSAGE s658(xt) WITH ls_request-trkorr lv_nr_of_finished INTO message.
112     sucess = 'E'.
113     RETURN.
114   ENDIF.
115 
116 * start
117 
118   DATA ls_tp_trque            TYPE stms_tp_trque.
119 
120 *   transfer missing data- and cofiles
121   IF lv_nr_of_missing > 0.
122     CALL FUNCTION 'TMS_MGR_TRANSMIT_TR_QUEUE'
123       EXPORTING
124         iv_tar_sys     = iv_system
125         iv_tar_dom     = iv_domain
126         iv_read_only   = space
127         iv_use_list    = space
128         iv_without_ftp = space
129         iv_monitor     = 'X'
130         it_requests    = it_requests
131       CHANGING
132         cs_tp_trque    = ls_tp_trque
133       EXCEPTIONS
134         OTHERS         = 99.
135     IF sy-subrc <> 0.
136       MESSAGE ID     sy-msgid
137               TYPE   'I'
138               NUMBER sy-msgno
139               WITH   sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO message.
140       sucess = 'E'.
141       RETURN.
142     ENDIF.
143 *     analyse alert
144     IF ls_tp_trque-alert-id <> space.
145       message = '导入失败,请使用STMS重新导入'.
146       sucess = 'E'.
147       RETURN.
148     ENDIF.
149   ENDIF.
150 
151 
152   DATA: ev_tp_ret_code TYPE  stpa-retcode,
153         ev_tp_alog     TYPE  stpa-file,
154         ev_tp_slog     TYPE  stpa-file,
155         ev_tp_pid      TYPE  stpa-pid,
156         ev_tpstat_key  TYPE  tmstpkey,
157         es_exception   TYPE  stmscalert,
158         et_tp_imports  TYPE  stms_tp_imports.
159 
160   CALL FUNCTION 'TMS_MGR_IMPORT_TR_REQUEST'
161     EXPORTING
162       iv_system                  = iv_system
163       iv_domain                  = iv_domain
164       iv_request                 = iv_request
165       iv_client                  = iv_client
166 *     IV_CTC_ACTIVE              =
167       iv_overtake                = 'X'
168       iv_import_again            = 'X'
169       iv_ignore_originality      = 'X'
170       iv_ignore_repairs          = 'X'
171       iv_subset                  = 'X'
172       iv_offline                 = 'X'
173       it_requests                = it_requests
174     IMPORTING
175       ev_tp_ret_code             = ev_tp_ret_code
176       ev_tp_alog                 = ev_tp_alog
177       ev_tp_slog                 = ev_tp_slog
178       ev_tp_pid                  = ev_tp_pid
179       ev_tpstat_key              = ev_tpstat_key
180       es_exception               = es_exception
181       et_tp_imports              = et_tp_imports
182     EXCEPTIONS
183       read_config_failed         = 1
184       table_of_requests_is_empty = 2
185       OTHERS                     = 3.
186   IF sy-subrc <> 0.
187     MESSAGE ID     sy-msgid
188         TYPE   'I'
189         NUMBER sy-msgno
190         WITH   sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO message.
191     sucess = 'E'.
192     RETURN.
193   ELSE.
194     sucess = 'S'.
195     message = '已开始传输'.
196   ENDIF.
197 
198 ENDFUNCTION.

2.在开发机使用事务码:SALE/SM59 配置好到目标机的远程连接,选择ABAP连接

3.打开事务码SE38,新建任意一个程序,拷贝如下代码,保存激活后点击执行

  1 FUNCTION z_tr_import.
  2 *"----------------------------------------------------------------------
  3 *"*"本地接口:
  4 *"  IMPORTING
  5 *"     VALUE(IV_SYSTEM) TYPE  TMSCSYS-SYSNAM
  6 *"     VALUE(IV_DOMAIN) TYPE  TMSCSYS-DOMNAM OPTIONAL
  7 *"     VALUE(IV_REQUEST) TYPE  TMSBUFFER-TRKORR
  8 *"     VALUE(IV_CLIENT) TYPE  STPA-CLIENT OPTIONAL
  9 *"  EXPORTING
 10 *"     VALUE(SUCESS) TYPE  CHAR1
 11 *"     VALUE(MESSAGE) TYPE  CHAR100
 12 *"----------------------------------------------------------------------
 13   DATA: et_requests TYPE tmsiqreqs,
 14         es_requests LIKE LINE OF et_requests.
 15 
 16   "刷新请求号
 17   CALL FUNCTION 'TMS_UIQ_IQD_READ_QUEUE'
 18     EXPORTING
 19       iv_system         = iv_system
 20       iv_domain         = iv_domain
 21       iv_collect        = 'X'
 22       iv_read_shadow    = 'X'
 23       iv_max_exp        = '010'
 24       iv_monitor        = 'X'
 25     IMPORTING
 26 *     EV_COLLECT_DATE   =
 27 *     EV_COLLECT_TIME   =
 28 *     EV_NR_OF_GRPS     =
 29 *     EV_IS_A_QA_SYS    =
 30 *     EV_NO_IMP_ALL     =
 31 *     EV_IMP_SINGLE     =
 32 *     EV_FTP_INCOMPLETE =
 33 *     ES_SYSTEM         =
 34 *     ES_BUFCNT         =
 35       et_requests       = et_requests
 36 *     ET_CLIENTS        =
 37 *     ET_PROJECTS       =
 38 *   TABLES
 39 *     TT_SYSTEM         =
 40     EXCEPTIONS
 41       read_queue_failed = 1
 42       OTHERS            = 2.
 43   IF sy-subrc <> 0.
 44 * Implement suitable error handling here
 45   ENDIF.
 46 
 47   "开始传输
 48   SORT et_requests BY trkorr.
 49 
 50   DATA: ls_request  TYPE stms_tr_request,
 51         it_requests TYPE stms_tr_requests.
 52 
 53   READ TABLE et_requests INTO es_requests WITH KEY trkorr = iv_request BINARY SEARCH.
 54   IF sy-subrc = 0.
 55 
 56     MOVE-CORRESPONDING es_requests TO ls_request.
 57     APPEND ls_request TO it_requests.
 58   ELSE.
 59     sucess = 'E'.
 60     message = '刷新后未获取到该请求'.
 61     RETURN.
 62   ENDIF.
 63 
 64   FREE et_requests.
 65 
 66   DATA: lv_nr_of_inactive TYPE i,
 67         lv_nr_of_suspend  TYPE i,
 68         lv_nr_of_finished TYPE i,
 69         lv_nr_of_missing  TYPE i.
 70 
 71 * check finished, denied or not approved requests or missing files
 72   CLEAR lv_nr_of_inactive.
 73   CLEAR lv_nr_of_suspend.
 74   CLEAR lv_nr_of_finished.
 75   CLEAR lv_nr_of_missing.
 76 
 77   DATA:
 78     gc_tp_actflg_inactive LIKE tpbuffer-actflg     VALUE 'I',
 79     gc_tp_actflg_suspend  LIKE tpbuffer-actflg     VALUE 'D',
 80     gc_tp_impflg_2        LIKE tpbuffer-impflg     VALUE '2'.
 81 
 82   LOOP AT it_requests INTO ls_request.
 83     IF ls_request-actflg = gc_tp_actflg_inactive.
 84       ADD 1 TO lv_nr_of_inactive.
 85     ELSEIF ls_request-actflg = gc_tp_actflg_suspend.
 86       ADD 1 TO lv_nr_of_suspend.
 87     ELSEIF ls_request-impflg = gc_tp_impflg_2.
 88       ADD 1 TO lv_nr_of_finished.
 89     ELSEIF ls_request-nodataflg = 'X' AND
 90            ls_request-actflg <> gc_tp_actflg_suspend.
 91       ADD 1 TO lv_nr_of_missing.
 92     ENDIF.
 93   ENDLOOP.
 94   IF lv_nr_of_inactive > 0.                           " not approved
 95     READ TABLE it_requests INTO ls_request
 96                WITH KEY actflg = gc_tp_actflg_inactive.
 97     MESSAGE s657(xt) WITH ls_request-trkorr lv_nr_of_inactive INTO message.
 98     sucess = 'E'.
 99     RETURN.
100   ENDIF.
101   IF lv_nr_of_suspend > 0.                            " denied (deleted)
102     READ TABLE it_requests INTO ls_request
103                WITH KEY actflg = gc_tp_actflg_suspend.
104     MESSAGE s649(xt) WITH ls_request-trkorr lv_nr_of_suspend INTO message.
105     sucess = 'E'.
106     RETURN.
107   ENDIF.
108   IF lv_nr_of_finished > 0.                           " already imported
109     READ TABLE it_requests INTO ls_request
110                WITH KEY impflg = gc_tp_impflg_2.
111     MESSAGE s658(xt) WITH ls_request-trkorr lv_nr_of_finished INTO message.
112     sucess = 'E'.
113     RETURN.
114   ENDIF.
115 
116 * start
117 
118   DATA ls_tp_trque            TYPE stms_tp_trque.
119 
120 *   transfer missing data- and cofiles
121   IF lv_nr_of_missing > 0.
122     CALL FUNCTION 'TMS_MGR_TRANSMIT_TR_QUEUE'
123       EXPORTING
124         iv_tar_sys     = iv_system
125         iv_tar_dom     = iv_domain
126         iv_read_only   = space
127         iv_use_list    = space
128         iv_without_ftp = space
129         iv_monitor     = 'X'
130         it_requests    = it_requests
131       CHANGING
132         cs_tp_trque    = ls_tp_trque
133       EXCEPTIONS
134         OTHERS         = 99.
135     IF sy-subrc <> 0.
136       MESSAGE ID     sy-msgid
137               TYPE   'I'
138               NUMBER sy-msgno
139               WITH   sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO message.
140       sucess = 'E'.
141       RETURN.
142     ENDIF.
143 *     analyse alert
144     IF ls_tp_trque-alert-id <> space.
145       message = '导入失败,请使用STMS重新导入'.
146       sucess = 'E'.
147       RETURN.
148     ENDIF.
149   ENDIF.
150 
151 
152   DATA: ev_tp_ret_code TYPE  stpa-retcode,
153         ev_tp_alog     TYPE  stpa-file,
154         ev_tp_slog     TYPE  stpa-file,
155         ev_tp_pid      TYPE  stpa-pid,
156         ev_tpstat_key  TYPE  tmstpkey,
157         es_exception   TYPE  stmscalert,
158         et_tp_imports  TYPE  stms_tp_imports.
159 
160   CALL FUNCTION 'TMS_MGR_IMPORT_TR_REQUEST'
161     EXPORTING
162       iv_system                  = iv_system
163       iv_domain                  = iv_domain
164       iv_request                 = iv_request
165       iv_client                  = iv_client
166 *     IV_CTC_ACTIVE              =
167       iv_overtake                = 'X'
168       iv_import_again            = 'X'
169       iv_ignore_originality      = 'X'
170       iv_ignore_repairs          = 'X'
171       iv_subset                  = 'X'
172       iv_offline                 = 'X'
173       it_requests                = it_requests
174     IMPORTING
175       ev_tp_ret_code             = ev_tp_ret_code
176       ev_tp_alog                 = ev_tp_alog
177       ev_tp_slog                 = ev_tp_slog
178       ev_tp_pid                  = ev_tp_pid
179       ev_tpstat_key              = ev_tpstat_key
180       es_exception               = es_exception
181       et_tp_imports              = et_tp_imports
182     EXCEPTIONS
183       read_config_failed         = 1
184       table_of_requests_is_empty = 2
185       OTHERS                     = 3.
186   IF sy-subrc <> 0.
187     MESSAGE ID     sy-msgid
188         TYPE   'I'
189         NUMBER sy-msgno
190         WITH   sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO message.
191     sucess = 'E'.
192     RETURN.
193   ELSE.
194     sucess = 'S'.
195     message = '已开始传输'.
196   ENDIF.
197 
198 ENDFUNCTION.

4.大请求号:输入你开发机未释放的请求,

  目标系统:需要传输到目标系统的SYSID

  传输域:BASIS在STMS配置的传输路径,或者SE09建立请求时选择的目标系统:可参考下图

  RFC目标:选择你SM59配置的远程连接名称(可在代码修改默认值),

 执行完毕后,可以在目标系统检查请求是否已经传递过去,开发系统会在请求下新建副本请求