Hallo Leute,
danke für die schnellen Antworten. Leider bin ich mit meinem Problem immer noch nicht weiter.

Zitat Zitat von BenderD Beitrag anzeigen
was soll das heißen %parms wird nicht unterstützt? beschreibe dein Problem mal genauer.
%parms ist ein Element der ILE-Umgebung und gibt die Anzahl der übergebenen Parameter nur zurück, wenn der Caller diesen Wert zur Verfügung stellt. Das macht aber die UDF nicht. %parms ist immer -1, egal mit welchen Parametern ich die UDF auslöse.

Zitat Zitat von Fuerchau
Die Frage ist eher, sind tatsächlich die Anzahl Paramter unterschiedlich oder nur die Ausprägung.
Nur die Anzahl der Parameter ist variabel. Die UDF soll den VK-Preis eines Artikels zu einem Termin liefern. Wird das Datum mitgegeben, soll es verwendet werden, ansonsten mit dem Tagesdatum gefüllt werden. Ich weiss, dass ich den Parameter immer mit 'current date' ersetzen kann, aber es geht mir eigentlich um das Wissen an sich, da ich zukünftig noch viele UDF's generieren möchte, und da habe ich dann andere Konstellationen. Ich hatte auch schon überlegt, mehrere Funktionen zu machen, aber das ist natürlich nur die zweitbeste Lösung ;-)

Zitat Zitat von B.Hauser
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.
Birgitta, ich habe die Paramter so umgestellt, auch mit dem Array für den Null-Indikator. Die 2B o-Felder aus den Parametern waren meine Null-Indikatoren (aus der SQL-Style Definition).

Habe folgende Änderung gemacht:
d get_vk pi 9s 4
d p$firma 3
d p$artn 8 0
d p$filial 3
d p$grop 2 0
d p$datum d datfmt(*iso)
d p$brunet 1 varying
d p$ni 5i 0 dim(7)

p$ni ist das Null-Indikator-Array.
habe auch das ganze mit OPTION(*nopass: *omit) probiert. Fakt ist, im Debug kann ich das Array p$ni nicht ansprechen, und auch die Abfrage %addr(p$datum) = *null läuft verkehrt, denn bei der Abfrage

if %addr(p$datum) <> *null;
§a4datv = %char(p$datum : *eur);

wird der folgende eval versucht auszuführen, aber das geht dann schief, da der Wert kein gültiges Datum enthält.

Evtl. habt ihr noch eine Idee.
Thx