Datentypen in Java Actions

Februar 27, 2020 0 Von Andreas

Hin und wieder kommt man bei Mendix an den Punkt, an dem man mehr will. Das ist meist der Moment in dem man anfängt eigene Java Actions zu benutzen. Um das zu tun muss man natürlich Daten/Parameter an eine Java Action übergeben und Daten wieder zurückbekommen. Welche Datentypen in Java entsprechen aber welchen Datentypen in Mendix? Besonders wenn man mit nicht definierten Objekten arbeitet muss man wissen welche Daten man in welches Attribut packen kann. Hier mal eine Übersicht welche Datentypen aus Mendix wie in einer Java Action landen wenn diese als Parameter übergeben werden.

Übergabeparameter Datentypen

Type in ModelerType in Java ActionJavadoc
Object of EntityProxy Object
Any ObjectIMendixObject
Microflowjava.lang.Stringhttps://docs.oracle.com/javase/8/docs/api/index.html?java/lang/String.html
Booleanjava.lang.Booleanhttps://docs.oracle.com/javase/8/docs/api/index.html?java/lang/Boolean.html
Date and Timejava.util.Datehttps://docs.oracle.com/javase/8/docs/api/index.html?java/util/Date.html
Decimaljava.math.BigDecimalhttps://docs.oracle.com/javase/8/docs/api/index.html?java/math/BigDecimal.html
EnumerationProxy Enum
Integer/Longjava.lang.Longhttps://docs.oracle.com/javase/8/docs/api/index.html?java/lang/Long.html
Stringjava.lang.Stringhttps://docs.oracle.com/javase/8/docs/api/index.html?java/lang/String.html

Wie man sieht werden grundsätzlich keine primitiven Datentypen verwendet. Wenn man mit primitiven Datentypen arbeitet muss man also gegebenenfalls ein Objekt erzeugen, sofern man sie zurückgeben oder auf ein Attribut speichern will. Weiß man was Mendix erwartet ist dies natürlich kein Problem.

Ähnlich sieht das ganze auf den Proxy Klassen aus die Mendix für die Entities im Domain Model generiert. Folgende Attributtypen haben folgende Entsprechung in der Proxy Klasse.

Datentypen Proxy Attribute

Domain Model DatentypJava DatentypJavadoc
AutoNumberjava.lang.Longhttps://docs.oracle.com/javase/8/docs/api/index.html?java/lang/Long.html
Binary (get)java.io.OutputStreamhttps://docs.oracle.com/javase/8/docs/api/index.html?java/io/OutputStream.html
Binary (set)java.io.InputStreamhttps://docs.oracle.com/javase/8/docs/api/index.html?java/io/InputStream.html
Booleanjava.lang.Booleanhttps://docs.oracle.com/javase/8/docs/api/index.html?java/lang/Boolean.html
Date and Timejava.util.Datehttps://docs.oracle.com/javase/8/docs/api/index.html?java/util/Date.html
Decimaljava.math.BigDecimalhttps://docs.oracle.com/javase/8/docs/api/index.html?java/math/BigDecimal.html
EnumEnum Proxy Objekt
Hashed Stringjava.lang.Stringhttps://docs.oracle.com/javase/8/docs/api/index.html?java/lang/String.html
Integerjava.lang.Integerhttps://docs.oracle.com/javase/8/docs/api/index.html?java/lang/Integer.html
Longjava.lang.Longhttps://docs.oracle.com/javase/8/docs/api/index.html?java/lang/Long.html
Stringjava.lang.Stringhttps://docs.oracle.com/javase/8/docs/api/index.html?java/lang/String.html

Interessant hierbei ist vielleicht unter Anderem, dass zwischen Integer und Long unterschieden wird, während dies bei Übergabeparametern nicht der Fall ist. Hier ist also unter Umständen Vorsicht geboten.

Arbeitet man mit IMendixObject Objekten (etwas was man immer tut wenn man eine Java Action für beliebige Objekte erstellt), so werden auf diesem Objekt die gleichen Datentypen wie auf Proxy Klassen verwendet.