PDA

View Full Version : Fehlerausnahmeroutine *PSSR



Seiten : 1 [2] 3

peter.kinne
27-09-03, 14:46
Hallo "Profis" der AS/00,

ich muss mein Thema noch einmal hochkommen lassen.

Und zwar geht es um den Eintrag in FAKTO2 neben dem ENDSR der *PSSR.

Ich habe dort momentan den Wert *CANCEL eingestellt. Dadurch wird das Programm beendet. Schöner wäre es aber, wenn das Programm aktiv im Speicher bleibt und der Anwender weiter arbeiten kann.

Gibt es dafür auch einen Wert oder ist diese Fall nicht vorgesehen.


Vielen Dank

Peter

Hubert
27-09-03, 21:34
Hallo Peter,

ich verstehe den Sinn dieses Anliegens nicht. Wenn der Benutzer doch keine Berechtigung zur entsprechenden Nutzung der Datei hat, macht doch ein zweiter Zugriffsversuch auch keinen Sinn. Oder habe ich da etwas falsch verstanden?

Gruss

Hubert

peter.kinne
28-09-03, 16:20
Hallo Hubert,

Deine Anmerkung ist berechtigt aber es muss trotzdem sein.

Unsere Dialogprogramme sind "SAA-Like". Also Auswahl 2=Ändern, 4=Löschen, 5=Anzeigen etc.

Es kann also sein, dass der User nicht die Berechtigung zu Ändern hat, aber 5=Anzeigen sei ihm gestattet :-)

Deshalb möchte ich nicht, dass das Programm aus der *PSSR beendet wird, sondern dahin springt, wo die *PSSR angesprungen ist.

Gruß am "heiligen" Sonntag,

Peter

Fuerchau
29-09-03, 08:23
Das hilft dir bei der Verarbeitung leider überhaupt nicht !

Die Dateien werden implizit von RPG in der benötigten Verwendungsart geöffnet (Input, Input/Output, usw.).

Fehlt nun eine Berechtigung, so kann kein Open durchgeführt werden, d.h., selbst wenn READ erlaubt ist und UPDATE nicht, kann die Datei von diesem Programm nicht geöffnet werden, wenn beide Befehle verwendet werden.

D.h., wenn du also die *PSSR mit ENDSR *DETC beendest, kommt halt die CPF5134, da die Datei ja nicht korrekt geöffnet werden kann.

Einzige Lösung:

Trennung der Funktionen in separate RPG-Programme für READ,CHAIN/UPDAT/WRITE/DELET. Dabei ist aber darauf zu achten, dass die Dateien nicht mit SHARE(*YES) verarbeitet werden, da sonst der 1. Open der Datei für alle anderen Programme übernommen wird.

BenderD
29-09-03, 08:58
Hallo,
wie ist es mit user controlled open und abfangen, wenn dieser schief geht und anschliessend zum Lesen öffnen? Zur Begrenzung des Änderungsaufwandes könnte man sows auch generieren.

mfg

Dieter Bender

peter.kinne
29-09-03, 09:05
Hallo Herr Fuerchau,

so wie Sie es schreiben kann ich es in meinen Programmen nicht nachvollziehen.

Die Datei wird im Programm im Modus Update/Add eröffnet.

Wenn ich dann als User OHNE Rechte das Programm starte kann ich mir mit "5" alles ansehen, so oft ich möchte. Und bei "2" kommt beim ersten mal das richtige "Fehlerfenster" von mir. Nur beim zweiten mal "2" kommt der blöde Fehler. Zur Zeit beende ich das Programm über die *PSSR, was ich aber sehr unschön finde.

Gruß

Peter Kinne

B.Hauser
29-09-03, 09:28
Hallo Peter,

wenn Du alle Aktionen im gleichen Programm handelst, hast Du mit der *PSSR-Routine wenig Chancen.

Bei ENDSR gibt es zwar noch andere Aktionen, aber mit denen wirst Du auch nicht weiter kommen:
*DETL: Continue at the beginning of detail lines.
*GETIN :Continue at the get input record routine.
*TOTC:Continue at the beginning of total calculations.
*TOTL:Continue at the beginning of total lines.
*OFL: Continue at the beginning of overflow lines.
*DETC:Continue at the beginning of detail calculations.

Du wirst Dich wohl mit dem Gedanken an einen ILE Condition Handler anfreunden müssen.

Siehe:

Forget To Handle Errors? Use an ILE Condition Handler (http://www.midrangeserver.com/mpo/mpo081502-story05.html)

Birgitta

peter.kinne
29-09-03, 09:33
Hallo Birgitta,

ich habe mich bereits letze Woche mit den Condition Handler beschäftigt, als Du es das erste Mal angesprochen hast.

Ich habe auch bereits Testprogramme geschrieben. Jedoch ist es auch hier ziemlich aufwendig, die Benutzerprogramme zu registrieren. Meiner Meinung nach ist es viel mehr Tipparbeit. Aber wenn es ohne nicht geht, bleibt mir wohl keine Alternative.

Gruß und schönen Tag,

Peter

Fuerchau
29-09-03, 11:07
RPG prüft intern diverse Stati. Wenn also ein UPDAT/WRITE fehlschlägt, und die Datei im IO-Modus geöffnet sein sollte, geht die RPG-Runtime von einem Dateifehler aus und setzt den internen Status auf undefiniert.

Lösung: nach einem solchen Fehler die Datei einfach schliessen und neu Öffnen (UC in den F-Bestimmungen).

Begründung: Die RPG-Runtime geht davon aus, dass Dateien so verarbeitet werden können wie es in den F-Bestimmungen zugelassen wird.

Auch der ILE-Condition-Handler hilft da nicht weiter und funktioniert natürlich nur auf ILE-Programmen und nicht auf OPM.

Thimi
30-09-03, 07:49
Hallo Peter,

>Deine Anmerkung ist berechtigt aber es muss trotzdem sein.

>Unsere Dialogprogramme sind "SAA-Like". Also Auswahl >2=Ändern, 4=Löschen, 5=Anzeigen etc.

>Es kann also sein, dass der User nicht die Berechtigung zu >Ändern hat, aber 5=Anzeigen sei ihm gestattet :-)

warum prüfst Du nicht die Aktion (2,4,5) bevor Du Das Programm aufrufst???
oder habe ich das Problem nicht verstanden?
Gruss
Thierry