SAP ABAP增强

在做增强开发的时候,比起处理增强逻辑,最难的不是做新的开发,而是要在没有增强开发文档的情况下找到前辈们开发的地方,进行修改。这篇是对做增强开发的时候怎么找到增强点进行总结,以后可能进行持续更新。学习的话可以看其他博主的这一篇ABAP增强。虽然做过几个增强开发,但是现在还有些迷糊,所以有的地方可能存在问题,若发现还请指正,谢谢。

一、第一代增强

增强开发在系统升级之后会被新版本覆盖掉,所以如果系统中使用了第一代增强还需要在系统升级的时候需要进行评估,除此之外还需要申请ACCESS KEY。一般不建议使用,使用的话也是SD和MM模块用的比较多。

SD模块路径:SAP 用户化实施指南->销售与分销->系统调整->用户出口。点击执行之后就是编写程序。

特点

1、基于源代码,升级之后会被覆盖
2、需要申请Access Key才可以修改
3、一般以UserExit开头,直接主程序搜就可以
4、一般SD/MM模块用的比较多,SPRO去搜也可以

二、第二代增强

1、要找之前的就直接CMOD查看。点组件就可以看到之前开发的,进去进行修改。

2、或者在主程序里面搜 'EXIT 或者 CALL CUSTOMER-FUNCTION,双击进去。里面只有一个预留的INCLUDE,双击在包含程序里面写增强。但是要注意,你能在自己代码里面使用的数据只有函数的参数,不能使用其他数据,因此需要找到传了你所需要数据的那个EXIT才能达到增强目的。 

3、SE37,用函数MODX_FUNCTION_ACTIVE_CHECK可以查看系统中哪些增强被激活了。

4、SE11,在表MODSAP中输入函数名称可以找到对应的出口对象。

5、SMOD可以查看出口对象的信息,CMOD可以创建增强项目或查看增强项目有关信息。一个SMOD中的出口对象只能属于一个CMOD中的项目,但一个CMOD项目中可以有多个出口对象。

SMOD:

三、第三代增强

1、SE18创建、维护BADI对象,SE19维护BADI实例,实现对应功能。

2、SE24,输入CL_EXITHANDLER在GET_INSTANCE中设置断点,运行需要找使用增强的事务码,查看EXIT_NAME的值,找到对应的BADI对象。

四、第四代增强

不建议使用。程序代码中可以看到的ENHANCEMENT-POINT、ENHANCEMENT-SECTION就是第四代增强的增强。

五、增强开发记录

1、 创建采购申请时的申请数量要根据物料主数据中的舍入值进行舍入。

参考:采购申请增强

分析:这里的舍入必须是向上取整才可以保证满足所需数量。取到物料主数据中的值和申请数量进行比较,向上取整就行。

a、因为没有开发文档,在采购申请也做过增强,所以要找到原来的增强在里面改。第一代增强一般不用所以没有考虑,就去程序里面找第二代增强,也没找到。就去BADI里面找第三代增强。

b、SE18查看搜到的采购申请的 BADI 名称: ME_PROCESS_REQ_CUST。看到接口有对行项目处理的方法,双击进去可以看到参数中有行项目。因此选择实现这个方法。

方法的参数: 

c、SE19,本来想直接创建实施,但是存在增强,所以找原来的实施在里面添加代码。一般根据接口创捷的实施都是Z+对应的BADI名称(如果按照规范来的话)。所以直接搜索Z+刚刚查到的BADI名称,存在所以直接更改。

找到对应的方法,双击进去修改。 

代码实现,其中IM_ITEM是传入参数:

METHOD if_ex_me_process_req_cust~process_item.
DATA(ls_item)    = im_item->get_data( ).
DATA round_value TYPE i."舍入值
* 对申请数量进行舍入 *
    SELECT bstrf FROM marc WHERE matnr = @ls_item-matnr INTO @round_value ."根据物料编号查舍入值
    ENDSELECT.
    IF round_value = 0.
    ELSE.
      ls_item-menge = ceil( ls_item-menge / round_value ) * round_value.
    ENDIF.
  ENDMETHOD.

2、CO01创建生产订单的时候对任务号字段进行校验,任务号必须是存在于MARC表中的物料,且满足特定输入的任务号是合法的,其他均不允许。

a、这次的开发因为之前是第三代增强,就直接想都没想先去找第三代有没有实现,死活找不到,遂放弃。在代码里面找第二代增强。在主程序里面搜索 'EXIT,看传入参数是否满足需要,查找到了传入参数满足要求的,在INCLUDE程序里面写了检查逻辑之后,发现无法满足所需要的效果,如果直接显示错误信息,会退出程序,不符合用户习惯,若用DISPLAY LIKE 'E'又无法在保存前检查,就算字段是不符合要求的也能够直接保存。所以不能这样做。

 b、然后在对应的页面使用F1到对应的程序里面也没有查到,所以直接去CMOD里面查找。(这里我直接找是因为本来就创建了,如果没有创建还请自己创建然后在程序中使用,不过标准事务码只能用本来就有的EXIT)

找到了我需要的增强。 

双击进入是个只有包含程序的代码去包含的程序里面实现代码。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值