highlight: agate
theme: github
前言:动态程序根据特定的用户输入返回结果,这些输入会发生变化,并且只能在运行时确定。本章介绍如何在 ABAP 中启用动态编程程序。
场景
软件应用程序的开发是为了解决问题或帮助用户完成日常活动。大多数情况下,问题是事先已知的,应用软件的设计和开发重点是解决手头的问题。例如,假设贵公司采用的是供应商管理库存的模式,在这种模式下,如果货物在 30 天内没有售出,公司就需要向供应商支付账单。此时,公司可以付费保留库存,也可以将库存退还给供应商。
为了适应这一业务流程,你需要开发一套应用程序,让用户能够在货物到达仓库时捕捉信息,并开发一份能够显示库存账龄的报表。该报表可帮助主管检查供应商合同期即将结束的货物。
要开发满足这一要求的应用程序,我们必须在设计时就知道需要在程序中处理的所有信息。例如,我们知道要更新哪些表中的数据,也知道要查询哪些表来计算报表中的库存账龄。所有这些信息都可以在设计时静态(事先)获得。
要显示库存的账龄,我们可以编写如下所示的代码:
SELECT item_id, item_name, in_date INTO it_inv FROM ztabinv WHERE in_date LE @p_date.
WRITE : / 'The following items exceed 30 days'.
LOOP AT it_inv INTO wa_inv.
WRITE: / wa_inv-item_id, wa_inv-item_name, wa_inv-in_date.
ENDLOOP.
要编写如上所示的代码,我们需要静态地知道表的名称和字段。在程序中,我们静态定义数据对象,并通过寻址数据对象的名称静态访问它们。
不过,有时我们可能要到运行时才能获得所有信息。如果我们需要编写选择查询的表取决于前一条语句的结果,该怎么办?
在查询中静态包含表名是不可能的;为了处理这种情况,我们使用动态编程。
动态编程
动态编程有多种处理方式。有时,一个程序可能主要包含静态元素,但其中的某些部分可能是动态的,或者整个程序本身就是动态的。有时,你甚至需要动态地创建新程序或动态地调用过程。在本章中,我们将探讨如何处理所有这些情况。
ABAP 支持各种使 ABAP 程序动态化的概念。比如字段符号。字段符号就像指针一样,可以动态地指向程序中的任何数据对象,从而可以在运行时动态地决定访问哪个数据对象。
接着我们将讨论数据引用,与字段符号类似,数据引用允许动态指向程序中的现有数据对象。不过,数据引用也允许你动态创建数据对象。动态编程的另一个重要方面是动态确定现有数据对象的类型信息或动态创建数据类型的能力。
然后要讨论运行时类型服务 (RTTS),并探讨如何动态地识别和创建数据类型。
业务需求有时要求您动态地确定从哪个数据库表获取数据,在程序流程中应调用哪个程序/事务,或类似的东西。ABAP 允许您通过在代码中动态提供标记来动态确定数据库表、存储过程、程序、事务等。
然后学习动态 token 规范,学习动态过程调用(dynamic procedure calls)。你不仅可以使 ABAP 程序中的 ABAP 代码动态化,还可以动态生成完整的 ABAP 程序本身。 最后,我们将演示一个动态程序生成。
Field Symbols
Field Symbols,中文名翻译为字段符号。字段符号类似于指针,指向现有的数据对象。字段符号不是一个数据对象,它本身不保存任何内存。相反,当一个数据对象被分配给一个字段符号时,它指向被分配的数据对象的内存位置。
字段符号是指定数据对象的标签,可以像访问数据对象本身一样访问它。例如,假设有一个内部表,其中有三个字段 FIELD1、FIELD2 和 FIELD3,我们要修改内部表的第三行。如下的代码将处理这种情况:
DATA wa LIKE LINE OF itab.
wa-field1 = 'ABC'.
wa-field2 = 'XYZ'.
wa-field3 = 123.
MODIFY itab FROM wa INDEX 3.
上面的代码,我们通过使用工作区 wa 来修改内表记录。在这里,wa 和 itab

1608

被折叠的 条评论
为什么被折叠?



