Dynpro
Domänenfestwerte beschaffen
Dieser Beitrag zeigt einen praxisnahen ABAP-Lösungsansatz, um Domänenfestwerte inklusive Texte sprachrobust zu ermitteln – mit cl_abap_elemdescr, Fallback-Logik und konkretem Beispiel aus der SAP-Entwicklung.
Hier ist ein kleines Demoprogramm:
Das folgende Beispiel zeigt, wie die Festwerte inklusive Sprachfallback über die Typbeschreibung gelesen werden können.
Beispielprogramm anzeigen (51 Zeilen)
REPORT zstkoes_fixed_values_de.
DATA gv_genflag TYPE genflag.
DATA gv_char TYPE c.
DATA gv_system_language TYPE langu.
DATA gv_second_language TYPE langu.
DATA gv_select_language TYPE langu value 'I'.
CALL 'C_SAPGPARAM' id 'NAME' field 'zcsa/system_language'
id 'VALUE' field gv_system_language.
CALL 'C_SAPGPARAM' id 'NAME' field 'zcsa/second_language'
id 'VALUE' field gv_second_language.
* Es ist wichtig zu prüfen, dass eine Variable im Dictionary existiert, um einen Dump zu verhindern.
IF cl_abap_elemdescr=>describe_by_data( gv_char )->is_ddic_type( ) EQ abap_true.
DATA(gt_fixed_values_char) = CAST cl_abap_elemdescr( cl_abap_elemdescr=>describe_by_data( gv_char ) )->get_ddic_fixed_values( ).
ENDIF.
IF cl_abap_typedescr=>describe_by_data( gv_genflag )->is_ddic_type( ) EQ abap_true.
DATA(gt_fixed_values) = CAST cl_abap_elemdescr( cl_abap_typedescr=>describe_by_data( gv_genflag ) )->get_ddic_fixed_values( ).
ENDIF.
IF cl_abap_typedescr=>describe_by_data( gv_genflag )->is_ddic_type( ) EQ abap_true.
DATA(gt_fixed_values_it) = CAST cl_abap_elemdescr( cl_abap_typedescr=>describe_by_data( gv_genflag ) )->get_ddic_fixed_values( gv_select_language ).
ENDIF.
cl_demo_output=>next_section( title = |Systeminformation| ).
cl_demo_output=>write_text( text = |Systemsprache: { gv_system_language }{
cl_abap_char_utilities=>newline }Zweite Sprache: { gv_second_language }{
cl_abap_char_utilities=>newline }Anmeldesprache: { sy-langu }| ).
cl_demo_output=>end_section( ).
cl_demo_output=>next_section( title = |Beschaffung der Festwerte in der Anmeldesprache| ).
cl_demo_output=>write_text( text = |Wenn die Festwerte nicht in der Anmeldesprache existieren, wird die zweite Sprache benutzt| ).
cl_demo_output=>write_data( name = |{ COND #( WHEN line_exists( gt_fixed_values[ 1 ] ) AND gt_fixed_values[ 1 ]-ddlanguage EQ sy-langu
THEN |Werte in Anmeldesprache|
ELSE |Werte in zweiter Sprache| ) }|
value = COND #( WHEN line_exists( gt_fixed_values[ 1 ] )
THEN gt_fixed_values ) ).
cl_demo_output=>end_section( ).
cl_demo_output=>next_section( title = |Beschaffung der Festwerte in ausgewählter Sprache { gv_select_language }| ).
cl_demo_output=>write_text( text = |Wenn die Festwerte nicht in der ausgewählten Sprache existieren, wird die zweite Sprache benutzt| ).
cl_demo_output=>write_data( name = |{ COND #( WHEN line_exists( gt_fixed_values_it[ 1 ] ) AND gt_fixed_values_it[ 1 ]-ddlanguage EQ gv_select_language
THEN |Werte in ausgewählter Sprache|
ELSE |Werte in zweiter Sprache| ) }|
value = COND #( WHEN line_exists( gt_fixed_values_it[ 1 ] )
THEN gt_fixed_values_it ) ).
cl_demo_output=>end_section( ).
cl_demo_output=>display( ).
Ausgabe des Programms
Die Ausgabe zeigt zunächst die relevante Systeminformation mit Systemsprache, zweiter Sprache und aktueller Anmeldesprache. Anschließend werden die gefundenen Festwerte einmal für die Anmeldesprache und einmal für die ausgewählte Sprache ausgegeben, sodass das Fallback-Verhalten unmittelbar nachvollzogen werden kann.