В документации к системе версии 7.30 (sy-saprl) было обнаружено интересное нововведение, возможность обработки RFC исключений в объектном представлении:
In the interface of a remote enabled function module, you can either specify class-based exceptions (as of release 7.1, EhP1) or define classic exceptions, that is, non class-based exceptions.
Все классические исключения согласно документации транслируются в объектное исключение cx_classic_exception. Рассмотрим пример RFC модуля:
1 2 3 4 5 6 7 8 9 10 |
FUNCTION ztest01. *"---------------------------------------------------------------------- *"*"Локальный интерфейс: *" EXCEPTIONS *" SOME_EXCEPTION *"---------------------------------------------------------------------- RAISE some_exception. ENDFUNCTION. |
Пример программы:
1 2 3 4 5 6 7 8 |
DATA: lo_exc TYPE REF TO cx_classic_exception. TRY. CALL FUNCTION 'ZTEST01' DESTINATION 'NONE'. CATCH cx_classic_exception INTO lo_exc. WRITE 'Внимание! Произошла ошибка'. ENDTRY. |
В результате её работы исключение будет преобразовано в объектное и система отобразит сообщение о произошедшей ошибке:
Однако документация в системе версии 7.31 изменилась:
In the interface of a remote enabled function module you can currently only specify classical exception, in other words non-class-based exceptions. Class-based exceptions are supported in other release tracks.
А все из-за того что:
With respect to the ABAP and ABAP runtime environment, Release 7.31 is not the successor to Release 7.3 from the track 7.1, 7.2, 7.3. The following Release 7.3 features are not included
-
The operational package concept in which package errors are detected by the syntax check and produced syntax errors
-
Support for class-based exceptions in RFC.
Соответственно использование объектных исключений не допускается, в результате проверки программы вы получите предупреждение (верно и для 7.40):