Für die Ausnahmebehandlung benötigen Sie folgende Klassen:
JCoException: dies ist das Basis-Interface für Ausnahmen.
ABAPException: spezielle Klasse für Fehler, die im RFM ausgegeben wurden.
AbapException tritt auf, wenn der von Ihnen aufgerufene ABAP-Code eine Ausnahme ausgibt.
JcoRuntimeException: Basis-Klasse für Runtime Exceptions.
ConversionException: spezielle Klasse für Konvertierungsfehler.
ConversionException wird immer dann ausgegeben, wenn Sie eine Getter- oder Setter-Methode aufrufen die eine Konvertierung erfordert und diese Konvertierung scheitert.
XMLParserException: Verwendung bei Fehlern im XML Parser
XMLParserException wird vom XML Parser ausgegeben, wenn Fehler in der RFC-Kommunikation bei Verwendung komplexer Parameter auftreten.
SAP JCo gibt Ausnahmen als Unterklasse von JCoException oder JCoRuntimeException aus.
Hinweis
Runtime Exceptions werden im Unterschied zu JCo-Releases <3.0 nur noch in wenigen Fällen ausgegeben.
In der Regel wird eine Ausnahme als 'geprüfte' Ausnahme, d.h. als Unterklasse von JCoException ausgegeben.
Bei der Verwendung dieser 'normalen' Ausnahmen muss in jedem Fall eine Entscheidung getroffen werden, ob eine Ausnahme explizit behandelt oder der throws clause hinzugefügt wird.
Hinweis
Grundsätzlich wird empfohlen, try/catch im Code zu verwenden.
Syntax
Ausnahmebehandlung - Option 1
public void executeFunction(JCO.Function function, String where)
throws JCoException
{
JCoDestination destination=JCoDestinationManager.getDestination(where);
function.execute(destination);
}
Syntax
Ausnahmebehandlung - Option 2
public int executeFunction(JCO.Function function, String where)
{
int returnCode=0;
try
{
JCoDestination destination=JCoDestinationManager.getDestination(where);
function.execute(destination);
}
catch (AbapException ex) //Klausel 1
{
handleAbapException(function, ex);
returnCode=1;
}
catch (JCoException ex) //Klausel 2
{
logSystemFailure(ex);
returnCode=2;
}
catch (JCoRuntimeException ex) //Klausel 3
{
}
catch (Exception ex) //Klausel 4
{
}
return returnCode;
}
Es gibt also vier 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 und dritte Klausel betreffen 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.
Hinweis
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.
Eine ausführliche Beschreibung der einzelnen Ausnahme-Klassen finden Sie im JCo-Javadoc im Installationsverzeichnis docs.