How to get domain fixed values in ABAP?
Use FM DD_DOMVALUES_GET.
DATA lt_values TYPE TABLE OF dd07v.
CALL FUNCTION 'DD_DOMVALUES_GET'
EXPORTING
domname = 'KOART'
text = 'X' " 'X' = values + texts, ' ' = values only
langu = sy-langu
TABLES
dd07v_tab = lt_values
EXCEPTIONS
wrong_textflag = 1
OTHERS = 2.
IF sy-subrc = 0.
LOOP AT lt_values INTO DATA(ls_val).
WRITE: / ls_val-domvalue_l, ls_val-ddtext.
ENDLOOP.
ENDIF.
Result table DD07V_TAB contains DOMVALUE_L (the value), DOMVALUE_H (upper limit for interval-type domains), and DDTEXT (description).
Alternative — CL_ABAP_ELEMDESCR->get_ddic_fixed_values().
DATA ld_field TYPE koart.
DATA(lt_fixed) =
CAST cl_abap_elemdescr(
cl_abap_typedescr=>describe_by_data( ld_field )
)->get_ddic_fixed_values( ).
LOOP AT lt_fixed INTO DATA(lx_fix).
WRITE: / lx_fix-low, lx_fix-ddtext.
ENDLOOP.
Result is a DDFIXVALUES table — fields LOW, HIGH, DDTEXT.
Or query DD07T directly:
SELECT domvalue_l, ddtext
FROM dd07t
INTO TABLE @DATA(lt_dom)
WHERE domname = 'KOART'
AND ddlanguage = @sy-langu
AND as4local = 'A'.
Always add AS4LOCAL = 'A' — the table stores multiple versions (active, inactive), so without this filter you may get duplicate rows.