Display import status, for change request, into systems
REPORT ZIMPVIEW NO STANDARD PAGE HEADING.
************************************************************************
* Change request overview - Import to systems in TPPARAM *
************************************************************************
* Author *
* Tomas Gustafsson - Implema AB *
* Description *
* This is only a template. No support is given for this function!!! *
* *
* The program reads change requests according to specificed *
* parameter. Then, for each change request, the related "cofile" is *
* read and all "import status" entries are read. *
* *
* Please note *
* If an change request has been imported several times, only the *
* last status is shown. *
* E g *
* If the first import ended with error the next one with warning *
* and the last one with status o k, O k will be shown on the list!! *
* *
* Sorting *
* 1 - User ascending *
* 2 - Change request number descending (backwards) *
************************************************************************
*----------------------------------------------------------------------*
* Ver Date Who What *
*----------------------------------------------------------------------*
* 002 19980605 Tomas.G Syncronized ver with the rest of the package*
* 003 *
*----------------------------------------------------------------------*
TABLES: E070, " Change Requests
USR02, " Users
USGRP. " User Groups
RANGES: R_USERS FOR USR02-BNAME.
DATA: TP_HEADER LIKE TSTRFCOFIH OCCURS 0 WITH HEADER LINE,
TP_LINES LIKE TSTRFCOFIL OCCURS 0 WITH HEADER LINE,
I_E070 LIKE E070 OCCURS 0 WITH HEADER LINE,
I_TSYST LIKE TSYST OCCURS 0 WITH HEADER LINE,
POS_COUNT TYPE I,
STEP_TEXT(60).
PARAMETERS: USERGRP LIKE USGRP-USERGROUP,
USER LIKE USR01-BNAME DEFAULT SY-UNAME,
TRKORR LIKE E070-TRKORR MEMORY ID KOR.
************************************************************************
* T O P - O F - P A G E *
************************************************************************
TOP-OF-PAGE.
WRITE: / 'Change Request Overview - Import to systems in TPPARAM'.
SKIP.
WRITE: / 'Parameters used:',
'Usergroup =', USERGRP,
'User =', USER,
'Change request =', TRKORR.
PERFORM WRITE_SYSTEM_LINE.
************************************************************************
* S T A R T - O F - S E L E C T I O N *
************************************************************************
START-OF-SELECTION.
PERFORM CHECK_PARAMETERS.
PERFORM READ_SID_FROM_TPPARAM.
LOOP AT I_TSYST WHERE SYSNAME EQ 'SAP' OR SYSNAME EQ 'DUM'.
DELETE I_TSYST.
ENDLOOP.
SORT I_TSYST.
IF USERGRP EQ SPACE.
IF USER EQ SPACE.
SELECT * FROM E070 INTO TABLE I_E070
WHERE TRKORR EQ TRKORR
AND TRSTATUS EQ 'R'
AND TRFUNCTION IN ('K','W','C','T')
ORDER BY AS4USER ASCENDING TRKORR DESCENDING.
IF SY-SUBRC NE 0.
WRITE: / 'Change request', TRKORR, 'not found or not released'.
STOP.
ENDIF.
ELSE.
SELECT * FROM E070 INTO TABLE I_E070
WHERE TRSTATUS EQ 'R'
AND TRFUNCTION IN ('K','W','C','T')
AND AS4USER = USER
ORDER BY AS4USER ASCENDING TRKORR DESCENDING.
IF SY-SUBRC NE 0.
WRITE: / 'No change requests (released ?) found for user', USER.
STOP.
ENDIF.
ENDIF. " User eq space
ELSE.
* Find user for specified usergroup
SELECT * FROM USR02 WHERE CLASS = USERGRP.
R_USERS-LOW = R_USERS-HIGH = USR02-BNAME.
R_USERS-OPTION = 'EQ'.
R_USERS-SIGN = 'I'.
APPEND R_USERS.
ENDSELECT.
IF SY-SUBRC NE 0.
WRITE: / 'No users found for usergroup', USERGRP.
STOP.
ENDIF.
* Find change requests for users in the usergroup.
SELECT * FROM E070 INTO TABLE I_E070
WHERE TRSTATUS EQ 'R'
AND TRFUNCTION IN ('K','W','C','T')
AND AS4USER IN R_USERS
ORDER BY AS4USER ASCENDING TRKORR DESCENDING.
IF SY-SUBRC NE 0.
WRITE: / 'No released change-requests found for any of users:'.
ULINE.
LOOP AT R_USERS.
WRITE: / R_USERS-LOW.
ENDLOOP.
STOP.
ENDIF.
ENDIF. " Usergrp eq space
SORT I_E070 BY AS4USER TRKORR DESCENDING.
LOOP AT I_E070.
ON CHANGE OF I_E070-AS4USER.
IF SY-TABIX GT 1.
SKIP.
ENDIF.
ENDON.
PERFORM READ_COFILE USING I_E070-TRKORR.
LOOP AT TP_LINES WHERE FUNCTION = 'I'.
ON CHANGE OF TP_HEADER-TRKORR.
WRITE: / I_E070-TRKORR, I_E070-AS4USER.
ENDON.
READ TABLE I_TSYST WITH KEY SYSNAME = TP_LINES-TARSYSTEM.
IF SY-SUBRC EQ 0.
PERFORM CALC_SYS_POS USING SY-TABIX POS_COUNT.
POSITION POS_COUNT.
IF TP_LINES-RETCODE GE 12.
WRITE ' X ' COLOR COL_GROUP ON.
ELSEIF TP_LINES-RETCODE GE 8.
WRITE ' X ' COLOR COL_NEGATIVE ON.
ELSEIF TP_LINES-RETCODE GE 4.
WRITE ' X ' COLOR COL_TOTAL ON.
ELSE.
WRITE ' X ' COLOR OFF.
ENDIF.
* write 'X' as checkbox.
* write: (3) tp_lines-tarsystem.
ENDIF.
* perform print_cofile.
* uline. skip 2.
ENDLOOP.
IF SY-SUBRC NE 0.
WRITE: / I_E070-TRKORR, I_E070-AS4USER.
ENDIF.
ENDLOOP.
ULINE.
WRITE: / 'Yellow' COLOR COL_TOTAL, 'return code = 4',
/ 'Red ' COLOR COL_NEGATIVE, 'return code = 8',
/ 'Purple' COLOR COL_GROUP, 'return code = 12'.
ULINE.
*----------------------------------------------------------------------*
* FORM READ_COFILE *
*----------------------------------------------------------------------*
* Read the cofile of an change request and put all the lines in *
* internal table tp_lines *
*----------------------------------------------------------------------*
* -- w_trkorr change request number *
*----------------------------------------------------------------------*
* -- tp_header Cofile header *
* tp_lines Cofile entries *
*----------------------------------------------------------------------*
FORM READ_COFILE USING W_TRKORR.
CALL FUNCTION 'STRF_READ_COFILE'
EXPORTING
IV_DIRTYPE = 'T'
IV_TRKORR = W_TRKORR
IMPORTING
EV_COFI_HEADER = TP_HEADER
TABLES
TT_COFI_LINES = TP_LINES
EXCEPTIONS
WRONG_CALL = 1
NO_INFO_FOUND = 2
OTHERS = 3.
ENDFORM.
*----------------------------------------------------------------------*
* FORM PRINT_COFILE *
*----------------------------------------------------------------------*
* Print the contents of the cofile (previously read) using *
* record tp_header and internal table tp_lines. *
*----------------------------------------------------------------------*
FORM PRINT_COFILE.
WRITE: / TP_HEADER-TRKORR,
TP_HEADER-TARSYSTEM,
(4) TP_HEADER-OBJCOUNT_A,
(4) TP_HEADER-OBJCOUNT_G,
(4) TP_HEADER-OBJCOUNT_D,
(4) TP_HEADER-OBJCOUNT_Q,
(4) TP_HEADER-OBJCOUNT_R,
(4) TP_HEADER-OBJCOUNT_C,
(4) TP_HEADER-OBJCOUNT_T,
(4) TP_HEADER-OBJCOUNT_M,
(4) TP_HEADER-OBJCOUNT_Z.
SORT TP_LINES.
LOOP AT TP_LINES.
AT NEW TARSYSTEM.
WRITE: / SY-VLINE NO-GAP UNDER TP_HEADER-TARSYSTEM,
/ SY-VLINE NO-GAP UNDER TP_HEADER-TARSYSTEM,
(2) SY-ULINE NO-GAP,
TP_LINES-TARSYSTEM COLOR COL_KEY,
/ SY-VLINE NO-GAP UNDER TP_HEADER-TARSYSTEM,
SY-VLINE NO-GAP UNDER TP_LINES-TARSYSTEM.
ENDAT.
AT NEW RETCODE.
PERFORM WRITE_STEP_DESCRIPTION(RDDPROTL)
USING STEP_TEXT TP_LINES-FUNCTION.
WRITE: / SY-VLINE UNDER TP_HEADER-TARSYSTEM NO-GAP,
SY-VLINE UNDER TP_LINES-TARSYSTEM NO-GAP,
(2) SY-ULINE NO-GAP.
IF TP_LINES-RETCODE 4.
FORMAT COLOR COL_NEGATIVE ON.
ELSEIF TP_LINES-RETCODE 0.
FORMAT COLOR COL_TOTAL ON.
ENDIF.
WRITE: (21) STEP_TEXT.
WRITE (4) TP_LINES-RETCODE.
FORMAT COLOR OFF.
ENDAT.
AT END OF TARSYSTEM.
WRITE: / SY-VLINE UNDER TP_HEADER-TARSYSTEM.
ENDAT.
ENDLOOP.
ENDFORM.
*----------------------------------------------------------------------*
* FORM CHECK_PARAMETERS
*----------------------------------------------------------------------*
* Check input parameters
*----------------------------------------------------------------------*
FORM CHECK_PARAMETERS.
IF USERGRP = SPACE AND USER = SPACE AND TRKORR = SPACE.
WRITE: / 'Can not run the program without parameter'.
STOP.
ELSE.
IF NOT
( ( USERGRP EQ SPACE AND USER EQ SPACE AND TRKORR NE SPACE ) OR
( USERGRP EQ SPACE AND USER NE SPACE AND TRKORR EQ SPACE ) OR
( USERGRP NE SPACE AND USER EQ SPACE AND TRKORR EQ SPACE ) ).
WRITE: / 'It is not allowed to enter more then one parameter'.
STOP.
ENDIF.
ENDIF.
ENDFORM.
*----------------------------------------------------------------------*
* FORM WRITE_SYSTEM_LINE *
*----------------------------------------------------------------------*
* Write the line with available system names *
*----------------------------------------------------------------------*
* -- username Owner of the change requests to display. *
*----------------------------------------------------------------------*
FORM WRITE_SYSTEM_LINE.
ULINE.
WRITE: / 'ChangeReq. Username'.
LOOP AT I_TSYST.
PERFORM CALC_SYS_POS USING SY-TABIX POS_COUNT.
POSITION POS_COUNT.
WRITE (3) I_TSYST-SYSNAME.
ENDLOOP.
ULINE.
ENDFORM.
*----------------------------------------------------------------------*
* FORM READ_SID_FROM_TPPARAM *
*----------------------------------------------------------------------*
* Read system names from TPPARAM files (TSYST not up-to-date. *
*----------------------------------------------------------------------*
* -- i_tsyst * Interna table with system names *
*----------------------------------------------------------------------*
FORM READ_SID_FROM_TPPARAM.
DATA: TEXTLINE(255),
TEMP_LENGTH LIKE SY-FDPOS,
TEMP1(52),
FILENAME(64).
* find path of trans-directory and create full path
CALL 'C_SAPGPARAM' ID 'NAME' FIELD 'DIR_TRANS'
ID 'VALUE' FIELD TEMP1.
IF TEMP1 EQ SPACE.
FILENAME = '/usr/sap/trans/bin/TPPARAM'.
ELSE.
CONCATENATE TEMP1 '/bin/TPPARAM' INTO FILENAME.
CONDENSE FILENAME NO-GAPS.
ENDIF.
REFRESH I_TSYST.
OPEN DATASET FILENAME IN TEXT MODE FOR INPUT.
DO.
READ DATASET FILENAME INTO TEXTLINE.
IF SY-SUBRC NE 0.
EXIT.
ENDIF.
CHECK TEXTLINE(1) NE '#'.
IF TEXTLINE CS '/dbhost'.
TEMP_LENGTH = SY-FDPOS.
MOVE TEXTLINE(TEMP_LENGTH) TO I_TSYST-SYSNAME.
CONDENSE I_TSYST-SYSNAME.
APPEND I_TSYST.
ENDIF.
ENDDO.
CLOSE DATASET FILENAME.
* Check if any system was found
READ TABLE I_TSYST INDEX 1.
IF SY-SUBRC NE 0.
WRITE: / 'No systems found in file TPPARAM'.
STOP.
ENDIF.
ENDFORM.
*----------------------------------------------------------------------*
* FORM CALC_SYS_POS *
*----------------------------------------------------------------------*
* Calculate position for printing system name or import status *
*----------------------------------------------------------------------*
* -- index_in_table Index in table *
* -- pos_result Position *
*----------------------------------------------------------------------*
FORM CALC_SYS_POS USING INDEX_IN_TABLE POS_RESULT.
POS_RESULT = 25 + ( ( INDEX_IN_TABLE - 1 ) * 4 ).
ENDFORM.
*** End of ZIMPVIEW ***