新ABAP表与旧ABAP表概述
简介
在这个博客系列中,我们的目标是将旧ABAP语言的特性与新ABAP语法的详细解释进行比较。
我最近写了一个程序来解释旧ABAP和新ABAP在内部表上做摘要的方法。这个博客将剖析这个程序。我们将展示为表摘要完成相同任务的各种方法,以及ABAP语言多年来的发展。这个博客对新的ABAP和有经验的尝试熟悉新ABAP的ABAP都很有用。
这个博客组织如下:
软件版本:
SAP的7.52,SAPGUI版本750。Eclipse版本:Oxygen.1a Release(4.7.1a)
程序概述
程序将有以下选择选项:
程序将执行以下步骤:
较新的ABAP支持方法链接,因此要运行程序,我们只需在开始选择时执行以下操作:
分为几个部分:
lcl\ U my\ U class=>main()–实例化LCL\u MY\u类的新实例。这是一个静态工厂方法,它只返回自身的一个实例。execute()–所有的主逻辑都包含在LCL\u MY\u类的execute方法中。
单选按钮选项
以上所有3个选项都将执行相同的逻辑,如下所述,但具有不同的表读取和更新。
下面是3个方法将执行的操作的概述:
您可能已经猜到了,这只是将SUMMARY\u字段中的值加倍,因为表是从原始表克隆的。
示例:
IT\u TEST\u table,传入方法(未排序):
在添加临时表之后,返利购,生成ALV(按键排序)。简单地将SumField(SUMMARY\u FIELD)加倍:
当执行3个选项中的每一个时,结果将与上述相同。
记录生成器
上述3个方法都将使用以下生成的示例表。我们将使用新的ABAP功能创建随机记录,方法如下:lm\u build\u records:
参数p\u recs是选择屏幕上的"记录数"字段。为了进一步解释上述新的ABAP代码,下面是随机记录是如何生成的…
我们将循环并创建记录数。
对于每个循环过程,它将动态生成一个类型为LTY\u STRUCT的新记录。新ABAP不需要中间变量
值lty_struct(…)–这告诉编译器生成lty_struct类型的新记录。这个结构是在我们类的私有全局部分声明的:
这将为字段随机生成以下值:
KEY1–Take 900加上SY-INDEX中包含的当前循环传递数(即901、902等)键2–SY-INDEX中包含的当前循环过程。FIELD1–文本"A text Field",加上SY-INDEX中的当前循环通过数。新ABAP中的新字符串模板生成管道(|)符号中包含的精确字符串(不需要更多的连接语句!)。另外,在字符串中,人工智能行业分析,可以在大括号{}中动态指定字符串中的变量。因此,文本字段{sy index}|在第一个循环过程中将是"文本字段-1"。A_DATE_FIELD–取今天的日期并以天为单位添加当前循环密码(SY-INDEX)。SUMMARY\u FIELD–将当前循环过程乘以10。
生成此记录后,它将附加到方法的导出表参数ET\u TEST\u TABLE。
现在,转到表代码…
表处理选项
标准表
COLLECT语句是一个原始ABAP语句,用于在表中添加数字字段一张内桌。如果汇总没有键的标准表,它将比较所有非数字字段,并对数字字段求和。在我们的例子中,我们有如下结构:
因为SUMMARY\u字段是我们唯一的数字字段,它将对这些值求和。
示例:
表1:
表2:
如果将上述两个相同的表与COLLECT语句相加,它将给出以下内容:
摘要表:
上述结果的逻辑:
标准表的上述代码是执行摘要的经典方式,应该适用于大多数较旧的SAP版本。当然,如果您有两个数字字段,但您只想将其中一个相加,该怎么办?假设我们在末尾添加了一个额外的数字字段,我们不想对其进行汇总。例如,大数据的4,让我们添加一个名为DO\u NOT\u add的字段,它也是一个整数:
表1:
表2:
摘要表:
如果我们只想将字段摘要\u字段添加在一起,那么这将需要读取和更新该记录,COLLECT语句将不起作用。在这种情况下,排序表或哈希表将是处理内部表中现有记录的快速读取和更新的好选择。
排序表
在本例中,我们将更新一个特定字段,并通过读取排序表中的记录对其进行汇总。
排序表汇总代码,以获得与标准表示例:
上面的代码使用键对排序表进行读取,并将其转换为字段符号来更新摘要字段。
New ABAP
最后,让我们看看实现相同结果的新ABAP方法。对于740,表索引添加了括号符号[]。例如,要将记录#5检索到工作区,您可以指定:
对于此表:
对于记录5,它将检索以下内容:
您还可以指定关键字段的值以查找记录。
让我们尝试以下操作:
Ooops,这给了我们一个简短的转储,说"这一行不包含在表中":