Skip to Content
Jun 21, 2018 at 06:11 AM

How to get table- and fieldname based on TYPE used in a locally defined structure?


Hi Folks,

I have a requirement to get the labels for fields in a locally defined structure, something like this:

    TYPES: BEGIN OF ty_out,
             kunnr TYPE kna1-kunnr,
             vkorg TYPE knvv-vkorg,
             vtweg TYPE knvv-vtweg,
             kukla TYPE kna1-kukla,
             vtext TYPE tkukt-vtext,
             pltyp TYPE knvv-pltyp,            
           END of ty_out.

All the fields in the structure are typed based on existing SAP table fields.

I'd like to make use of function module DDIF_FIELDINFO_GET (unless there's an equivalent class method for this?) to get the field descriptions via the returned table dfies_tab:

        tabname        = i_tablename
        fieldname      = i_fieldname
        langu          = sy-langu
        dfies_tab      = lt_dfies
        not_found      = 1
        internal_error = 2
        OTHERS         = 3.
     IF sy-subrc EQ 0.
       READ TABLE lt_dfies INTO ls_dfies INDEX 1.
       IF sy-subrc EQ 0.
         r_descr = ls_dfies-scrtext_m.       
         r_descr = i_fieldname.       
       r_descr = i_fieldname.

I already searched for suitable methods to get the table- and fieldname based on the structure but haven't been lucky. The closest I got was using cl_abap_typedescr=>describe_by_data but that just returns the fieldname and actual type and length of the field. Is there a comparable straightforward method which goes "one step further" and also returns what comes after TYPE but split into tablename and fieldname?

For now - and to be able to test my program quickly, I did it the "hard way" by providing i_tablename and i_fieldname like this (which I don't really like - esp. as the structure is fairly large):

    get_field_descr( EXPORTING i_tablename = 'KNA1'
                               i_fieldname = 'KUNNR'
                     RECEIVING r_descr     = lv_descr ).

I'd like to stick with a locally defined structure as it's only needed for one program so there's no real reason to define it in the dictionary (we have a bit of an "interesting" process for DDIC-changes so try to avoid them as much as possible, in case you are wondering why I mention this).

We are on NW750 with EHP8.