通过RTTS获取数据库表键

2020-09-22 13:41发布

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

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


嗨,

我无法通过RTTS技术获得表键。 我使用以下代码:

 DATA:the_table TYPE REF TO数据。
     创建数据the_table TYPE TABLE OF('MARA')。
     数据类型说明TYPE REF到cl_abap_tabledescr。
     类型说明?= cl_abap_tabledescr => describe_by_data_ref(the_table)。
     数据键类型为abap_table_keydescr_tab。
     键= typedescription-> get_keys()。

它总是返回完整列表字段,不仅是我不想要的主键。

我还尝试了从静态内部表中检测键,但是得到了相同的结果。

数据:itab像mara的OCCURS 0,带有标题行,
       lt_tabdescr类型TYPE abap_keydescr_tab,
       ref_table_descr类型参考cl_abap_tabledescr。

 ref_table_descr?= cl_abap_typedescr => describe_by_data(itab [])。
 lt_tabdescr [] = ref_table_descr-> key []。

通过 describe_by_name()检测关键字段也不起作用。

有什么建议吗? 系统版本为SAP ECC 7.40 SP09

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

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


嗨,

我无法通过RTTS技术获得表键。 我使用以下代码:

 DATA:the_table TYPE REF TO数据。
     创建数据the_table TYPE TABLE OF('MARA')。
     数据类型说明TYPE REF到cl_abap_tabledescr。
     类型说明?= cl_abap_tabledescr => describe_by_data_ref(the_table)。
     数据键类型为abap_table_keydescr_tab。
     键= typedescription-> get_keys()。

它总是返回完整列表字段,不仅是我不想要的主键。

我还尝试了从静态内部表中检测键,但是得到了相同的结果。

数据:itab像mara的OCCURS 0,带有标题行,
       lt_tabdescr类型TYPE abap_keydescr_tab,
       ref_table_descr类型参考cl_abap_tabledescr。

 ref_table_descr?= cl_abap_typedescr => describe_by_data(itab [])。
 lt_tabdescr [] = ref_table_descr-> key []。

通过 describe_by_name()检测关键字段也不起作用。

有什么建议吗? 系统版本为SAP ECC 7.40 SP09

付费偷看设置
发送
3条回答
Doze时光
1楼 · 2020-09-22 14:34.采纳回答

好吧,正如 Horst Keller 在评论中所建议的,您可以使用类CL_ABAP_STRUCTDESCR的get_ddic_field_list方法。

并通过KEYFLAG字段值过滤返回表:-)例如:

删除lt_field_list WHERE键标志<>'X'。
打个大熊猫
2楼-- · 2020-09-22 14:43

您应该将其作为答案:)

黑丝骑士
3楼-- · 2020-09-22 14:23

您正在混淆数据库的主键 表MARA和内部表的主键完全不同。

在您的情况下,您已经创建了带有默认主键的标准内部表(因为您尚未定义任何内容),该表由结构(MARA)的所有初始字段组成,直到第一个非字符类型 字段(排除)。

如果要特定的键字段,请使用DATA ... TABLE OF ... WITH [NON-] UNIQUE KEY field1 field2,或CREATE DATA ... TABLE OF ... WITH [NON-] UNIQUE KEY(动态 字段列表)。

有关更多信息,请参阅ABAP文档。

PS:请忘记过时的符号OCCURS和WITH HEADER LINE。

一周热门 更多>