Für die Ausnahmebehandlung benötigen Sie folgende Klassen:
· JCO.Exception: dies ist die Basis-Klasse für Ausnahmen.
· JCO.ConversionException: Unterklasse für Konvertierungsfehler.
· JCO.AbapException: Unterklasse für Ausnahmen, die im RFM ausgegeben wurden.
SAP JCo gibt Ausnahmen als Unterklasse von RuntimeException aus. Runtime Exceptions sollten nicht in der Signatur der Methode eingebunden oder definiert werden. Das kann zwar vorteilhaft sein, aber es ist auch gefährlich. Unproblematischer ist die lokale Fehlerbehandlung, da das Programm in diesem Fall noch weiß, in welchem Kontext der Fehler aufgetreten ist. Deshalb wird grundsätzlich empfohlen, try/catch im Code zu verwenden, selbst wenn der Compiler dies nicht anzeigt.
SAP JCo verfügt lediglich über drei Ausnahme-Typen: JCO.Exception und zwei Unterklassen, die Sie bei Bedarf separat rufen können. JCO.Exception verfügt darüber hinaus über eine getGroup()-Methode, mit der Sie zwischen verschiedenen Fehlertypen unterscheiden können. Eine Liste der Gruppen finden Sie im entsprechenden Javadoc im Installationsverzeichnis docs.
JCO.ConversionException wird immer dann ausgegeben, wenn Sie eine Getter- oder Setter-Methode aufrufen die eine Konvertierung erfordert und diese Konvertierung scheitert.
JCO.AbapException tritt auf, wenn der von Ihnen aufgerufene ABAP-Code eine Ausnahme ausgibt. Die Abbildung unten zeigt, wie zwischen verschiedenen Fehlertypen unterschieden werden kann (das Beispiel zeigt die Verwendung des RFMs DDIF_FIELDINFO_GET, mit dem Struktur- oder Tabellenmetadaten abgefragt werden können. Wurde ein ungültiger Name übergeben, wird von diesem RFM die Ausnahme NOT_FOUND ausgegeben):
catch (JCO.AbapException ex) {
if (ex.getKey().equalsIgnoreCase("NOT_FOUND")) {
System.out.println("Dictionary structure/table not found.");
System.exit(1);
}
else {
System.out.println(ex.getMessage());
System.exit(1);
}
}
catch (JCO.Exception ex) {
ex.printStackTrace();
System.exit(1);
}
catch (Exception ex) {
ex.printStackTrace();
System.exit(1);
} |
Es gibt drei catch – Klauseln:
· In der ersten verwenden Sie die Methode getKey(), um auf den exception string zuzugreifen, der vom SAP-System zurückgegeben wird. Ist dies NOT_FOUND, wird ein eigener Text ausgegeben, für alle anderen Ausnahmen verwenden Sie getMessage(), um einen geeigneten Text zu generieren. Auf diese Weise können Sie zwischen verschiedenen ABAP-Ausnahmen unterscheiden, die Sie auf spezifische Weise behandeln möchten, während alle anderen generisch behandelt werden. Da alle exception strings in SAP definiert werden, kennen Sie sie schon im Voraus.
· Die zweite Klausel betrifft alle andern JCo-relevanten Probleme. Dies schließt Konvertierungsfehler und andere in SAP JCo aufgetretene Fehler ein.
· Die dritte Klausel betrifft alle anderen Ausnahmen die in Ihrem Code aufgetreten sein könnten.
Beachten Sie bitte, dass es sich auch hier um eine Beispielbeschreibung handelt. Je nach den konkreten Anforderungen Ihres Codes kann es notwendig sein, die Fehlerbehandlung anzupassen.