0001408161

Upload: usshahid

Post on 15-Oct-2015

57 views

Category:

Documents


0 download

DESCRIPTION

0001408161

TRANSCRIPT

  • 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

  • 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. IF cl_rso_application_log=>appl_log_get_log_handle( ) IS INITIAL. CALL METHOD cl_rso_application_log=>appl_log_create EXPORTING i_object= rstr_c_appl_log_trfn i_subobject = rstr_c_appl_log_trfn_content i_extnumber = l_extnumber. ENDIF. SELECT * FROMrstran INTO TABLE lt_tran_sel WHEREobjvers= rs_c_objvers-active ANDobjstat= objstat ANDtranid IN tran_id ANDsourcetype IN src_type ANDsourcename IN src_name ANDtargettype IN trg_type ANDtargetname IN trg_name ANDis_shadow= space. lt_tran = lt_tran_sel. LOOP AT lt_tran INTO ls_tran. * -- CLEAR: lt_text[], lt_text_all[]. 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. LOOP AT lt_text_all INTO l_string. IF sy-tabix = 1. l_detlevel = 2. ELSE. l_detlevel = 3. ENDIF. l_text = l_string. 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. ENDLOOP. 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 rs_c_false"without transport CHANGING gt_text. ENDLOOP. CALL METHOD cl_rso_application_log=>if_rso_application_log~appl_log_save . cl_rso_application_log=>appl_log_show_as_popup( ). *>>>> END OF INSERTION
  • >>> Correction contains additional changes that are NOT shown here > Display all changes by Note Assistant Note display functionality >> START OF INSERTION > END OF INSERTION END OF INSERTION
  • *&--------------------------------------------------------------------* *& START-OF-SELECTION *&--------------------------------------------------------------------* *>>>> START 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

  • rent groups =' l_string_2 INTO ls_text-string SEPARATED BY space. APPEND ls_text TO lt_text_all. ENDIF. ENDIF. ENDIF. ENDLOOP. CLEAR l_string. l_string_1 = lv_counter_trans. CONCATENATE 'Number of transformations to check =' l_string_1 INTO l_string SEPARATED BY space. l_text = l_string. l_detlevel = 1. CALL METHOD cl_rso_application_log=>if_rso_application_log~add_text EXPORTING i_text = l_text i_msgty= rs_c_warning i_detlevel = l_detlevel. l_tranid_on_change = '*'. LOOP AT lt_text_all INTO ls_text. IF l_tranid_on_change ls_text-tranid. l_detlevel = 2. ELSE. l_detlevel = 3. ENDIF. IF l_string(7) = '*TRANSF' OR l_string(7) = '*UPDATE'. l_msgty = rs_c_success. ELSE. l_msgty = rs_c_error. ENDIF. l_text = ls_text-string. 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. l_tranid_on_change = ls_text-tranid. ENDLOOP. cl_rso_application_log=>appl_log_show_as_popup( ). *>>>> END OF INSERTION
  • DATA: ls_tokesTYPE stokes, lt_tokesTYPE STANDARD TABLE OF stokes, lt_stmntTYPE STANDARD TABLE OF sstmnt, l_tabix_tokes TYPE sytabix. DATA: lv_last_posTYPE i, lv_counter TYPE i, lc_char_allowed(62) TYPE c VALUE 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0987654 321'. *-- check if any code created by migration exist in global part 2 CLEAR: c_coding_found. ls_codeid-sign = 'I'. ls_codeid-option = 'EQ'. ls_codeid-low = p_codeid . APPEND ls_codeid TO lt_codeid. CALL FUNCTION 'RSAA_ROUTINE_MULTI_GET' EXPORTING i_objvers= p_objvers i_t_codeid = lt_codeid IMPORTING e_t_arout= lt_arout e_t_aabap= lt_aabap. LOOP AT lt_aabap ASSIGNING . ls_abapsource = -line. APPEND ls_abapsource TO lt_abapsource. ENDLOOP. SCAN ABAP-SOURCE lt_abapsource TOKENS INTO lt_tokes STATEMENTS INTO lt_stmnt WITHOUT TRMAC. LOOP AT lt_tokes ASSIGNING WHERE str CP 'FORM'. l_tabix_tokes = sy-tabix + 1. READ TABLE lt_tokes ASSIGNING INDEX l_tabix_tokes. ASSERT sy-subrc = 0. IF -str CS 'ROUTINE_9998' OR -str CS 'ROUTINE_' OR -str CS 'STARTROUTINE' OR -str CS 'COMPUTE_'. c_coding_found = rs_c_true. EXIT. ENDIF. ENDLOOP. ENDFORM." check_for_code *>>>> END OF INSERTION
  • 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.

  • ENDFORM." FORMULA_CHECK *>>>> END OF INSERTION
  • * version 3. TYPE-POOLS: rstr, rsaa, abap, rsau. TYPES: BEGIN OF ts_text, tranidTYPE rstran-tranid, textTYPE string, type(8) TYPE c, status(20)TYPE c, level TYPE c, END OF ts_text. TYPES: tt_text TYPE TABLE OF ts_text, tt_tokesTYPE STANDARD TABLE OFstokes WITH NON-UNIQUE DEFAULT KEY. DATA: gv_extnumber TYPE bal_s_log-extnumber, gs_tranTYPE rstran, gt_tranTYPE SORTED TABLE OF rstran WITH UNIQUE KEY tranid objvers, gt_aabap TYPE rsaa_t_aabap, gt_abapsourceTYPE rsau_t_abapsource, gt_arout TYPE rsaa_t_arout, gs_tranruleTYPE rstranrule, gt_tranruleTYPE SORTED TABLE OF rstranrule WITH UNIQUE KEY tranid ruleid objvers, gs_steproutTYPE rstransteprout, gt_steproutTYPE SORTED TABLE OF rstransteprout WITH UNIQUE KEYtranid objvers ruleid st epid, gr_data_refTYPE REF TOdata, gs_textTYPE ts_text, gt_textTYPE tt_text, gt_text_allTYPE tt_text, gv_stringTYPE string, gv_coding_foundTYPE rs_bool, gv_check_t_or_uTYPE rs_bool, gv_t_or_uTYPE c, gv_migratedTYPE rs_bool, gv_errors_foundTYPE rs_bool, gt_tr_object TYPErs_t_tr_object, g_context_not_found TYPE rs_bool, objvrs TYPE rsobjvers, objstat_ TYPE rsobjstat, tran_idTYPE rstranid. FIELD-SYMBOLS: TYPE ts_text. CONSTANTS: gc_error(20)TYPE c VALUE 'ERROR' , gc_migrated(20) TYPE c VALUE 'MIGRAT E', gc_already_migrated(20) TYPE c VALUE 'ALREAD Y_MIGRATED'. SELECT-OPTIONS: tranid FORtran_idOBLIGATORY, objstatFORobjstat_. PARAMETERS: objversTYPE rsobjversOBLIGATORYDEFAULT 'M', forceatv TYPE cAS CHECKBOX, "forces activation even it Transformations are already migrated simulate TYPE cAS CHECKBOX DEFAULT 'X',"does not save ch anges to coding requestTYPE trkorr NO-DISPLAY. *>>>> END OF INSERTION
  • 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

  • INTOgs_text-text SEPARATED BYspace. gs_text-status = gc_error. gs_text-level= 3. INSERT gs_text INTO gt_text INDEX1. gs_text-tranid = gs_tran-tranid. gs_text-text= 'could not be determine if it is a Transfer or Update Transformation'. gs_text-status = gc_error. gs_text-level= 3. INSERT gs_text INTO gt_text INDEX2. ENDIF. PERFORMlog_handle CHANGING gt_text. ELSE. *Transformation was already migrated gs_text-tranid = gs_tran-tranid. CONCATENATE 'Already Migrated:' 'TRANID =' gs_tran-tranid 'OBJVE RS =' gs_tran-objvers INTOgs_text-text SEPARATED BYspace. gs_text-status = gc_already_migrated. gs_text-level= 3. INSERT gs_text INTO gt_text INDEX1. PERFORMlog_handle CHANGING gt_text. IF forceatv IS NOT INITIAL. PERFORM activate USING gs_tran-tranid gs_tran-objvers rs_c_false rs_c_false rs_c_true"with transport CHANGING gt_text_all. ENDIF. ENDIF. APPEND LINES OF gt_text TO gt_text_all. CLEAR gt_text. ENDLOOP. PERFORM add_to_transport USING gt_tr_object. PERFORM log_call USING gt_text_all. INCLUDE rstran_migration_repair_f01. *>>>> END OF INSERTION Display all changes by Note Assistant Note display functionality >> START OF INSERTION
  • *-->P_LS_TRAN_GLBCODE2text *-->P_LS_TRAN_OBJVERStext *
  • if -line(1) = '*' or -line(1) = '"'. *this is only a comment, so we skip it. continue. endif. *get the position of the last character lv_last_pos = strlen( -line ) - 1. lv_counter = 0. while lv_counter >>> END OF INSERTION
  • form log_handlechangingct_text type tt_text. data: lv_extnumbertypebal_s_log-extnumber, ls_text typets_text. data: lt_msg_show type rs_t_msg_show, lt_msgtype rs_t_msg, ls_msgtype rs_s_msg. *--------------------------------------------------------------------* *this is not the most efficient way to handle the messages...but this is *not the perfromance critical part :-0 *get all the messages from the activation call method cl_rso_application_log=>if_rso_application_log~appl_log_ms g_read importing e_t_msg_show = lt_msg_show e_t_msg= lt_msg. *delete the log, so that we can collect them afresh again call method cl_rso_application_log=>if_rso_application_log~appl_log_de lete. *create the log again for the next run if cl_rso_application_log=>appl_log_get_log_handle( ) is initial. lv_extnumber = 'Z_RSTRAN_FIX_BICONTENT'. call method cl_rso_application_log=>appl_log_create exporting i_object= rstr_c_appl_log_trfn i_subobject = rstr_c_appl_log_trfn_content i_extnumber = lv_extnumber. endif. **--------------------------------------------------------------------* loop at lt_msg into ls_msg. ls_text-status = gc_already_migrated. ls_text-level= ls_msg-detlevel + 3. concatenatels_msg-msgv1 ls_msg-msgv2 ls_msg-msgv3 ls_msg-msgv4 into ls_text-text separated by space. append ls_text to ct_text. endloop. endform." handle_log *>>>> END OF INSERTION
  • append ls_abapsource to ct_abapsource. endloop. read table ct_abapsource index1 into ls_abapsource. scan abap-sourcect_abapsource tokens into lt_tokes statements into lt_stmnt without trmac. clear: lv_row, lv_rows_inserted. if uv_fix_what = 'UPDATE_ROUTINE'. performfix_update_routines usinglt_tokes changing ct_abapsource c_context_not_found. elseif uv_fix_what = 'TRANSFER_ROUTINE'. *do nothing, as only the migrated comment will be added in the put_code routine elseif uv_fix_what = 'UPDATE_START_ROUTINE'. performfix_update_start_routine usinglt_tokes changing ct_abapsource c_context_not_found. elseif uv_fix_what = 'UPDATE_RULE'. performfix_update_rule usinglt_tokes changing ct_abapsource c_context_not_found. elseif uv_fix_what = 'TRANSFER_RULE'. performfix_transfer_rule usinglt_tokes changing ct_abapsource c_context_not_found. endif. endform." FIX_CODE *>>>> END OF INSERTION
  • 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.

  • insert lines of lt_insertlines into ct_abapsource index lv_row_ins ert. clear lt_insertlines. 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. "befo re endform clear ls_insertlines. ls_insertlines = 'p_monitor[] = monitor[].'."->insert' . append ls_insertlines to lt_insertlines. lv_row_offset_stokes = lv_row_offset_stokes + 1. clear ls_insertlines. ls_insertlines = 'CLEAR monitor[].'."->insert' . 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_ins ert. clear lt_insertlines. endif. endloop. endform." fix_update_routines *>>>> END OF INSERTION
  • translate ls_abapsource-line to upper case. if ls_abapsource-line cs 'DATA:'. *insert line after the first "Data:" add 1 to lv_row. clear ls_insertlines. ls_insertlines = ' l_monitor TYPE STANDARD TABLE OF rsmoni tor,'. "-> insert'. append ls_insertlines to lt_insertlines. add 1 to lv_rows_inserted. clear ls_insertlines. ls_insertlines = ' l_monitor_recno TYPE STANDARD TABLE OF rsmoni tors,'. "-> 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. endif. endif. *-- loop at pt_tokes assigning where str = 'PERFORM'. *account for insterted lines lv_row = -row + lv_rows_inserted. read table ct_abapsource into ls_abapsource indexlv_row. if ls_abapsource-line cp '*Perform routine_9998'. *insert line after "TABLES" and "SOURCE_PACKAGE" add 3 to lv_row. clear ls_insertlines. ls_insertlines = 'l_monitor'."-> insert' . append ls_insertlines to lt_insertlines. add 1 to lv_rows_inserted. clear ls_insertlines. ls_insertlines = 'l_monitor_recno'."-> 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. exit. endif. endloop. *-- read table pt_tokes assigning with key str = 'LOOP'. if sy-subrc = 0. *account for insterted lines lv_row = -row + lv_rows_inserted. loop at ct_abapsource from lv_row assigning . if -line = 'LOOP AT &MR& INTO ls_monitor_recno. '. -line = 'LOOP AT l_monitor_recno INTO ls_moni tor_recno.'."->replace'. *line replaced, continue to next line continue. elseif -line = 'LOOP AT &MO& INTO ls_monitor.'. -line = 'LOOP AT l_monitor INTO ls_monitor. '."->replace'. *line replaced, exit exit. endif. endloop. endif. *-- endform." UPDATE_START_ROUTINE *>>>> END OF INSERTION
  • *&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.

  • endif. endloop. endloop. *-- endform." RULE *>>>> END OF INSERTION
  • *&---------------------------------------------------------------------* * 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. *

  • * **--------------------------------------------------------------------* **get the dependent routines and add them to the list for the transport *try. *call method lr_rstran_trfn->if_rso_tlogo_general~get_relate d *importing *e_t_obj_existential = lt_obj_existential. * *catch cx_rs_version_not_found . *catch cx_rs_msg . *endtry. * *loop at lt_obj_existential into ls_obj_existential. * *add 1 to lv_as4pos. * *ls_tr_object-pgmid= 'R3TR'. *ls_tr_object-object = ls_obj_existential-tlogo. *ls_tr_object-trkorr = pv_request. *ls_tr_object-as4pos = lv_as4pos. *ls_tr_object-obj_name = ls_obj_existential-objnm. *ls_tr_object-lockflag = 3. * *append ls_tr_objectto ct_tr_object. *endloop. **--------------------------------------------------------------------* *endif. endif. endif. endform." ACTIVATE *>>>> END OF INSERTION
  • clear: lv_row. *-- loop atpt_tokes assigning where str = 'LOOP'. *account for insterted lines lv_row = -row. read table ct_abapsource into ls_abapsource indexlv_row. ifls_abapsource-line = 'LOOP AT G_T_ERRORLOG INTO l_s_error_lo g.' and sy-subrc = 0. *insert line after the ENDLOOP add 4 to lv_row. *blank row ls_insertlines = ''. append ls_insertlines to lt_insertlines. clear ls_insertlines. ls_insertlines = '* clear global message container used in trans fer rules'."> insert'. append ls_insertlines to lt_insertlines. clear ls_insertlines. ls_insertlines = 'CLEAR g_t_errorlog[].'. "> insert'. append ls_insertlines to lt_insertlines. insert lines of lt_insertlines into ct_abapsource index lv_row. clear lt_insertlines. *leave loop exit. endif. endloop. endform." FIX_TRANSFER_ROUTINES *>>>> END OF INSERTION
  • read table lt_aabap assigning index 1. if -line = '*$*$ begin of version'. read table lt_aabap assigning index 2. if -line = '*-- migration tool version 19.02.2009'. read table lt_aabap assigning index 3. if -line = '*$*$ end of version'. cv_migrated = 'X'. exit. else. cv_migrated = ''. exit. endif. else. cv_migrated = ''. exit. endif. else. cv_migrated = ''. exit. endif. *--------------------------------------------------------------------* endform." GET_MIGRATE_STATUS *>>>> END OF INSERTION if_rso_application_log~add_text exporting i_text = lv_text i_msgty= lv_msgty i_detlevel = ls_text-level. endloop. call method cl_rso_application_log=>if_rso_application_log~appl_log_sa ve. cl_rso_application_log=>appl_log_show_as_popup( ). endform." CALL_LOG *>>>> END OF INSERTION Display all changes by Note Assistant Note display functionality
  • *& ObjectREPS RSTRAN_ROUT_RSFO_CHECK *& Object Header PROG RSTRAN_ROUT_RSFO_CHECK *&--------------------------------------------------------------------* *>>>> START OF INSERTION > END OF INSERTION
  • DATA: l_extnumberTYPE bal_s_log-extnumber. DATA: l_tranid_tadir TYPE rstranid. 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. DATA: ls_tranruleTYPE rstranrule. DATA: lt_tranruleTYPE SORTED TABLE OF rstranrule WITH UNIQUE KEY tranid ruleid objvers. DATA: ls_steproutTYPE rstransteprout. DATA: lt_steproutTYPE SORTED TABLE OF rstransteprout WITH UNIQUE KEY tranid objvers ruleid stepid. *>>>> END OF INSERTION
  • 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.

  • SELECT SINGLE * FROM tadir INTO l_tadir WHERE pgmid = 'R3TR' AND object = 'DTRF' AND obj_name = l_tranid_tadir. ELSE. SELECT SINGLE * FROM tadir INTO l_tadir WHERE pgmid = 'R3TR' AND object = 'TRFN' AND obj_name = l_tranid_tadir. ENDIF. IF sy-subrc 0 OR l_tadir-devclass = '$TMP'. *CONCATENATE 'package of transformation =' l_tadir-devclass INTO l_string. *INSERT l_string INTO lt_text_all INDEX 2. l_msgty = rs_c_warning. ELSE. CONCATENATE 'package of transformation =' l_tadir-devclass INT O l_string. INSERT l_string INTO lt_text_all INDEX 2. l_msgty = rs_c_error. ENDIF. ENDIF. *ELSE. *l_msgty = rs_c_error. *ENDIF. LOOP AT lt_text_all INTO l_string. IF sy-tabix = 1. l_detlevel = 2. ELSE. l_detlevel = 3. ENDIF. l_text = l_string. CALL METHOD cl_rso_application_log=>if_rso_application_log~add_t ext EXPORTING i_text = l_text i_msgty= l_msgty i_detlevel = l_detlevel. ENDLOOP. IF simulate IS INITIAL AND ( l_msgty = rs_c_error OR repair_w IS N OT INITIAL ). LOOP AT lt_formula INTO ls_formula WHERE tranid= ls_tran-tranid AND objvers = ls_tran-objvers. UPDATE rsaform SET formtp = rsfo_c_formtp-transformation WHERE formula_id = ls_formula-formula_id AND objvers= ls_formula-objvers. IF sy-dbcnt > 1. ROLLBACK WORK. MESSAGE x051(rstran) WITH 'invalid processing'. EXIT. ENDIF. ENDLOOP. *-- activate PERFORMactivate IN PROGRAM rstran_migration_repair USING ls_tran-tranid ls_tran-objvers rs_c_true rs_c_false rs_c_true"with transport CHANGING gt_text_all. ENDIF. ENDIF. ENDLOOP. PERFORM log_call IN PROGRAM rstran_migration_repair USING gt_text_all. *>>>> END OF INSERTION
  • *>>> END OF INSERTION
  • 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=

  • EXCEPTIONS rsfo_invalid_unique_id = 1 OTHERS = 2 . IF sy-subrc = 0. CLEAR p_inconsistent. ELSE. p_inconsistent = rs_c_true. ENDIF. ENDIF. ELSE. IF l_missing_sfobu = rs_c_true. p_inconsistent = l_missing_sfobu. ENDIF. ENDIF. ENDFORM."formula_check *>>>> END OF INSERTION Display all changes by Note Assistant Note display functionality >> START OF DELETION END OF DELETION
  • END OF ts_text, tt_text TYPE TABLE OF ts_text. DATA: gs_textTYPE ts_text, gt_textTYPE tt_text, *>>>> END OF DELETION
  • ENDLOOP. CALL METHOD cl_rso_application_log=>if_rso_application_log~appl_log_save . cl_rso_application_log=>appl_log_show_as_popup( ). *>>>> END OF DELETION
  • 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.

  • PERFORM activate_dtp USINGls_dtp-dtp ls_dtp-objvers CHANGING gt_text_all l_subrc. IF l_subrc 0. l_text = 'error / warning occurred, activate manually with DTP U I'. CALL METHOD cl_rso_application_log=>if_rso_application_log~add_t ext EXPORTING i_text = l_text i_msgty= rs_c_error i_detlevel = '3'. ENDIF. PERFORM write_to_log CHANGING gt_text_all. ENDLOOP. CALL METHOD cl_rso_application_log=>if_rso_application_log~appl_log_sa ve. cl_rso_application_log=>appl_log_show_as_popup( ). cl_rso_application_log=>appl_log_delete( ). *>>>> END OF INSERTION
  • EXPORTING i_with_cto= rs_c_false i_force_activation= 'X' i_show_check_protocol = '' i_detlevel= '3' IMPORTING e_th_tlogo_error= lt_tlogo. CATCH cx_rs_cancelled . EXIT. ENDTRY. IF lt_tlogo IS NOT INITIAL. cv_subrc = 99. ENDIF. ENDIF. ENDFORM." ACTIVATE_DTP *>>>> END OF INSERTION
  • *>>>> END OF INSERTION
  • gs_text-id = gs_tran-tranid. *>>>> END OF INSERTION >>> END OF INSERTION
  • id(40)TYPE c, textTYPE string, type(8) TYPE c, status(20)TYPE c, level TYPE c, END OF ts_text. TYPES: tt_text TYPE TABLE OF ts_text. TYPES: tt_tokesTYPE STANDARD TABLE OFstokes WITH NON-UNIQUE DEFAULT KEY. *>>>> END OF INSERTION
  • 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. * * **--------------------------------------------------------------------* **get the dependent routines and add them to the list for the transport *try. *call method lr_rstran_trfn->if_rso_tlogo_general~get_relate d *importing *e_t_obj_existential = lt_obj_existential. * *catch cx_rs_version_not_found . *catch cx_rs_msg . *endtry. * *loop at lt_obj_existential into ls_obj_existential. * *add 1 to lv_as4pos. * *ls_tr_object-pgmid= 'R3TR'. *ls_tr_object-object = ls_obj_existential-tlogo. *ls_tr_object-trkorr = pv_request. *ls_tr_object-as4pos = lv_as4pos. *ls_tr_object-obj_name = ls_obj_existential-objnm. *ls_tr_object-lockflag = 3. * *append ls_tr_objectto ct_tr_object. *endloop. **--------------------------------------------------------------------* *endif. endif. endif. endform." ACTIVATE *>>>> END OF DELETION
  • exporting i_text = lv_text i_msgty= lv_msgty i_detlevel = ls_text-level. endloop. *>>>> END OF DELETION
  • 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

  • EXPORTING i_with_cto= pv_with_cto i_force_activation= 'X' i_show_check_protocol = '' i_detlevel= '3' IMPORTING e_th_tlogo_error= lt_tlogo. CATCH cx_rs_cancelled . EXIT. ENDTRY. ENDIF. IF lt_tlogo IS NOT INITIAL. cv_subrc = 99. ENDIF. ENDIF. ENDIF. ENDFORM." ACTIVATE *>>>> END OF INSERTION
  • DATA: l_inconsistent TYPE rs_bool. DATA: l_inconsistent_stepTYPE rs_bool. *>>>> START OF DELETION END OF DELETION
  • l_string = 'global parts are orphanded'. APPEND l_string TO lt_text. l_inconsistent = rs_c_true. l_save_mode= 'F'. l_orphaned_global_part = rs_c_true. CLEAR: ls_tran-glbcode, ls_tran-glbcode2. ENDIF. ENDIF. ENDIF. *>>>> END OF INSERTION
  • IF sy-subrc = 0 AND ls_tran-shadow_tranid IS INITIAL. *>>>> END OF INSERTION
  • ENDIF. *>>>> END OF INSERTION >>> END OF INSERTION
  • *$ Valid for :$* *$ Software Component SAP_BW Business Information Warehouse $* *$Release 711SAPKW71104 - SAPKW71104$* *$*$----------------------------------------------------------------$*$* *&--------------------------------------------------------------------* *& ObjectREPS RSTRAN_ROUT_RSFO_CHECK *& Object Header PROG RSTRAN_ROUT_RSFO_CHECK *&--------------------------------------------------------------------* *& REPORT RSTRAN_ROUT_RSFO_CHECK *&--------------------------------------------------------------------* ... REPORTrstran_rout_rsfo_check. *>>>> START OF DELETION END OF DELETION
  • 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.

  • *AT SELECTION-SCREEN ON VALUE-REQUEST FOR Src_Type-high. *CALL METHOD CL_RSTRAN_STAT=>GET_OBJECTS *EXPORTING *objvrs = rs_c_objvers-modified *CHANGING *SOURCETYPE = Src_Type-high. IF cl_rso_application_log=>appl_log_get_log_handle( ) IS INITIAL. CALL METHOD cl_rso_application_log=>appl_log_create EXPORTING i_object= rstr_c_appl_log_trfn i_subobject = rstr_c_appl_log_trfn_content i_extnumber = l_extnumber. ENDIF. SELECT * FROMrstran INTO TABLE lt_tran_sel WHEREobjvers= rs_c_objvers-active ANDobjstat= objstat ANDtranid IN tran_id ANDsourcetype IN src_type ANDsourcename IN src_name ANDtargettype IN trg_type ANDtargetname IN trg_name ANDis_shadow= space. lt_tran = lt_tran_sel. LOOP AT lt_tran INTO ls_tran. * -- CLEAR: lt_text[], lt_text_all[]. 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. LOOP AT lt_text_all INTO l_string. IF sy-tabix = 1. l_detlevel = 2. ELSE. l_detlevel = 3. ENDIF. l_text = l_string. 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. 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 rs_c_false"without transport CHANGING gt_text. *ELSEIF icon_simulate IS INITIAL AND g_context_not_found IS NOT INITIAL. *ROLLBACK WORK. * ENDIF. * ENDIF. * ENDLOOP. CALL METHOD cl_rso_application_log=>if_rso_application_log~appl_log_save . cl_rso_application_log=>appl_log_show_as_popup( ). *>>>> END OF INSERTION Display all changes by Note Assistant Note display functionality
  • *$ Software Component SAP_BW Business Information Warehouse $* *$Release 700SAPKW70017 - SAPKW70023$* *$Release 701SAPKW70102 - SAPKW70106$* *$*$----------------------------------------------------------------$*$* *&--------------------------------------------------------------------* *& ObjectREPS RSDG_TRFN_ACTIVATE *& Object Header PROG RSDG_TRFN_ACTIVATE *&--------------------------------------------------------------------* *& REPORT RSDG_TRFN_ACTIVATE *&--------------------------------------------------------------------* ... REPORTrsdg_trfn_activate. *>>>> START OF DELETION END OF DELETION
  • *>>>> 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

  • rs_c_false"without transport CHANGING gt_text. *ELSEIF icon_simulate IS INITIAL AND g_context_not_found IS NOT INITIAL. *ROLLBACK WORK. * ENDIF. * ENDIF. * ENDLOOP. CALL METHOD cl_rso_application_log=>if_rso_application_log~appl_log_save . cl_rso_application_log=>appl_log_show_as_popup( ). *>>>> END OF DELETION
  • 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.

  • 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. PERFORM activate_dtp USINGls_dtp-dtp ls_dtp-objvers CHANGING gt_text_all l_subrc. IF l_subrc 0. l_text = 'error / warning occurred, activate manually with DTP U I'. CALL METHOD cl_rso_application_log=>if_rso_application_log~add_t ext EXPORTING i_text = l_text i_msgty= rs_c_error i_detlevel = '3'. ENDIF. PERFORM write_to_log CHANGING gt_text_all. ENDLOOP. CALL METHOD cl_rso_application_log=>if_rso_application_log~appl_log_sa ve. cl_rso_application_log=>appl_log_show_as_popup( ). cl_rso_application_log=>appl_log_delete( ). *>>>> END OF INSERTION
  • ls_text-level = 3. APPEND ls_text TO ct_text. CLEAR ls_text. ELSE. TRY. CALL METHOD lr_collection->activate EXPORTING i_with_cto= rs_c_false i_force_activation= 'X' i_show_check_protocol = '' i_detlevel= '3' IMPORTING e_th_tlogo_error= lt_tlogo. CATCH cx_rs_cancelled . EXIT. ENDTRY. IF lt_tlogo IS NOT INITIAL. cv_subrc = 99. ENDIF. ENDIF. ENDFORM." ACTIVATE_DTP *>>>> END OF INSERTION
  • 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