如何获取基于在本地定义的结构中使用的TYPE的表名和字段名?

2020-09-17 04:07发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)人们好, 我需要...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


人们好,

我需要获取本地定义的结构中字段的标签,如下所示:

类型:开始于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,
              .....
            ty_out的第END个。
 

结构中的所有字段都是根据现有SAP表字段键入的。

我想利用功能模块DDIF_FIELDINFO_GET(除非有等效的类方法?)通过返回的表dfies_tab获取字段描述:

通话功能'DDIF_FIELDINFO_GET'
       出口
         tabname = i_tablename
         字段名称= i_fieldname
         langu = sy-langu
       桌子
         dfies_tab = lt_dfies
       例外情况
         not_found = 1
         internal_error = 2
         其他= 3。
    
      如果sy-subrc EQ 0。
        读取表lt_dfies到ls_dfies索引1。
        如果sy-subrc EQ 0。
          r_descr = ls_dfies-scrtext_m。
        其他。
          r_descr = i_fieldname。
        万一。
      其他。
        r_descr = i_fieldname。
      ENDIF。

我已经根据结构搜索了合适的方法来获取表名和字段名,但并不幸运。 我最接近的是使用cl_abap_typedescr => describe_by_data,但这仅返回字段名称以及字段的实际类型和长度。 有没有类似的简单方法可以"更进一步",并且还返回TYPE之后但又分为表名和字段名的内容?

现在-为了能够快速测试我的程序,我通过提供i_tablename和i_fieldname这样的方式(不是很喜欢-尤其是因为结构相当大)而以"艰难的方式"做到了:

 get_field_descr(导出i_tablename ='KNA1'
                                i_fieldname ='KUNNR'
                      接收r_descr = lv_descr)。

我想坚持使用本地定义的结构,因为它只需要一个程序,因此没有真正的理由在字典中对其进行定义(对于DDIC更改,我们有一个"有趣的"过程,因此请尝试 尽量避免使用它们,以防万一您想知道我为什么要提起这个问题。

我们正在使用EHP8的NW750。

欢呼

Baerbel

9条回答
ZJXianG
2020-09-17 04:42

你好,

您可以执行以下操作,表名称可以是具有本地结构中所有字段的表或结构(它可以具有任何其他字段)。

数据:lt_fcat类型slis_t_fieldcat_alv,
        ls_fcat与lt_fcat类似。


   数据:i_tablename TYPE ddobjname,
        lt_dfies dfies类型表,
        ls_dfies与lt_dfies类似。


   i_tablename ='具有所有字段的表'。


   通话功能" DDIF_FIELDINFO_GET"
     出口
       tabname = i_tablename
 *字段名称= i_fieldname
 *语言= sy语言
     桌子
       dfies_tab = lt_dfies
     例外情况
       not_found = 1
       internal_error = 2
       其他= 3。


   FIELD-SYMBOLS  TYPE任意。
   将lt_dfies循环到ls_dfies。
     将结构ls_vbrp的ASSIGN COMPONENT ls_dfies-fieldname分配给。
     如果已分配。
       清除ls_fcat。
       ls_fcat-seltext_l = ls_dfies-scrtext_l。
       ls_fcat-seltext_m = ls_dfies-scrtext_m。
       ls_fcat-seltext_s = ls_dfies-scrtext_s。
       ls_fcat-fieldname = ls_dfies-fieldname。
       附加ls_fcat至lt_fcat。
     万一。
   ENDLOOP。

一周热门 更多>