SAP: Jobs im Status „freigegeben/suspendiert“ selektiv freigeben

SAP liefert die Standardreports

  • BTCTRNS1: Jobs in Status ‚ausgeplant wegen Upgrade‘ versetzen
  • BTCTRNS2: Jobs in Status ‚ausgeplant wegen Upgrade‘ freigeben

Dies beiden Jobs sind nützlich, um z.B. vor Upgrades oder dem Einspielen von Supportpackages alle freigegebenen Jobs in einen Status „suspended“ zu versetzen und danach wieder freizugeben.

Der Report BTCTRNS1 suspendiert alls Jobs mit Ausnahme der Jobs RDDIMPDP_CLIENT_*, die als Tranport-Dispatcher die Durchführung der Transporte koordinieren.

Mit dem Report BTCTRNS2 können nach den Systemarbeiten die Jobs wieder freigegeben werden. Der Report ermöglicht es aber nicht gezielt einen oder mehrere Jobs wieder freizugeben, sondern es können immer nur alle suspendierten Jobs zusammen released werden. Dies ist aber oft unerwünscht oder führt sofort danach zu Performanceproblemen im System.

Abhilfe schafft der Report ZZZOF_JOB_UNSUSPEND, der über einen Selektionsscreen die gezielte Freigabe einzelner Jobs ermöglicht. Zusätzlich können im Testmodus zur Überprüfung erst einmal die Jobs aufgelistet werden, die freigegeben werden würden.

REPORT ZZZOF_JOB_UNSUSPEND MESSAGE-ID bt.

*********************************************************
* Gibt Jobs im Status "suspendiert" wieder frei.
* ----------------------------------------------
*
* Beginn : 21.08.2007  OF
* Stand  : 21.08.2007
*
* 21.08.2007: Das Ursprungsprogramm, das nur einen Job
*             wieder freigeben konnte wurde auf Mehr-
*             fachselektion erweitert und Testmodus
*             eingeführt.
*********************************************************

tables: tbtco.

Select-options jobnam for tbtco-jobname default 'Jobname'.
Selection-Screen skip 1.

Parameter test as checkbox default 'X'.

DATA: SCHEDULED_JOBS_NO LIKE SY-DBCNT.

DATA: BEGIN OF JOBLIST OCCURS 100.
        INCLUDE STRUCTURE TBTCO.
DATA: END OF JOBLIST.

DATA:
  btc_running       LIKE tbtco-status VALUE 'R',
  btc_ready         LIKE tbtco-status VALUE 'Y',
  btc_scheduled     LIKE tbtco-status VALUE 'P',
  btc_released      LIKE tbtco-status VALUE 'S',
  btc_aborted       LIKE tbtco-status VALUE 'A',
  btc_finished      LIKE tbtco-status VALUE 'F',
  btc_put_active    LIKE tbtco-status VALUE 'Z',
  btc_unknown_state LIKE tbtco-status VALUE 'X'.

DATA: answer type c.

INCLUDE <ICON>.

if test = ' ' and sy-batch <> 'X'.
  CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'
    EXPORTING
    DEFAULTOPTION        = 'J'
      TEXTLINE1            =
             'Wollen Sie die Jobs wirklich wieder freigeben ?'
*   TEXTLINE2            = ' '
      TITEL                = 'Jobs wieder freigeben'
*   START_COLUMN         = 25
*   START_ROW            = 6
*   CANCEL_DISPLAY       = 'X'
  IMPORTING
      ANSWER               = answer.
  if answer <> 'J'.
    write: / ICON_INFORMATION as ICON,
            'Abbruch: Es wurden keine Jobs freigegeben.'.
    exit.
  endif.

endif.

SCHEDULED_JOBS_NO = 0.

SELECT * FROM TBTCO INTO TABLE JOBLIST
           WHERE STATUS EQ btc_put_active and jobname in jobnam.

CASE SY-SUBRC.
  WHEN 0. "Gefunden
  WHEN 4. "Keinen gefunden
    write: /'Job nicht gefunden oder nicht im Status Suspendiert'.
    EXIT.
  WHEN OTHERS.
    write: / 'Fehler -- Stopp'.
    EXIT.
ENDCASE.

if test <> ' '.
  write: / ICON_INFORMATION as ICON,
           'Nur Testlauf, Jobs bleiben suspendiert !'.
  write: /.
endif.

sort joblist by jobname.

LOOP AT JOBLIST.

  TBTCO        = JOBLIST.
  TBTCO-STATUS = BTC_RELEASED.

  CALL FUNCTION 'ENQUEUE_ESTBTCO'
       EXPORTING
            JOBNAME        = TBTCO-JOBNAME
            JOBCOUNT       = TBTCO-JOBCOUNT
            _WAIT          = 'X'
            _SCOPE         = '1'
       EXCEPTIONS
            FOREIGN_LOCK   = 1
            SYSTEM_FAILURE = 2
            OTHERS         = 99.
  CASE SY-SUBRC.
    WHEN 0.
      " Sperre erfolgreich gesetzt
      write:/ joblist-jobname, joblist-status, '-->'.

    WHEN 1.   " Sperre schon belegt
      MESSAGE A339 WITH TBTCO-JOBNAME RAISING JOB_ALREADY_LOCKED.
    WHEN OTHERS.  " Enqueue-Problem aufgetreten
      MESSAGE A111 WITH 'TBTCO' RAISING JOB_LOCK_PROBLEM.
  ENDCASE.

  if test = ' '.     " Es wird ernst
    UPDATE TBTCO.
  endif.

  IF SY-SUBRC = 0.
    SCHEDULED_JOBS_NO = SCHEDULED_JOBS_NO + 1.
  ELSE.
    CALL FUNCTION 'DEQUEUE_ESTBTCO'
         EXPORTING
              JOBNAME  = TBTCO-JOBNAME
              JOBCOUNT = TBTCO-JOBCOUNT
         EXCEPTIONS
              OTHERS   = 99.
    MESSAGE A342 WITH TBTCO-JOBNAME RAISING JOB_SCHEDULING_FAILED.
  ENDIF.

  CALL FUNCTION 'DEQUEUE_ESTBTCO'
       EXPORTING
            JOBNAME  = TBTCO-JOBNAME
            JOBCOUNT = TBTCO-JOBCOUNT
       EXCEPTIONS
            OTHERS   = 99.
  CASE SY-SUBRC.
    WHEN 0.
      " Sperre erfolgreich freigegeben
      if test = ' '.
        write: 'wieder freigegeben'.
      else.
        write: 'wäre wieder freigegeben'.
      endif.

    WHEN OTHERS.  " Enqueue-Problem aufgetreten
      MESSAGE A343 WITH 'TBTCO' RAISING JOB_LOCK_PROBLEM.
  ENDCASE.
ENDLOOP.

WRITE: /.

if test = ' '.
  IF SCHEDULED_JOBS_NO > 0.
    WRITE: / ICON_INFORMATION as ICON, TEXT-SJB.
  ELSE.
    WRITE: / ICON_INFORMATION as ICON, TEXT-NJB.
    EXIT.
  ENDIF.
endif.

Autor: Oliver Fischer

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

*

code