SAP ABAP二代增强点查找


前言

      随着sap的发展它的增强功能也衍生了4代,现如今我们最常用的应该就是二代增强。因为一代它有许多缺点,例如sap更新后就不会保留我们所实现的增强点,三代增强则是完成一些复杂的增强和解决了之前两代的缺陷。平时我们最常用的还是二代增强,今天这篇文章来给大家讲解一下二代增强以及一个小案例。笔者也是边学习边写文章有不好或者说错的地方还望大家多多见谅。感谢!


一、什么是二代增强?

           二代增强是基于函数的增强不再像一代增强哪样在源代码里面添加对应位置的代码逻辑,二代增强更易于维护扩展,可以依据函数的传入/传出参数来进行修改判断等等操作。这个函数也是SAP为我们提前定义好的,我们只需要在相应函数里面编写代码逻辑即可。当我们标准程序执行到某个点时就会调用到这个相应函数来执行我们自己写的代码逻辑。例如某个标准程序点击创建时就会调用相应函数,点击保存时就会调用相应函数。


二、使用二代增强我们需要了解那些东西?

      以下两个内容我先简单介绍一下让大家先有个初始理解,后面的案例实现会有详细操作以及图文流程

    1.如何查找配置二代增强点

            这里介绍用程序所在包查找的方法
            a.
                 首先找到标准程序的程序名
            b.
                 再根据程序名在 se38 中找到此程序所在的包
            c.
                 再使用 smod 事务码根据包以及我们所要实现的业务场景查找到我们的 增强对象
            d.
                 接下来到 增强对象 中根据业务场景的需求寻找对应的函数进行添加逻辑代码
            e.
                 再使用 cmod 事务码创建一个 项目对象 将增强对象添加到此项目对象中
            f.
                  最后激活我们的项目对象即可完成增强的实现

    2.项目对象,增强对象(出口对象),函数。三者之间的关系。

            a.
                首先它们三者都是1对多的关系,例如一个项目对象可以包含多个增强对象,一个增强对象里面包含多个函数。可以这样说一个项目对象管理多个增强对象,一个增强对象管理多个函数。这里需要注意: 一个增强对象是不能同时被多个项目对象管理的。
            b.
                增强对象和函数都是SAP帮我们预定义好的,这两者我们都是不能自己创建的我们所能做的是在相应的增强对象中找到对应需求的函数在函数中编写代码逻辑。
            c.
                当我们需要使用某个增强逻辑的时候我们首先要创建一个 项目对象 事务码为 cmod 然后进入增强分配 添加相应的增强对象这个增强对象里面也就包含了我们添加了逻辑代码的函数。添加完毕点击保存,接下来在cmod初始界面输入我们刚才新建的项目对象 回车一下,然后点击激活,即可完成增强功能的使用。如果要取消这个增强我们可以点取消激活即可。


三、二代增强实现案例

    1、我们要实现的效果

                    这个案例我们是对 va01 标准程序进行增强,我们将实现当客户参考这个输入框用户没有输入的时候就阻止创建销售凭证
va01图片示例

    2、如何根据程序名找到对应包名

            a.第一步进入va01标准程序后根据下图的操作查看程序名
查看程序名

            b.第二步根据程序名在se38中查找程序所在包
程序所在包名

            c.或者也可以直接在a步骤双击程序名跳转之后如下操作
双击程序名获取包名

    3、如何根据包名找到增强对象以及对应函数

            这个增强对象一般是业务顾问会告诉开发,如果是自己找的话,sap提供的文本描述找不准的话就需要我们多试几次才可以找到适合我们当前业务的增强对象。
            a.现在根据我们获取的包名去查找增强对象使用事务码 SMOD 查找的时候注意最大条目数一般不用管
根据包名查找增强对象

            b.根据我们的业务需求结合sap提供的增强对象描述确定我们的增强对象,如果不好找的话我们可以一个一个试。下图就是我们点击执行后展示出了我们根据程序所在包名查找出的所有增强对象了,我们要找的增强对象就在其中,根据sap提供的描述和我们的业务需求可以进行排除和尝试,最终确定我们的增强对象 V45A0003 可以实现我们的业务需求。
                                             所有增强对象
            c.查找增强对象中相应函数,现在我们可以使用事务码 SMOD 查看我们的这个增强对象 V45A0003
                           查看V45A0003
这里我们主要看一下组件 也就是所包含的函数,以及函数的文本描述,下图我们可以看到此增强对象包含两个函数,如果我们直接翻译的话看着可能有点不通顺,其实这里的意思就是箭头所指的意思,结合我们的业务需求当表头的用户参考是空的时候就不能创建销售凭证可以确定我们所要用到的函数就是第一个 EXIT_SAPMV45A_003 直接双击进入函数即可。
查找函数

    4、根据业务需求进行逻辑代码编写

            a.第一步我们要了解这个函数的 导入 导出 以及 的 这些参数。这其中的参数肯定有我们需要的。首先我们看一下va01中的客户参考字段是什么,接着在去此函数中查找这个参数的传入传出情况。然后当我们需要的参数进入此函数后再进行判断修改逻辑编写等等操作。函数中 表 是及传入又传出的
                        1.va01进入创建销售凭证界面后查找客户参考字段所存在的表以及字段名称
查找表名字段名

                        2.在函数中查找 客户参考字段 VBKD-BSTKD 的传入传出情况。根据下图我们可以看出 表 XVBKD,就是我们客户参考字段 BSTKD 所在的表。这里的表是及传入又传出,所以当它这个表传入这个函数的时候我们去表 XVBKD 中操作字段 BSTKD 即可。这里其实我们的业务需求用不到传出,因为我们的目的判断这个值是否为空,而不是去修改这个值或者根据某些参数带出这个值。
        参数的传入传出情况
            b.进行逻辑代码编写前我们进入函数后首先要创建 INCLUDE 程序,所有的增强逻辑都是写在对应函数的INCLUDE 程序中,我们直接双击这个预定义好的INCLUDE程序名创建,当我们双击的时候这里会提示我们警告,我们直接回车即可。
创建INCLUDE程序
            c.编写逻辑代码,如果客户参考字段为空的话返回E类型消息终止程序。这里面的传出参数 LVF_SUBRC 是表明函数是否执行成功,如果我们在这里给 LVF_SUBRC 传不为0的值的话它不会去阻止销售订单的保存,所以这个函数其实并不太适用于此业务。但是也可以实现只不过是没有那么完美,我们是用了返回E类型消息终止程序来实现不保存。但是正常应该是去控制 LVF_SUBRC 返回值为0 或者 其他值 来实现保存 或者 阻止保存。但是这里的这个返回值并不会起作用,具体原因我这边也不能解释通透。
逻辑代码实现

            c.最终检查激活代码然后接下来去配置分配增强对象即可

    5、配置使用我们的增强对象

            a.第一步创建项目对象,使用 cmod 事务代码创建项目对象。一般在项目中我们是一个模块一个项目对象,比如关于sd的增强对象都由一个叫zsd01的项目对象来进行管理。

            在这里插入图片描述

            b.分配增强对象,当我们的项目对象创建好了以后就可以分配我们的增强对象。上面的逻辑代码编写是写在 V45A0003 增强对象的003函数下。所以这里我们需要将 V45A0003 分配给我们创建的项目对象。

            增强分配
分配完成保存完毕之后,此时这个增强逻辑并不能生效,我们需要激活项目对象,项目对象一旦激活里面所包含的增强对象都会启动。一旦取消激活则项目对象所管理的增强对象都会失效,这里我们可以选择组件点击显示,就可以查看我们增强对象的激活情况。
            在这里插入图片描述

            c.激活项目对象

            激活项目对象

    6、最终效果展示

            可以看到当我们没有输入客户参考的时候点击保存左下角会提示E类型的消息来阻止程序运行。测试的时候我们要注意需将创建销售凭证的必输字段都先补充完整才可以看到我们增强的效果。

效果展示

    7、关于增强的补充点

            a.后台表查询增强对象以及对增强对象类型介绍

                1.使用后台表查询增强对象可以显示增强对象类型以及增强对象所包含的函数和文本描述,我们可以使用 se16n 来输入modsap这个透明表去查看。比如我们想查看上面案例中用到的增强对象就可以按照下图的方式查询。
使用se16n查询增强对象
                2.这里我们再介绍一些增强对象类型,我们可以看到上面查询的增强对象类型是 E ,而E类型就代表的是功能增强,S代表的屏幕增强,T代表的对表的增强,C代表对GUI的增强
                3.在sap中有四种基本的用户出口类型也就是增强对象类型。
在这里插入图片描述

            b.查看标准程序已被包含使用的增强函数以及标准程序包含的所有增强函数

                1.使用 se37 事务码调用函数 MODX_FUNCTION_ACTIVE_CHECK 来查看标准程序已被包含使用的函数,这个查询方法适用于我们在做增强操作的时候,如果测试出现了问题比如返回一些不太正常的消息类型,我们可以查询哪些增强函数是被使用了,进而再确定是哪一个函数影响到了程序的执行操作。
se37使用函数查看

               查看结果
可以看到我们va01的标准程序是包含了003 和 004 两个函数。这里需要注意的是这个函数返回的结果是函数的简写 完整的名字应该是 EXIT_<程序名>_<序号>,例如我们返回的这两个003和004 完整函数名称在我们标准程序的源代码中应该是 EXIT_SAPMV45A_003 和 EXIT_SAPMV45A_004 因为我们这两个函数是包含在标准程序SAPMV45A中也就是va01的程序代码。
                2.在标准程序中查看所有增强函数函数,这里我们可以找到程序中对所有增强函数的调用但是并不能看出某个增强函数所能作的事情是什么。而且要注意如果我们想去se37中查看这个被调用的函数 它的函数名字应当是 EXIT_<程序名>_<末尾序号>。当我们使用se37去查看某个增强函数的时候其实是和我们使用 smod 查看增强对象下的函数效果是一样的。 当我们双击进入程序代码后可以按照如下操作查看。这里的 call customer-function 是固定的我们每个标准程序代码都要这样搜。翻译的意思也就是 调用客户的函数。
查询标准程序的所有增强函数

            c.如果后期我想起了有什么要补充的会继续写在这里,或者大家有什么想让我介绍的也可以评论私信我哦。

四、总结

        以上就是今天要讲的内容,本文仅仅简单介绍了sap中二代增强以及一个小案例,主要目的是帮助大家对增强有个初始的理解,笔者也是初学增强,如果有说错或者不好的地方还望大家提出来见谅。感觉笔者写的好的别忘了关注点赞加评论哦,也欢迎大家一起来讨论。谢谢!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiao贱贱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值