*Трансформации и дтп классом коллекции *&---------------------------------------------------------------------* *& Report ZTRANSFORM *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------*
REPORT ZTRANSFORM. PARAMETERS object TYPE c LENGTH 40. DATA: r_transf TYPE REF TO CL_RSTRAN_TRFN_COLLECTION, r_dtp TYPE REF TO CL_RSBK_DTP_COLLECTION, * CL_RSTRAN_TRFN_COLLECTION r_exept TYPE REF TO CX_RSTRAN_EXCEPTION, r_cexept TYPE REF TO CX_RS_ACCESS_ERROR,
l_subrc LIKE SY-SUBRC, c_stat(3), t_err(80), str TYPE string, it_transf TYPE STANDARD TABLE OF SOBJ_NAME, it_dtp TYPE STANDARD TABLE OF SOBJ_NAME, b_erdtp TYPE RS_BOOL, e_dtp TYPE RSO_TH_TLOGO, t_dtp_c TYPE RSD_T_C30. FIELD-SYMBOLS: <fs_e_dtp> TYPE RSO_S_TLOGO, <fs_transf> TYPE SOBJ_NAME, <fs_dtp> TYPE SOBJ_NAME.
START-OF-SELECTION. * break tarasov_s. b_erdtp = 0. REFRESH it_transf. SELECT DISTINCT TRANID FROM RSTRAN INTO TABLE it_transf WHERE OBJSTAT EQ 'INA' AND ( TARGETNAME EQ object OR SOURCENAME EQ object ).
IF sy-subrc EQ 0. b_erdtp = 1. ENDIF.
REFRESH it_dtp. SELECT DISTINCT a~DTP FROM RSBKDTP AS a JOIN RSBKDTPSTAT AS b ON b~dtp EQ a~dtp INTO TABLE it_dtp WHERE b~OBJSTAT EQ 'INA' AND ( a~TGT EQ object OR a~SRC EQ object ).
IF sy-subrc EQ 0. b_erdtp = 1. ENDIF.
IF b_erdtp EQ 0. MESSAGE 'Нет зависимых трансформаций и DTP' TYPE 'S'. ENDIF.
END-OF-SELECTION.
TRY. REFRESH: e_dtp, t_dtp_c.
WRITE AT : /(1) ' ', /(34) 'ОБРАБОТКА ТРАНСФОРМАЦИЙ' color 5.
* break tarasov_s. CREATE OBJECT r_transf.
LOOP AT it_transf ASSIGNING <fs_transf>.
CALL METHOD r_transf->ADD_TLOGO EXPORTING I_OBJNM = <fs_transf> IMPORTING E_NOT_MODIFYABLE = b_erdtp.
IF b_erdtp = 'X'. WRITE AT : /(32) <fs_transf>, (24) 'проблемы при добавлении'. ELSE. WRITE AT : /(32) <fs_transf>, (10) 'добавлено'. ENDIF.
ENDLOOP.
WRITE AT : /(1) ' ', /(34) 'Сохранение трансформаций' color 5.
CALL METHOD r_transf->SAVE IMPORTING E_TH_TLOGO_ERROR = e_dtp.
LOOP AT e_dtp ASSIGNING <fs_e_dtp>. WRITE AT : /(42) <fs_e_dtp>-OBJNM, (25) 'проблемы при сохранении'. ENDLOOP.
WRITE AT : /(1) ' ', /(34) 'Активация трансформаций' color 5.
CALL METHOD r_transf->ACTIVATE IMPORTING E_TH_TLOGO_ERROR = e_dtp E_T_TABLNM_CNV = t_dtp_c.
LOOP AT e_dtp ASSIGNING <fs_e_dtp>. WRITE AT : /(42) <fs_e_dtp>-OBJNM, (25) 'проблемы при активации' . ENDLOOP.
CATCH CX_RS_EXISTING CX_RS_NOT_FOUND CX_RS_CANCELLED INTO r_cexept. str = r_cexept->IF_MESSAGE~GET_LONGTEXT( ). t_err = r_cexept->if_message~get_text( ).
WRITE AT : (80) t_err.
* break tarasov_s. ENDTRY.
* WRITE AT : /(34) 'ОБРАБОТКА ТРАНСФОРМАЦИЙ'. * * LOOP AT it_transf ASSIGNING <fs_transf>. * c_stat = 'Ok'. * TRY. * * CREATE OBJECT r_transf * EXPORTING * I_TRANID = <fs_transf>. * IF r_transf IS BOUND. * CALL METHOD r_transf->EXECUTE * EXPORTING * I_WRKMODE = 'ACTI' * IMPORTING * E_SUBRC = l_subrc. * Free r_transf. * ELSE. * c_stat = 'Err'. * ENDIF. * CATCH CX_RSTRAN_CANCELLED CX_RSTRAN_ERROR_WITH_MESSAGE CX_RSTRAN_DISPLAY_ONLY INTO r_exept. * str = r_exept->IF_MESSAGE~GET_LONGTEXT( ). * t_err = r_exept->if_message~get_text( ). * * c_stat = 'Err'. ** break tarasov_s. * ENDTRY. * * * WRITE AT : /(34) <fs_transf>, * (4) c_stat, * (80) t_err. * * ENDLOOP.
TRY. REFRESH: e_dtp, t_dtp_c.
WRITE AT : /(1) ' ', /(34) 'ОБРАБОТКА DTP' color 5.
* break tarasov_s. CREATE OBJECT r_dtp.
LOOP AT it_dtp ASSIGNING <fs_dtp>.
CALL METHOD r_dtp->ADD_TLOGO EXPORTING I_OBJNM = <fs_dtp> IMPORTING E_NOT_MODIFYABLE = b_erdtp.
IF b_erdtp = 'X'. WRITE AT : /(32) <fs_dtp>, (24) 'проблемы при добавлении'. ELSE. WRITE AT : /(32) <fs_dtp>, (10) 'добавлено'. ENDIF.
ENDLOOP.
WRITE AT : /(1) ' ', /(34) 'Сохранение DTP' color 5.
CALL METHOD r_dtp->SAVE IMPORTING E_TH_TLOGO_ERROR = e_dtp.
LOOP AT e_dtp ASSIGNING <fs_e_dtp>. WRITE AT : /(42) <fs_e_dtp>-OBJNM, (25) 'проблемы при сохранении'. ENDLOOP.
WRITE AT : /(1) ' .', /(34) 'Активация DTP' color 5.
CALL METHOD r_dtp->ACTIVATE IMPORTING E_TH_TLOGO_ERROR = e_dtp E_T_TABLNM_CNV = t_dtp_c.
LOOP AT e_dtp ASSIGNING <fs_e_dtp>. WRITE AT : /(42) <fs_e_dtp>-OBJNM, (25) 'проблемы при активации' . ENDLOOP.
CATCH CX_RS_EXISTING CX_RS_NOT_FOUND CX_RS_CANCELLED INTO r_cexept. str = r_cexept->IF_MESSAGE~GET_LONGTEXT( ). t_err = r_cexept->if_message~get_text( ).
WRITE AT : (80) t_err.
* break tarasov_s. ENDTRY.
|
|