Anmelden

View Full Version : Datenstruktur-Array auf NULL prüfen



quereser
17-03-09, 15:26
Hallo,

ich benötige bitte Hilfe bei folgendem Problem:

Ich bekomme in meiner Subprocedure ein Array von einer Datenstruktur welches ich abarbeiten muss.



diCrtGA pi 10I 0
d mTestDS likeds(dsTEST) dim (30)
...

Max = 30; //--- oder die tatsächliche Anzahl wenn diese wo ermittelt werden kann
...
monitor;
For Idx = 1 to Max;
chain (mTestDS(Idx).iPnr) testpf; // iPnr ist ein numerischer Key (7S0)
...
EndFor;
on-error;
//--- Abbruch
endmon;
Bei weniger als 30 übergebenen Sätzen im Array stützt das Programm (auch bei Prüfung auf 0) natürlich mit einem Dezimaldatenfehler ab wenn iPnr vorher nicht für alle 30 Einträge ordnungsgemäß initialisiert wurde.

Nun kann / will ich mich aber nicht darauf verlassen, dass das aufrufende Programm das Array vor dem Call ordnungsgemäß (vollständig) initialisiert (Serviceprogramm wird von verschiedenen RPG, Java, ... -Anwendungen aufgerufen). --> Will mich auch nicht darauf verlassen, dass ich die korrekte Anzahl als Parameter bekomme.

In C++ oder Java würde ich jetzt einfach die Datenstruktur für den jeweiligen Index auf NULL überprüfen - (geht dass in RPGLE - wenn ja wie? - hab bisher nichts passendes gefunden).

Mein derzeitiger Workaround ist, dass ich das ganze monitore und den Fehler einfach mit on-error abfange, was zwar funktioniert, mir aber nicht sehr gut gefällt.

Kann mir jemand einen Tip geben wie das am einfachsten zu lösen ist (ich vermute dass es eine ganz einfache Lösung gibt, ich schau nur immer drüber.)

Danke

lg Martin

Fuerchau
17-03-09, 15:41
Sorry

Da RPG keine Dynamischen Strukturen kennt, hast du ein Problem.
Du musst die Anzahl Elemente als Parameter mit übergeben, da du sonst auf Speicherbereiche hinter der Übergabe zugreifst !
Ein "monitor" muss nämlich nicht fehlschlagen, wenn zufällig ein gültiger Wert an der Adresse steht.

quereser
17-03-09, 15:58
Hallo,

danke für die schnelle Antwort.

Wenn ich die Anzahl der Elemente übergebe, hängt es aber auch wieder davon ab dass das aufrufende PGM richtig funktioniert (wovon ich jetzt nicht zu 100% ausgehen kann).

Dass monitor nicht zwingend auf einen Fehler läuft ist auch der Grund warum mir diese (Not-)Lösung nicht wirklich gefällt.

Schade, ich hatte gehofft dass es eine einfache Lösung gibt und ich nur zu komplex gedacht habe.

Falls trotzdem noch jemand eine Idee hat bitte melden.

Danke

lg Martin

Fuerchau
17-03-09, 17:53
Das Problem ist doch, dass RPG mit statischen Adressen umgeht.
Jedes offengelegte Interface (hier dein Aufruf) schreibt nun mal bestimmte Parameter vor.

Schau dir sämtliche IBM-API's an.
Wenn du da falsche Längenangaben machst, kann's genauso knallen.

Beschreib deine Übergabe und verlass dich halt drauf.

Ganze ERP-Systeme arbeiten so.