Fehlerbehandlung nach Methodenaufruf 
Die Fehlerbehandlung bei dem Einsatz von Desktop Office Integration ist nicht trivial. Die Methoden können eine Vielzahl von verschiedenen Fehlercodes liefern. Außerdem können durch die Weiterentwicklung viele neue Fehlercodes dazukommen. Die nachfolgenden Hinweise sollen Ihnen die Verwendung der Desktop Office Integration erleichtern.
Nach einem Methodenaufruf müssen Sie abfragen, ob der Methodenaufruf erfolgreich war oder ob ein Fehler auftrat. Dazu bieten alle Methoden einen Rückgabeparameter ret_code an, der bei Erfolg den Wert ‚OK' und im Fehlerfall einen Fehlercode liefert. Für die Erfolgsmeldung sowie für alle Fehlercodes sind in der Klasse c_oi_errors symbolische Konstanten definiert. Außerdem werden von allen Methoden zusätzliche Informationen über den Fehler gespeichert. Dadurch ist die Klassenmethode raise_message der Klasse ret_code in der Lage, eine Nachricht in der Statuszeile mit der genauen Fehlerursache anzuzeigen. Die Methode raise_message führt intern im Fehlerfall die ABAP-Anweisung MESSAGE aus, um eine Nachricht der Nachrichtengruppe SOFFICEINTEGRATION anzuzeigen.
Die folgenden zwei Abläufe können als Richtlinie für eigene Fehlerbehandlung dienen. Bei dem ersten Ablauf wird auf keine Fehler im einzelnen eingegangen. Bei dem zweiten Ablauf wird auf einige Fehler speziell eingegangen, die restlichen werden mit Hilfe der Methode raise_message angezeigt.
Wird bei Methodenaufrufen die Automation Queue nicht synchronisiert (siehe dazu generischer Parameter no_flush), ist der Wert des Parameters ret_code nicht aussagekräftig. Dies resultiert aus der Tatsache, dass dieser Wert erst nach der Synchronisation der Automation Queue sinnvoll von der Methode gesetzt werden kann. Daher erhalten Sie nach jedem Methodenaufruf auch eine Referenz auf ein Fehlerobjekt (error). Wie Sie mit diesem Fehlerobjekt umgehen, wird in Ablauf III erklärt.
Rufen Sie nach Ausführung einer Methode der SAP Desktop Office Integration die Klassenmethode show_message der Klasse c_oi_errors auf:
Syntax
CALL METHOD C_OI_ERRORS=>RAISE_MESSAGE EXPORTING TYPE = type
Übergeben Sie bei diesem Methodenaufruf über den Parameter type den Nachrichtentyp (A, E, W, I, S).
Sofern ein Fehler bei der Ausführung einer Methode der SAP Desktop Office Integration aufgetreten ist, wird dann eine Nachricht des angegebenen Typs ausgegeben. Der richtige Nachrichtentext wird durch die Klassenmethode raise_message automatisch bestimmt.
Geben Sie bei der Ausführung einer Methode der SAP Desktop Office Integration eine Variable ret_code mit, in die der Fehlercode gespeichert werden soll.
Prüfen Sie zuerst, ob überhaupt ein Fehler aufgetreten ist. Im Erfolgsfall verzweigen Sie in den Programmteil, der für den Normalfall vorgesehen ist.
Prüfen Sie als nächstes, ob ein Fehler, den Sie explizit verarbeiten wollen, aufgetreten ist. In diesem Fall können Sie in die Programmteile verzweigen, die für die spezielle Fehlerbehandlung vorgesehen sind.
Bei allen anderen Fehlercodes rufen Sie unbedingt die Klassenmethode raise_message der Klasse c_oi_errors wie im Ablauf I erläutert auf.
Syntax
IF ret_code EQ c_oi_errors=>ret_ok. " Document opened successfully ELSEIF ret_code EQ c_oi_errors=> ret_document_already_open. " Special error handling, e.g. dialog box. ELSE. CALL METHOD c_oi_errors=>raise_message EXPORTING type = 'E'. ENDIF.
Legen Sie eine Tabelle an, in der Sie alle Referenzen auf die Fehlerobjekte sammeln: DATA: errors TYPE REF TO i_oi_error OCCURS 0 WITH HEADER LINE.
Nach jedem Methodenaufruf, bei dem Sie den Parameter no_flush = 'X' setzen, fügen Sie die Objektreferenz in die Fehlertabelle:
Syntax
CALL METHOD control->get_link_server EXPORTING server_type = server_type no_flush = 'X' IMPORTING link_server = link_server retcode = retcode error = errors. APPEND errors.
Nach erfolgter Synchronisation der Automation Queue (Setzen des Parameters no_flush = ' ' bzw. Aufruf der Methode flush) arbeiten Sie die Referenzen in der Fehlertabelle ab:
Syntax
LOOP AT errors. CALL METHOD errors->raise_message EXPORTING type = 'E' EXCEPTIONS message_raised = 1 flush_failed = 2. ENDLOOP. FREE errors.