Technique/SAP BW2012. 8. 3. 11:11

DSO Comparison

Posted by Rahul Nair in Rahul Rajagopalan Nair's Blog on Aug 2, 2012 10:26:20 PM

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.

 

01_01_Remote_System_IP.jpg

 

Login to the remote system:

 

01_02_Remote System_Login.jpg

 

  • 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.

 

01_03_Remote_System_OP_InfoObj.jpg


2. Compare two different DSOs in the same system.

 

 

Give the DSO name

 

02_01_Same_System_IP.jpg

 

Output:

 

Info objects missing in DSO 1:

 

02_03_Same_System_OP_InfoObj.jpg

 

 

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 SLISICON.

 

 

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

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

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






http://scn.sap.com/people/rahulrajagopalan.nair/blog/2012/08/02/dso-comparison?utm_source=twitterfeed&utm_medium=twitter

'Technique > SAP BW' 카테고리의 다른 글

SAP BW 7.3 Hybrid Provider  (0) 2012.05.23
Explorer with BWA  (0) 2012.05.11
Usage of BW7.3 Transformation Rule Type “Read from DataStore”  (0) 2012.05.10
Version management in SAP BW 7.3  (0) 2012.04.20
Queries/Workbooks a user can access  (0) 2012.04.20
Posted by AgnesKim