[53209] in SAPr3-news
ABAP Toolprogramme / Warten auf den Verbucher
daemon@ATHENA.MIT.EDU (volker Korrmann)
Wed Feb 2 10:10:41 2005
To: sapr3-news@mit.edu
Date: 2 Feb 2005 07:10:37 -0800
From: volker_korrmann@web.de (volker Korrmann)
Message-ID: <cdd58c09.0502020710.4be89aa9@posting.google.com>
Hallo Leute,
bei mehreren hintereinanderfolgenden Batch Inputs kann es sein, daß
der Verbucher noch nicht fertig ist, und somit der nächste BI noch
nicht gestartet werden kann.
In diesem Fall muß man warten, bis der fragliche Sperreintrag wieder
aufgehoben wurde.
Hierzu ein kleines Beispiel:
Gruß Volker
*&---------------------------------------------------------------------*
*& Report ZZZDUMM3
*
*&
*
*&---------------------------------------------------------------------*
*&
*
*&
*
*&---------------------------------------------------------------------*
REPORT zzzdumm3 .
DATA: enq TYPE STANDARD TABLE OF seqg3 WITH HEADER LINE.
DATA: enq2 TYPE STANDARD TABLE OF seqg3 WITH HEADER LINE.
DATA: rc.
* Aktuelle Sperren ermitteln
CALL FUNCTION 'ENQUEUE_READ'
* EXPORTING
* GCLIENT = SY-MANDT
* GNAME = ' '
* GARG = ' '
* GUNAME = SY-UNAME
* LOCAL = ' '
* IMPORTING
* NUMBER =
* SUBRC =
TABLES
enq = enq
EXCEPTIONS
communication_failure = 1
system_failure = 2
OTHERS = 3
.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
* Gewünschtes Programm / BI Ausführen
rc = 'X'.
WHILE rc = 'X'.
* Aktuelle Sperren ermitteln
CALL FUNCTION 'ENQUEUE_READ'
* EXPORTING
* GCLIENT = SY-MANDT
* GNAME = ' '
* GARG = ' '
* GUNAME = SY-UNAME
* LOCAL = ' '
* IMPORTING
* NUMBER =
* SUBRC =
TABLES
enq = enq2
EXCEPTIONS
communication_failure = 1
system_failure = 2
OTHERS = 3
.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
* Alle bereits vorher vorhandenen Sperren entfernen
LOOP AT enq.
LOOP AT enq2.
IF enq2 = enq. DELETE enq2. EXIT. ENDIF.
ENDLOOP.
ENDLOOP.
rc = ''.
LOOP AT enq2.
* Wurde eine relevante Sperre gefunden, dann weiter warten.
* if enq2-tabname = 'xxx'.
*rc = 'X'.
*exit.
*endif.
ENDLOOP.
IF rc = 'X'.
* Eine Sekunde warten!!!
WAIT UP TO 1 SECONDS.
ENDIF.
ENDWHILE.