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?Dele hat geschrieben:Vielleicht hilft Funktionsbaustein BP_JOB_STATUS_GET
Ähnlich wie: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
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.
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
Ah ok, das leuchtet ein.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.
Ich verstehe den Satz nicht im Geringsten.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?
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.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.