1. Compare DSO between Dev & Prod
Specify the DSO names along with RFC Connection. F4 help is available for choosing the RFC connection.
Login to the remote system:
2. Compare two different DSOs in the same system.
Give the DSO name
Output:
Info objects missing in DSO 1:
Copy paste this code in an executable program.
ABAP Code |
---|
*&---------------------------------------------------------------------* *& Report ZBW_DSO_CHECK_V2 *& *&---------------------------------------------------------------------* *& Author : Rahul Rajagoapalan Nair *& Date : 03 Aug 2012 *&---------------------------------------------------------------------* REPORT ZBW_DSO_CHECK_V2. TYPE-POOLS : SLIS, ICON. TYPES : BEGIN OF TY_DSO_COMP, STATUS TYPE CHAR4, IOBJNM TYPE RSDODSOIOBJ-IOBJNM, S_POSIT TYPE RSDODSOIOBJ-POSIT, S_IOBJNM TYPE RSDODSOIOBJ-IOBJNM, S_KEYFLAG TYPE RSDODSOIOBJ-KEYFLAG, T_POSIT TYPE RSDODSOIOBJ-POSIT, T_IOBJNM TYPE RSDODSOIOBJ-IOBJNM, T_KEYFLAG TYPE RSDODSOIOBJ-KEYFLAG, END OF TY_DSO_COMP. DATA : IT_S_DSO TYPE STANDARD TABLE OF RSDODSOIOBJ, IT_T_DSO TYPE STANDARD TABLE OF RSDODSOIOBJ. DATA : WA_S_DSO TYPE RSDODSOIOBJ, WA_T_DSO TYPE RSDODSOIOBJ. DATA : LV_S_LINE TYPE N, LV_T_LINE TYPE N. DATA : CV_METADATA_TAB TYPE DD02L-TABNAME VALUE 'RSDODSOIOBJ'. DATA : IT_OPTIONS TYPE STANDARD TABLE OF RFC_DB_OPT. "72 CHAR per line DATA : WA_OPTIONS TYPE RFC_DB_OPT. "72 CHAR per line DATA : IT_DSO_COMP TYPE STANDARD TABLE OF TY_DSO_COMP. DATA : WA_DSO_COMP TYPE TY_DSO_COMP. FIELD-SYMBOLS : <FS_DSO_COMP> TYPE TY_DSO_COMP. DATA : IT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV, WA_FIELDCAT TYPE SLIS_FIELDCAT_ALV. "FIELD CATALOG DATA : IT_SORT TYPE SLIS_T_SORTINFO_ALV , WA_SORT TYPE SLIS_SORTINFO_ALV. DATA : LV_ERR_MSG TYPE STRING, CV_SRC TYPE STRING VALUE 'Source DSO :', CV_TGT TYPE STRING VALUE 'Target DSO :'. *$*********************************************************************** *$*$ SELECTION SCREEN FOR SOURCE DSO *$*$********************************************************************* SELECTION-SCREEN : BEGIN OF BLOCK ssb1 WITH FRAME TITLE TEXT-001. PARAMETERS : P_S_DSO TYPE RSDODSOIOBJ-ODSOBJECT DEFAULT 'DSONAME' OBLIGATORY, P_S_VER TYPE C LENGTH 1 DEFAULT 'A' OBLIGATORY, P_S_SYS(32) TYPE C OBLIGATORY LOWER CASE MATCHCODE OBJECT F4_RFCDESTYPEALL DEFAULT 'DEVRFC'. SELECTION-SCREEN END OF BLOCK ssb1 . *$*********************************************************************** *$*$ SELECTION SCREEN FOR TARGET DSO *$*$********************************************************************* SELECTION-SCREEN : BEGIN OF BLOCK ssb2 WITH FRAME TITLE TEXT-002. PARAMETERS : P_T_DSO TYPE RSDODSOIOBJ-ODSOBJECT DEFAULT 'DSONAME' OBLIGATORY, P_T_VER TYPE C LENGTH 1 DEFAULT 'A' OBLIGATORY, P_T_SYS(32) TYPE C OBLIGATORY LOWER CASE MATCHCODE OBJECT F4_RFCDESTYPEALL DEFAULT 'PRODRFC'. SELECTION-SCREEN END OF BLOCK ssb2 . "********************************************************** "Source System CLEAR IT_OPTIONS. CLEAR IT_OPTIONS[]. CLEAR WA_OPTIONS. CONCATENATE ' ODSOBJECT = ''' P_S_DSO '''' INTO WA_OPTIONS-TEXT. "SEPARATED BY SPACE. APPEND WA_OPTIONS TO IT_OPTIONS. CLEAR WA_OPTIONS. CONCATENATE ' AND OBJVERS = ''' P_S_VER '''' INTO WA_OPTIONS-TEXT. APPEND WA_OPTIONS TO IT_OPTIONS. "RFC_READ_TABLE CALL FUNCTION 'RFC_READ_TABLE' DESTINATION P_S_SYS EXPORTING QUERY_TABLE = CV_METADATA_TAB TABLES OPTIONS = IT_OPTIONS DATA = IT_S_DSO EXCEPTIONS TABLE_NOT_AVAILABLE = 1 TABLE_WITHOUT_DATA = 2 OPTION_NOT_VALID = 3 FIELD_NOT_VALID = 4 NOT_AUTHORIZED = 5 DATA_BUFFER_EXCEEDED = 6 OTHERS = 7 . IF SY-SUBRC <> 0. CASE SY-SUBRC. WHEN 1. CONCATENATE 'Table Not Available :' CV_METADATA_TAB 'System :' P_S_SYS INTO LV_ERR_MSG SEPARATED BY SPACE. WHEN 2. CONCATENATE 'Table Without Data :' CV_METADATA_TAB 'System :' P_S_SYS INTO LV_ERR_MSG SEPARATED BY SPACE. WHEN 3. CONCATENATE 'Option Not Valid. Table :' CV_METADATA_TAB 'System :' P_S_SYS INTO LV_ERR_MSG SEPARATED BY SPACE. WHEN 4. CONCATENATE 'Field Not Valid. Table :' CV_METADATA_TAB 'System :' P_S_SYS INTO LV_ERR_MSG SEPARATED BY SPACE. WHEN 5. CONCATENATE 'Not Authorized. Table :' CV_METADATA_TAB 'System :' P_S_SYS INTO LV_ERR_MSG SEPARATED BY SPACE. WHEN 6. CONCATENATE 'Data Buffer Exceeded. Table :' CV_METADATA_TAB 'System :' P_S_SYS INTO LV_ERR_MSG SEPARATED BY SPACE. WHEN 7. CONCATENATE 'RFC Connection Not Maintained for System :' P_S_SYS '. Or Unknown Error.' INTO LV_ERR_MSG SEPARATED BY SPACE. ENDCASE. MESSAGE LV_ERR_MSG TYPE 'E'. ENDIF. "Source System "********************************************************** "********************************************************** "Target System CLEAR IT_OPTIONS. CLEAR IT_OPTIONS[]. CLEAR WA_OPTIONS. CONCATENATE ' ODSOBJECT = ''' P_T_DSO '''' INTO WA_OPTIONS-TEXT. "SEPARATED BY SPACE. APPEND WA_OPTIONS TO IT_OPTIONS. CLEAR WA_OPTIONS. CONCATENATE ' AND OBJVERS = ''' P_T_VER '''' INTO WA_OPTIONS-TEXT. APPEND WA_OPTIONS TO IT_OPTIONS. "RFC_READ_TABLE CALL FUNCTION 'RFC_READ_TABLE' DESTINATION P_T_SYS EXPORTING QUERY_TABLE = CV_METADATA_TAB TABLES OPTIONS = IT_OPTIONS DATA = IT_T_DSO EXCEPTIONS TABLE_NOT_AVAILABLE = 1 TABLE_WITHOUT_DATA = 2 OPTION_NOT_VALID = 3 FIELD_NOT_VALID = 4 NOT_AUTHORIZED = 5 DATA_BUFFER_EXCEEDED = 6 OTHERS = 7 . IF SY-SUBRC <> 0. CASE SY-SUBRC. WHEN 1. CONCATENATE 'Table Not Available :' CV_METADATA_TAB 'System :' P_T_SYS INTO LV_ERR_MSG SEPARATED BY SPACE. WHEN 2. CONCATENATE 'Table Without Data :' CV_METADATA_TAB 'System :' P_T_SYS INTO LV_ERR_MSG SEPARATED BY SPACE. WHEN 3. CONCATENATE 'Option Not Valid. Table :' CV_METADATA_TAB 'System :' P_T_SYS INTO LV_ERR_MSG SEPARATED BY SPACE. WHEN 4. CONCATENATE 'Field Not Valid. Table :' CV_METADATA_TAB 'System :' P_T_SYS INTO LV_ERR_MSG SEPARATED BY SPACE. WHEN 5. CONCATENATE 'Not Authorized. Table :' CV_METADATA_TAB 'System :' P_T_SYS INTO LV_ERR_MSG SEPARATED BY SPACE. WHEN 6. CONCATENATE 'Data Buffer Exceeded. Table :' CV_METADATA_TAB 'System :' P_T_SYS INTO LV_ERR_MSG SEPARATED BY SPACE. WHEN 7. CONCATENATE 'RFC Connection Not Maintained for System :' P_T_SYS '. Or Unknown Error.' INTO LV_ERR_MSG SEPARATED BY SPACE. ENDCASE. MESSAGE LV_ERR_MSG TYPE 'E'. ENDIF. "Target System "********************************************************** "Get all IOs CLEAR WA_DSO_COMP. LOOP AT IT_S_DSO INTO WA_S_DSO. WA_DSO_COMP-IOBJNM = WA_S_DSO-IOBJNM. APPEND WA_DSO_COMP TO IT_DSO_COMP. ENDLOOP. CLEAR WA_DSO_COMP. LOOP AT IT_T_DSO INTO WA_T_DSO. WA_DSO_COMP-IOBJNM = WA_T_DSO-IOBJNM. APPEND WA_DSO_COMP TO IT_DSO_COMP. ENDLOOP. SORT IT_DSO_COMP BY IOBJNM. DELETE ADJACENT DUPLICATES FROM IT_DSO_COMP COMPARING IOBJNM. SORT IT_S_DSO BY IOBJNM ASCENDING. DELETE ADJACENT DUPLICATES FROM IT_S_DSO COMPARING IOBJNM. SORT IT_T_DSO BY IOBJNM ASCENDING. DELETE ADJACENT DUPLICATES FROM IT_T_DSO COMPARING IOBJNM. LOOP AT IT_DSO_COMP ASSIGNING <FS_DSO_COMP>. CLEAR WA_S_DSO. CLEAR WA_T_DSO. "Read Source READ TABLE IT_S_DSO INTO WA_S_DSO WITH KEY IOBJNM = <FS_DSO_COMP>-IOBJNM. "Assign independent of Read Sucess or failure <FS_DSO_COMP>-S_IOBJNM = WA_S_DSO-IOBJNM. <FS_DSO_COMP>-S_POSIT = WA_S_DSO-POSIT. <FS_DSO_COMP>-S_KEYFLAG = WA_S_DSO-KEYFLAG. "Read Target READ TABLE IT_T_DSO INTO WA_T_DSO WITH KEY IOBJNM = <FS_DSO_COMP>-IOBJNM. "Assign independent of Read Sucess or failure <FS_DSO_COMP>-T_IOBJNM = WA_T_DSO-IOBJNM. <FS_DSO_COMP>-T_POSIT = WA_T_DSO-POSIT. <FS_DSO_COMP>-T_KEYFLAG = WA_T_DSO-KEYFLAG. IF <FS_DSO_COMP>-S_IOBJNM = <FS_DSO_COMP>-T_IOBJNM. <FS_DSO_COMP>-STATUS = ICON_GREEN_LIGHT."'S'. ELSE. <FS_DSO_COMP>-STATUS = ICON_RED_LIGHT."'D'. ENDIF. IF <FS_DSO_COMP>-S_KEYFLAG NE <FS_DSO_COMP>-T_KEYFLAG. <FS_DSO_COMP>-STATUS = ICON_RED_LIGHT."'D'. ENDIF. ENDLOOP. SORT IT_DSO_COMP BY IOBJNM. "********************************************************** "DISPLAY WA_FIELDCAT-COL_POS = 1. WA_FIELDCAT-KEY = 'X'. WA_FIELDCAT-FIELDNAME = 'STATUS'. WA_FIELDCAT-REPTEXT_DDIC = 'Status'. WA_FIELDCAT-ICON = 'X'. WA_FIELDCAT-OUTPUTLEN = 6. WA_FIELDCAT-TABNAME = 'IT_DSO_COMP'. APPEND WA_FIELDCAT TO IT_FIELDCAT. CLEAR WA_FIELDCAT. WA_FIELDCAT-COL_POS = 2. WA_FIELDCAT-KEY = 'X'. WA_FIELDCAT-FIELDNAME = 'IOBJNM'. WA_FIELDCAT-REPTEXT_DDIC = 'Info Object'. WA_FIELDCAT-OUTPUTLEN = 30. WA_FIELDCAT-TABNAME = 'IT_DSO_COMP'. APPEND WA_FIELDCAT TO IT_FIELDCAT. CLEAR WA_FIELDCAT. WA_FIELDCAT-COL_POS = 3. WA_FIELDCAT-FIELDNAME = 'S_POSIT'. CONCATENATE P_S_DSO '- Position :' P_S_SYS INTO WA_FIELDCAT-REPTEXT_DDIC SEPARATED BY SPACE. WA_FIELDCAT-OUTPUTLEN = 8. WA_FIELDCAT-TABNAME = 'IT_DSO_COMP'. APPEND WA_FIELDCAT TO IT_FIELDCAT. CLEAR WA_FIELDCAT. WA_FIELDCAT-COL_POS = 4. WA_FIELDCAT-FIELDNAME = 'S_IOBJNM'. CONCATENATE P_S_DSO '- Info Object :' P_S_SYS INTO WA_FIELDCAT-REPTEXT_DDIC SEPARATED BY SPACE. WA_FIELDCAT-OUTPUTLEN = 30. WA_FIELDCAT-TABNAME = 'IT_DSO_COMP'. APPEND WA_FIELDCAT TO IT_FIELDCAT. CLEAR WA_FIELDCAT. WA_FIELDCAT-COL_POS = 5. WA_FIELDCAT-FIELDNAME = 'S_KEYFLAG'. CONCATENATE P_S_DSO '- Key :' P_S_SYS INTO WA_FIELDCAT-REPTEXT_DDIC SEPARATED BY SPACE. WA_FIELDCAT-OUTPUTLEN = 10. WA_FIELDCAT-TABNAME = 'IT_DSO_COMP'. APPEND WA_FIELDCAT TO IT_FIELDCAT. CLEAR WA_FIELDCAT. WA_FIELDCAT-COL_POS = 6. WA_FIELDCAT-FIELDNAME = 'T_POSIT'. CONCATENATE P_T_DSO '- Position :' P_T_SYS INTO WA_FIELDCAT-REPTEXT_DDIC SEPARATED BY SPACE. WA_FIELDCAT-OUTPUTLEN = 8. WA_FIELDCAT-TABNAME = 'IT_DSO_COMP'. APPEND WA_FIELDCAT TO IT_FIELDCAT. CLEAR WA_FIELDCAT. WA_FIELDCAT-COL_POS = 7. WA_FIELDCAT-FIELDNAME = 'T_IOBJNM'. CONCATENATE P_T_DSO '- Info Object :' P_T_SYS INTO WA_FIELDCAT-REPTEXT_DDIC SEPARATED BY SPACE. WA_FIELDCAT-OUTPUTLEN = 30. WA_FIELDCAT-TABNAME = 'IT_DSO_COMP'. APPEND WA_FIELDCAT TO IT_FIELDCAT. CLEAR WA_FIELDCAT. WA_FIELDCAT-COL_POS = 8. WA_FIELDCAT-FIELDNAME = 'T_KEYFLAG'. CONCATENATE P_T_DSO '- Key :' P_T_SYS INTO WA_FIELDCAT-REPTEXT_DDIC SEPARATED BY SPACE. WA_FIELDCAT-OUTPUTLEN = 10. WA_FIELDCAT-TABNAME = 'IT_DSO_COMP'. APPEND WA_FIELDCAT TO IT_FIELDCAT. CLEAR WA_FIELDCAT. WA_SORT-SPOS = 1. WA_SORT-FIELDNAME = 'S_POSIT'. WA_SORT-TABNAME = 'IT_DSO_COMP'. WA_SORT-UP = 'X'. APPEND WA_SORT TO IT_SORT. CLEAR WA_SORT. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING I_CALLBACK_PROGRAM = SY-REPID I_GRID_TITLE = 'DSO Info Object Assignment Comparision' IT_FIELDCAT = IT_FIELDCAT IT_SORT = IT_SORT TABLES T_OUTTAB = IT_DSO_COMP EXCEPTIONS PROGRAM_ERROR = 1 OTHERS = 2 . IF SY-SUBRC <> 0. CASE SY-SUBRC. WHEN 1. LV_ERR_MSG = 'Program error during list generation.'. WHEN 2. LV_ERR_MSG = 'Unknown error during list generation.'. ENDCASE. MESSAGE LV_ERR_MSG TYPE 'E'. ENDIF. "DISPLAY "********************************************************** |
P_S_DSO | DSO |
P_S_SYS | System |
P_S_VER | Version |
P_T_DSO | DSO |
P_T_SYS | System |
P_T_VER | Version |
001 | Source DSO : |
002 | Target DSO : |
Acknowledgments
I would like to thank all my team mates and managers at Infosys for their constant support & encouragement.