动态ITAB减少了色谱柱组

2020-09-02 00:53发布

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

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


你好

我尝试解决的问题:我有一个数据库表,例如 50列。出于性能原因,我想创建一个内部表,其中包含这些列的子集(n <50)。
数据负载巨大,我想减少计算时间(对ITab的操作) )和" RAM浪费",只需选择真正需要的列即可。

因此列数取决于用户交互(n可以在1到50之间)。

首先,我尝试使用了以下方法,这些方法不适用于所有表(SELECT问题会导致某些表出现Unicode异常):
cl_abap_typedescr => describe_by_name('tablename')< br> cl_alv_table_create => create_dynamic_table


第二次尝试时,我仅使用RTTI方法(这似乎是解决问题的一种非常聪明的方法):

ref_rowtype?= cl_abap_typedescr => describe_by_name('tablename')
ref_tabletype = cl_abap_tabledescr => create(p_line_type = ref_rowtype)

此解决方案效果很好,但我无法减少列(组件)的数量。

有人知道我如何解决"动态选择列"的问题吗,请:)?

亲切的问候,
Michael Kilger

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

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


你好

我尝试解决的问题:我有一个数据库表,例如 50列。出于性能原因,我想创建一个内部表,其中包含这些列的子集(n <50)。
数据负载巨大,我想减少计算时间(对ITab的操作) )和" RAM浪费",只需选择真正需要的列即可。

因此列数取决于用户交互(n可以在1到50之间)。

首先,我尝试使用了以下方法,这些方法不适用于所有表(SELECT问题会导致某些表出现Unicode异常):
cl_abap_typedescr => describe_by_name('tablename')< br> cl_alv_table_create => create_dynamic_table


第二次尝试时,我仅使用RTTI方法(这似乎是解决问题的一种非常聪明的方法):

ref_rowtype?= cl_abap_typedescr => describe_by_name('tablename')
ref_tabletype = cl_abap_tabledescr => create(p_line_type = ref_rowtype)

此解决方案效果很好,但我无法减少列(组件)的数量。

有人知道我如何解决"动态选择列"的问题吗,请:)?

亲切的问候,
Michael Kilger

付费偷看设置
发送
5条回答
樱桃小丸子0093
1楼-- · 2020-09-02 01:53

迈克尔你好,

绝对可以使用RTTI:

  1. 使用CL_ABAP_TYPEDESCR => DESCRIBE_BY_NAME('LONG_STRUCTURE_NAME')
  2. 获取原始结构的字段
  3. 使用CL_ABAP_STRUCTDESCR => GET创建动态行类型,在此仅提供结构中所需的组件子集 您先前提取的描述符
  4. 使用步骤2中的线型创建表格类型。

BR,
Gábor

小熊yu生菜
2楼-- · 2020-09-02 01:38

不要使用cl_alv_table_create => create_dynamic_table,请使用RTTS cf GáborMárián答案(又名RTTC,RTTI)。

樱桃小丸子0093
3楼-- · 2020-09-02 01:43

HelloGábor,

您的解决方案建议很好。

我不知道如何使用修改后的组件-Tab。

因此,使用方法调用" CL_ABAP_STRUCTDESCR => GET(导出P_COMPONENTS = lit_Components)"(在前面的步骤中修改了lit_Components)是缺少的链接。

非常感谢!

对您(以及所有回答:)的人表示敬意,

Michael Kilger

zhangjiyang1323
4楼-- · 2020-09-02 01:52

如果您尝试从数据库表中删除未使用的组件,我建议以相反的方式进行操作:

1。 从数据库表名称中获取所有组件。

2。 取用户选择的列,然后在步骤1中检查是否存在。

3。 创建一个新的表类型,其中包含在步骤2中收集的组件的子集。

shere_lin
5楼-- · 2020-09-02 01:59

很成功。 :-)

在这种情况下,您应该关闭该主题,这样对于每个人来说都很明显,它已经得到了回答。

一周热门 更多>