小技巧:如何让 ABAP OPEN SQL 代码具有自解释性(Self-Explained)

自解释性代码,是指代码本身具有足够的清晰度和表达力,能够自行传达其意图和功能,而无需过多的注释或外部文档。

自解释性代码是编写高质量、可读性强的代码的一项重要原则。

由于历史原因,SAP ABAP 系统里,某些数据库表的字段名称,让不少开发人员觉得阅读起来比较烧脑。

比如下图图1 的例子,spld, spdb 和 spda 三个字段,如果没有注释的话,光靠阅读这段代码,无法理解其意图。

虽然作为数据库的消费者,我们不可能修改标准数据库表的字段名称。然而我们可以把从数据库表里取出来的数据,使用 SQL 语句的 AS 关键字定义别名。

比如图2 的例子,将 spld, spdb, spda 分别定义成可读性更好的 printer_code, delete_from_spool 和 output_immediately. 这样代码读起来一目了然,也不需要手动添加额外的注释了。

在ABAP中,AS(Alias Statement)关键字用于给SELECT语句中的字段创建别名。在你提供的代码中,AS关键字用于为SELECT SINGLE语句中的三个字段(spld,spda,spdb)创建别名,分别是printer_code,delete_from_spool,output_immediately。这样,通过INTO子句将查询结果映射到指定的内部表(@DATA(user_print_settings)),字段名就会使用这些别名。

现在,让我们逐一解释每个字段的含义:

  1. spld AS printer_code:这里spld是usr01表中的字段,代表用户的打印机代码。通过AS关键字,它被映射为user_print_settings内部表中的printer_code字段。

  2. spda AS delete_from_spool:spda字段代表是否从打印池中删除。AS关键字将其映射为user_print_settings内部表中的delete_from_spool字段。

  3. spdb AS output_immediately:spdb字段表示是否立即输出。AS关键字将其映射为user_print_settings内部表中的output_immediately字段。

接下来,让我们通过一个简单的例子来说明这段代码的实际用途。假设usr01表中存在如下数据:

bname      | spld  | spda | spdb
-----------|-------|------|------
user1      | P001  | X    | X

运行上述ABAP代码后,user_print_settings内部表将包含以下数据:

DATA(user_print_settings) = VALUE #( printer_code = 'P001' delete_from_spool = 'X' output_immediately = 'X' ).

这样,你就能够通过user_print_settings内部表方便地访问和处理从usr01表中检索到的用户打印设置数据。 AS关键字在这里主要用于提高代码的可读性和维护性,通过使用更有意义的字段名,使代码更易理解。