Funktionsaufruf direkt in Textbox (Form)

5. Juli 2007 08:24

Dieser Weg ist so einfach, dass ich von alleine niemals auf die Idee gekommen wäre; vielleicht geht es einigen anderen ja auch so:

Viele Kunden benötigen z.B. ein Feld auf der Artikelkarte, deren Laufzeitkalkulation sich nicht über ein FlowField lösen lässt (FeldNeu := Artikel.Feld1 + Artikel.Feld2 - Artikel.Feld3/100).

Herkömmlicher Weg
Daher programmiert man dies meist auf die Form. Man erstellt dort eine neue globale Variable, fügt diese als SoureExpr einer neuen TextBox ein.
Die Berechnung selber findet nun entweder auf Datensatzebene statt oder auf Feldebene. Dumm nur, wenn man diese Rechenregel eigentlich auch in anderen Forms oder gar Reports braucht und so bei Änderungen diese überall durchführen muss.

Ein Schritt eleganter
Im obigen Beispiel wollten wir ein Feld für die Artikelkarte berechnen. Wir erweitern die Tabelle Item nun um eine Funktion mit einem Rückgabeparameter decimal (kann je nach Anforderung natürlich abweichen). Der Aufbau sieht also in etwa so aus:

MeineArtikelfunktion : decimal ;
IF ... THEN
EXIT(0);
EXIT(Feld1 + Feld2 - Feld3/100);

In die SourceExpr unserer neuen Textbox auf der Form schreiben wir jetzt keine Variable mehr, sondern SourceExpr = MeineArtikelfunktion.

"Item.MeineArtikelfunktion" lässt sich aber nicht nur auf Textboxebene gebrauchen, sondern ersetzt zum Beispiel in Reports oder Codeunits den gewohnten Feldaufruf.