-
INFSR/PSSR
Hallo,
ich habe eine Verständnisfrage zu den Fehlerbehandlungen. Und zwar habe ich eine INFSR bzw PSSR Methode, die wird auch aufgerufen wenn etwas passiert wie es auch sein müsste. Meine Frage betrifft *CANCL und *GETIN.
Bei *Getin wird nach der INFSR/PSSR Verarbeitung direkt an die Zeile wo der Fehler auftrat zurückgesprungen oder in die nächste Zeile?
Und bei *Cancl wird das Programm beended oder nur die Methode (BEGSR/ENDSR)?
Und noch eine konkretere Frage: Zum Testen ob die Methoden auch aufgerufen werden habe ich selber den Fehler 1215(Datei soll geöffnet werden obwohl sie schon offen ist) produziert(open dat1; open dat1). Wenn ich dann bei meinem INFSR sage close dat1, müsste er bei Getin dann nicht in die Zeile zurückspringen, den Open machen und weiterarbeiten?
Gruß Martin
-
Wenn du schon mit ILERPG arbeitest, solltest du *PSSR vergessen.
Mit %ERROR, %EOF kannst du nach Dateioperationen den Fehler abfragen, den Fehlercode erhältst du in der INFDS.
Gezielte Fehler-Abfrage geht mit :
monitor;
tuwas;
on-error ;
tu was;
on-error *all;
tu was;
endmon;
-
 Zitat von Squall
....Meine Frage betrifft *CANCL und *GETIN.
Bei *Getin wird nach der INFSR/PSSR Verarbeitung direkt an die Zeile wo der Fehler auftrat zurückgesprungen oder in die nächste Zeile?
Und bei *Cancl wird das Programm beended oder nur die Methode (BEGSR/ENDSR)?
....
Hello Martin,
so grundsätzlich muss ich ja Fuerchau auf alle Fälle Recht geben...
Ich glaube die INFSR/PSSR habe ich das letzte mal so vor 15 Jahren oder länger genutzt.
Weil so viel bringt die ja imho nun auch nicht bzw. in einer "gut durchgestylten" Umgebung ist sowas auch gar nicht mehr wirklich nötig.
Dann schon eher wie von Fuerchau geschrieben in ILE und dann ne gezielte Abfrage auf einen bestimmten Fehler evtl.
Aner um Deine ersten Fragen zu beantworten genügt ein Blick ins Handbuch:
\GETIN Continue at the get input record routine.
bedeutet, dass der Einsprung innerhalb der RPG-Logik(Zyklus) beim Getin eben geschieht.
Und...
\CANCL Cancel the processing of the program.
spricht ja für sich.
Das sind im Prinzip die Antworten G bzw. C wenn ein RPG auf nen Fehler läuft und man das entsprechend so beantwortet.
In diesem Sinne.
kuempi
Edit: weiss jetzt aus dem Stehgreif gar nicht, was beim *getin passiert, wenn *LR gesetzt ist? Das Diagramm hab ich gerade nicht hier. But anyway....
-
Naja, LR heißt immer Return mit Deaktivierung.
"Getin" steht auch für Programmanfang, wenn man keine InputPrimary-Datei hat.
Das ist genauso, als wenn man das Programm mit LR=*OFF verlassen und sofort wieder aufgerufen hat.
In einer ILE-Umgebung kann es dann zu massiven Störungen kommen, wenn nicht abgefangene Fehler in einer Unterfunktion (also CALLP eigenes oder Serviceprogramm) verwendet wird.
Ein Aufräumen der Unterfunktionen (z.B. Close lokale Datei)findet nicht statt !!!!!
-
Ah vielen Dank für die Hilfe. Ich gehe davon aus das der Monitor auch dem ILE-Condition Handler vorzuziehen ist?
Und nochmal zu meiner "konkreteren Frage" wenn er dann wieder zu dem Open springt müsste er die Datei, die ind er Fehlerbehandlung geschlossen wurde, doch wieder öffnen und normal weiterarbeiten, wenn ich alles korrekt verstanden habe, und nicht nocheinmal den Fehler bringen.(was eine Endlosschleifen auslösen würde, die anscheinend egal ob ich *CANCL oder *GETIN[mit close der Datei] bei der Fehlerbehandlung angebe, auftritt. Daher auch meine Verständnissfrage zu den beiden.)
Ich werde es zwar jetzt auf euer anraten mit Monitor ausprobiern aber die Frage reizt mich noch, danke.
Gruß Martin
EDIT: Gibt es bei der Monitor Gruppe auch eine Möglichkeit des "*Getin"? Normalerweise wird ja einfach nach dem ENDMON einfach weitergemacht.
-
Wenn du nicht mit "Fxxxx IP...", also Input Primary-Datei arbeitest ist *GETIN dein 1. Befehl in der Hauptprozedur.
Implizite Open werden nicht wiederholt, bei IP-Zyklus wird der nächste Satz gelesen.
-
Aber wie übergebe ich den bei einer Monitorgruppe, beim endmon (anstatt beim return bei infsr/pssr)?
Gruß Martin
-
Tut mir leid, aber die Frage verstehe ich jetzt nicht.
Monitor/endmon ist wie eine ganz normale IF ELSE ENDIF zu sehen, du entscheidest selbst was du tust.
Du kannst ja auch folgendes kodieren:
do while 1=1
monitor;
read ....;
on-error ;
leave;
endmon;
enddo;
-
Nun zb bei einer *PSSR Routine kann ich am Ende beim return sagen "return '*GETIN*" damit er dort weitermacht wo er aufgehört hat. Geht das beim Monitor auch irgendwie? (Da der Monitor ja über mehrere Zeilen geht, zb. 1-5, und er nach der Behandlung dann bei, zb Zeile 10, weitermacht. Und ich will aber das er bei zb. Zeile 3 wo der Fehler auftrat weitermacht weil ich den Fehler schon korregiert habe.)
-
Nun, auch wenn es unüblich ist, geht das mit GOTO und "LABEL TAG", oder, was ich auch schon mal mache:
do while 1=1;
monitor;
tuwas;
on-error *all;
if wiederholbar;
iter;
endif;
leave;
endmon;
leave;
enddo;
So ist das nun mal mit RPG.
In C++/Java fragt auch keiner danach, da sieht das denn so aus:
try {
tuwas;
} catch (Exception e) {
} finally {
};
Da habe ich noch nicht mal die Chance, in den Try-Block hineinzuspringen, deshalb gibts da gleich solche Wege:
int step = 0;
while (1) {
try {
switch (step) {
case 0:
mach 1;
step=1;
case 1:
mach 2;
step=2;
else;
mach ende;
leave;
} // end switch
} catch (exception e) {
if (reproduzierbar) {
step--;
} else {
throw e;
}
} // end catch
} // end while
-
Hm Goto/Tags wollte ich vermeiden aber das mit dem Leave sieht gut aus. Immer noch nicht eine Ideallösung aber ne bessere wirds wohl nicht geben.
Stimmt Java is in der Hinsicht auch nicht viel besser.
Gruß Martin
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks