抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

之前面试被人问到了增强相关的内容,后面了解了其中的一种二代增强。其余的几代等后面有空了补齐吧。

SAP 二代增强

一、二代增强类型

  • Ehancement exits:出口增强以Exit_打头,可以在SE37中查看,也可以在数据字典TFDIR(函数表)中查询Exit_打头的函数。
  • GUI Codes:GUI增强,用于区域菜单和工具菜单栏的增强
  • Subscreens:屏幕增强,用于子屏幕设计增强
  • Include Structure增强:用于表结构增强。

二、查找增强的方法

1.SAP增强出口检查函数

  • MODX_ALL_ACTIVE_MENUENTRIES:菜单增强
  • MODX_FUNCTION_AVTIVE_CHECK:出口函数增强
  • MODX_MENUENTRY_ACTIVE_CHECK:MENU菜单增强
  • MODX_SUBSCREEN_ACTIVE_CHECK:屏幕增强

2.查找增强步骤

(1)在检查函数打断点
1.查找增强位置_检查函数打断点
(2)执行需要检查的T/C

以CV12为例

2.获取增强Function名称
(3)取得函数名

存在多个增强,所以会循环执行多次。可以看见下方的L_FUNCNAME的值为:EXIT_SAPLCSDI_002

3.获取Function名称
(4)查询MODSAP表

通过上面获取到的Function名,到MODSAP表中查询扩展名:PCSD0002

4.获取扩展名1 5.获取扩展名2
(5)SMOD(查看增强)/ CMOD(实施增强)

通过事务代码SMOD可以查看并修改该出口对象。

6.查看增强

单击工具栏中的“组件”按钮,可以查看该出口对象所包含的组件清单

7.查看增强组件内容

单击工具栏的执行按钮可以输入出口对象所包含的函数清单,并可以查看该出口对象目前的状态,若该出口对象未被激活,其输出清单将会由红色的图标来表示,否则会显示绿色的图标,可以通过工具栏按钮来激活该对象,可以被激活的对象才可以在程序执行的时候被调用,如下图所示,打勾的部分为已实施的对象。

8.查看已实施的对象

三、逆向查找函数

函数增强的命名方式有其固定的格式:

  • 前四个字母是固定的EXIT
  • 第二部分为程序名
  • 第三个部分为3位数字的序列号

基于函数的出口在程序中通过引用代码“CALL CUSTOMER-FUNCTION <3位数字>”来调用,以VA01的主程序SAPMV45A为例,在程序中查找包含“CALL CUSTOMER-FUNCTION”的字符串,可以找到例如代码“call customer-function ‘003’”,如下图所示:

9.逆向查找增强方法

根据以上命名原则可以判断出该增强出口函数名称为“EXIT_SAPMV45A_003”,通过SE37查询该Function,可以看到该函数中指定了一个预留的程序,名称为“ZXVVAU05”。

10.逆向查找增强_预留结构

程序名“ZXVVAU05”为SAP的预留程序名,以Z开头的程序可以在SAP中直接创建和维护。在代码中双击该程序名,若程序没有被创建,系统将提示在系统中按该名称进行创建新的程序。

四、二代增强实施案例

通过CMOD实现销售订单控制实例。

1.创建项目对象

使用TCODE:CMOD,进入项目管理维护工具。创建一个对象。

11.创建项目管理对象

点击创建按钮后进入维护界面,编写描述、选择保存的包和语言等信息。

12.创建项目管理对象_描述基本信息

在属性页面上可以看到在工具栏上有三个按钮。

  • 编辑:在编辑与显示状态中切换
  • 增强分配(Enhancement assignments):分配增强的组件对象
  • 组件(Parts):列出组件中所对应的功能函数

2.增强分配

进行完上面的操作之后,点击保存按钮。之后点击增强分配按钮,系统进入组件对象维护页面,可以在一个项目中同时输入多个增强组件对象,需要注意的是,一个组件对象只能被引用一次,若在本CMOD项目中被引用了,那么这个组件就不可能在其他的CMOD中输入。

组件对象以“V45A0003”为例。

13.创建项目管理对象_增强分配

3.组件列表界面

在上述的界面中点击组件按钮,系统将会进入到组件列表界面。该界面将会列出组件包含的功能函数,如组件对象“V45A0003”中维护的功能函数。若同时维护了多个组件对象,则会在该页面中将所有函数对象按照顺序列出来。

14.创建项目管理_组件列表界面

从页面中也可以看到组件对象的状态,在组建所对应的列表表头,会有一个只是图标来表示该对象的状态。组件对象必须激活才能使用,若未激活,将会显示一个红色的指示图标。激活后则是一个绿色的图标。在函数一栏,也会有一个图标指示该函数的Include程序是否被激活,具体如上图所示。

4.维护函数

以第一个函数“EXIT_SAPMV45A_003”为例,双击该函数名称进入到函数维护界面。双击该函数中预留的程序“ZXVVAU05”。若未创建则创建之。

10.逆向查找增强_预留结构

5.编写增强代码

上述Function使用方法与普通Function使用方法相同。

(1)Importing参数:
  • XVBAK:用于保存订单的表头数据。
  • XVBUK:于保存订单抬头的状态等数据。
  • XKOMK:用户保存订单中行项目的定价等信息。
(2)Tables参数
  • XVBKD:保存表头相关凭证信息。
  • XVBFA:保存行项目凭证流信息。
  • XVBUP:保存订单行项目物料相关信息。
  • XVBUP:保存行项目的状态信息。

编写增强逻辑:

1
2
3
4
5
6
7
8
9
DATA LS_XVBKD LIKE LINE OF XVBKD.
IF XVBAK-AUART = 'AA'.
LOOP AT XVBKD INTO LS_XVBKD.
IF LS_XVBKD-BSTKD IS INITIAL.
MESSAGE E000(ZHQ) WITH '必须输入采购订单编号'.
LVF_SUBRC = '2'.
ENDIF.
ENDLOOP.
ENDIF.

变更完成之后需要激活新建的CMOD项目,不然增强内容无法识别。测试结果如下:

15.创建项目管理_测试截图

五、参考资料

SAP ABAP 基于函数的出口CMOD

SAP增强的查找方法

评论