Hallo Peder,

beim Parameter-Style General with NULL werden alle im Prototypen/Procedure Interface angegebene Parameter übergeben plus für jeden Parameter einen zusätzlichen NULL-Indicator. Aus diesem Grund werden ALLE in der Prozedur definierten Parameter übergeben. Für die nicht übergebenen Parameter wird ein NULL-Pointer übergeben.

Aus diesem Grund musst Du Deine optionalen Parameter im Prototypen mit Options(*NoPass: *Omit) definiert werden. (In Deiner gegenwärtigen Parameter-Definition ist kein optionaler Parameter definiert, was auch mit ein Grund sein kann, warum %Parms keinen korrekten Wert liefert). Ebenfalls solltest Du bei Parameter-Style General with NULL eine Feldgruppe mit 5I 0 und sovielen Elementen wie Parameter übergeben werden können als letzten Parameter im Prototypen einfügen.

Ob die optionalen Parameter übergeben sind oder nicht, kannst Du dann über %Addr(Param) abfragen.
Wenn %Addr(Param) = *NULL, wurde der Parameter nicht übergeben. Alternativ kannst Du den NULL-Indikator für den entsprechenden Parameter prüfen. (< 0 entspricht NULL-Wert)

Probleme könnten auch die Parameter-Felder mit 2B 0 bereiten, da SQL keinen entsprechenden Datentypen kennt. Sollten keine Probleme auftreten ist zuminest eine explizite oder implizite Typenkonvertierung erforderlich.

Werden RPG-Funktionen als UDFs registriert, sollte darauf geachtet werden, das keine Typen-Konvertierung notwendig ist.

Birgitta