Anmelden

View Full Version : Alle Prozeduren mit Parameter auflisten



Gutmann
04-08-17, 07:35
Hallo,
ist euch eine Tabelle (QSYS2?) bekannt, in der zu allen Prozeduren/Prototypen mit Eingabe/Ausgabe Parametern ausgewertet werden können?


Theoretisch müsste es diese Möglichkeit ja geben, denn wenn ich im RDI die IntelliSense aufrufe, werden mir diese Informationen ja auch angezeigt.

Mir sind diverse QSYS2 Tabellen bekannt, in denen SQL-Prozeduren angezeigt werden können (zb. QSYS2/SYSPARMS), aber keine in der die Prototypen mit Parametern ausgewertet werden könne.

Vielen Dank für eure Hilfe.

BenderD
04-08-17, 08:08
... einfach geht das mit DSPMOD DETAIL(*EXPORT) und DSPMOD DETAIL(*IMPORT), wenn man die Module beim compile mit erstellt und nicht löscht. Über APIs geht das auch ohne die Module, kann aber bei der Verwendung von UPDSRVPGM und UPDPGM Unschärfen haben.
Natürlich könnte man da auch eine UDTF drumherum stricken, wenn das dann langsam sein soll.

D*B

Gutmann
04-08-17, 08:47
...allerdings bekomme ich zu den Prozeduren mit DSPMOD nicht die Ein-/Ausgabeparameter angezeigt.
Ich bekomme nur die Prozedurnamen.

Erreichen möchte ich damit einen Prozedurkatalog, den ich für alle Programmierer zur Verfügung stellen kann.
Da die Prozedurnamen weitestgehend sprechend sind, benötige ich auch keine weiteren Beschreibungen dazu.

Für SQL-Prozeduren gibt es diese QSYS2-Tabellen ja aber für Serviceprogramm-Prozeduren habe ich noch nichts gefunden.

BenderD
04-08-17, 09:03
... die Parameter sind nur in der Quelle zu finden. Für diesen Zweck würde ich mir mal RPGDOC anschauen, hab ich aber selber noch nicht ausprobiert. Üblicherweise schreibe ich die blackbox Kurzdoku in die Header Copystrecken.

D*B

Fuerchau
04-08-17, 09:39
RDi interpretiert alle Importe (Copy/Include) einer Quelle um daraus eine ItelliSense-Liste zu generieren.
Eine Art Reflection, wie man sie von anderen Sprachen kennt (Java/.NET) gibt es für ILE nicht.
In QSYS2 findest du ausschließlich SQL-Definitionen und da gibt es natürlich ein Repository für Funktionen/Prozeduren sowie deren Parametern, da diese von SQL zur Laufzeit geprüft werden.

In ILE gibt es keine Laufzeitprüfung außer unerwarteten MCH-Fehlern.
D.h., deine Aufrufe werden ausschließlich durch die Source-Prototypen kompiliert.
Ob der Prototyp tatsächlich zum Aufruf später passt, interessiert weder den Linker (CRTPGM) noch der ausführende Befehe.
Man erinnere sich DSPPGM wird die Anzahl der Parameter angezeigt:
Bei CLP steht da dann z.B "2 - 2", d.h., dass genau 2 Parameter erwartet werden.
Bei ILE/RPG/COBOL steht da dann 0 - 255, d.h., du kannst beliebige Parameter zwischen 0 und 255 übergeben.
Leider verhält sich das genauso bei ILE-Prozeduren.
Hier gilt die Regel: Der Programmierer wird schon wissen, was er tut.
Bei Objekt-Sprachen (Java, .Net., Delphi o.ä.) gibt es diesbezüglich eben Laufzeitprüfungen über Typen und Parameter.

Deshalb wird da kein Repository angeboten.

Es gibt allerdings für Programme (nicht für Module), einen Parameter, mit dem man sich XML-Strukturen im IFS erzeugen lassen kann da diese für irgendwelche Remote-Aufrufe benötigt werden.

dschroeder
04-08-17, 09:45
Wir standen vor dem gleichen Problem. Da wir keine andere Lösung gefunden haben, haben wir in unser Compile-Script einen Aufruf eines selbstgeschriebenen Programms eingebaut, das den Source des erfolgreich gewandelten Programmes interpretiert und einen passenden Prototyp erzeugt und in ein Repository schreibt.

Das war ganz schön aufwendig. Schade, dass IBM da keine Standardlösung anbietet.

Wenn du da etwas findest (z.B. passende APIs), lass es uns wissen!

Fuerchau
04-08-17, 09:57
Vielleicht basiert der RDi-Editor ja auf OpenSource und man kann sich die Quell-Analyse daraus entnehmen, da ja dort alle Variablen analysiert werden könnte dies ebenso hilfreich für ein Repository sein.

dschroeder
04-08-17, 10:03
Coole Idee. Ich muss unser Java Kollegen mal fragen, ob die da etwas herausfinden können.

Pikachu
04-08-17, 10:07
Ist bei denen wohl wichtig, um die richtige Funktion/Prozedur/Methode zu finden, da sie überladen sein kann?


In QSYS2 findest du ausschließlich SQL-Definitionen und da gibt es natürlich ein Repository für Funktionen/Prozeduren sowie deren Parametern, da diese von SQL zur Laufzeit geprüft werden.
...
Bei Objekt-Sprachen (Java, .Net., Delphi o.ä.) gibt es diesbezüglich eben Laufzeitprüfungen über Typen und Parameter.

Fuerchau
04-08-17, 10:32
RPG kennt keine Überladungen, hier muss man immer neue Funktionsnamen erfinden.
In SQL wiederum ist das natürlich möglich.
Aus der Eingangsfrage (RDi und Intellisense) habe ich aber entnommen, dass es sich nicht um SQL handelt.