我们将通过标准 SAP 的例子来检查各种方法来寻找用户出口。首先让我们了解一下关于用户出口的基本情况。最后,我们将检查 VA02 交易中的一个用户出口的例子。
什么事用户出口:这是一种增强功能,使我们能够增强程序、屏幕和菜单的功能。因此,在用户出口的背后存在三种类型的增强:
- 函数出口:它以功能模块的形式存在,它将增强程序的标准功能。
- 屏幕出口:用于增强标准屏幕
- 菜单出口:用于增强菜单选项
用户出口是具有命名约定的功能模块,如 EXIT_<Program_name>_<number>,例如 SD 模块中销售订单中的客户出口 EXIT_SAPMV45A_004
使用以下语句 CALL CUSTOMER-FUNCTION '<NUMBER>' 例如,在标准程序内调用用户出口使用:
CALL CUSTOMER-FUNCTION '004'
标准程序中查找用户出口的方法:
- 找到程序名称并在程序中执行全局搜索关键字“CALL CUSTOMER”,如下所示
SAPMV45A(销售订单程序):
- 在执行标准 T-code 时,在语句
'CALL CUSTOMER'处设置断点。假设VA02 是我们需要找出用户出口的代码,在执行代码VA02时,输入/h启动调试并在语句处设置断点(菜单断点->断点->语句)或shift + F5。
- 使用事务 SMOD:在增强中执行 F4 并提供详细信息以找出增强
- 检查
MODSAP表找出增强名称
以上就是几种方法找出用户出口增强的方法,如果还没找到,搜索官方 Notes 或者直接 Google。
实例
要求:如果订单类型为 OR1,则使 VA02 屏幕中的客户参考字段 (VBKD-BSTKD) 不可编辑
所以从上面的方法中,我们通过导入和更改参数发现 EXIT_SAPMV45_004 适合这种情况
编写代码:
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 中执行上述代码后。结果如下:
那么,自定义出口是用户出口的子类。它有一个额外的功能,叫做转化框架,它可以用来开启增强功能。要添加这样一个功能,我们可以使用以下步骤:
- 在
CMOD事务中创建项目
将增强功能分配给项目
- 激活组件
现在您可以通过激活和停用项目来使用 switch 框架。查看差异:
注意:一旦将增强功能分配给一个项目,就不能将其重新分配给另一个项目。要检查项目名称和附加的增强功能,请使用表 MODACT