如何在 ABAP 中找到用户出口增强

554 阅读2分钟

我们将通过标准 SAP 的例子来检查各种方法来寻找用户出口。首先让我们了解一下关于用户出口的基本情况。最后,我们将检查 VA02 交易中的一个用户出口的例子。

什么事用户出口:这是一种增强功能,使我们能够增强程序、屏幕和菜单的功能。因此,在用户出口的背后存在三种类型的增强:

  • 函数出口:它以功能模块的形式存在,它将增强程序的标准功能。
  • 屏幕出口:用于增强标准屏幕
  • 菜单出口:用于增强菜单选项

用户出口是具有命名约定的功能模块,如 EXIT_<Program_name>_<number>,例如 SD 模块中销售订单中的客户出口 EXIT_SAPMV45A_004

使用以下语句 CALL CUSTOMER-FUNCTION '<NUMBER>' 例如,在标准程序内调用用户出口使用:

CALL CUSTOMER-FUNCTION '004'

标准程序中查找用户出口的方法:

  1. 找到程序名称并在程序中执行全局搜索关键字“CALL CUSTOMER”,如下所示 SAPMV45A(销售订单程序):

image.png

  1. 在执行标准 T-code 时,在语句 'CALL CUSTOMER' 处设置断点。假设VA02 是我们需要找出用户出口的代码,在执行代码 VA02 时,输入 /h 启动调试并在语句处设置断点(菜单断点->断点->语句)或 shift + F5

image.png

  1. 使用事务 SMOD:在增强中执行 F4 并提供详细信息以找出增强

image.png

  1. 检查 MODSAP 表找出增强名称

image.png

以上就是几种方法找出用户出口增强的方法,如果还没找到,搜索官方 Notes 或者直接 Google。

实例

要求:如果订单类型为 OR1,则使 VA02 屏幕中的客户参考字段 (VBKD-BSTKD) 不可编辑

customer exit for VA02 tcode

所以从上面的方法中,我们通过导入和更改参数发现 EXIT_SAPMV45_004 适合这种情况

customer exit with example

编写代码:

IF i_screen_name EQ 'VBKD-BSTKD' AND sy-tcode EQ 'VA02'.
   "Read the order type VBAK-AUART from ABAP stack
   DATA:lv_string TYPE string VALUE '(SAPMV45A)VBAK-AUART'.
   FIELD-SYMBOLS:<lv_auart> TYPE any.
   ASSIGN (lv_string) TO <lv_auart>.
   IF <lv_auart> IS ASSIGNED AND <lv_auart> EQ 'OR1'.
     c_screen_input = 0. "make the field non editable
   ENDIF.
ENDIF.

include 中执行上述代码后。结果如下:

VA02 transcation

那么,自定义出口是用户出口的子类。它有一个额外的功能,叫做转化框架,它可以用来开启增强功能。要添加这样一个功能,我们可以使用以下步骤:

  • CMOD 事务中创建项目

CMOD

将增强功能分配给项目

CMOD assignment

image.png

  • 激活组件

image.png

image.png

现在您可以通过激活和停用项目来使用 switch 框架。查看差异:

image.png

注意:一旦将增强功能分配给一个项目,就不能将其重新分配给另一个项目。要检查项目名称和附加的增强功能,请使用表 MODACT

image.png