Anmelden

View Full Version : IFS überwachen und Job starten



Seiten : [1] 2

mahones
02-03-07, 11:51
Hallo,

ich habe folgendes Problem:
wir erhalten eine Datei, die ins IFS abgelegt wird und weiterverarbeitet werden soll.
Dazu benötigen wir etwas, womit man diesen Ordner überwachen kann, um einen Job automatisch (entweder alle 10min oder sobald eine neue Datei eintrifft) zu starten.
Dabei soll die vorhandene/verarbeitete Datei auch verschoben werden.

Wie ist sowas machbar?

Danke,
M.

kuempi von stein
02-03-07, 11:59
Hello,

wenn der Name der Datei vorher bereits feststeht/bekannt ist, würde ein einfaches CHKIN/CHKOUT im CLP genügen. Den Fehler mit MONMSG abfangen fertig.

kuempi

mahones
08-03-07, 09:25
Hm, ich glaube, das ist nicht ganz das, was ich meine.

Folgender Ablauf wird/soll passieren:
eine Datei wird von einer (Fremd)Software ins IFS abgelegt (mit einem eindeutigen, aber beliebigen Datei-Namen, z.B. datei001.xml).
Dort soll "irgend ein Job" diese Datei aufgreifen und ein Programm damit aufrufen (call PGM(CL1) PARM('datei001.xml').

Womit kann ich eben diesen Job anstoßen?
Denn dieser Job muss ja auch noch den Dateinamen ermitteln.
Er soll also aktiv werden, sobald in dem Ordner eine neue Datei landet.
Dessen Namen gibt er an ein Programm weiter, welches die Datei verarbeitet (und verschiebt).

kuempi von stein
08-03-07, 10:01
Jo, verstehe.
Hier mal zwei links für Dich, da findest Du genug Beispiele wie man z.B. ein RPG drüber laufen lassen kann, was die Namen ausliest und dann reagiert.

Muste nur leicht anpassen, dann sollte es laufen.

display all tables in IFS directory - Code400 -The Support Alternative (http://www.code400.com/forum/showthread.php?t=103)

Code400.com- The support alternative (http://www.code400.com/viewsamples.php?lang_id=18)

Have fun

kuempi

BenderD
08-03-07, 10:03
Hallo,

dann ist es naheliegend, dass ebendiese (Fremd)Software genau diese Schnittstelle aufruft (meinethalben per rexec), wenn er mit der ersten Aktion fertig ist. Ansonsten müsste man mal anschauen, was mit STRJRN auf ein Verzeichnis da so journalisiert wird, wenn ein Journaleintrag kommt, kann man sich mit RTVJRNE antriggern lassen.
Warnen würde ich wieder mal von dem Haufenkacker/Graber Prinzip (alle 10 Minuten nachsehen, ob was da ist), das gibt Probleme, die man nicht haben muss.

mfg

Dieter Bender


Hm, ich glaube, das ist nicht ganz das, was ich meine.

Folgender Ablauf wird/soll passieren:
eine Datei wird von einer (Fremd)Software ins IFS abgelegt (mit einem eindeutigen, aber beliebigen Datei-Namen, z.B. datei001.xml).
Dort soll "irgend ein Job" diese Datei aufgreifen und ein Programm damit aufrufen (call PGM(CL1) PARM('datei001.xml').

Womit kann ich eben diesen Job anstoßen?
Denn dieser Job muss ja auch noch den Dateinamen ermitteln.
Er soll also aktiv werden, sobald in dem Ordner eine neue Datei landet.
Dessen Namen gibt er an ein Programm weiter, welches die Datei verarbeitet (und verschiebt).

Frank Hildebrandt
08-03-07, 10:16
Es gibt mehrere Möglichkeiten sich die Dateien in einem Verzeichnis im IFS zu ermitteln.

1. Über FTP. Der Befehl "LS /Verzeichnis (DISK" erzeugt eine Datei LSOUTPUT in der aktuellen Bibliothek (CHGCURLIB).
Diese Datei kann man dann auslesen. FTP funktioniert auch mit der lokalen Maschine und nicht nur mit fernen Systemen.

2. Über die IFS-API`s opendir, readdir, closedir.

3. Über den Befehl DSPLNK. Hier ein Beispiel: DSPLNK OBJ('/Verzeichnis/*') OUTPUT(*PRINT). Die Spoolfile kann man dann in eine physische Datei kopieren und auswerten.

4. Über QSHELL (QSH) folgenden Befehl absetzen. ls -lT /Pfad

Fuerchau
08-03-07, 11:11
Zu 4:
Einmalig:
CRTPF FILE(MYLIB/MYLS) RCDLEN(128)

QSH CMD('ls -lT /Pfad >/qsys.lib/mylib.lib/myls.file/myls.mbr')

BenderD
08-03-07, 11:40
Hallo,

die entscheidende Frage ist doch immer: "wann taucht da ein Eintrag auf?" (gilt für ftp, ls, ifs APIS, wrklnk und all diesen Kram) und die beiden Folgefragen: "was passiert, wenn ich schon abhole, während noch auf den Haufen draufgeworfen wird?" und "wie weiß ich, dass alles abgeholt ist?" die Nebenfrage "was macht die (Fremd) Software, wenn sie einen neuen Haufen anfangen will und gerade vom alten abgeholt wird?" will ich hier garnicht erst stellen.
Sauber und stabil wird das am einfachsten, wenn man vorwärts synchronisiert. Wer einen Haufen gemacht hat, stößt die Folgeverarbeitung selber an und sagt wie der Haufen heißt/wo er abgeholt wird.

mfg

Dieter Bender


Zu 4:
Einmalig:
CRTPF FILE(MYLIB/MYLS) RCDLEN(128)

QSH CMD('ls -lT /Pfad >/qsys.lib/mylib.lib/myls.file/myls.mbr')

Frank Hildebrandt
08-03-07, 12:03
Die Aussage, dass es grundsätzlich falsch ist alle paar Minuten nachzuschauen, ob etwas da ist kann ich so nicht nachvollziehen. Es muss nur sichergestellt sein, dass ich nicht versuche eine Datei abzuholen, während der andere noch gar nicht alle Sätze in diese Datei geschrieben hat. Und da gibt es ja Möglichkeiten. z.B. Derjenige, der eine Datei sendet nennt die Datei zuerst XYZ.SND und der Job, der nachschaut, ob Daten abzuholen sind übergeht einfach Dateien, die mit .SND enden. Sobald alle Daten gesendet sind benennt derjenige, der die Datei gesendet hat die Datei in XYZ.DAT um. Und eine solche Datei kann ich mir dann getrost holen ohne irgendwelche Probleme zu bekommen. Wie die Fremdsoftware von mahones arbeitet kann ich nicht sagen. Das muss er selbst herausfinden und dementsprechend eine Lösung finden.

BenderD
08-03-07, 12:24
ich auch nicht, diese Aussage hat aber in diesem Thread niemand gemacht, da stand was von einfacher und Problemen, die man sich ersparen kann...
Wers natürlich komplizierter haben will und ein Faible für Wackelhaufen hat, der mag das dann so machen, wie er denn mag!!!


Die Aussage, dass es grundsätzlich falsch ist alle paar Minuten nachzuschauen, ob etwas da ist kann ich so nicht nachvollziehen.