第一代:基于源码增强(子过程subroutine)
第一代增强基于源代码,是SAP提供的一个空代码的子过程。在这个子过程中用户可以添加自己的代码,控制自己的需求。这类增强集中在一些文件名倒数第二个字符为Z的包含程序中。 一般是以UserExit_打头的子过程,因此形象地称其为用户出口。

   用户出口Include在SAP标准程序的源代码里,可以说是源代码的一部分,更改用户出口就相当于更改SAP标准程序,是需要在SAP Service MarketPlace里申请对象键(Access Key)才能更改,不需要建立工程;由于是在标准程序中,所以标准程序的全局数据都可以使用,但同时系统升级时会被新版本覆盖。用户出口的说明可以从后台配置SPRO的相关模块的路径找到,大部分SD的出口都是此类增强。查找此类出口的方法:1、在程序中查找文件名倒数第二个字符为Z的Include包含程序。2、在后台查找对应的模块增强:在程序中搜索USEREXIT_打头的子过程;在SAP中以PERFORM的形式被调用。3、单击”Display Object List”按钮,在子程序列表查找“UserExit_”打头的子过程。

第二代:基于函数模块增强(Function)

   第二代增强基于函数模块,用事务:SAP增强管理(SMOD)和增强编辑器(CMOD)维护。在SAP发布的版本中,使用Call Customer-Function 'xxx'调用函数模块,所以可以通过在程序中搜索 Customer-Function来查找第二代增强,第二代增强函数名构成为Exit_程序名_'xxx(3 digital number)'。它们在发布时只有一句代码include "ZXxxxxxx",修改时无需像第一代增强一样申请对象键,直接按两次Enter键就可以了。但同时这种增强以及后面几代的增强都不能像第一代一样随便使用程序的全局数据,只能使用接口中传递进来的参数。由于带有关键字Customer,故被称为Customer Exits(客户出口)。第二代增强主要有4类:E.Ehancement exits:这些出口以Exit_打头,可以在SE37中查看,也可以在数据字典TFDIR(函数表)中查询Exit_打头的函数C.GUI codes(GUI增强):用于区域菜单和工具菜单栏的增强S.Subscreens(屏幕增强):用于子屏幕设计增强T.include structure增强:用于表结构的增强另外,按用途分类:功能模块出口(Function Module Exits):在SAP标准事务中添加业务逻辑,一般用于验证标准事务中的字段屏幕出口(Screen Exits):定义自己的子屏幕嵌入应用屏幕,在标准事务中添加子屏幕菜单出口(Menu Exits):定义自己的菜单项或激活屏蔽标准事务中的菜单项表出口(Table Exits):与上述T型出口一样,属同一类型数据元素出口(Data Element Exits):在ABAP/4字典的关键字数据元素中添加文档。结果是在使用这些数据元素的字段处按F1键后会出现自定义的说明文档关键字出口(Keyword Exits):在ABAP/4字典中的关键字数据元素更改表示文本字段出口(Field Exits):根据ABAP/4字典中域验证某些标准事务的某些屏幕字段。Ehancement 比较重要的表MODSAP:SAP扩充表,重要字段增强名(Name)、组件类型(TYPE:ECST)、组件模块名(Member)里面记录了所有Enhancement的增强TFDIR:功能模块表,重要字段FuncName(函数名)、功能模块激活状态MAND(如果是C,代表此函数模块激活)TSDIR:动态程序区CALL CUSTOMER SUBSCREEN(屏幕增强)CUATEXTS:修改GUI界面,菜单文本被客户改变(GUI菜单文本增强)MODSAPA:SAP扩展的属性MODATTR:SAP增强项目属性TADIR:资源库对象的目录TFTIT:函数功能的短文本查找Ehancement 的方法:1、查找关键字: 在程序中搜索Customer-Function,找到后面的3位数字后缀,然后出口函数组成就是Exit_程序名_3位数字后缀2、代码查找3、利用系统函数寻找增强常与出口相关的函数有:DYNP_VALUES_READMODX_ALL_ACTIVE_MENUENTRIES 菜单增强MODX_FUNCTION_ACTIVE_CHECK 函数增强MODX_MENUENTRY_ACTIVE_CHECK 菜单增强MODX_SUBSCREEN_ACTIVE_CHECK 屏幕增强可以在函数最后设置断点,然后通过运行对应的增强程序就会调用这样的函数,这样就可以在调试模式下找到对应的增强。

第三代:基于类的增强(BADI)
BADI(Business Add-in)是一个新的SAP增强技术,是基于ABAP的面向对象技术。源代码的发布是通过接口的方法调用来实现使用的。此类增强实际上是实现一个或多个接口的实现类,因此对同一个增强会出现不同的源代码,这些不同的源代码是通过过滤器(Adapter)来区别用于不同的业务场景的。这种增强使用事务码 SE18 定义、SE19 实现。 SAP预定义了一些接口(Interface),客户可以自行定义实现Interface的类(Class),在标准程序中会调用客户自定义类的实例,获取实例的过程使用了工厂模式。

   业务交易事件(BTE,Business Transaction Events)是SAP的一种增强方式,技术上讲是介于第二代增强(Customer Exits)和BAdIs之间的产物。这类增强为会计模块独有的增强,用于财务会计模块(Open FI)、总账会计(FI-GL)、应收账款和应付账款(FI-AR/FI-AP)及销售和分销(SD)的组件。有两种类型,类似于会计凭证和替代:1、Publish and Subscribe Interface:只提供SAP数据源,可以供外部程序使用或达到数据检查的目的。用于告诉外部软件在SAP标准应用中触发了某些事件,并且把产生的数据提供给他们。外部软件不能给R/3系统返回任何数据,可以用在以下地方:主数据被创建、修改或锁定; 凭证被输入、预制、修改或冲销;项目被清除或重置也可以在附加的开发中基于此事件和数据产生附加的处理:启动工作流; 产生或修改附加数据;请求通信     2、Process Interface:可以达到数据修改的目的,用来增强标准的业务流程。

用于控制与标准R/3系统处理方法不同的业务流程,也就是用Process Interface替换标准处理。它们干预标准流程,并返回数据给SAP应用。

     BTE查找方法,两种方法:1、运行事务码(例如XK02),选择Sytem-Status,双击Program(screen),选中In main Program,查找OPEN_FI_PERFORM字符串2、IMG-财务会计全局设置(新)-工具-客户增强-业务事务事件(FIBF),选择环境。BADI查找方法:BAdI对象的信息存储在SXS_INTER, SXC_EXIT, SXC_CLASS 和 SXC_ATTR这4张表中(参见SECE包)。SAP BAdI程序都会调用cl_exithandler=>get_instance来判断对象是否存在,并返回实例。这个方法实际就是对上述4张表及视图V_EXT_IMP 和 V_EXT_ACT进行查询和搜索。基于以上机理有以下方法:(1)使用SE24进入Class Builder,查找CL_EXITHANDLER,进入get_instance方法,在get_class_name_by_interface调用处设置断点。Debug需要增强的事务,在断点处查看exit_name即可找到对应的BAdI。

     (2)使用性能分析器(事务码ST05)跟踪。1、运行事务码ST05,选择“table buffer trace”,而不是常用的“SQL trace”2、activate trace(开始跟踪)3、运行事务码:me21n4、创建一个采购订单,保存5、deactivate trace(结束跟踪)6、点击display trace,在出来的选择条件中: objects中输入:V_EXT_IMP和V_EXT_ACT;operations中输入“OPEN”

         7、查询,通过查询的结果可以看出,视图V_EXT_IMP的BADI的接口类名字都是以IF_EX_开头的,其中IF_EX_之后的就是对应BADI接口的定义。

        (3)SE18查找接口,SE19实现接口就可以实现用户增强。

第四代:Enhancement Framework
在不改变(或尽量少改变)SAP标准程序的情况下满足客户的定制开发需求。Keep less Modification.

   Enhancement Framework的基本概念:Ehancement Spot: 用来组织Enhancement options,it's a container of Enhancement options.Enhancement Implementation:用来组织Enhancement options的实现代码。隐式增强隐式增强就是系统内置的Enhancement options,是系统本身就预留的,如在:执行程序,包含程序,函数组,对话模块的结尾;Form例程,函数模块,方法等的开始和结尾;结构的结尾这些地方都会有。Implicit enhancements comprise class enhancements, function group enhancements and predefined enhancement points at particular predefined positions such as the end of a report, a function module, an include or a structure and the beginning and the end of a method.显示增强显式增强就是手工加入到程序中的Enhancement options,有两种显式增强:ENHANCEMENT-POINT: 只有一个预留点, 没有代码,用来在程序中直接插入新的功能代码,其概念与BADI的USER_EXIT类似,标准程序预留了部分已定义好的增强点可以让ABAP做插入代码来实现这个增强(也可以自定义增强点,但不能自定义增强选项,增强选项一定是系统预留下来的,如果没有增强选项则该处不可做增强),但是不能做屏幕和菜单增强。其最大的优势在于方便,可以使用程序中已定义的变量,不像BTE和Customer EXIT中只能使用函数接口传过来的参数。一般增强步骤:1、DEBUG标准程序找到需要增强的位置,点EDIT->SHOW IMPLICIT ENHANCEMENT OPTIONS查看是否有预留增强选项(标准程序不能自己创建enhancement option ,只能使用系统预留的)。2、创建增强点实现为自己程序创建显示增强选项Explicit Enhancement options

      单击[创建选项]菜单进入创建增强选项界面,输入增强点名及增强容器名(以Z开头),确认回车。注:Enhancement Spot 就是SE18中的Enhancement Spot。

        随后Editor上会多出一条语句,然后单击按钮切换增强模式。

         光标定位到增强语句上,单击[创建实现]菜单项创建增强点实现。

    注:Enhancement Spot相当于一个容器,创建一个增强点的必要条件是要有一个容器。每个增强点都可以创建到这个容器当中,也可以再创建一个容器。删除这个容器的方法:在本地对象或它的包中删除或在SE18中删除,激活程序,退出后再打开程序。ENHANCEMENT-SECTION: 用来替换原有的功能代码,ENHANCEMENT-SECTION 和 END-ENHANCEMENT-SECTION之间有代码, implementation 之后, 替换旧代码,只执行新代码,原来的代码不再执行。两者的区别是:enhancement-point没有代码,只有一个预留点,允许在这个位置插入新代码(implementation),类似于AOP。而enhancement-section和end-enhancement-section之间有代码,implementation之后,替换旧代码,只执行新代码,原来的代码不再执行,类似于OO中的方法重写/覆盖。注:SAP提供了一个标准程序SNIF,通过这个程序可以直接查找出系统已经实施的BAdi、BTE、客户出口、字段出口甚至是调用的BAPI。具体操作方法:打开【系统】|【状态】菜单,双击进入程序,点击【对象列表】按钮,然后通过点击【上级对象列表】按钮,找到程序所在的包。SE38运行程序SNIF,输入包名,如果勾上【也选择SAP实施业务加载项】就会把SAP标准的增强实现也显示出。运行后,可以点击各Tab页查看已经实现的自定义增强。

SAP 四代增强方式和Enhancement查找方法相关推荐

  1. 四代增强 (BTE实例详解)

    ★ 在创建或修改客户时做最终检查,不符合条件不允许保存 ●   查找合适的事件 1.运行事务码XD02,查找到对应的程序为SAPMF02D,在此程序中搜索字符串"OPEN_FI_PERFOR ...

  2. SAP ABAP三代增强点查找

    文章目录 前言 一.什么是三代增强? 二.使用三代增强我们需要了解那些东西? 1.BADI的调用机制 2.如何查找三代增强点 3.如何配置实施三代增强 三.三代增强实现案例 1.我们要实现的效果 2. ...

  3. SAP中寻找增强的实现方法

    SAP中寻找增强的实现方法 SAP 增强已经发展过几代了,可参考 SAP 标准教材 BC425 和 BC427.简单的说SAP的用户出口总共有四代: 1.第一代  基于源代码的增强. SAP提供一个空 ...

  4. AOP常用的几种增强方式,各自的特点

    SpringAOP的5种增强类型应用讲解 一.前言 spring框架中为我们提供的增强包括针对切面的增强和针对切入点的增强,对一个方法的增强底层使用的是动态代理,所以在学习springAop增强之前大 ...

  5. sap fiori导出列表到excel_介绍一种Fiori标准应用的增强方式

    2015年,Jerry还在SAP成都研究院CRM Fiori开发团队工作时,担任了德国一个著名的灯具制造商客户的CRM Fiori项目的dev angel. 当时客户提出了若干对CRM Fiori标准 ...

  6. “蜥蜴之尾”——长老木马四代分析报告

    随着移动端安全软件对APK的查杀能力趋于成熟以及Google对Android安全性重视的提高,病毒与反病毒的主战场已逐渐从APP层扩展到Linux底层.而且病毒作者也开始把PC端的病毒自我保护手段运用 ...

  7. 介绍一种Fiori标准应用的增强方式

    2015年,Jerry还在SAP成都研究院CRM Fiori开发团队工作时,担任了德国一个著名的灯具制造商客户的CRM Fiori项目的dev angel. 当时客户提出了若干对CRM Fiori标准 ...

  8. Java基础14 集合(重要)四种遍历方式 list 并发异常 set

    一.collection 带all的方法 package day14;import java.util.ArrayList; import java.util.Collection;public cl ...

  9. 基因测序3——三、四代测序技术来势汹汹,国产化仍在布局二代测序?

    基因测序3--三.四代测序技术来势汹汹,国产化仍在布局二代测序? 和义广业创新平台 为医械创新创业者提供一站式产业转化服务 取消关注 1 人赞同了该文章 导读 [行业分析]基因测序系列,将聚焦基因测序 ...

  10. php xml 四种,xml中常见的四种解析方式是什么?

    xml解析方式有:1.DOM解析方法,可以对xml文档进行修改操作:2.SAX解析方法,解析速度快,占用内存少:3.JDOM解析方法,查找方便:4.DOM4J解析方法,解析XML的速度快. 在XML的 ...

最新文章

  1. 最全干货:从写简历,到面试、谈薪酬的那些技巧和防坑指南
  2. 中国队拿下口罩人脸识别世界第一!还将推出全球最大公开人脸数据集
  3. UNIX:描述符和文件结构
  4. DataURL:概述
  5. MyEclipse中常用设置。
  6. oracle大型数据库系统在AIX/unix上的实战详解 讨论76 Oracle备份问题
  7. linux下的C语言开发(管道通信)
  8. 【动态规划】LeetCode 1143最长公共子序列
  9. SqlServer三种常用窗口函数
  10. 如何进行 JVM 调优
  11. 知网不能下载PDF?CAJ格式太鸡肋?
  12. 并联机器人自由度计算
  13. 中国东北到美洲比中国南边到美洲更近?
  14. 旅游网站设计参考文献优秀范例合集
  15. 苹果雪豹操作系统正式版_苹果为旧机型发布iOS 12.4.2;macOS 10.14.6发布了,Catalina还远吗?...
  16. Linux接蓝牙音响无声音,win10蓝牙音箱没有声音怎么办_win10蓝牙音响连接成功没声音处理方法...
  17. WIN7各种系统大全
  18. Python运维开发从入门到精通学习 Day4
  19. codewars(二)
  20. mysql数据库的布尔型

热门文章

  1. photoshop ps 替换图片文字
  2. 秒懂设计模式之原型模式(Prototype Pattern)
  3. 离线强化学习-2重要性采样和Duality介绍(劝退版)
  4. 关于SX1308升压芯片的使用说明
  5. 辣条君写爬虫4【帮小姐姐删垃圾邮件】
  6. 如何成为技术大牛--摘自牛人
  7. 修复SQL2000数据库一致性错误的语句
  8. Android屏幕计算公式
  9. flutter 如何获取屏幕的尺寸
  10. Matlab之format 设置命令行窗口输出显示格式