在SAP中避免进行硬编码

在讨论客户面临的痛点和挑战或审查 ABAP 代码时,我们注意到 SAP 系统中存在许多变量是硬编码的或许多 Z 表用于维护用户出口中使用的数据,BADI’s、报表、表格等。

由于硬编码,每次添加/修改/删除数据都需要更改代码,这需要额外的技术工作以及用于输入和测试的功能。由于 Z 表的创建,DDIC 创建、表维护生成器、域创建或分配等也需要额外的 ABAP 工作。

一个简单的场景或用户需求,其中应该需要硬编码/ Z 表:

在销售订单保存时,应该对特定的销售组织进行很少的检查,如果销售订单净值大于定义的值,则应显示错误。我们通过用户出口 MV45AFZZ 中添加代码。

代码是用硬编码的销售组织 (1000,2000,3000) 编写的,它们的预定义值分别为 1400、1500、1600。

用户面对的挑战:

  1. 将来,4000 也需要相同的检查。

  2. 销售组织 3000 不再需要检查。

  3. 应将销售组织 1000 的值从 1400 调整为 1450。

对于这些小的添加/修改/删除,将需要 ABAP 硬编码或应创建自定义表来存储销售组织及其相应的值,这需要额外的开发工作(在创建 DDIC、维护、域等时)。

解决方案:

TVARVC:

TVARVC 是 SAP 给出的标准表,用于存储变式下的数据。我们可以将值放在 TVARVC 表中以避免硬编码和/或创建自定义表。

事务代码:STVARV

STVARV 下有两个部分用于存储参数和选择选项。

当我们必须仅存储单个级别的数据(如值、单个销售组织等)时,将使用参数 Parameter

–> 点击创建按钮

–>输入参数值

在 ABAP 中,我们可以通过以下代码段提取此值,以便在程序中使用它:

SELECT SINGLE *
INTO ls_tvarvc
FROM tvarvc
WHERE name = 'Z_XYZ_Tolerance_Price'.

选择当我们必须与销售组织等一起存储多级数据(例如值)时使用的选项 Select options

–>选择选择选项Select options卡并单击创建

–> 输入变量名称并点击多选 multiple selections

–> 单击选择范围并输入值:

–> 保存

请注意:通过 STVARV 创建和修改不会要求传输请求,除非我们没有选中“在传输请求中包含更改的条目”(Include Changed entries in transport request)复选框。

如果任何用户在生产系统中拥有 STVARV 或 SM30 的授权,则可以在没有任何 传输请求号 TR 的情况下更改条目。

SETLEAF:

SETLEAF 也是 SAP 中的标准表,如 TVARVC,我们可以将数据存储在集合中。Set 是用于存储值和值间隔的结构(参数和选择选项)。

与 TVARVC 相比,集合的优势在于它采用了我们存储的值的域,因此可以在输入时对其进行验证以避免任何错误的输入。我们可以看到可用条目。

创建集 Set 的事务代码:GS01

更改集 Set 的事务代码:GS02

显示集 Set 的事务代码:GS03

在创建集 Set 时,我们必须为域检查定义表和字段名称。

示例/用户场景:对于特定的销售组织和客户物料编号“AB123”。应该做点什么。

–> 输入集合名称

–> 进入表点击回车

–> 选择字段

–>单击F4查看系统中可用的销售组织

代码片段

wa_setleaf type setleaf

SELECT SINGLE * FROM setleaf

into wa_setleaf

WHERE setclass = '0000’

AND subclass = space

AND setname = 'Z_SALES_ORG’

AND valfrom = .vbak-vkorg.

IF (sy-subrc = 0) AND (VBAK-KDMAT = 'AB123’).

{do something}

ENDIF.

结论:

通过使用 TVARVC/SETLEAF,客户在更改或增强现有解决方案时将节省大量精力,只需添加或修改预定义的值即可。

使用 TVARVC 或 SETLEAF 的代码比硬编码或自定义表更加标准化和灵活。在代码迁移或在单独的系统或客户端中重用时会更容易。

(0)

相关推荐