-
Datenstruktur-Array auf NULL prüfen
Hallo,
ich benötige bitte Hilfe bei folgendem Problem:
Ich bekomme in meiner Subprocedure ein Array von einer Datenstruktur welches ich abarbeiten muss.
Code:
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
-
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.
-
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
-
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.
Similar Threads
-
By DEVJO in forum IBM i Hauptforum
Antworten: 7
Letzter Beitrag: 12-10-06, 18:28
-
By Squall in forum NEWSboard Programmierung
Antworten: 9
Letzter Beitrag: 10-10-06, 08:53
-
By scherm in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 04-10-06, 10:48
-
By stephanr1 in forum NEWSboard Drucker
Antworten: 7
Letzter Beitrag: 20-07-06, 14:00
-
By Staneke in forum IBM i Hauptforum
Antworten: 5
Letzter Beitrag: 03-08-05, 15:11
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