|
Yazar Administrator
|
|
Salı, 18 Aralık 2007 |
|
This program creates a background job to mass delete PSA after BW data load. REPORT ZDELPSA. *&-------------------------------------------------- *& Programme : ZDELPSA *& Type de programme : Utilitaire de purge *& Auteur : François Henrotte (EPONA Solutions) *& Description du programme : purge en masse des PSA *&--------------------------------------------------
TABLES : RSREQICODS, " table des PSA a traiter RSPSADEL. " tables des PSA a mettre à jour DATA: SUBRC LIKE SY-SUBRC, JOBNAME LIKE TBTCJOB-JOBNAME, JOBCOUNT LIKE TBTCJOB-JOBCOUNT, PROGNAME LIKE TRDIR-NAME VALUE 'RADBAT01', PROGVARIANT LIKE RALDB-VARIANT VALUE ' ', USERNAME LIKE TBATG-GUSER, CALL_MODE LIKE TBATG-EXECMODE VALUE 'B', MODE_FLAG LIKE DDXTT-MODEFLAG, RETURNCODE(1) TYPE C, PROTNAME LIKE TSTRF01-FILE. DATA: OBJ_NAME LIKE TBATG-TABNAME, OBJ_TYPE LIKE TBATG-OBJECT, JOB_RELEASED TYPE C. DATA: WV_COMPT(10) TYPE N. DATA: BEGIN OF WT_RSREQICODS OCCURS 0, TABNAME LIKE RSREQICODS-TABNAME, END OF WT_RSREQICODS. DATA: WT_RSPSADEL LIKE RSPSADEL OCCURS 0 WITH HEADER LINE.
SELECTION-SCREEN: BEGIN OF BLOCK B01 WITH FRAME TITLE TEXT-001. SELECT-OPTIONS: S_TAB FOR RSREQICODS-TABNAME. PARAMETERS: P_NBDAY(3) TYPE N DEFAULT 8. SELECTION-SCREEN: END OF BLOCK B01, SKIP, BEGIN OF BLOCK B02 WITH FRAME TITLE TEXT-002. PARAMETERS: P_TEST RADIOBUTTON GROUP G1, P_REEL RADIOBUTTON GROUP G1. SELECTION-SCREEN: END OF BLOCK B02.
** Début de la selection
START-OF-SELECTION.
** init de la table CLEAR WT_RSREQICODS. REFRESH WT_RSREQICODS. JOBNAME = 'PURGE_PSA'.
** chargement de la table interne SELECT DISTINCT TABNAME INTO TABLE WT_RSREQICODS FROM RSREQICODS WHERE TYP = 'O' AND TABNAME IN S_TAB ORDER BY TABNAME.
** cherche les lignes correspondantes pour les PSA SELECT * INTO TABLE WT_RSPSADEL FROM RSPSADEL FOR ALL ENTRIES IN WT_RSREQICODS WHERE ODSNAME = WT_RSREQICODS-TABNAME.
** compléter la table si l'enregistrement n'existe pas LOOP AT WT_RSREQICODS. READ TABLE WT_RSPSADEL WITH KEY ODSNAME = WT_RSREQICODS-TABNAME. IF SY-SUBRC NE 0. WT_RSPSADEL-ODSNAME = WT_RSREQICODS-TABNAME. APPEND WT_RSPSADEL. ENDIF. ENDLOOP.
** mettre à jour la table rspsadel IF NOT P_REEL IS INITIAL. LOOP AT WT_RSPSADEL. MOVE P_NBDAY TO WT_RSPSADEL-OLDER_DAYS. MOVE 'X' TO WT_RSPSADEL-FLAG_OLDER. MOVE JOBNAME TO WT_RSPSADEL-JOBNAME. UPDATE RSPSADEL FROM WT_RSPSADEL. IF SY-SUBRC NE 0. MOVE SY-UNAME TO WT_RSPSADEL-UNAME. INSERT RSPSADEL FROM WT_RSPSADEL. ENDIF. ENDLOOP. IF SY-SUBRC NE 0. MESSAGE S456(AM). EXIT. ENDIF. ENDIF.
** END-OF-SELECTION.
** compteur de lignes CLEAR WV_COMPT. DESCRIBE TABLE WT_RSREQICODS LINES WV_COMPT.
** affichage nombre de lignes WRITE :/ TEXT-T01, WV_COMPT. ULINE. SKIP 1.
** open job for RADBAT01 via function call IF NOT P_REEL IS INITIAL. CALL FUNCTION 'JOB_OPEN' EXPORTING JOBNAME = JOBNAME IMPORTING JOBCOUNT = JOBCOUNT EXCEPTIONS CANT_CREATE_JOB = 01 INVALID_JOB_DATA = 02 JOBNAME_MISSING = 03. ENDIF.
LOOP AT WT_RSREQICODS. * si mode reel alors lancement IF NOT P_REEL IS INITIAL.
* lancement du programme pour suppression SUBMIT RSPSADEL1 VIA JOB JOBNAME NUMBER JOBCOUNT WITH I_PSA = WT_RSREQICODS-TABNAME AND RETURN.
ELSE. WRITE :/ WT_RSREQICODS-TABNAME. ENDIF. ENDLOOP.
IF NOT P_REEL IS INITIAL. ** On ferme le job et on tente de le lancer automatiquement CALL FUNCTION 'JOB_CLOSE' EXPORTING JOBNAME = JOBNAME JOBCOUNT = JOBCOUNT SDLSTRTDT = SY-DATUM SDLSTRTTM = SY-UZEIT STRTIMMED = 'X' IMPORTING JOB_WAS_RELEASED = JOB_RELEASED EXCEPTIONS CANT_START_IMMEDIATE = 01 INVALID_STARTDATE = 02 JOBNAME_MISSING = 03 JOB_CLOSE_FAILED = 04 JOB_NOSTEPS = 05 JOB_NOTEX = 06 LOCK_FAILED = 07. ENDIF. |
|
Son Güncelleme ( Salı, 25 Aralık 2007 )
|