shadow_left
Logo
Shadow_R
   
Source: Delete PSA PDF Yazdır E-posta
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 )
 
< Önceki   Sonraki >