Warten bis DBtabelle aktualisiert ist

Getting started ... Alles für einen gelungenen Start.
12 Beiträge • Seite 1 von 1
12 Beiträge Seite 1 von 1

Warten bis DBtabelle aktualisiert ist

Beitrag von sapnewbee (ForumUser / 16 / 0 / 0 ) »
Hallo zusammen,

ich habe in meinem Coding folgenden Aufbau:

Fuba JOB_OPEN
SUBMIT xyz via Job lv_jobname NUMBER lv_jobcount AND RETURN
Fuba JOB_CLOSE

Anschließend mache ich ein Select auf die tbtc_spoolid um die spoolid zu bekommen.
Dieses Select geht beim allerersten Aufruf nach Start des Systems immer auf die Bretter, danach läuft es fehlerfrei.
So wie sich mir die Sache darstellt, ist der Eintrag in der tbtc_spoolid noch nicht erstellt, wenn ich an diesen Punkt komme (jedenfalls beim erstmaligen Aufruf).
Was kann ich tun um dies abzufangen?

Wait up to 1 seconds bringt nicht das gewünschte - kann ich irgendwie abfragen (mit jobnummer und jobname) ob der Eintrag bereits erstellt wurde?

VG
newbee

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Warten bis DBtabelle aktualisiert ist

Beitrag von Haubi (Expert / 625 / 20 / 30 ) »
Tach.

Mach doch um Deinen Select eine DO-Schleife. Wenn der Select einen SUBRC = 0 liefert springst Du aus der Schleife raus, ansonsten machst Du Deinen WAIT und probierst es im nächsten Schleifendurchlauf nochmal.

Vergiss aber nicht, eine Abbruch-Bedingung einzubauen, falls der Job tatsächlich mal nicht erstellt werden kann... ;-)

Grüße,
Haubi
Das ABAP Kochbuch ab sofort bei Amazon...

I'd rather write code that writes code than write code...

Re: Warten bis DBtabelle aktualisiert ist

Beitrag von Dele (Specialist / 307 / 4 / 47 ) »
Vielleicht hilft Funktionsbaustein BP_JOB_STATUS_GET

Re: Warten bis DBtabelle aktualisiert ist

Beitrag von sapnewbee (ForumUser / 16 / 0 / 0 ) »
Dele hat geschrieben:Vielleicht hilft Funktionsbaustein BP_JOB_STATUS_GET
Ich mache mein Select im Anschluss nur, wenn sy-subrc = 0 nach JOB_CLOSE ist - sollte das nicht gewährleisten, dass mein Select eh nur aufgerufen wird, wenn der Job ordentlich erstellt und abgeschlossen wurde?

Re: Warten bis DBtabelle aktualisiert ist

Beitrag von sapnewbee (ForumUser / 16 / 0 / 0 ) »
edit: doppelt
Zuletzt geändert von sapnewbee am 24.11.2015 18:12, insgesamt 1-mal geändert.

Re: Warten bis DBtabelle aktualisiert ist

Beitrag von sapnewbee (ForumUser / 16 / 0 / 0 ) »
Haubi hat geschrieben:Tach.

Mach doch um Deinen Select eine DO-Schleife. Wenn der Select einen SUBRC = 0 liefert springst Du aus der Schleife raus, ansonsten machst Du Deinen WAIT und probierst es im nächsten Schleifendurchlauf nochmal.

Vergiss aber nicht, eine Abbruch-Bedingung einzubauen, falls der Job tatsächlich mal nicht erstellt werden kann... ;-)

Grüße,
Haubi
Ähnlich wie:

Code: Alles auswählen.

while x LE 5:
Select spoolid from tbtc_spoolid where jobcount = lv_jobcount
                                  And jobname = lv_jobname 
                                  And spoolcount = '1'.

if sy-subrc = 0.
  x = 5
else.
  x = x+1.
endif.
endwhile.
?

Re: Warten bis DBtabelle aktualisiert ist

Beitrag von Unit605 (Expert / 975 / 37 / 93 ) »
Ich habe die Statusabfrage des Backgroundjobs mal (vor 15 Jahren) so geloest:

Code: Alles auswählen.

data: ACTUAL_STATUS type  TBTCJOB-STATUS.
data: BTC_ABORTED       type TBTCO-STATUS value 'A',
      BTC_FINISHED      type TBTCO-STATUS value 'F'.
*  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_PUT_ACTIVE    like TBTCO-STATUS value 'Z',
*  BTC_UNKNOWN_STATE like TBTCO-STATUS value 'X'.


form CHECK_JOB_STATUS.
  do.
    call function 'BP_JOB_CHECKSTATE'
      exporting
        DIALOG        = 'N'
        JOBCOUNT      = JOBNUMMER
        JOBNAME       = JOBNAME
      importing
        ACTUAL_STATUS = ACTUAL_STATUS.
    if ( ACTUAL_STATUS eq BTC_ABORTED
         or ACTUAL_STATUS eq BTC_FINISHED ).
      exit.     "leave do-loop
    else.
      wait up to P_SEK seconds.
    endif.
  enddo.
endform.                    " check_job_status

Re: Warten bis DBtabelle aktualisiert ist

Beitrag von sapnewbee (ForumUser / 16 / 0 / 0 ) »
Ist mein Problem denn hier, dass der Job noch nicht abgeschlossen ist?

Ich dachte wenn mein sy-subrc = 0 ist nach JOB_CLOSE, dann wäre der Job gelaufen, geschlossen, fertig?

Re: Warten bis DBtabelle aktualisiert ist

Beitrag von Unit605 (Expert / 975 / 37 / 93 ) »
Mit JOB_CLOSE wird nur die Erstellung des Backgroundjobs abgeschlossen.

Der Job kann ja Minuten oder Stunden laufen, dass wuerde dann nach Deiner Denkweise bedeuten, dass das Programm, das den Backgroundjob erstellt, solange warten muesste, bis der Job erledigt ist.

Wenn der Backgroundjob laeuft, kannst Du den Status solange abfragen, wie Du willst und Du kannst reagieren wie Du willst, je nach Status. Deshalb hab ich Dir auch gleiche alle moeglichen Statis/Status angegeben.

Re: Warten bis DBtabelle aktualisiert ist

Beitrag von sapnewbee (ForumUser / 16 / 0 / 0 ) »
Unit605 hat geschrieben:Mit JOB_CLOSE wird nur die Erstellung des Backgroundjobs abgeschlossen.

Der Job kann ja Minuten oder Stunden laufen, dass wuerde dann nach Deiner Denkweise bedeuten, dass das Programm, das den Backgroundjob erstellt, solange warten muesste, bis der Job erledigt ist.

Wenn der Backgroundjob laeuft, kannst Du den Status solange abfragen, wie Du willst und Du kannst reagieren wie Du willst, je nach Status. Deshalb hab ich Dir auch gleiche alle moeglichen Statis/Status angegeben.
Ah ok, das leuchtet ein.
Ich versuchs mal - kannst du mir denn erklären warum der job nach starten des systems anscheinend so lange braucht, dass das ganze auf die bretter geht, danach aber rund läuft und fertig ist bevor ich am select vorbei komme?

Re: Warten bis DBtabelle aktualisiert ist

Beitrag von Unit605 (Expert / 975 / 37 / 93 ) »
sapnewbee hat geschrieben: Ah ok, das leuchtet ein.
Ich versuchs mal - kannst du mir denn erklären warum der job nach starten des systems anscheinend so lange braucht, dass das ganze auf die bretter geht, danach aber rund läuft und fertig ist bevor ich am select vorbei komme?
Ich verstehe den Satz nicht im Geringsten.

Man koennte Dir wahrscheinlich auch viel mehr helfen, wenn Du mehr Informatione geben wuerdest (die man auch versteht).

Evtl. waere sogar etwas ganz anderes moeglich. Aber mit Deinen bisherigen Informationen koennen wir Dir auch nur kleine Stuecke an moeglichen Loesungen geben.

"Job nach starten des Systems": Der Job wird erstellt und gestartet. Das "System" sollte dann schon lange laufen.
"Auf die Bretter geht"??? Woher weisst Du das da etwas (ich vermute du meinst den Select) auf die Bretter geht? Gibt es eine Meldung oder Warnung oder Abbruch? Dafuer hast Du doch jetzt einige Loesungen erhalten?!?!
"Am Select vorbei komme": Du musst eben sicher sein, dass Du den Select erst dann ausfuehrst, wenn der Job fertig ist bzw. der Spool fertig ist.

Re: Warten bis DBtabelle aktualisiert ist

Beitrag von sapnewbee (ForumUser / 16 / 0 / 0 ) »
Unit605 hat geschrieben:Man koennte Dir wahrscheinlich auch viel mehr helfen, wenn Du mehr Informatione geben wuerdest (die man auch versteht).

Evtl. waere sogar etwas ganz anderes moeglich. Aber mit Deinen bisherigen Informationen koennen wir Dir auch nur kleine Stuecke an moeglichen Loesungen geben.

"Job nach starten des Systems": Der Job wird erstellt und gestartet. Das "System" sollte dann schon lange laufen.
"Auf die Bretter geht"??? Woher weisst Du das da etwas (ich vermute du meinst den Select) auf die Bretter geht? Gibt es eine Meldung oder Warnung oder Abbruch? Dafuer hast Du doch jetzt einige Loesungen erhalten?!?!
"Am Select vorbei komme": Du musst eben sicher sein, dass Du den Select erst dann ausfuehrst, wenn der Job fertig ist bzw. der Spool fertig ist.
Wenn ich mein System starte (SAP Gui öffne und mich anmelde) und dann das erste Mal mein WebDynpro aufrufe und laufen lasse - in dem das ganze implementiert ist - erhalte ich keine pdf Anzeige, da mein Select zum selektieren der Spoolid nicht ausgeführt werden kann. Es liefert mir einen sy-subrc ungleich 0, sodass alle weiteren schritte übersprungen werden. Mein weiteres Coding ist durch if sy-subrc = 0 umfasst, ergo keine Anzeige.

Das es genau da hakt und "auf die Bretter geht", sagt mir mein Debugging.

Deine Lösung funktioniert, dennoch hätte ich gerne eine Erklärung, warum ich zu einem späteren Zeitpunkt ( ich bin bereits länger am System angemeldet) diese Lösung nicht benötige. Mein Job läuft nur nach Start des Systems so lange bzw deutlich länger als alle folgenden Jobs.

Ich schreibe übrigens nicht ohne Grund im Anfänger Bereich, also mea culpa, dass das noch nicht ganz fachlich/technisch ausgereift ist was ich hier von mir gebe. Und Satzzeichen sind übrigens keine Rudeltiere.

Seite 1 von 1

Vergleichbare Themen

2
Antw.
4750
Views
Prüfen ob DBTabelle/DDIC Struktur existiert
von Zubasa » 30.12.2010 16:26 • Verfasst in ABAP® für Anfänger
5
Antw.
3611
Views
Warten auf Sperrtabellen?
von alex_reloaded » 05.09.2014 10:44 • Verfasst in ABAP® Core
0
Antw.
694
Views
OLE - warten bis Excel geschlossen ist
von Kaiwalker » 20.01.2006 12:55 • Verfasst in ABAP® Core
2
Antw.
1960
Views
Emailversand aus BSP Mail gehen auf den Status warten
von AchimB » 04.01.2005 22:33 • Verfasst in Web-Dynpro, BSP + BHTML
2
Antw.
1775
Views
ALV Feldkatatalog nur unvollständig aktualisiert?
von MacLeod » 18.10.2011 14:33 • Verfasst in ABAP Objects®

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.