Additional Blogs by Members
cancel
Showing results for 
Search instead for 
Did you mean: 
Former Member

Usage


  • This tool can be used to compare DSO structures across different systems. e.g. Compare a DSOs structure in Dev v/s Prod/QA.
  • Essential pre-check before staring any development.
  • Prevent possible Go-live sync issues.
  • Prod sync checks in parallel-dev environments.

User Interface

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:

  • The output displays the list of Info objects and its presence/absence in DSO.
  • The list also shows the position of the info object in the DSO structure.
  • It also hows if the info object is a key field.


2. Compare two different DSOs in the same system.

Give the DSO name

Output:

Info objects missing in DSO 1:

Code

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 DEFAULT 'A' OBLIGATORY,

   P_S_SYS(32TYPE 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 DEFAULT 'A' OBLIGATORY,

   P_T_SYS(32TYPE 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

"**********************************************************

Text Elements

Selection Text

P_S_DSODSO
P_S_SYSSystem
P_S_VERVersion
P_T_DSODSO
P_T_SYSSystem
P_T_VERVersion

Text Elements

001Source DSO :
002Target DSO :

Pre-Requisites

  • RFC connection must be available between systems.
  • Check with your basis team for details regarding RFC connection

Acknowledgments

I would like to thank all my team mates and managers at Infosys for their constant support & encouragement.

1 Comment