of 68
SAP Note
Header Data
Symptom
This note contains Programm RSDG_TRFN_ACTIVATE for checks and regenerate transformation objects in case of technical incompleteness or inconsistency of metadata without creating a transport.
Other Terms
Reason and Prerequisites
Solution
The programm has the following parameters: Transformation ID (TRAN_ID) Selection via ID of transformation, optional. Object status (OBJSTAT) default = 'INA', should not be changed Type of sourceoptional Source nameoptional Type of targetoptional Target nameoptional In case of no input for field Transpormation ID, all transformation objects will be regenerated for specified Tape of Source/target or Target/source name. If the programm will be run without any selections, all objects of transformation type (table RSTRAN) will checked and re-generated. DTP's containing transformation of source - / target type 'InfoSource' also will be re-activated. In case you need to reactivate an already active transformation you need to put the parameter Object status (OBJSTAT) as 'ACT' for the that particular Transformation (TRAN_ID).
l SAP NetWeaver BI 7.00 Import Support Package 24 for SAP NetWeaver BW 7.00(SAPKW70024) into your BW system. The Support Package will be available as soon as SAP note 1407598 with the short text "SAPBINews NW BI 7.0 ABAP SP24", which describes this Support Package in more detail, is released for customers.
l SAP NetWeaver BW 7.01 (SAP NW BW7.0 EnhP 1) Import Support Package 07 for SAP NetWeaver BW 7.01 (SAPKW70107) into your BW system. The Support Package will be available as soon as SAP Note 1369294 with the short text "SAPBINews NW7.01 BI ABAP SP07", which describes this Support Package in more detail, is released for customers.
l SAP NetWeaver BW 7.02 (SAP NW BW7.0 EnhP 2) Import Support Package 03 for SAP NetWeaver BW 7.02 (SAPKW70203) into your BW system. The Support Package will be available as soon as SAP note 1407600 with the short text "SAPBINews NW7.02 BI ABAP SP03", which describes this Support Package in more detail, is released for customers.
l SAP NetWeaver BW 7.10 Import Support Package 10 for SAP NetWeaver BW 7.10 BI (SAPKW71010) into your BW system. The Support Package will be available as soon as SAP Note 1419541 with the short text "SAPBINews NW 7.10 BI SP10", which describes this Support Package in more detail, is released for customers.
l SAP NetWeaver BW 7.11 Import Support Package 05 for SAP NetWeaver BW 7.11 (SAPKW71105) into your BW system. The Support Package will be available as soon as SAP Note 1392372 with the short text "SAPBINews NW7.11 BI SP05", which describes this Support Package in more detail, is released for customers.
l SAP NetWeaver BW 7.20 Import Support Package 03 for SAP NetWeaver BW 7.20 (SAPKW72003) into your BW system. The Support Package will be available as soon as SAP note 1407599 with the short text "SAPBINews
1408161 - Program for transformation activation
Version 9 Validity: 16.05.2012 - active Language English (Master)
Released On 16.05.2012 23:35:36 Release Status Released for Customer Component BW-WHM-DST-TRF Transformation Priority Correction with low priority Category Program error
NW7.20 BI SP03", which describes this Support Package in more detail, is released for customers.
In urgent cases you can use the attached correction instructions. Beforehand, definitely check SAP Note 875986 for transaction SNOTE. This note might already be available before the Support Package is released. In this case, however, the short text still contains the terms "preliminary version".
Assigned Correction Instructions
*$*$----------------------------------------------------------------$*$* *$ Correction Inst. 0120031469 0001096704 $* *$--------------------------------------------------------------------$* *$ Valid for :$* *$ Software Component SAP_BW Business Information Warehouse $* *$Release 711SAPKW71104 - SAPKW71104$* *$*$----------------------------------------------------------------$*$* *&--------------------------------------------------------------------* *& ObjectREPS RSDG_TRFN_ACTIVATE *& Object Header PROG RSDG_TRFN_ACTIVATE *&--------------------------------------------------------------------* *>>>> START OF INSERTION > END OF INSERTION
IF ls_tran-glbcode2 IS NOT INITIAL. CLEAR:l_coding_found, l_t_or_u, l_t_or_u_text. *---JM: Z_RSTRAN_FIX_BICONTENT doesnt exist for customers but only in BR 9 *PERFORMget_migrate_status IN PROGRAM z_rstran_fix_bicontent PERFORMget_migrate_status IN PROGRAM RSTRAN_MIGRATION_REPAIR *---End JM USINGls_tran-glbcode2 ls_tran-objvers CHANGINGl_migrate_status. CHECK l_migrate_status IS INITIAL. PERFORMcheck_for_code USINGls_tran-glbcode2 ls_tran-objvers CHANGINGl_coding_found. IF l_coding_found IS NOT INITIAL. IF ls_tran-startroutine IS NOT INITIAL. PERFORM check_t_or_u USING ls_tran-startroutine ls_tran-objvers CHANGING l_t_or_u. ENDIF. IF l_t_or_u IS INITIAL. *if we didn't find the comment to say whether it is a Transfer or Update Transformation, we look in the rules *--single routines LOOP AT lt_steprout INTOls_steprout WHERE tranid= ls_tran-tranid AND objvers = ls_tran-objvers AND codeid space. PERFORM check_t_or_u USING ls_steprout-codeid ls_tran-objvers CHANGING l_t_or_u. IF l_t_or_u IS NOT INITIAL. *-- type of origin is determined EXIT. ENDIF. ENDLOOP. ENDIF. * CLEARl_inconsistent. CASE l_t_or_u . WHEN 'T'. IF transfer IS INITIAL. CONTINUE. ENDIF. CONCATENATE 'Mig. from T' 'TRANID:' ls_tran-tranid 'OBJVERS =' ls_tran-objvers INTO ls_text-string SEPARATED BY space. APPEND ls_text TO lt_text_all. l_t_or_u_text = '*TRANSFER:'. WHEN 'U'. IF upd IS INITIAL. CONTINUE. ENDIF. CONCATENATE 'Mig. from U' 'TRANID:' ls_tran-tranid 'OBJVERS =' ls_tran-objvers INTO ls_text-string SEPARATED BY space. APPEND ls_text TO lt_text_all. l_t_or_u_text = '*UPDATE:'. WHEN OTHERS. IF un_def IS INITIAL. CONTINUE. ENDIF. l_t_or_u_text = '*:'. CONCATENATE '??? check' 'TRANID:'ls_tran-tranid 'OBJVERS =' ls_tran-objvers INTO ls_text-string SEPARATED BY space. APPEND ls_text TO lt_text_all. ENDCASE. lv_counter_trans = lv_counter_trans + 1. CONCATENATE ls_tran-sourcetype ls_tran-sourcename '->' ls_tran-targettype ls_tran-targetname INTO ls_text-string SEPARATED BY space. APPEND ls_text TO lt_text_all. CONCATENATE 'Global2 with ID =' ls_tran-glbcode2 'has coding'
INTO ls_text-string SEPARATED BY space. APPEND ls_text TO lt_text_all. *l_inconsistent = rs_c_true. *-- expert routine. IF ls_tran-expert IS NOT INITIAL. *l_routine_exist = rs_c_true. PERFORM check_for_code USINGls_tran-expert ls_tran-objvers CHANGING l_coding_found. IF l_coding_found IS NOT INITIAL. CONCATENATE 'Expert routine with ID =' ls_tran-expert 'has c oding' INTO ls_text-string SEPARATED BY space. APPEND ls_text TO lt_text_all. *l_inconsistent = rs_c_true. ENDIF. ENDIF. *-- start routine IF ls_tran-startroutine IS NOT INITIAL. *l_routine_exist = rs_c_true. PERFORMcheck_for_code USINGls_tran-startroutine ls_tran-objvers CHANGINGl_coding_found. IF l_coding_found IS NOT INITIAL. CONCATENATE 'Start routine with ID =' ls_tran-startroutine ' has coding' INTO ls_text-string SEPARATED BY space. APPEND ls_text TO lt_text_all. *l_inconsistent = rs_c_true. ENDIF. ENDIF. *-- end routine IF ls_tran-endroutine IS NOT INITIAL. *l_routine_exist = rs_c_true. PERFORMcheck_for_code USING ls_tran-endroutine ls_tran-objvers CHANGINGl_coding_found. IF l_coding_found IS NOT INITIAL. CONCATENATE 'End routine with ID =' ls_tran-endroutine 'has coding' INTO ls_text-string SEPARATED BY space. APPEND ls_text TO lt_text_all. *l_inconsistent = rs_c_true. ENDIF. ENDIF. *-- process routine steps CLEAR: lv_counter_routines, lv_counter_groupid. LOOP AT lt_steprout INTO ls_steprout WHERE tranid= ls_tran-tranid AND objvers = ls_tran-objvers. ADD 1 TO lv_counter_routines. ENDLOOP. IF sy-subrc = 0. *-- determine number of groups, LOOP AT lt_tranrule INTO ls_tranrule WHERE tranid = ls_tran-tranid AND objvers = ls_tran-objvers. APPEND ls_tranrule TO lt_tranrule_grpid. ENDLOOP. SORT lt_tranrule_grpid BY groupid. LOOP AT lt_tranrule_grpid INTOls_tranrule WHERE tranid= ls_steprout-tranid AND objvers = ls_steprout-objvers. IF lv_groupid ls_tranrule-groupid. ADD 1 TO lv_counter_groupid. lv_groupid = ls_tranrule-groupid. ENDIF. ENDLOOP. ENDIF. IF lv_counter_routines IS NOT INITIAL. l_string_1 = lv_counter_routines. l_string_2 = lv_counter_groupid. CONCATENATE 'Number of routines =' l_string_1 'Number of diffe
p_does_not_exist = rs_c_true. l_stop = rs_c_true. SELECT SINGLE * FROM rsaform INTO ls_form WHERE formula_id = p_formulaid AND objvers= p_objvers. IF sy-subrc = 0. *-- header without mapping p_inconsistent = rs_c_true. l_stop = rs_c_true. ENDIF. ELSE. SELECT SINGLE * FROM rsaform INTO ls_form WHERE formula_id = ls_formmap-formin AND objvers = ls_formmap-objvers. IF sy-subrc 0. p_inconsistent = rs_c_true. l_stop = rs_c_true. ENDIF. ENDIF. *-- check next level on BI formula object CHECK l_stop = space. SELECT SINGLE * FROM rsfobuev000 INTO ls_rsev000 WHERE formid= ls_formmap-formin AND objvers = ls_formmap-objvers. IF sy-subrc 0. l_missing_sfobu = rs_c_true. l_stop = rs_c_true. ENDIF. SELECT * FROM rsfobuev001 INTO TABLE lt_rsev001 WHERE formid= ls_formmap-formin AND objvers = ls_formmap-objvers. IF sy-subrc 0. p_inconsistent = rs_c_true. l_stop = rs_c_true. ENDIF. *-- only for a-version technically a basic formula is necessary CHECK l_stop IS INITIAL. *-- convert to char32 string * Convert 25-digit unique-ID to 32-digit unique-ID CALL FUNCTION 'RSS_UNIQUE_CONVERT_TO_HEX' EXPORTING i_uni_idc25 = ls_formmap-formin IMPORTING e_uni_idc = l_sfbeid EXCEPTIONS invalid_unique_id = 1. SELECT SINGLE * FROM sfobuev000 INTO ls_sev000 WHERE id= l_sfbeid. IF sy-subrc 0. l_missing_sfobu = rs_c_true. l_stop = rs_c_true. ENDIF. SELECT * FROM sfobuev001 INTO TABLE lt_sev001 WHERE id = l_sfbeid. IF sy-subrc 0. l_missing_sfobu = rs_c_true. l_stop = rs_c_true. ENDIF. IF p_objvers = rs_c_objvers-modified. IF p_inconsistent= rs_c_false AND l_missing_sfobu = rs_c_true. *-- try to recreate missint internal formula from rsfobuev* CALL METHOD cl_rsar_formulas=>copy_fobu_to_extern EXPORTING i_formex = p_formulaid i_objvers= p_objvers *i_write_log= *IMPORTING *e_t_msg= EXCEPTIONS rsfo_invalid_unique_id = 1 OTHERS = 2 . IF sy-subrc = 0. CLEAR p_inconsistent. ELSE. p_inconsistent = rs_c_true. ENDIF. ENDIF. ENDIF.
i_object= rstr_c_appl_log_trfn i_subobject = rstr_c_appl_log_trfn_content i_extnumber = gv_extnumber. ENDIF. *--------------------------------------------------------------------* IF objvers = rs_c_objvers-delivery. *-- source system dependent ones SELECT * FROM rstran APPENDING TABLE gt_tran WHERE objvers = rs_c_objvers-delivery AND sourcetype = 'RSDS' AND is_shadow= rs_c_true AND tranidIN tranid AND objstat IN objstat. *-- rest SELECT * FROM rstran APPENDING TABLE gt_tran WHERE objvers = rs_c_objvers-delivery AND sourcetype 'RSDS' AND tranidIN tranid AND objstat IN objstat. ELSE. *-- process all transformations due to availablibilty of global routines SELECT * FROM rstran INTO TABLE gt_tran WHERE objvers = objvers AND tranidIN tranid AND objstat IN objstat. ENDIF. *-- only that ones with global part 2 could be created by migration DELETE gt_tran WHERE glbcode2 IS INITIAL. SELECT * FROM rstranrule INTO TABLE gt_tranrule FOR ALL ENTRIES IN gt_tran WHERE objvers = gt_tran-objvers AND tranid= gt_tran-tranid. *-- process all transformation including formulas or routines SELECT * FROM rstransteprout INTO TABLE gt_steprout FOR ALL ENTRIES IN gt_tran WHERE objvers = gt_tran-objvers AND tranid= gt_tran-tranid AND kind 'FORMULA'. CLEAR: gt_text[]. LOOP AT gt_tran INTO gs_tran. CLEAR: gv_migrated, g_context_not_found. *--------------------------------------------------------------------* *-- Check if it was already migrated *-- second global part contains additional comments to check this IF gs_tran-glbcode2 IS NOT INITIAL. PERFORMget_migrate_status USINGgs_tran-glbcode2 gs_tran-objvers CHANGINGgv_migrated. ENDIF. *--------------------------------------------------------------------* *--------------------------------------------------------------------* IF gv_migrated IS INITIAL. CLEAR gs_text. gs_text-tranid = gs_tran-tranid. CONCATENATE 'TRANID:' gs_text-tranid INTO gs_text-text SEPARATED BY space. gs_text-status= gc_migrated. gs_text-level = 2. APPEND gs_text TO gt_text. *--------------------------------------------------------------------* *-- Start Methode IF gs_tran-startroutine IS NOT INITIAL. CLEAR: gv_t_or_u, gt_aabap, gt_arout, gt_abapsource, gv_coding_f ound. PERFORMget_code USINGgs_tran-startroutine gs_tran-objvers '1'"gv_check_t_or_u 'PERFORM' CHANGINGgv_coding_found gt_aabap gt_arout gv_t_or_u gv_migrated. IF gv_coding_found IS NOT INITIAL.
IF gv_t_or_u = 'U'. PERFORMfix_code USINGgt_aabap 'UPDATE_START_ROUTINE' CHANGING gt_abapsource g_context_not_found. IF g_context_not_found IS INITIAL. PERFORMput_code USINGgs_tran-startroutine gs_tran-objvers gt_abapsource gt_arout '' simulate . ENDIF. *--------------------------------------------------------------------* CLEAR gs_text. gs_text-tranid = gs_tran-tranid. CONCATENATE 'Update Start Routine' gs_tran-startroutine 'mig rated' INTO gs_text-text SEPARATED BY space. gs_text-status= gc_migrated. gs_text-level = 4. APPEND gs_text TO gt_text. *--------------------------------------------------------------------* ELSEIF gv_t_or_u = 'T'. *nothing to do:-) ENDIF. ELSE. IF gv_t_or_u IS NOT INITIAL. g_context_not_found = rs_c_true. ENDIF. ENDIF. ENDIF. *--------------------------------------------------------------------* *--------------------------------------------------------------------* *--single routines LOOP AT gt_steprout INTOgs_steprout WHERE tranid = gs_tran-tranid AND codeid space. CLEAR: gv_t_or_u, gt_aabap, gt_arout, gt_abapsource. PERFORMget_code USINGgs_steprout-codeid gs_tran-objvers '1'"gv_check_t_or_u 'PERFORM' CHANGINGgv_coding_found gt_aabap gt_arout gv_t_or_u gv_migrated. IF gv_coding_found IS NOT INITIAL. IF gv_t_or_u = 'U'. PERFORMfix_code USINGgt_aabap 'UPDATE_RULE' CHANGING gt_abapsource g_context_not_found. IF g_context_not_found IS INITIAL. PERFORMput_code USINGgs_steprout-codeid gs_tran-objvers gt_abapsource gt_arout '' simulate . *--------------------------------------------------------------------* CLEAR gs_text. gs_text-tranid = gs_tran-tranid. CONCATENATE 'Update Rule' gs_steprout-codeid 'migrated' INTO gs_text-text SEPARATED BY space. gs_text-status= gc_migrated. gs_text-level = 4. APPEND gs_text TO gt_text. ENDIF. *--------------------------------------------------------------------* ELSEIF gv_t_or_u = 'T'. PERFORMfix_code USINGgt_aabap 'TRANSFER_RULE'
CHANGING gt_abapsource g_context_not_found. IF g_context_not_found IS INITIAL. PERFORMput_code USINGgs_steprout-codeid gs_tran-objvers gt_abapsource gt_arout '' simulate . *--------------------------------------------------------------------* CLEAR gs_text. gs_text-tranid = gs_tran-tranid. CONCATENATE 'Transfer Rule' gs_steprout-codeid 'migrated' INTO gs_text-text SEPARATED BY space. gs_text-status= gc_migrated. gs_text-level = 4. APPEND gs_text TO gt_text. *--------------------------------------------------------------------* ENDIF. ENDIF. ENDIF. ENDLOOP. *--------------------------------------------------------------------* *--------------------------------------------------------------------* *-- second global part - new mirgrated coding, with Start and all other Update or Transfer routines IF gs_tran-glbcode2 IS NOT INITIAL. *CLEAR gv_t_or_u. --> this is derived from the routines above CLEAR: gt_aabap, gt_arout, gt_abapsource. PERFORMget_code USINGgs_tran-glbcode2 gs_tran-objvers ''"gv_check_t_or_u --> this is derive d from the routines above 'FORM' CHANGINGgv_coding_found gt_aabap gt_arout gv_t_or_u gv_migrated. IF gv_coding_found IS NOT INITIAL. IF gv_t_or_u = 'U'. PERFORMfix_code USINGgt_aabap 'UPDATE_ROUTINE' CHANGING gt_abapsource g_context_not_found. IF g_context_not_found IS INITIAL. PERFORMput_code USINGgs_tran-glbcode2 gs_tran-objvers gt_abapsource gt_arout '1' simulate . *--------------------------------------------------------------------* CLEAR gs_text. gs_text-tranid = gs_tran-tranid. CONCATENATE 'Update Global Part 2' gs_tran-glbcode2 'migra ted' INTO gs_text-text SEPARATED BY space. gs_text-status= gc_migrated. gs_text-level = 4. APPEND gs_text TO gt_text. *--------------------------------------------------------------------* ENDIF. ELSEIF gv_t_or_u = 'T'. *this only adds comment to show that it has been migrated PERFORMfix_code USINGgt_aabap 'TRANSFER_ROUTINE' CHANGING gt_abapsource g_context_not_found. IF g_context_not_found IS INITIAL. PERFORMput_code USINGgs_tran-glbcode2 gs_tran-objvers gt_abapsource gt_arout '1'
simulate . *--------------------------------------------------------------------* CLEAR gs_text. gs_text-tranid = gs_tran-tranid. CONCATENATE 'Transfer Global Part 2' gs_tran-glbcode2 'mig rated' INTO gs_text-text SEPARATED BY space. gs_text-status= gc_migrated. gs_text-level = 4. APPEND gs_text TO gt_text. *--------------------------------------------------------------------* ENDIF. ENDIF. ENDIF. ENDIF. *--------------------------------------------------------------------* IF gv_t_or_u IS NOT INITIAL. *only commit if we could determine is it was a Transfer or and Update Ru le *if this was not determined, then it has to be manually checked IF simulate IS INITIAL AND g_context_not_found IS INITIAL. CALL FUNCTION 'DB_COMMIT'. PERFORM activate USING gs_tran-tranid gs_tran-objvers rs_c_true rs_c_false rs_c_true"with transport CHANGING gt_text. ELSEIF simulate IS INITIAL AND g_context_not_found IS NOT INITIA L. ROLLBACK WORK. ENDIF. IF g_context_not_found IS NOT INITIAL. CLEAR gs_text. gs_text-tranid = gs_tran-tranid. CONCATENATE 'Context block not found' 'check manually' INTO gs_text-text SEPARATED BY space. gs_text-status= gc_error. gs_text-level = 3. APPEND gs_text TO gt_text. ENDIF. CLEAR: gs_text, gv_string. CASE gv_t_or_u . WHEN 'T'. gs_text-type = 'TRANSFER:'. WHEN 'U'. gs_text-type = 'UPDATE:'. ENDCASE. gs_text-tranid = gs_tran-tranid. CONCATENATE gs_text-type 'TRANID =' gs_tran-tranid 'OBJVERS =' gs_tran-objvers INTOgs_text-text SEPARATED BYspace. READ TABLE gt_text WITH KEY status = 'ERROR' TRANSPORTING NO FIELDS. IF sy-subrc = 0. gs_text-status= gc_error. *if there was one error, set them all to "error" LOOP AT gt_text ASSIGNING . -status= gc_error. ENDLOOP. ELSE. gs_text-status= gc_migrated. ENDIF. gs_text-level= 3. INSERTgs_text INTOgt_text INDEX 1. PERFORMlog_handle CHANGING gt_text. ELSE. *Errors where found, this will have to be migrated manually CLEAR: gs_text, gv_string. gs_text-tranid = gs_tran-tranid. CONCATENATE 'Error:' 'TRANID =' gs_tran-tranid 'OBJVERS =' gs_ tran-objvers
assert sy-subrc = 0. *-- consider already inserted rows for row calculation if ls_tokes_context-str = 'TABLES'. *-- insert line after "TABLES" *-- consider already inserted rows for row calculation lv_row_insert = lv_row_offset_stokes + ls_tokes_context-row + 1. clear ls_insertlines. ls_insertlines = 'p_monitor STRUCTURE rsmonitor'. "-> insert'. append ls_insertlines to lt_insertlines. lv_row_offset_stokes = lv_row_offset_stokes + 1. clear ls_insertlines. ls_insertlines = 'p_monitor_recno STRUCTURE rsmonitors'. "-> insert'. append ls_insertlines to lt_insertlines. lv_row_offset_stokes = lv_row_offset_stokes + 1. insert lines of lt_insertlines into ct_abapsource index lv_row_i nsert. clear lt_insertlines. *-- get ENDFORM of current FORM from stokes loop at pt_tokes from l_tabix_context into ls_tokes_context where str = 'ENDFORM'. exit. endloop. if sy-subrc 0. c_context_not_found = rs_c_true. exit. endif. lv_row_insert = lv_row_offset_stokes + ls_tokes_context-row. "be fore endform clear ls_insertlines. ls_insertlines = 'p_monitor[] = monitor[].'. "-> i nsert'. append ls_insertlines to lt_insertlines. lv_row_offset_stokes = lv_row_offset_stokes + 1. clear ls_insertlines. ls_insertlines = 'p_monitor_recno[] = monitor_recno[].'. "-> i nsert'. nsert'. append ls_insertlines to lt_insertlines. lv_row_offset_stokes = lv_row_offset_stokes + 1. clear ls_insertlines. ls_insertlines = 'CLEAR: monitor[],'."-> i nsert'. append ls_insertlines to lt_insertlines. lv_row_offset_stokes = lv_row_offset_stokes + 1. clear ls_insertlines. ls_insertlines = ' monitor_recno[].'."-> i nsert'. append ls_insertlines to lt_insertlines. lv_row_offset_stokes = lv_row_offset_stokes + 1. *--blank row clear ls_insertlines. append ls_insertlines to lt_insertlines. lv_row_offset_stokes = lv_row_offset_stokes + 1. insert lines of lt_insertlines into ct_abapsource index lv_row_i nsert. clear lt_insertlines. else. * -- context not found c_context_not_found = rs_c_true. exit. endif. elseif ls_tokes_routnm-str cs 'ROUTINE_'. *insert line after "FORM routine_*" *-- consider already inserted rows for row calculation lv_row_insert = lv_row_offset_stokes + ls_tokes_routnm-row + 1. clear ls_insertlines. ls_insertlines = 'TABLES'."->ins ert'. append ls_insertlines to lt_insertlines. lv_row_offset_stokes = lv_row_offset_stokes + 1. clear ls_insertlines. ls_insertlines = 'p_monitorSTRUCTURE rsmonitor'."->ins ert'. append ls_insertlines to lt_insertlines. lv_row_offset_stokes = lv_row_offset_stokes + 1.
*&FormRULE *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* *-->P_LT_TOKES_SORTtext * insert'. append ls_insertlines to lt_insertlines. add 1 to lv_rows_inserted. ls_insertlines = 'l_monitor'." -> insert'. append ls_insertlines to lt_insertlines. add 1 to lv_rows_inserted. insert lines of lt_insertlines into ct_abapsource index lv_row. clear lt_insertlines. *-- lv_row = -row + lv_rows_inserted + 1. loop atct_abapsource from lv_row assigning where line space. if -line = 'LOOP AT &MO& INTO ls_monitor.'. -line = 'LOOP AT l_monitor INTO ls_monitor.'. "->replace'. *line replaced and exit exit.
*&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* *-->P_GS_TRAN_TRANIDtext *-->P_GS_TRAN_OBJVERStext *----------------------------------------------------------------------* form activateusingpv_tranid type rstranid pv_objverstype rsobjvers pv_with_savetype rs_bool pv_with_compare type rs_bool pv_with_cto type rs_bool changing ct_text type tt_text. data: lr_rstran_trfntype ref to cl_rstran_trfn, lv_subrctypesysubrc, lr_messages type ref to cl_rso_msg, lt_messages typers_t_msg, ls_messages typers_s_msg, lt_obj_existentialtyperso_t_tlogo_asc, ls_obj_existentialtyperso_s_tlogo_asc, lr_collection type ref to cl_rstran_trfn_collection, lv_objnmtypesobj_name, ls_text typets_text, lv_not_modifyable typers_bool, lt_tlogotyperso_th_tlogo, ls_tr_objecttypers_s_tr_object, lt_msgtypers_t_msg, lv_requesttypetrkorr, lv_as4pos typeddposition. *--------------------------------------------------------------------* *check transformation try. call method cl_rstran_trfn=>factory exporting i_tranid = pv_tranid receiving r_r_tran = lr_rstran_trfn. catch cx_rstran_not_found . catch cx_rstran_input_invalid . endtry. call method lr_rstran_trfn->get_info_vers exporting i_objvers = pv_objvers. try. call method lr_rstran_trfn->set_current_version exporting i_objvers = pv_objvers. catch cx_rstran_version_not_found . endtry. create object lr_messages. call method lr_rstran_trfn->check_me importing e_subrc = lv_subrc changing c_r_msg = lr_messages. call method lr_messages->get_all_msg receiving r_t_msg = lt_messages. clear gv_errors_found. loop at lt_messages into ls_messages wheremsgty = 'E' or msgty = 'A' or msgty = 'X'. gv_errors_found = 'X'. message idls_messages-msgid typels_messages-msgty numberls_messages-msgno intols_text-text withls_messages-msgv1 ls_messages-msgv2 ls_messages-msgv3 ls _messages-msgv4. ls_text-level = 3. ls_text-status = gc_error. append ls_text to ct_text. clear ls_text.
endloop. If pv_with_compare is not initial. if rs_c_false = lr_rstran_trfn->compare_am( ). *- ls_text-level = 3. ls_text-status = gc_error. ls_text-text = 'Version M and A is not equal, processing skipped'. append ls_text to ct_text. endif. endif. if gv_errors_found is initial. create object lr_collection. *--------------------------------------------------------------------* *activate transformation lv_objnm = pv_tranid. try. call method lr_collection->add_tlogo exporting i_objnm= lv_objnm i_with_cto = pv_with_cto importing e_not_modifyable = lv_not_modifyable. catch cx_rs_existing . catch cx_rs_not_found . endtry. if lv_not_modifyable is not initial. concatenate 'TRANID' pv_tranid 'not modifiyable' intols_text-text separated byspace. ls_text-status = gc_error. ls_text-level = 3. append ls_text to ct_text. clear ls_text. else. if pv_with_save is not initial. try. call method lr_collection->save exporting i_with_cto= pv_with_cto *i_suppress_i_messages = RS_C_TRUE *i_detlevel= '1' importing e_th_tlogo_error= lt_tlogo. catch cx_rs_cancelled . exit. endtry. endif. if lt_tlogo[] is initial. try. call method lr_collection->activate exporting i_with_cto= pv_with_cto i_force_activation= 'X' i_show_check_protocol = '' importing e_th_tlogo_error= lt_tlogo. catch cx_rs_cancelled . exit. endtry. endif. *--------------------------------------------------------------------* *add transformation to list for the transport check 1 = 2. *if lt_tlogo is initial. * *If 1 = 2. *add 1 to lv_as4pos. * *ls_tr_object-pgmid= 'R3TR'. *ls_tr_object-object = 'DRFN'. *ls_tr_object-trkorr = pv_request. *ls_tr_object-as4pos = lv_as4pos. *ls_tr_object-obj_name = pv_tranid. *ls_tr_object-lockflag = 3. * *append ls_tr_objectto ct_tr_object. *endif. *
IF objvers[] IS INITIAL. *-- process all transformation including formulas or routines SELECT * FROM rstransteprout INTO TABLE lt_steprout WHERE ( objvers = rs_c_objvers-modified OR objvers = rs_c_objvers-active ) AND tranid IN tranid. ELSE. SELECT * FROM rstransteprout INTO TABLE lt_steprout WHERE objvers IN objvers AND tranidIN tranid. ENDIF. lt_tran = lt_tran_sel. SORT lt_tran BY sourcetype sourcename. LOOP AT lt_tran INTO ls_tran. *-- CLEARl_routine_exist. CLEAR: lt_text[], lt_text_all[], lt_text_step_all[]. CLEARlt_formula[]. CLEARl_inconsistent. CONCATENATE 'TRANID =' ls_tran-tranid 'OBJVERS =' ls_tran-objvers INTO l_string SEPARATED BY space. APPEND l_string TO lt_text. *-- CONCATENATE ls_tran-sourcetype ls_tran-sourcename '->' ls_tran-targettype ls_tran-targetname INTO l_string SEPARATED BY space. APPEND l_string TO lt_text. *-- global part IF ls_tran-glbcode IS NOT INITIAL. PERFORM routine_check USINGls_tran-glbcode ls_tran-objvers CHANGING l_does_not_exist l_code_without_header l_header_without_code. IF l_does_not_exist IS NOT INITIAL. CONCATENATE 'Global with ID =' ls_tran-glbcode 'is missing' INTO l_string SEPARATED BY space. APPEND l_string TO lt_text. l_inconsistent = rs_c_true. ENDIF. IF l_code_without_header IS NOT INITIAL. CONCATENATE 'Global with ID =' ls_tran-glbcode 'no RSAROUT Entry ' INTO l_string SEPARATED BY space. APPEND l_string TO lt_text. l_inconsistent = rs_c_true. ENDIF. IF l_header_without_code IS NOT INITIAL. *-- no error in case of global part IF 1 = 2. CONCATENATE 'Global with ID =' ls_tran-glbcode 'no RSAABAP Ent ries' INTO l_string SEPARATED BY space. APPEND l_string TO lt_text. l_inconsistent = rs_c_true. ENDIF. ENDIF. ENDIF. *-- second global part IF ls_tran-glbcode2 IS NOT INITIAL. PERFORM routine_check USINGls_tran-glbcode2 ls_tran-objvers CHANGING l_does_not_exist l_code_without_header l_header_without_code. IF l_does_not_exist IS NOT INITIAL. CONCATENATE 'Global2 with ID =' ls_tran-glbcode2 'is missing' INTO l_string SEPARATED BY space. APPEND l_string TO lt_text. l_inconsistent = rs_c_true. ENDIF. IF l_code_without_header IS NOT INITIAL. CONCATENATE 'Global2 with ID =' ls_tran-glbcode2 'no RSAROUT Ent ry' INTO l_string SEPARATED BY space.
APPEND l_string TO lt_text. l_inconsistent = rs_c_true. ENDIF. IF l_header_without_code IS NOT INITIAL. *-- ne error in case of global 2 IF 1 = 2. CONCATENATE 'Global2 with ID =' ls_tran-glbcode2 'no RSAABAP E ntries' INTO l_string SEPARATED BY space. APPEND l_string TO lt_text. l_inconsistent = rs_c_true. ENDIF. ENDIF. ENDIF. *-- expert routine. IF ls_tran-expert IS NOT INITIAL. l_routine_exist = rs_c_true. PERFORM routine_check USINGls_tran-expert ls_tran-objvers CHANGING l_does_not_exist l_code_without_header l_header_without_code. IF l_does_not_exist IS NOT INITIAL. CONCATENATE 'Expert routine with ID =' ls_tran-expert 'is missin g' INTO l_string SEPARATED BY space. APPEND l_string TO lt_text. l_inconsistent = rs_c_true. ENDIF. IF l_code_without_header IS NOT INITIAL. CONCATENATE ' Expert routine with ID =' ls_tran-expert 'no RSARO UT Entry' INTO l_string SEPARATED BY space. APPEND l_string TO lt_text. l_inconsistent = rs_c_true. ENDIF. IF l_header_without_code IS NOT INITIAL. CONCATENATE ' Expert routine with ID =' ls_tran-expert 'no RSAAB AP Entries' INTO l_string SEPARATED BY space. APPEND l_string TO lt_text. l_inconsistent = rs_c_true. ENDIF. ENDIF. *-- start routine IF ls_tran-startroutine IS NOT INITIAL. l_routine_exist = rs_c_true. PERFORM routine_check USINGls_tran-startroutine ls_tran-objvers CHANGING l_does_not_exist l_code_without_header l_header_without_code. IF l_does_not_exist IS NOT INITIAL. CONCATENATE 'Start routine with ID =' ls_tran-startroutine 'is m issing' INTO l_string SEPARATED BY space. APPEND l_string TO lt_text. l_inconsistent = rs_c_true. ENDIF. IF l_code_without_header IS NOT INITIAL. CONCATENATE ' Start routine with ID =' ls_tran-startroutine 'no RSAROUT Entry' INTO l_string SEPARATED BY space. APPEND l_string TO lt_text. l_inconsistent = rs_c_true. ENDIF. IF l_header_without_code IS NOT INITIAL. IF 1 = 2. *-- empty routines are possible CONCATENATE ' Start routine with ID =' ls_tran-startroutine 'n o RSAABAP Entries' INTO l_string SEPARATED BY space. APPEND l_string TO lt_text. l_inconsistent = rs_c_true. ENDIF. ENDIF. ENDIF. *-- end routine IF ls_tran-endroutine IS NOT INITIAL. l_routine_exist = rs_c_true. PERFORM routine_check USINGls_tran-endroutine
ls_tran-objvers CHANGING l_does_not_exist l_code_without_header l_header_without_code. IF l_does_not_exist IS NOT INITIAL. CONCATENATE 'End routine with ID =' ls_tran-endroutine 'is missi ng' INTO l_string SEPARATED BY space. APPEND l_string TO lt_text. l_inconsistent = rs_c_true. ENDIF. IF l_code_without_header IS NOT INITIAL. CONCATENATE ' End routine with ID =' ls_tran-endroutine 'no RSAR OUT Entry' INTO l_string SEPARATED BY space. APPEND l_string TO lt_text. l_inconsistent = rs_c_true. ENDIF. IF l_header_without_code IS NOT INITIAL. IF 1 = 2. *-- empty routines are possible CONCATENATE ' End routine with ID =' ls_tran-endroutine 'no RS AABAP Entries' INTO l_string SEPARATED BY space. APPEND l_string TO lt_text. l_inconsistent = rs_c_true. ENDIF. ENDIF. ENDIF. *-- process routine or formula steps LOOP AT lt_steprout INTO ls_steprout WHERE tranid= ls_tran-tranid AND objvers = ls_tran-objvers. CLEAR l_wrong_type. CLEAR ls_formtp. CLEAR l_inconsistent_step. CLEAR lt_text_step[]. READ TABLE lt_tranrule TRANSPORTING NO FIELDS WITH TABLE KEY tranid= ls_steprout-tranid ruleid= ls_steprout-ruleid objvers = ls_steprout-objvers. IF sy-subrc 0. CONTINUE. ENDIF. *--Rule and step l_string_1 = ls_steprout-ruleid. l_string_2 = ls_steprout-stepid. CONCATENATE '-> Rule ID =' l_string_1 'Step ID =' l_string_2 INTO l_string SEPARATED BY space. APPEND l_string TO lt_text_step. IF ls_steprout-codeid IS NOT INITIAL. CASE ls_steprout-kind. WHEN rstr_routine-formula. PERFORM formula_check USINGls_steprout-codeid ls_steprout-objvers CHANGING l_does_not_exist l_inconsistent_formula l_wrong_type ls_formtp. IF l_does_not_exist IS NOT INITIAL. CONCATENATE 'Formula with ID =' ls_steprout-codeid 'is mis sing' INTO l_string SEPARATED BY space. APPEND l_string TO lt_text_step. l_inconsistent_step = rs_c_true. ENDIF. IF l_inconsistent_formula IS NOT INITIAL. CONCATENATE 'Formula with ID =' ls_steprout-codeid 'is inc onsistent' INTO l_string SEPARATED BY space. APPEND l_string TO lt_text_step. l_inconsistent_step = rs_c_true. ENDIF. IF l_wrong_type IS NOT INITIAL. CONCATENATE 'Formula with ID =' ls_steprout-codeid 'wrong type' ls_formtp-formtp INTO l_string SEPARATED BY space. APPEND l_string TO lt_text_step.
ls_formula-tranid= ls_tran-tranid. ls_formula-objvers= ls_tran-objvers. ls_formula-codeid_step = ls_steprout-codeid. ls_formula-formula_id= ls_formtp-formula_id. APPEND ls_formula TO lt_formula. l_inconsistent_step = rs_c_true. ENDIF. WHEN OTHERS. l_routine_exist = rs_c_true. PERFORM routine_check USINGls_steprout-codeid ls_steprout-objvers CHANGING l_does_not_exist l_code_without_header l_header_without_code." IF l_does_not_exist IS NOT INITIAL. CONCATENATE 'Routine with ID =' ls_steprout-codeid 'is mis sing' INTO l_string SEPARATED BY space. APPEND l_string TO lt_text_step. l_inconsistent_step = rs_c_true. ENDIF. IF l_code_without_header IS NOT INITIAL. CONCATENATE 'Routine with ID =' ls_steprout-codeid 'no RSA ROUT Entry' INTO l_string SEPARATED BY space. APPEND l_string TO lt_text_step. l_inconsistent_step = rs_c_true. ENDIF. IF l_header_without_code IS NOT INITIAL. CONCATENATE 'Routine with ID =' ls_steprout-codeid 'no RSA ABAP Entries' INTO l_string SEPARATED BY space. APPEND l_string TO lt_text_step. l_inconsistent_step = rs_c_true. ENDIF. ENDCASE. ELSE. CONCATENATE 'orphaned entry in table RSTRANSTEPROUT, Kind =' ls_ steprout-kind INTO l_string SEPARATED BY space. APPEND l_string TO lt_text_step. l_inconsistent_step = rs_c_true. ENDIF. IF l_inconsistent_step IS NOT INITIAL. APPEND LINES OF lt_text_step TO lt_text_step_all. l_inconsistent = rs_c_true. ENDIF. ENDLOOP. IF l_routine_exist = rs_c_true AND l_inconsistent = rs_c_true. APPEND LINES OF lt_text TO lt_text_all. APPEND LINES OF lt_text_step_all TO lt_text_all. ELSEIF l_inconsistent = rs_c_true AND NOT lt_text_step_all[] IS INIT IAL. READ TABLE lt_text INTO l_string INDEX 1. IF sy-subrc = 0. APPEND l_string TO lt_text_all. APPEND LINES OF lt_text_step_all TO lt_text_all. ENDIF. ELSEIF l_inconsistent = rs_c_true. *-- no real error only the id are provided technically. CLEAR l_inconsistent. ENDIF. *-- add error per tranid IF l_inconsistent = rs_c_true. *-- put collected message to log. *-- check tadir package *IF ls_tran-objvers = rs_c_objvers-modified. IF ls_tran-sourcetype = 'RSDS'. IF ls_tran-shadow_tranid IS INITIAL. l_string = 'Shadow tranid could not be determined'. l_msgty = rs_c_error. INSERT l_string INTO lt_text_all INDEX 2. ELSE. l_tranid_tadir = ls_tran-shadow_tranid. ENDIF. ELSE. l_tranid_tadir = ls_tran-tranid. ENDIF. IFl_tranid_tadir IS NOT INITIAL. IF ls_tran-objvers = rs_c_objvers-delivery.
CLEAR: p_does_not_exist, p_inconsistent. IF sy-subrc 0. p_does_not_exist = rs_c_true. l_stop = rs_c_true. SELECT SINGLE * FROM rsaform INTO ls_form WHERE formula_id = p_formulaid AND objvers= p_objvers. IF sy-subrc = 0. *-- header without mapping p_inconsistent = rs_c_true. l_stop = rs_c_true. ENDIF. ELSE. SELECT SINGLE * FROM rsaform INTO ls_form WHERE formula_id = ls_formmap-formin AND objvers = ls_formmap-objvers. IF sy-subrc 0. p_inconsistent = rs_c_true. l_stop = rs_c_true. ELSE. *-- check for right application IF ls_form-formtp NE rsfo_c_formtp-transformation. p_wrong_type = rs_c_true. ps_formtp-objvers= ls_form-objvers. ps_formtp-formula_id = ls_form-formula_id. ps_formtp-formtp = ls_form-formtp. ENDIF. ENDIF. ENDIF. *-- check next level on BI formula object CHECK l_stop = space. SELECT SINGLE * FROM rsfobuev000 INTO ls_rsev000 WHERE formid= ls_formmap-formin AND objvers = ls_formmap-objvers. IF sy-subrc 0. l_missing_sfobu = rs_c_true. l_stop = rs_c_true. ENDIF. SELECT * FROM rsfobuev001 INTO TABLE lt_rsev001 WHERE formid= ls_formmap-formin AND objvers = ls_formmap-objvers. IF sy-subrc 0. p_inconsistent = rs_c_true. l_stop = rs_c_true. ENDIF. *-- only for a-version technically a basic formula is necessary CHECK l_stop IS INITIAL. *-- convert to char32 string * Convert 25-digit unique-ID to 32-digit unique-ID CALL FUNCTION 'RSS_UNIQUE_CONVERT_TO_HEX' EXPORTING i_uni_idc25 = ls_formmap-formin IMPORTING e_uni_idc = l_sfbeid EXCEPTIONS invalid_unique_id = 1. SELECT SINGLE * FROM sfobuev000 INTO ls_sev000 WHERE id= l_sfbeid. IF sy-subrc 0. l_missing_sfobu = rs_c_true. l_stop = rs_c_true. ENDIF. SELECT * FROM sfobuev001 INTO TABLE lt_sev001 WHERE id = l_sfbeid. IF sy-subrc 0. l_missing_sfobu = rs_c_true. l_stop = rs_c_true. ENDIF. IF p_objvers = rs_c_objvers-modified. IF p_inconsistent= rs_c_false AND l_missing_sfobu = rs_c_true. *-- try to recreate missing internal formula from rsfobuev* CALL METHOD cl_rsar_formulas=>copy_fobu_to_extern EXPORTING i_formex = p_formulaid i_objvers= p_objvers *i_write_log= *IMPORTING *e_t_msg=
CHANGING gt_text_all l_subrc. IF l_subrc = 0. *-- register DTP for processing later l_src = ls_tran-sourcename. CASE ls_tran-sourcetype. WHEN 'RSDS'. l_srctp = 'DTASRC'. WHEN 'IOBJ'. IF ls_tran-sourcesubtype = 'TEXT'. l_srctp = 'IOBJT'. ELSE. l_srctp = 'IOBJA'. ENDIF. WHEN 'RSCS'. " InfoSource non persistent doesn't exist in DTP CLEAR l_src. WHEN OTHERS. l_srctp = ls_tran-sourcetype. ENDCASE. l_tgt = ls_tran-targetname. CASE ls_tran-targettype. WHEN 'IOBJ'. IF ls_tran-targetsubtype = 'TEXT'. l_tgttp = 'IOBJT'. ELSE. l_tgttp = 'IOBJA'. ENDIF. WHEN 'RSCS'. " InfoSource non persistent doesn't exist in DTP CLEAR l_tgt. WHEN OTHERS. l_tgttp = ls_tran-targettype. ENDCASE. IF l_src IS NOT INITIAL AND l_tgt IS NOT INITIAL. SELECT * FROM rsbkdtp AS t APPENDING TABLE lt_dtp_all WHERE objvers = rs_c_objvers-active AND src = l_src AND srctp = l_srctp AND tgt = l_tgt AND tgttp = l_tgttp AND EXISTS ( SELECT * FROM rsbkdtpstat WHERE dtp = t~dtp AND objstat = rs_c_objstat-inactive ). ELSEIF l_src IS NOT INITIAL. SELECT * FROM rsbkdtp AS t APPENDING TABLE lt_dtp_all WHERE objvers = rs_c_objvers-active AND src = l_src AND srctp = l_srctp AND EXISTS ( SELECT * FROM rsbkdtpstat WHERE dtp = t~dtp AND objstat = rs_c_objstat-inactive ). ELSEIF l_tgt IS NOT INITIAL. SELECT * FROM rsbkdtp AS t APPENDING TABLE lt_dtp_all WHERE objvers = rs_c_objvers-active AND tgt = l_tgt AND tgttp = l_tgttp AND EXISTS ( SELECT * FROM rsbkdtpstat WHERE dtp = t~dtp AND objstat = rs_c_objstat-inactive ). ENDIF. ELSE. l_text = 'error / warning occurred, activate manually with TRFN UI '. CALL METHOD cl_rso_application_log=>if_rso_application_log~add_tex t EXPORTING i_text = l_text i_msgty= rs_c_error i_detlevel = '3'. ENDIF. PERFORM write_to_log CHANGING gt_text_all. ENDLOOP. *-- DTPs CLEAR gt_text_all. SORT lt_dtp_all BY dtp objvers. DELETE ADJACENT DUPLICATES FROM lt_dtp_all COMPARING dtp. LOOP AT lt_dtp_all INTO ls_dtp. l_msgty = rs_c_info. l_detlevel = '2'. l_string = ls_dtp-dtp. CONCATENATE 'DTP: ' l_string INTO l_text. CALL METHOD cl_rso_application_log=>if_rso_application_log~add_text EXPORTING i_text = l_text i_msgty= l_msgty i_detlevel = l_detlevel.
endtry. create object lr_messages. call method lr_rstran_trfn->check_me importing e_subrc = lv_subrc changing c_r_msg = lr_messages. call method lr_messages->get_all_msg receiving r_t_msg = lt_messages. clear gv_errors_found. loop at lt_messages into ls_messages wheremsgty = 'E' or msgty = 'A' or msgty = 'X'. gv_errors_found = 'X'. message idls_messages-msgid typels_messages-msgty numberls_messages-msgno intols_text-text withls_messages-msgv1 ls_messages-msgv2 ls_messages-msgv3 ls _messages-msgv4. ls_text-level = 3. ls_text-status = gc_error. append ls_text to ct_text. clear ls_text. endloop. If pv_with_compare is not initial. if rs_c_false = lr_rstran_trfn->compare_am( ). *- ls_text-level = 3. ls_text-status = gc_error. ls_text-text = 'Version M and A is not equal, processing skipped'. append ls_text to ct_text. endif. endif. if gv_errors_found is initial. create object lr_collection. *--------------------------------------------------------------------* *activate transformation lv_objnm = pv_tranid. try. call method lr_collection->add_tlogo exporting i_objnm= lv_objnm i_with_cto = pv_with_cto importing e_not_modifyable = lv_not_modifyable. catch cx_rs_existing . catch cx_rs_not_found . endtry. if lv_not_modifyable is not initial. concatenate 'TRANID' pv_tranid 'not modifiyable' intols_text-text separated byspace. ls_text-status = gc_error. ls_text-level = 3. append ls_text to ct_text. clear ls_text. else. if pv_with_save is not initial. try. call method lr_collection->save exporting i_with_cto= pv_with_cto *i_suppress_i_messages = RS_C_TRUE *i_detlevel= '1' importing e_th_tlogo_error= lt_tlogo. catch cx_rs_cancelled . exit.
RECEIVING r_t_msg = lt_messages. LOOP AT lt_messages INTO ls_messages WHEREmsgty = 'E' OR msgty = 'A' OR msgty = 'X'. l_errors_found = 'X'. MESSAGE IDls_messages-msgid TYPEls_messages-msgty NUMBERls_messages-msgno INTOls_text-text WITHls_messages-msgv1 ls_messages-msgv2 ls_messages-msgv3 ls_messages-msgv4. ls_text-level = 3. ls_text-status = gc_error. APPEND ls_text TO ct_text. CLEAR ls_text. ENDLOOP. ENDIF. IF pv_with_compare IS NOT INITIAL. IF rs_c_false = lr_rstran_trfn->compare_am( ). *- ls_text-level = 3. ls_text-status = gc_warning. ls_text-text = 'Version M and A is not equal, processing skipped'. APPEND ls_text TO ct_text. cv_subrc = 66. EXIT. ENDIF. ENDIF. IF l_errors_found IS INITIAL. CREATE OBJECT lr_collection. *--------------------------------------------------------------------* *activate transformation lv_objnm = pv_tranid. TRY. CALL METHOD lr_collection->add_tlogo EXPORTING i_objnm= lv_objnm i_with_cto = pv_with_cto IMPORTING e_not_modifyable = lv_not_modifyable. CATCH cx_rs_existing . CATCH cx_rs_not_found . ENDTRY. IF lv_not_modifyable IS NOT INITIAL. CONCATENATE 'TRANID' pv_tranid 'not modifiyable' INTOls_text-text SEPARATED BYspace. ls_text-status = gc_error. ls_text-level = 3. APPEND ls_text TO ct_text. CLEAR ls_text. ELSE. IF pv_with_save = 'F'. CALL METHOD lr_rstran_trfn->forced_save. ENDIF. *if pv_with_save is not initial. *try. *call method lr_collection->save *exporting *i_with_cto= pv_with_cto **i_suppress_i_messages = RS_C_TRUE *i_detlevel= '2' *importing *e_th_tlogo_error= lt_tlogo. * *catch cx_rs_cancelled . *exit. *endtry. *endif. IF lt_tlogo[] IS INITIAL. TRY. CALL METHOD lr_collection->activate
TYPE-POOLS: rstr, rsdg, rsds. TABLES sscrfields."For user-commands on selection-screen TABLES rstran. "for select options only DATA: g_r_tranidTYPE rstranid. DATA: tlogorstlogoTYPE rstlogo. DATA: sourcetypeTYPE rstlogo. DATA: sourcenameTYPE sobj_name. DATA: targettypeTYPE rstlogo. DATA: targetnameTYPE sobj_name. DATA: tranidTYPE rstranid. DATA: iobjnmTYPE sobj_name. DATA: objst TYPE rsobjstat. DATA: objvers TYPE rsobjvers. DATA: objvrsTYPE rsobjvers. * selection screen * main screen SELECTION-SCREEN BEGIN OF BLOCK act WITH FRAME TITLE text-001. SELECT-OPTIONStran_idFOR tranid. PARAMETERSobjstat LIKE objst DEFAULT rs_c_objstat-active. SELECT-OPTIONSsrc_type FOR sourcetype. SELECT-OPTIONSsrc_name FOR sourcename. SELECT-OPTIONStrg_type FOR targettype. SELECT-OPTIONStrg_name FOR targetname. PARAMETERS: activate RADIOBUTTON GROUP r1 DEFAULT 'X'. PARAMETERS: check RADIOBUTTON GROUP r1. * objvers FOR objversDEFAULT 'A'. SELECTION-SCREEN END OF BLOCK act. * data *DATA: g_s_msg TYPE rs_s_msg. *DATA: g_t_msg TYPE rs_t_msg. TYPES: BEGIN OF ts_text, tranidTYPE rstranid, textTYPE string, type(8) TYPE c, status(20)TYPE c, level TYPE c, END OF ts_text, tt_text TYPE TABLE OF ts_text. * SELECT-OPTIONS: *objvers FOR objvrsDEFAULT 'M'. * tranidFOR tran_id. * PARAMETERS: * simulate TYPE cAS CHECKBOX DEFAULT 'X',"does not save changes to coding *repair_w TYPE rs_boolAS CHECKBOX, *requestTYPE trkorr NO-DISPLAY. DATA: gs_textTYPE ts_text, gt_textTYPE tt_text, gt_text_allTYPE tt_text. DATA: gt_tr_object TYPE rs_t_tr_object. DATA: l_msgtyTYPE sy-msgty. *DATA: l_objvrs LIKE LINE OF objvers. DATA: l_inconsistent TYPE rs_bool. DATA: l_text TYPE c LENGTH 150. DATA: l_detlevel TYPE ballevel. DATA: l_string TYPE string. DATA: l_string_1 TYPE string. DATA: l_string_2 TYPE string. DATA: lt_textTYPE TABLE OF string. DATA: lt_text_allTYPE TABLE OF string. DATA: l_extnumberTYPE bal_s_log-extnumber. DATA: ls_tranTYPE rstran. DATA: lt_tranTYPE STANDARD TABLE OF rstran WITH NON-UNIQUE DEF AULT KEY. DATA: lt_tran_selTYPE SORTED TABLE OF rstran WITH UNIQUE KEY tranid objvers. *START-OF-SELECTION. * F4 selection screen * AT SELECTION-SCREEN ON VALUE-REQUEST FOR Src_Type-low. *CALL METHOD CL_RSTRAN_STAT=>GET_OBJECTS *EXPORTING *i_objvers= rs_c_objvers-modified * CHANGING * SOURCETYPE = Src_Type-low.
*>>>> START OF DELETION END OF DELETION if_rso_application_log~add_text EXPORTING i_text = l_text i_msgty= l_msgty i_detlevel = l_detlevel. ENDLOOP. * IF icon_simulate IS NOT INITIAL AND g_context_not_found IS INITIAL. * CALL FUNCTION 'DB_COMMIT'. PERFORM activate IN PROGRAMrstran_migration_repair USING ls_tran-tranid ls_tran-objvers rs_c_false"without save rs_c_true "with a-m version compare
PERFORM activate_trfn USING ls_tran-tranid ls_tran-objvers rs_c_false"without save rs_c_true "with a-m version compare rs_c_false"without transport rs_c_true "with check CHANGING gt_text_all l_subrc. IF l_subrc = 0. *-- register DTP for processing later l_src = ls_tran-sourcename. CASE ls_tran-sourcetype. WHEN 'RSDS'. l_srctp = 'DTASRC'. WHEN 'IOBJ'. IF ls_tran-sourcesubtype = 'TEXT'. l_srctp = 'IOBJT'. ELSE. l_srctp = 'IOBJA'. ENDIF. WHEN 'RSCS'. " InfoSource non persistent doesn't exist in DTP CLEAR l_src. WHEN OTHERS. l_srctp = ls_tran-sourcetype. ENDCASE. l_tgt = ls_tran-targetname. CASE ls_tran-targettype. WHEN 'IOBJ'. IF ls_tran-targetsubtype = 'TEXT'. l_tgttp = 'IOBJT'. ELSE. l_tgttp = 'IOBJA'. ENDIF. WHEN 'RSCS'. " InfoSource non persistent doesn't exist in DTP CLEAR l_tgt. WHEN OTHERS. l_tgttp = ls_tran-targettype. ENDCASE. IF l_src IS NOT INITIAL AND l_tgt IS NOT INITIAL. IF l_src IS NOT INITIAL AND l_tgt IS NOT INITIAL. SELECT * FROM rsbkdtp AS t APPENDING TABLE lt_dtp_all WHERE objvers = rs_c_objvers-active AND src = l_src AND srctp = l_srctp AND tgt = l_tgt AND tgttp = l_tgttp AND EXISTS ( SELECT * FROM rsbkdtpstat WHERE dtp = t~dtp AND objstat = rs_c_objstat-inactive ). ELSEIF l_src IS NOT INITIAL. SELECT * FROM rsbkdtp AS t APPENDING TABLE lt_dtp_all WHERE objvers = rs_c_objvers-active AND src = l_src AND srctp = l_srctp AND EXISTS ( SELECT * FROM rsbkdtpstat WHERE dtp = t~dtp AND objstat = rs_c_objstat-inactive ). ELSEIF l_tgt IS NOT INITIAL. SELECT * FROM rsbkdtp AS t APPENDING TABLE lt_dtp_all WHERE objvers = rs_c_objvers-active AND tgt = l_tgt AND tgttp = l_tgttp AND EXISTS ( SELECT * FROM rsbkdtpstat WHERE dtp = t~dtp AND objstat = rs_c_objstat-inactive ). ENDIF. ELSE. l_text = 'error / warning occurred, activate manually with TRFN UI '. CALL METHOD cl_rso_application_log=>if_rso_application_log~add_tex t EXPORTING i_text = l_text i_msgty= rs_c_error i_detlevel = '3'. ENDIF. PERFORM write_to_log CHANGING gt_text_all. ENDLOOP. *-- DTPs CLEAR gt_text_all. SORT lt_dtp_all BY dtp objvers. DELETE ADJACENT DUPLICATES FROM lt_dtp_all COMPARING dtp. LOOP AT lt_dtp_all INTO ls_dtp. l_msgty = rs_c_info. l_detlevel = '2'. l_string = ls_dtp-dtp.
This document is referenced by:
SAP Notes (7)
1369294 SAPBINews NW7.01 BW ABAP Support Package 07 1260071 SAPBINews NW 7.10 BI ABAP Support Package 08
1471117 SP25:RSDG_TRFN_ACTIVATE skips if M version has OBJSTAT 'INA' 1260071 SAPBINews NW 7.10 BI ABAP Support Package 08 1407598 SAPBWNews NW BW 7.0 ABAP SP 24 1407599 Preliminary Version SAPBWNews NW BW 7.20 ABAP SP03 1407600 SAPBWNews NW BW 7.02 ABAP SP03 1493850 Consulting: Transformations inactive after system copy 1369294 SAPBINews NW7.01 BW ABAP Support Package 07