Anmelden

View Full Version : Problem mit CPYSPLF



Mordox
07-09-05, 15:46
Hallo Zusammen,

ich wende mich mal wieder an Euch, weil ich bei einem Problem auf dem Schlauch stehe...

Folgender Tatbestand:

In einem CL-Programm (im Batch) wird mehrmals ein Programm aufgerufen, welches unter Umständen eine Spool erzeugt. Wenn die Spool erzeugt wurde, soll diese in eine Datei kopiert werden.
Problem: falls beim zweiten Programmaufruf keine Spool erzeugt wird, wird die des ersten Aufrufes kopiert.
Ich bin folgendermassen vorgegangen:

.
.
.
OVRDBF FILE(DATEI) TOFILE(DATEIA)
CALL PGM(PGMXX) /* für mandant A */
RTVJOBA JOB(&JOB) USER(&USER) NBR(&NBR)
CPYSPLF FILE(QSYSPRT) TOFILE(TEST) +
(&NBR/&USER/&JOB) SPLNBR(*LAST) +
MBROPT(*ADD) CTLCHAR(*NONE)

OVRDBF FILE(DATEI) TOFILE(DATEIB)
CALL PGM(PGMXX) /* für mandant B */
RTVJOBA JOB(&JOB) USER(&USER) NBR(&NBR)
CPYSPLF FILE(QSYSPRT) TOFILE(TEST) +
(&NBR/&USER/&JOB) SPLNBR(*LAST) +
MBROPT(*ADD) CTLCHAR(*NONE)
.
.
.

Wie gesagt, im Falle des PGM-Aufrufs für B wird kein Spool erzeugt, aber trotzdem eins (das Erste) kopiert, obwohl ich SPLNBR (*LAST) angegeben habe und die Spoolnummer im Job auch vergeben wird...

Gibt es evtl eine Möglichkeit die jeweils letzte SPLNBR eines Jobs über eine CL-Variable abzufragen damit ich diese anstatt *LAST beim CPYSPLF angeben kann?
Oder hat hier noch jemand eine andere Idee ohne das Druckpgm ändern zu müssen???

Danke für Eure Bemühungen!

Andreas

Fuerchau
07-09-05, 16:10
Auch wenn du dies per API erfragst, *LAST ist nunmal immer die letzte !
Du solltest per "OVRPRTF FILE(QSYSPRT) SPLFNAME(XXXX)" einen eindeutigen Namen pro PGM-Aufruf vergeben.
Dann kannst du eben statt QSYSPRT den vergebenen Namen XXXX beim CPYSPLF angeben.
*LAST bezieht sich nicht auf die letzte Liste des Job's sondern auf die letzte Liste des gleichen Namens.

Mordox
07-09-05, 16:14
Hallo Fuerchau!

Gute Idee mit SPLFNAME!!! Werde ich gleich mal ausprobieren.

Aber *LAST scheint wohl nicht immer der letzte zu sein, denn, wenn die letzte Spool leer ist (*FIN mit SPLFNR 2) kopiert er die vorletzte.... aber egal, ich probiers mit dem Namen!

Merci!


Auch wenn du dies per API erfragst, *LAST
ist nunmal immer die letzte !
Du solltest per "OVRPRTF FILE(QSYSPRT SPLFNAME(XXXX)" einen eindeutigen Namen pro PGM-Aufruf vergeben.
Dann kannst du eben statt QSYSPRT den vergebenen Namen XXXX beim CPYSPLF angeben.
*LAST bezieht sich nicht auf die letzte Liste des Job's sondern auf die letzte Liste des gleichen Namens.

Mordox
07-09-05, 16:18
Hallo Fuerchau!

Du bist ein Programmiergott! ;)

Es funzt wie es soll.

Nochmal Danke schön!

Andreas

Fuerchau
07-09-05, 16:24
Verbesserung:
*LAST ist die letzte aktive Spoolfile, *FIN wird nur angezeigt, wenn der Job noch läuft. Ist der Job beendet, werden *FIN's auch freigegeben.

kuempi von stein
07-09-05, 16:38
hello,

ok ok du hast dein proggi angepasst und nun läufts.

man hätte aber auch tricksen können:

machst du NACH aufruf pgmB und VOR aufruf CPYSPLF nen CHGSPLFA auf QSYSPRT und fängst die Fehlermeldung mit MONMSG ab. wenn CPF3340 dann existieren 2 SPLFs wenn nicht nur eine.

wobei diese lösung nur funzt wenn pgmA IMMER eine SPLF erzeugt und pgmB nur manchmal....

musste mal gesagt werden. ich frickel eben gerne
:D

k.

Fuerchau
07-09-05, 18:50
Wobei das nur klappt, wie du schon beschreibst, wobei meine Lösung (auch in der Übersicht WRKSPLF) "eleganter" ist ;)
Ausserdem darfst du dann den Parameter SPLNBR(*LAST) nicht verwenden, sonst kommt der Fehler nämlich nicht !