Symptom
Using system parameter sy-langu inside a custom logic in key user extensibility.
Environment
SAP S/4HANA Cloud
Reproducing the Issue
1. Opening a custom logic that has a message class as changing/exporting parameter.
2. Using the following code:
" IF sy-subrc = 0.
" ls_message-messagetype = 'E'.
" ls_message-messagevariable1 = lv_message.
" APPEND ls_message TO messages.
" ENDIF.
3. lv_message should be displayed in user language.
Cause
Restricted ABAP is used in the Custom Logic app which means not all system tables and functions can be used. This is described in the blog S/4HANA Extensibility Concept Details: Restricted ABAP - SAP Community.
Statements in ABAP for Key Users | SAP Help Portal which contains a complete list of allowed keywords and statements.
SY-LANGU is not available for use in Custom Logic.
Resolution
As an alternative, you can create a custom code list with a code for every message. You can maintain the descriptions for the codes in the languages that you want to support. With the following code you can retrieve a message in the user’s logon language. Please refer to Custom Code Lists | SAP Help Portal.
For example:
IF sy-subrc = 0.
SELECT SINGLE FROM YY1_CODELIST fields description WHERE code = '01' into @data(lv_message_in_logon_language).
ls_message-messagetype = 'E'.
ls_message-messagevariable1 = lv_message_in_logon_language.
APPEND ls_message TO messages.
ENDIF.
For more information, please refer to Using Language-Dependent Texts or Messages | SAP Help Portal
In the context of Developer extensibility, a second option would be creating a BAdI as per Implementing BAdIs | SAP Help Portal. System parameter sy-langu is available in developer extensibility (ABAP System Fields - ABAP Keyword Documentation).
Keywords
sy-langu, key user abap, restricted abap, custom logic, user language , KBA , BC-SRV-APS-EXT-BL , Custom Business Logic , Problem