二维码

[二代] sap增强进阶(三)- Customer Exits

Twilight发表于 2014-04-14 22:10zhongguomao 最后回复于 2017-11-07 10:16 [复制链接] 6103 1

三、 Enhancements Using Customer Exits
1. 实现方法
要实现一个增强,前提是你找准了这个增强。现假设你已找到物料凭证更新时的增强MB_CF001,可以通过以下步骤来实现这个增强。
使用事务代码CMOD创建一个增强项目
图-6-1 增强项目.jpg
图-6-1 增强项目

点击创建,然后点击工具条上的“Enhancement assignments”功能键,将增强MB_CF001添加到项目中去
图-6-2 增强项目组件.jpg
图-6-2 增强项目组件

再点击工具条上的“组件”功能键,里面将显示函数接口,逐层双击进去,知道进到最后一个Z开头的INCLUDE程序,这时就可以在这里写代码来实现客户的特定需求了,保存后一定要注意激活组件和项目,增强方可生效。为了养成良好的习惯,推荐自己新建一个函数或者INCLUDE程序,以避免用户出口的频繁修改。

屏幕增强操作方法类似,增强的屏幕编号都是预先定义好的,双击进去创建即可。通常我们增强一个标准程序的屏幕,比如ME21N的抬头增强,我们首先会增强采购订单抬头表EKKO,这时就需要修改结构CI_EKKODB,CI_EKKODBX,增加客户字段。然后在将相关字段绘制在增强的屏幕上,激活后对相应的PAI、PBO做增强以实现数据的传入传出即可。
图-7 屏幕增强.jpg
图-7 屏幕增强

当然,你也可以在增强函数组中创建自己独立的屏幕,然后通过预先提供的一些增强方法实现自定义屏幕与标准程序之间数据的传入与传出。
图-9 表格增强.jpg
图-9 表格增强
图-10 屏幕增强后效果.jpg
图-10 屏幕增强后效果

2. 查找方法
首先要说明的是这种增强在ABAP中目前发现有两种存在形式,一种为CALL FUNCTION ‘EXIT_主程序_XXX’,另一种为CALL CUSTOMER-FUNCTION ‘XXX’。

图-11 用户增强1.jpg
图-11 用户增强1
图-12 用户增强2.jpg
图-12 用户增强2
第一种方式执行之前,ABAP会调用以下一个函数MODX_FUNCTION_ACTIVE_CHECK / MODX_MENUENTRY_ACTIVE_CHECK / MODX_SUBSCREEN_ACTIVE_CHECK,它们分别对应功能增强、菜单增强、屏幕增强,ABAP通过调用这些函数检查相关增强是否已经实现并处于激活状态,如果条件满足,才会执行增强逻辑。而第二种方式,它已经把这部分检查增强是否激活的功能包含在句法中去了,因此它执行执行不会调用这些函数。因此,我们得到了一个查找这类增强的比较好的方法:
在函数MODX_FUNCTION_ACTIVE_CHECK(或者那三个函数中的其它)的最后一行打上断点
图-13-1 查找用户增强Enhanments.jpg
图-13-1 查找用户增强Enhanments

在欢迎屏幕输入/h激活调试
图-13-2 查找用户增强Enhanments .jpg
图-13-2 查找用户增强Enhanments

运行业务事务代码,如ME21N,然后在调试的第一个界面中设置断点在语句CALL CUSTOMER-FUNCTION处
图-13-3 查找用户增强Enhanments.jpg
图-13-3 查找用户增强Enhanments
图-13-4 查找用户增强Enhanments.jpg
图-13-4 查找用户增强Enhanments

按F8执行,在函数MODX_FUNCTION_ACTIVE_CHECK的断点处查看L_FUNCNAME的值就是增强的名字,可以在表MODSAP里找到其对应的增强(SMOD中的)。或者是在断点CALL CUSTOMER-FUNCTION处,按照规则“EXIT_主程序名_当前断点处的三位数字”组成的函数名字,也和上面一样,可以在表MODSAP中查找到。
图-13-5 查找用户增强Enhanments.jpg
图-13-5 查找用户增强Enhanments
回复

使用道具 举报

zhongguomao
66666666666666666
回复 支持 反对

使用道具 举报

快速回帖

本版积分规则
您需要登录后才可以回帖 登录 | 注册有礼

快速回复 返回顶部 返回列表