EGL-Basiselemente zu Java zuordnen

Basiselementdatentypen (Primitive-Datentypen) werden von EGL in beiden Richtungen zwischen EGL und Java™ konvertiert. Die möglichen Konvertierungen werden in den fünf folgenden Tabellen beschrieben:

In den Tabellen wird auf Einschränkungen bei den zugrunde liegenden Technologien hingewiesen. Wenn Sie z. B. eine Funktion eines externen Typs aufrufen, wird der Typ 'EGL TIMESTAMP' in eine Klasse 'java.lang.Timestamp' konvertiert. Die betreffende Klasse ist nicht in JSF verfügbar, sodass der Typ 'EGL TIMESTAMP' in einem JSF-Handler in 'java.util.Calendar' konvertiert wird.

In den folgenden Tabellen ist ersichtlich, dass einige EGL-Basiselemente in Klassen (z. B. 'java.math.BigDecimal'), andere in Java-Basiselemente (z. B. 'long') konvertiert werden.

Funktionen externer Typen

Der folgenden Tabelle können Sie entnehmen, wie EGL-Basiselementtypen in einem Aufruf einer Funktion des Typs 'ExternalType' in Java-Datentypen konvertiert werden. Bei dieser Zuordnung handelt es sich um die einzige Zuordnung, bei der die Konvertierung von EGL in Java nicht einfache eine Umkehrung der Konvertierung von Java in EGL ist. Das Fragezeichen weist auf einen Typ hin, der Nullwerte annehmen kann. Weitere Informationen hierzu finden Sie im Abschnitt 'Nullwerte und nullfähiger Typ'.

Tabelle 1. Konvertierung von EGL in Java
EGL-Typ Java-Typ
CHAR, CHAR?, MBCHAR, MBCHAR?, DBCHAR, DBCHAR?, UNICODE, UNICODE? java.lang.String mit Entfernen und Auffüllen von abschließenden Leerzeichen und Verkürzung bei Übergängen
UNICODE(1) char
UNICODE(1)? java.lang.Character
STRING java.lang.String
HEX(2) byte
HEX(2)? java.lang.Byte
HEX(>2), HEX(>2)? byte[]
BOOLEAN boolean
BOOLEAN? java.lang.Boolean
SMALLINT short
SMALLINT? java.lang.Short
INT int
INT? java.lang.Integer
BIGINT long
BIGINT? java.lang.Long
DECIMAL, BIN, MONEY, NUM (keine Dezimalstellen)

1<=length<=9, int
10<=length<=18, long
19<=length<=32, java.math.BigInteger

DECIMAL?, BIN?, MONEY?, NUM? (keine Dezimalstellen)

1<=length<=9,  java.lang.Integer
10<=length<=18,  java.lang.Long
19<=length<=32, java.math.BigInteger

DECIMAL, DECIMAL?, BIN, BIN?, MONEY, MONEY?, NUM, NUM? (deklariert mit Dezimalstellen) java.math.BigDecimal
SMALLFLOAT float
SMALLFLOAT? java.lang.Float
FLOAT double
FLOAT? java.lang.Double
DATE, DATE? java.sql.Date
TIME, TIME? java.sql.Time
TIMESTAMP, TIMESTAMP? java.sql.Timestamp
INTERVAL, INTERVAL? (Mikrosekunden) java.math.BigInteger (Mikrosekunden)
INTERVAL, INTERVAL? (Monate) long (Monate)
BLOB -
CLOB -
Dynamische Feldgruppe java.util.List. Die Elemente der dynamischen Feldgruppe werden wie in dieser Tabelle angegeben in Java-Typen konvertiert. Eine Feldgruppe mit dem Typ EGL DATE wird in eine Liste des Typs 'java.util.List' konvertiert, bei deren Elementen es sich um Objekte des Typs 'java.sql.Date' handelt.
Strukturierter Datensatz byte[n], wobei n die Anzahl der Bytes im Datensatz angibt.

Der folgenden Tabelle können Sie entnehmen, wie Java-Datentypen in einem Aufruf einer Funktion des Typs 'ExternalType' in EGL-Basiselementtypen konvertiert werden. Ein Stern in der ersten Spalte weist darauf hin, dass es sich bei der Konvertierung um eine Umkehrung der Konvertierung von EGL in Java handelt.

Tabelle 2. Konvertierung von Java in EGL
Java-Typ EGL-Typ
char* UNICODE(1)
java.lang.Character* UNICODE(1)?
java.lang.String* STRING
byte* HEX(2)
byte[n] HEX(n*2)?
byte[n]* Strukturierter Datensatz, wobei n die Anzahl der Bytes im Datensatz angibt.
java.lang.Byte* HEX(2)?
boolean* BOOLEAN
java.lang.Boolean* BOOLEAN?
short* SMALLINT
java.lang.Short* SMALLINT?
int* INT
java.lang.Integer* INT?
long* BIGINT
java.lang.Long* BIGINT?
java.math.BigDecimal DECIMAL(32,scale). Die Anzahl der Ziffern ist bei 'java.math.BigDecimal' nicht begrenzt. Bei EGL ist die Anzahl der Ziffern bei der Java-Generierung auf 32 begrenzt.
java.math.BigInteger NUM(32). Die Anzahl der Ziffern ist bei 'java.math.BigInteger' nicht begrenzt. Bei EGL ist die Anzahl der Ziffern bei der Java-Generierung auf 32 begrenzt.
float* SMALLFLOAT
java.lang.Float* SMALLFLOAT?
double* FLOAT
java.lang.Double* FLOAT?
java.sql.Date DATE?
java.sql.Time TIME?
java.sql.Timestamp TIMESTAMP("yyyyMMddHHmmssfff")?
java.util.List* DynamicArray. Die Liste wird in eine dynamische EGL-Feldgruppe konvertiert, deren Typ sich nach dem Typ der Listenelemente richtet. Enthält die Liste z. B. Objekte des Typs 'java.lang.Double', weist die dynamische EGL-Feldgruppe den Typ FLOAT?[] auf.

Berichtsfunktionen

Datentypen werden in XML-Berichtsentwürfen als Java-Datentypen beschrieben. Verwenden Sie zum Aufrufen von EGL-Handlerfunktionen des Typs 'JasperReport' im Entwurfsdokument den Java-Datentyp für den Aufruf, der dem geeigneten EGL-Basiselementtyp entspricht. Sie müssen auch die Daten, die von der JasperReport-Handlerfunktion an die XML-Entwurfsdatei zurückgegeben werden, mit Java-Datentypen deklarieren.

Der folgenden Tabelle können Sie die Java-Datentypen, die für die Verwendung in XML-Berichtsentwurfsdokumenten vorgesehen sind, sowie die entsprechenden EGL-Basiselementtypen entnehmen.

Tabelle 3. EGL für Berichte in Java konvertieren
EGL-Basiselementtyp Java-Datentyp
BIGINT java.lang.Long
BIN java.math.BigDecimal
BLOB -
BOOLEAN java.lang.Boolean
CHAR java.lang.String
CLOB -
DATE java.util.Date
DBCHAR java.lang.String
DECIMAL java.math.BigDecimal
FLOAT java.lang.Double
HEX java.lang.Byte
INT java.lang.Integer
INTERVAL java.lang.String
MBCHAR java.lang.String
MONEY java.math.BigDecimal
NUM java.math.BigDecimal
NUMC java.math.BigDecimal
PACF java.math.BigDecimal
SMALLFLOAT java.lang.Float
SMALLINT java.lang.Short
STRING java.lang.String
TIME java.sql.Time
TIMESTAMP java.sql.Timestamp
UNICODE java.lang.String

JavaLib-Funktionen

Wenn Sie ein Argument an eine Funktion aus der EGL-Systembibliothek 'JavaLib' übergeben, wird das Argument von EGL in den in der folgenden Tabelle angegebenen Java-Typ konvertiert. Der Rückgabewert wird vom Typ in der rechten Spalte in den in der linken Spalte angegebenen Typ konvertiert.

Tabelle 4. Argumente an JavaLib-Funktionen übergeben
EGL-Typ Beispiele Java-Typ
Zeichenfolgeliteral oder Variable des Typs CHAR, DBCHAR, MBCHAR oder UNICODE Keine Umsetzung
"myString"
java.lang.String
Umsetzung in 'objID:java' (Angabe einer Kennung)
"myId" as 
   "objID:java"

x = "myId";
x as "objID:java"
Die Klasse des Objekts, auf das die Kennung verweist
Umsetzung von Null, wie es für das Bereitstellen einer Nullreferenz auf eine vollständig qualifizierte Klasse sinnvoll sein kann.
NULL as "java:
java.lang.Thread"

x = "java.util.
HashMap";
NULL as x
Die angegebene Klasse
Anmerkung: Sie können keine Elemente in einer Feldgruppe mit Nullumsetzung übergeben, z. B. 'null as "java:int[]" '
Nehmen Sie die Umsetzung mit 'java:char' vor, sodass das erste Zeichen des Werts übergeben wird. Bei den einzelnen Beispielen in der nächsten Spalte handelt es sich dabei um das Zeichen 'a'.
"abc" as "java:char"

x = "abc";
x as "java:char"
char
Variable des Typs STRING Keine Umsetzung myStringVar java.lang.String
Variable des Typs FLOAT Keine Umsetzung
myFloatValue
double
Variable des Typs HEX Keine Umsetzung
myHexValue
Bytefeldgruppe
Variable des Typs SMALLFLOAT Keine Umsetzung
mySmallFloat
float
Variable des Typs DATE Keine Umsetzung
myDate
java.sql.Date
Variable des Typs TIME Keine Umsetzung
myTime
java.sql.Time
Variable des Typs TIMESTAMP Keine Umsetzung
myTimeStamp
java.sql.Timestamp
Variable des Typs INTERVAL Keine Umsetzung
myInterval
java.lang.String
Boolesche Variable Keine Umsetzung
myBoolean
boolean
Gleitkommaliteral Keine Umsetzung -6.5231E96 double
Numerische Variable (oder ein Literal, bei dem es sich nicht um ein Gleitkommaliteral handelt) ohne Dezimalstellen. Führende Nullen werden bei der Anzahl der Ziffern für ein Literal berücksichtigt. Keine Umsetzung, 1 - 4 Ziffern
0100
short
Keine Umsetzung, 5 - 9 Ziffern
00100
int
Keine Umsetzung, 9 - 18 Ziffern
1234567890
long
Keine Umsetzung, > 18 Ziffern
1234567890123456789
java.math.BigInteger
Numerische Variable (oder ein Literal, bei dem es sich nicht um ein Gleitkommaliteral handelt) mit Dezimalstellen. Führende und abschließende Nullen werden bei der Anzahl der Ziffern für ein Literal berücksichtigt. Keine Umsetzung, 1 - 6 Ziffern
3.14159
float
Keine Umsetzung, 7 - 18 Ziffern
3.14159265
double
Keine Umsetzung, > 18 Ziffern
56789543.222
java.math.BigDecimal
Numerische Variable oder ein Literal, bei dem es sich nicht um ein Gleitkommaliteral handelt, mit oder ohne Dezimalstellen

Umsetzen als
java:java.math.-
BigDecimal,
BigInteger,
java:byte,
java:double,
java:float,
java:short,
java:int,
java:long

x = 42;

x as "java:byte"

x as "java:long"
Der angegebene Typ. Liegt der Wert jedoch nicht in dem gültigen Bereich für den betreffenden Typ, gehen Dezimalstellen verloren und das Vorzeichen ändert sich möglicherweise.
Umsetzen mit 'java:boolean', sodass 'ungleich null' zu 'wahr' und 'null' zu 'falsch' wird.
x = 1;
x as "java:boolean"
boolean

JSF-Handlerfunktionen

Die folgende Tabelle verdeutlicht die Konvertierung von EGL in Java, die EGL vornimmt, wenn Argumente von einem JSF-Handler an eine Java-Funktion übergeben werden. Der Rückgabewert der Funktion wird von einem Java-Typ in einen EGL-Typ umgesetzt. Wenn Sie ein EGL-Nullargument an die Funktion übergeben, wird ein Java-Nullwert zurückgegeben.

Tabelle 5. Konvertierung für JSF-Handler
EGL-Typ Java-Typ
BIGINT / BIN(18) java.lang.Long
BIN mit Dezimalstellen java.math.BigDecimal
BLOB byte[]
BOOLEAN* java.lang.Boolean
CHAR java.lang.String
CLOB java.lang.String
DATE java.util.Date
DBCHAR java.lang.String
DECIMAL java.math.BigDecimal
FLOAT java.lang.Double
HEX byte[]
INT / BIN(9) java.lang.Integer
INTERVAL java.lang.String
MBCHAR java.lang.String
MONEY java.math.BigDecimal
NUM java.math.BigDecimal
NUMC java.math.BigDecimal
PACF java.math.BigDecimal
SMALLFLOAT java.lang.Float
SMALLINT / BIN(4) java.lang.Short
STRING java.lang.String
TIME java.util.Date
TIMESTAMP java.util.Calendar
UNICODE java.lang.String
Datensatz Ein Objekt, das der JavaBeans-Spezifikation entspricht (das Objekt verfügt über Methoden für den Abruf der Werte der Datensatzfelder)
*Bei einer Variablen, die auf einem der folgenden Basiselementtypen basiert, kann die Eigenschaft IsBoolean mit YES definiert sein:
  • CHAR
  • BIN
  • NUM
  • NUMC
  • DECIMAL
  • PACF
  • INT
  • BIGINT
  • SMALLINT
  • FLOAT
  • MONEY

In diesem Fall wird die Variable wie eine boolesche Variable behandelt und zu 'java.lang.Boolean' zugeordnet.


Feedback