[ABAP] Datenelemente anhand von Datentypen und Suchstrings (Tabelle DD01L, DD01T) suchen

In der Praxis kommt es oft vor, dass man zu einem Datenelement oder einer Tabelle einen passenden fertigen SAP-Datentyp aus dem DDIC sucht. Dieses kleine Programm hilft dabei, schnell und effizient das passende aus den Tabellen DD01L und DD01T zu suchen (Datentyp, Sprache, Kurztext).

* Datentyp
PARAMETERS: p_dtyp TYPE dd04l-datatype DEFAULT 'DATS'.
* Sprache
PARAMETERS: p_lang TYPE dd04t-ddlanguage DEFAULT 'D'.
* Suchtext für Suche in Kurzbeschreibung
PARAMETERS: p_search TYPE string LOWER CASE.

START-OF-SELECTION.

  SELECT dl~rollname,  " Datenelement
         dl~domname,   " Domäne
         dl~datatype,  " Datentyp
         dl~leng,      " Zahl der Stellen
         dl~memoryid,  " Parameter-Id
         dl~entitytab, " Wertetabelle
         dt~ddtext     " Kurzbeschreibung
    INTO TABLE @DATA(it_result)
    FROM dd04l AS dl
    INNER JOIN dd04t AS dt ON ( dl~rollname = dt~rollname AND dl~dtelmaster = dt~ddlanguage AND dl~as4local = dt~as4local AND dl~as4vers = dt~as4vers )
    WHERE dl~as4local   = 'A'
      AND dl~datatype   = @p_dtyp
      AND dt~ddlanguage = @p_lang.

  IF sy-subrc = 0.
    TRY.
        DATA(it_result2) = it_result.

* wenn nach bestimmten Inhalt gesucht werden soll -> Filtern
        IF NOT p_search IS INITIAL.
          it_result2 = VALUE #( FOR <s> IN it_result WHERE ( ddtext CS p_search )
                                (
                                   <s>
                                )
                              ).
        ENDIF.

* SALV-Table
        DATA: o_salv TYPE REF TO cl_salv_table.

        cl_salv_table=>factory( IMPORTING
                                  r_salv_table   = o_salv
                                CHANGING
                                  t_table        = it_result2 ).

* Grundeinstellungen
        o_salv->get_functions( )->set_all( abap_true ).
        o_salv->get_columns( )->set_optimize( abap_true ).
        o_salv->get_display_settings( )->set_list_header( |Datentypen ({ lines( it_result2 ) })| ).
        o_salv->get_display_settings( )->set_striped_pattern( abap_true ).
        o_salv->get_selections( )->set_selection_mode( if_salv_c_selection_mode=>row_column ).

* Spaltenüberschriften: technischer Name und Beschreibungstexte
        LOOP AT o_salv->get_columns( )->get( ) ASSIGNING FIELD-SYMBOL(<c>).
          DATA(o_col) = <c>-r_column.
          o_col->set_short_text( || ).
          o_col->set_medium_text( || ).
          o_col->set_long_text( |{ o_col->get_columnname( ) } [{ o_col->get_long_text( ) }]| ).
        ENDLOOP.

        o_salv->display( ).
      CATCH cx_root INTO DATA(e_txt).
        WRITE: / e_txt->get_text( ).
    ENDTRY.
  ENDIF.

Links

[ABAP] Datenelement und zugehörige Domäne auslesen

* Name Datenelement
PARAMETERS: p_elem TYPE rollname DEFAULT 'TXT50'.
* Sprachenschlüssel
PARAMETERS: p_lang TYPE ddlanguage DEFAULT 'D'.

SELECT * INTO TABLE @DATA(it_dd04l) FROM dd04l
  WHERE rollname  = @p_elem.

IF sy-subrc = 0.
* Bezeichner zum Datenelent holen
  SELECT * INTO TABLE @DATA(it_dd04t) FROM dd04t
    WHERE rollname   = @p_elem
      AND ddlanguage = @p_lang.

* aktive Domäne holen
  DATA(lv_domname) = it_dd04l[ as4local = 'A' ]-domname.
  SELECT * INTO TABLE @DATA(it_dd01l) FROM dd01l
    WHERE domname = @lv_domname.

* Bezeichner zur Domäne holen
  SELECT * INTO TABLE @DATA(it_dd01t) FROM dd01t
    WHERE domname    = @lv_domname
      AND ddlanguage = @p_lang.

  IF sy-subrc = 0.
    cl_demo_output=>write_data( value = it_dd04l name = |Datenelement: { p_elem }| ).
    cl_demo_output=>write_data( value = it_dd04t name = |Datenelement: { p_elem }| ).
    cl_demo_output=>write_data( value = it_dd01l name = |Domäne: { lv_domname }| ).
    cl_demo_output=>write_data( value = it_dd01t name = |Domäne: { lv_domname }| ).
    cl_demo_output=>display(  ).
  ENDIF.
ENDIF.