PDA

View Full Version : Fehlerausnahmeroutine *PSSR



Seiten : [1] 2 3

peter.kinne
21-09-03, 15:11
Hallo zusammen,

nachdem ich erst gestern dieses tolle AS/400-Forum entdeckt habe, wurde mir auch direkt schon geholfen. Nun aber zu meinem zweiten Anliegen wo ich nicht so recht weiterkomme.

Wir haben auf dem System mehrere hundert/tausend Dialogprogramm in RPG und ILE/RPG. Bisher gab es für die User keiner Beschränkung der Berechtigung. Jeder durfte alles, was teilweise zu einem Chaos führt. Deshalb muss ich eine Berechtigungssteuerung entwickeln. Und dabei dachte ich an eine globale *PSSR, die ja dafür sein soll.

Ich habe ein Programm geschrieben, dass eine Maske anzeigt wenn ein Fehler auftritt. Alle User wurde in Gruppen eingeteilt und auf Gruppenebene die Rechte auf den Datenbanken eingeteilt. Lesen, Schreiben, Ändern und Löschen mit jeweils separaten Rechten. Mit dem Befehl WRKOBJAUTH wurde die Rechte vergeben.

Doch die ersten Test waren niederschmettern. Es kommt immer noch der CPFxxxx Fehler (Keine Rechte zum Ändern der Datenbank) und meine *PSSR zieht überhaupt nicht.

In der IBM-Literatur finde ich zu diesem Thema nicht viel und schon mal übehaupt kein Beispiel.

Kann mir jemand einen Tipp geben ?

Danke im voraus,


Peter K.

Hubert
21-09-03, 19:12
Hallo Peter,

leider sagst Du nichts darüber, was in der *PSSR passiert.

Gruss

Hubert

peter.kinne
21-09-03, 19:21
Sorry, das habe ich total versäumt.

In der *PSSR wird ein Programm aufgerufen, das diverse Jobattribute, die Fehlerdatei, den Fehler, das Programm etc. in einem Standartisiertem Fenster ausgibt. Ansonsten macht es nichts.

Das spart uns eine Menge Arbeit.

Gruß

Peter

Hubert
22-09-03, 07:27
Hallo Peter,

ist die *PSSR Routine auch als INFSR bei der Datei angegeben und endet sie mit einem return?

Beispiele findet Ihr in http://publib.boulder.ibm.com/pubs/html/as400/online/v4r5ger.htm

Gruss

Hubert

peter.kinne
22-09-03, 07:33
Ja, eine *INZSR haben wir in jedem Programm. Aber da geht nicht viel ab. Dort werden:
Übergabeparameter definiert, KEYLIST definiert, Felder initialisiert.

Die *PSSR endet nicht mit RETURN, da der User ja nur das Fehlerfenster angezeigt bekommen soll. Danach soll er weitermachen können.

Hubert
22-09-03, 07:41
Nicht *INZSR sondern INFSR bei der Dateibestimmung (F-Bestimmung). Sieh doch mal den Link an, den ich vorher angegeben hatte.

peter.kinne
22-09-03, 07:56
Sorry, nicht richtig gelesen.

Eine INFSR haben die Programme überhaut nicht. Ich werde mal in dem Link bei der IBM nachlesen und ein Musterprogramm ändern.

Danach poste ich dann das Resultat.

Nochmals vielen Dank,

Peter Kinne

B.Hauser
22-09-03, 08:04
Hallo Peter,

zunächst einmal paar Fragen:
Springt die *PSSR-Routine überhaupt an?
Wenn nein nächste Frage:
Hast Du in den F-Bestimmungen INFSR(*PSSR) angegeben?
Wenn nein füge das Schlüssel-Wort ein.

Ansonsten würde ich Dir statt der *PSSR-Routine einen ILE-Condition-Handler empfehlen.
Bei einem ILE-Condition-Handler handelt es sich um ein Programm, das bestimmte Fehlersituationen verarbeitet.
Der ILE-Condition-Handler muss in jeder Quelle über API CEEHDLR registriert werden.
(Über API CEEHDLU kann die Registrierung zurückgenommen werden.)
Bei Verwendung einer *PSSR-Routine, müsste jeweils die Routine in die Quellen kopiert werden.

*PSSR-Routinen funktionnieren nur, solage der RPG-Zyklus greift wird, d.h. solange die Datei nur in der Main-Pocedure (alle Statements vor dem 1.P-Statement) verwendet wird.
Wird eine Datei in einer Prozedur verarbeitet, kann die *PSSR-Routine weder definiert noch verwendet werden.
Prozeduren unterliegen nicht mehr dem Zyklus, deshalb ist es möglich Prozeduren rekursiv aufzurufen.

Birgitta

peter.kinne
22-09-03, 15:44
Hallo Brigitta,

ja nach heutigem basteln und viel lesen klappt es mit der *PSSR. Es passiert genau das, was passieren soll.

Den Tipp mit dem ILE Codition-Handler schau ich mir mal in den nächsten Tagen an.

Vielen Dank nochmals,

Peter

peter.kinne
23-09-03, 08:28
Guten Morgen,

nachdem ich gestern nun so stolz war, dass es läuft, kommt heute die Ernüchterung :-)

Also ich starte das Programm mit der *PSSR. Beim ersten mal kommt auch die richtige Fehlerbehandlung. Das Window wird angezeigt mit dem Text "Keine Berechtigung". Ich drücke F12 und bin wieder in dem Programm mit der *PSSR. Dann lege ich wieder einen neuen Satz an, und es sollte wieder das Fehlerwindow kommen. Aber falsch gedacht - Es kommt ein neuer Fehler: RNX9998 (E/A Fehler CPF5134 in Datei BFEPRTCTR erkannt. E/A Operation nicht zulässig da Teildatei BFEPRTCTR in Bibliothek xxx fehlerhaft.) Ist sie aber nicht. Mit DFU kann ich die Datei bearbeiten.

Hier mal der Form halber der Quellcode von meinem Testprogramm:


* Druckersteuerung
FBFEPRTCTR UF A E K Disk Infds(#INFDS1) Infsr(*PSSR)
* Tabellendatei !!! nur für *LIKE Defn
FBfeTabTab IF E K Disk
*--------------------------------------------------------------------
* Datei-Informationsdatenstruktur Infds1
*--------------------------------------------------------------------
d#Infds1 DS
d File *FILE
d Status *STATUS
d Opcode *OPCODE
d Routine *ROUTINE
d Record *RECORD



*-------------------------------------------------------------------
* *PSSR Programmfehler-Ausnahmeroutine
*-------------------------------------------------------------------
C *PSSR Begsr
c Eval Return = '*DETC '
*
c call 'PSSR001R'
c Parm 'BFEP9001PS' PssPgm
c Parm 'PKIBERECHT' PssPli
c Parm 'BFEP9001FM' PssDsp
c Parm 'LEI' PssDli
c Parm File PssFil
c Parm 'Bibliothek' PssFli
c Parm Opcode PssOpc
c Parm 'Error' PssErr
c Parm 'Hier Text' PssBem
c Endsr Return


Viele Grüße von

Peter