PDA

View Full Version : Pause in einem CL



heynem
27-05-03, 08:28
Guten Morgen alle zusammen,
ich habe in einem CL u.a zwei QRYPROD die in einem Batch laufen. Das Problem ist, daß direkt danach Dateien benötigt werden welche durch die Prozedur erst erstellt werden. Wenn nun die Queries noch nicht gelaufen sind (aus welchen Gründen auch immer) habe ich gesammelte Fehlermeldungen :-((. Daher meine Frage an die Runde: was muß ich machen, damit das Programm erst dann weiterläuft wenn die QRYPRODs beendet sind ?
Ich hoffe, ich habe mich halbwegs verständlich ausgedrückt....

Besten Dank und Grüße
Michael

malzusrex
27-05-03, 08:41
hallo michael,

wenn deine Files erst erstellt werden, dann kannst du mit CHKOBJ arbeiten
hier ein kleines beispiel:


pgm

/* hier dein erstellen der file's durch die prozeduren */

LOOP:

dlyjob 60 /* 60 Sekunden warten */

chkobj obj(MyLib/MyFile) objtype(*file)
monmsg cpf9801 exec(do)
goto loop
enddo


/* und hier dann weiter arbeiten */


endpgm


du kannst den job auch einfach nur mit dem DLYJOB warten lassen.
bei dem beispiel bleibt kommt er allerdings nie zu ende, wenn die files nie erstellt werden! man sollte dann eventuell einen zähler einbauen, das er den ganzen spass nur 5 mal macht
gruß
ronald

[Dieser Beitrag wurde von malzusrex am 27. Mai 2003 editiert.]

Bodo Roggenkamp
27-05-03, 08:43
Hallo Michael,

wenn die Dateien erst durch die Prozeduren erstellt werden, kannst Du im Cl folgendes machen:

CHECK1: CHKOBJ obj(lib/datei1) objtype(*file)
monmsg(cpf9801)exec do
dlyjob dly(30)
goto cmdlbl(check1)
enddo

(CPF9801 = Objekt in LIB nicht gefunden

Wenn Die datei1 vorhanden ist, prüfst Du unter CHECK2 dann die 2. Datei ab.

Gruss
Bodo

[Dieser Beitrag wurde von Bodo Roggenkamp am 27. Mai 2003 editiert.]

heynem
27-05-03, 08:57
<BLOCKQUOTE><font size="1" face="Verdana, Arial">Zitat:</font><HR>Original erstellt von malzusrex:
hallo michael,

wenn deine Files erst erstellt werden, dann kannst du mit CHKOBJ arbeiten
hier ein kleines beispiel:


pgm

/* hier dein erstellen der file's durch die prozeduren */

LOOP:

dlyjob 60 /* 60 Sekunden warten */

chkobj obj(MyLib/MyFile) objtype(*file)
monmsg cpf9801 exec(do)
goto loop
enddo


/* und hier dann weiter arbeiten */


endpgm


du kannst den job auch einfach nur mit dem DLYJOB warten lassen.
bei dem beispiel bleibt kommt er allerdings nie zu ende, wenn die files nie erstellt werden! man sollte dann eventuell einen zähler einbauen, das er den ganzen spass nur 5 mal macht
gruß
ronald

[Dieser Beitrag wurde von malzusrex am 27. Mai 2003 editiert.][/quote]

Marimari1009
11-07-03, 12:32
Hallo Michael,

bin erst jetzt per Zufall auf Dein Thema gestoßen.

zunächst: CHKOBJ hilft hier nicht immer, nämlich dann nicht, wenn zum Zeipunkt der Verarbeitung dieses Statements die Datei zwar erstellt ist, aber Query noch dabei ist, Sätze zu schreiben.
Hier sollte man RTVMBRD bnutzen und auf die Anzahl Sätze abfragen (Parameter NBRCURRCD).

Am allerbesten jedoch scheint mir folgende Lösung:

Abläufe, bei denen sich folgende Aktionen der Ergebnisse bedienen müssen, die vorausgehende Aktionen erstellt haben, sollten über eine Jobqueue gesteuert werden, aus der das verarbeitende SBS maximal einen Job verarbeitet.

In Deinem Fall sollten deine 2 Queries und der folgende Rest Deines CL als gesonderte Jobs in eine solche JOBQ submittet werden. Hierzu mußt Du natürlich den letzten Teil des CL kapseln .

Die letzten Aufrufe deines jetzigen CL sollten lauten:

SBMJOB (1. Query)
SBMJOB (2. Query)
SBMJOB (Rest des CL)

Gruß
Klaus Hardy