Exception handling is the integral part of the designing the application. By raising the exception, we are providing the oppertunity to the Caller program to handle the exception in its own way.
Checkout all post related to Exception Raising & handling:
- Function Module Exception Handling
- Raising & Handling Non-class based exceptions – I
- Raising & Handling Non-class based exceptions – II
- Class-based Exceptions I – Basics
- Class-based Exceptions II – Design Time consideration
- Class based Exceptions III – Runtime flow
- Class based Exceptions IV – CLEANUP
- Exception class to use Messages from T100
- Why NOT to have a wrapper around Exception (RAISE) ?
Basics
When we create a reusable component like the Function Module, than we have to consider creating the exception, raising them in the function module and handling them explicitly in the calling program of those function module.
Today, we will see how to raise the exception.
First, we will see how to give the Static text and raise the exception.
Second, we will see how to get the Exception text from the function module repository and use that description in raising the exception.
In the Function module, sometimes we are in the situation when it is not advisable to process further because of, for example, missing data, conversion, etc. At that point of time, we can raise the excpetion. For this, we need to define the Exception under the tab “Exception” in the Function Builder. We have to use the MESSAGE … RAISING EXCEPTION_1 syntax to raise the exception.
In this test application, we have a test function module which will give us the SUM of the numbers provided as input. We want to raise the exception if the number1 (IF_NUM1) is not provided. We can raise the exception by message addition RAISING exception_name.
Static Exception Text
For the first option, here is the code snippet for the Function Module:
FUNCTION ztest_sum_1.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" REFERENCE(IF_NUM1) TYPE I OPTIONAL
*" REFERENCE(IF_NUM2) TYPE I OPTIONAL
*" EXPORTING
*" REFERENCE(EF_SUM) TYPE I
*" EXCEPTIONS
*" NO_NUM_1
*"----------------------------------------------------------------------
*
*
IF if_num1 IS INITIAL.
MESSAGE e398(00) WITH 'Number 1 has not been supplied' RAISING no_num_1.
EXIT.
ENDIF.
*
ef_sum = if_num1 + if_num2.
*
ENDFUNCTION.
Code snippet for the calling program:
*&---------------------------------------------------------------------*
*& Report ZTEST_SUM
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
*
REPORT ztest_sum.
START-OF-SELECTION.
*
DATA: lf_num1 TYPE i,
lf_num2 TYPE i,
lf_sum TYPE i.
*
lf_num2 = 10.
*
CALL FUNCTION 'ZTEST_SUM_1'
EXPORTING
if_num1 = lf_num1
if_num2 = lf_num2
IMPORTING
ef_sum = lf_sum
EXCEPTIONS
no_num_1 = 1.
*
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
Dynamic Exception text – retrieved from Exception Repository
For the second option, we need to use the FM SWO_TEXT_FUNCTION_EXCEPTION to get the exception text from the FM repository. Exception text is maintained as like this and we want to read that exception text in our program to raise the exception.
Code snippet to read the exception text from the function module repository.
FUNCTION ztest_sum_1.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" REFERENCE(IF_NUM1) TYPE I OPTIONAL
*" REFERENCE(IF_NUM2) TYPE I OPTIONAL
*" EXPORTING
*" REFERENCE(EF_SUM) TYPE I
*" EXCEPTIONS
*" NO_NUM_1
*"----------------------------------------------------------------------
*
*
IF if_num1 IS INITIAL.
*----------------
* Get the Exception Text from the Function Repository
DATA: l_fun TYPE funct-funcname,
l_exc TYPE funct-parameter,
l_txt TYPE swotlq-shorttext.
*
l_fun = 'ZTEST_SUM_1'.
l_exc = 'NO_NUM_1'.
*
* text of the Exception
CALL FUNCTION 'SWO_TEXT_FUNCTION_EXCEPTION'
EXPORTING
language = sy-langu
function = l_fun
exception = l_exc
IMPORTING
shorttext = l_txt.
*
* Raise the exception and exit
MESSAGE e398(00) WITH l_txt RAISING no_num_1. "(l_exc).
EXIT.
*
ENDIF.
*-------------------
*
ef_sum = if_num1 + if_num2.
*
ENDFUNCTION.
Check the help from SAP: Message Handling in Function Modules
Further Reading
Checkout all post related to Exception Raising & handling:
- Function Module Exception Handling
- Raising & Handling Non-class based exceptions – I
- Raising & Handling Non-class based exceptions – II
- Class-based Exceptions I – Basics
- Class-based Exceptions II – Design Time consideration
- Class based Exceptions III – Runtime flow
- Class based Exceptions IV – CLEANUP
- Exception class to use Messages from T100
- Why NOT to have a wrapper around Exception (RAISE) ?
I tried with ztest_sum_1 and did not works. the funct table is empty (the short text of the exception is filled)
tks
i try this and it works.. you need to define the interface in the function module
[…] continuation to one of my old post Function Module Exception Handling, today we’ll check some more […]