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.

Zurück zur Blog-Übersicht