BADI这是第三代用户出口型。让我们来看看如何实现的细节。

一个,用户出口的类型 1,第一代 sap提供了一个空的子程序代码。在这个过程分,用户可以添加自己的代码。为了控制自己的需求。这样的改进是需要改变sap标准代码。演示样本:USEREXIT.. in SAPMV45A 2,第二代 sap提供的是CUSTOMER-FUNCTION,它是通过SMOD和CMOD完毕实现。

3,第三代 sap提供的第三代的用户出口就是BADI,他的调用方式是CALL METHOD (instance),(相关的TCODE是SE18和SE19),你能够通过EXIT_HANDLER这个单词查找BADI。 另外另一种出口叫BTE。在前一个项目里我们做的OPENFI就是用的这个BTE 相关TCODE: FIBF Business Transaction Events (Open FI) 二。用户出口比較 第一代用户出口是form出口  如 FORM USEREXIT_FIELD_MODIFICATION. * CASE SCREEN-GROUP3. *   WHEN '900'. *     IF VBAK-VBTYP NE 'A'. *       SCREEN-ACTIVE = 0. *     ENDIF. * ENDCASE. * CASE SCREEN-NAME. *   WHEN 'VBAK-VBELN'. *     SCREEN-ACTIVE = 0. * ENDCASE. ENDFORM. 找法省略。

SD的用户出口和定价的用户出口等多採用这样的方式。 第二代用户出口多是 call customer-function ‘001’ 这样的方式实现的。

后面我们会具体介绍此方法,此方法是如今SAP系统开发用的最多的一种 第三代用户出口 BADI badi对象的信息存储在SXS_INTER, SXC_EXIT, SXC_CLASS 和SXC_ATTR 这四个表中(參见SECE包),sap程序都会调用cl_exithandler=>get_instance来推断对象是否存在。并返回实例。事实上get_instance就是对上述几个表和他们的视图(V_EXT_IMP 和 V_EXT_ACT)进行查询和搜索。基于这个机理。我查用ST05来监控一个TCODE来跟踪。然后选择查找有关上述几个表和视图的操作,就可获得相关BADI。

在SAP系统中 BADI 相关类的 类图 例如以下: 三,BADI的解释 BADI实现主要通过SE18和SE19实现的,看看例如以下: SE18 ZIF_EX_BADI (Interface) ZCL_EX_BADI (Class) Method() SE19 ZIF_EX_BADI (Interface) ZCL_IM_BADI (Class) 实装Method() 以下能过代码分析 BAdI 机制背后的一些设计问题: 1. 定义指向BAdI interface的Reference DATA: exit_ref TYPE REF TO ZIF_EX_BADI. 2. 获得继承BAdI interface的子类实例 CALL METHOD cl_exithandler=>get_instance     CHANGING         instance = exit_ref. 这里的cl_exithandler=>get_instance方法是一个简化的Abstract Factory. a) 为什么说它是个简化的Abstract Factory呢? 由于CL_EXITHANDLER没有一个抽象的工厂类, 仅仅有一个产品簇, 仅仅完毕单一的创建工作。

b) 为什么cl_exithandler=>get_instance要用工厂模式呢? 在Client代码端看来,通过调用get_instance这种方法就能够得到详细实现类实例。然后调用以下的方法: CALL METHOD exit_ref->CUSTOM_VALIDATION     IMPORTING         param = 'xxx'     EXPORTING         flt_val = 'xxx'. 就调用到实现类中的接口方法了。但通过Debug代码你会发现这个调用返回的是Adapter Class 'ZCL_EX_BADI'而非我们的Impl Class!事实上这就是创建型模式的意义 - 隐藏对象的创建细节. 也就是说当我们调用CUSTOM_VALIDATION时,事实上是调用了ZCL_EX_BADI->CUSTOM_VALIDATION. 四。BADI的实现 A.BADI定义 1.SE18。 2.输入要创建的BADI的名字,点击"Create"。 3.输入BADI的描写叙述性文本,在"Interface"选项卡上输入接口的名字,也能够採用SAP建议的接口的名字。同一时候,BADI类也会被创建。

比如:对于BADI "ZTEST",SAP会建议"ZIF_EX_TEST"作为接口的名字,"ZCL_EX_TEST"作为类的名字。

4.保存BADI。 5.双击接口的名字,会跳转到Class Builder界面。在这里你能够定义接口的方法。

6.保存并激活接口。

B.在应用程序中调用BADI 1.声明一个BADI接口的參考引用变量。 比如:DATA exit_ref TYPE REF TO zif_ex_test. 2.调用类CL_EXITHANDLER的静态方法GET_INSTANCE,将返回一个请求对象的实例。

比如: CALL METHOD CL_EXITHANDLER=>GET_INSTANCE CHANGING instance = exit_ref。

3.如今你能够调用BADI的全部方法了 C.BADI实现 1.SE19。 2.输入BADI实现的名字,点击"Create"。 3.输入BADI定义的名字。

4.输入实现的描写叙述性文本,在"Interface"选项卡上输入实现类的名字。能够採用SAP建议的名字。 比如:"ZIMPTEST",SAP会建议"ZCL_IM_IMPTEST"。 5.保存实现。 6.双击某一方法名会跳转到Class Builder界面,在这里你能够加入代码来重定义接口方法。

7.激活实现 五。查找BADI 本帖隐藏的内容BADI是SAP的第三代用户出口,採用了面向对象的方式。据说在4.6A版本号之后才引入的BADI。 使用st05查找BADI 1)ST05。选择SQL trace、buffer trace。然后activate trace 2)执行TCODE 3)deactivate trace 4)display trace,显示display trace的对话框。在表的栏位上加上? V_EXT_IMP和 V_EXT_ACT 5)查看以IF_EX_开头的字符串,这是interface class 的名字,IF_EX_它的背后BADI。例如IF_EX_EQUI_UPDATE

版权声明:本文博客原创文章。博客,未经同意,不得转载。

SAP ABAP第一,两,三代出口型BADI实现 解释的概念相关推荐

  1. abap 创建出口历程_SAP ABAP第一,两,三代出口型BADI实现 解释的概念

    BADI这是第三代用户出口型.让我们来看看如何实现的细节. 一个,用户出口的类型 1,第一代 sap提供了一个空的子程序代码.在这个过程分,用户可以添加自己的代码.为了控制自己的需求.这样的改进是需要 ...

  2. 【ABAP系列】SAP ABAP 取两个内表的交集 比较两个内表的不同

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP 取两个内表的交 ...

  3. SAP增强实施步骤-三代增强BADI技术

    SAP R/3 4.0之前 ABAP完全是面向过程的语言,面向对象的编程技术是在SAP R/3 4.0后版本中逐渐改造增加进去的,至目前ABAP已基本包含了面向对象的所有技术,所以完全可以说ABAP是 ...

  4. SAP ABAP三代增强点查找

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

  5. SAP ABAP 根据物料工厂查询工作中心(ARBPL)的两种方式

    SAP ABAP 根据物料工厂查询工作中心(ARBPL)的两种方式 引言: 根据物料工厂查询工作中心的两种方式 关键字:SAP ABAP CR_WORKSTATION_READ ARBPL 工作中心 ...

  6. SAP ABAP SteammPunk 蒸汽朋克的最新进展 - 嵌入式蒸汽朋克

    Steampunk is going all-in 什么是 SAP ABAP Steampunk(蒸汽朋克)? Steampunk(又名 SAP BTP ABAP 环境):提供一个 ABAP 平台,它 ...

  7. SAP ABAP和Java里的弱引用(WeakReference)和软引用(SoftReference)

    Jerry前一篇文章 SAP ABAP一组关键字 IS BOUND, IS NOT INITIAL和IS ASSIGNED的用法辨析 介绍了在ABAP里判断引用变量是否包含了一个有效引用的关键字:IS ...

  8. 浅谈Java和SAP ABAP的静态代理和动态代理,以及ABAP面向切面编程的尝试

    文章目录 Java的静态代理 静态代理的优缺点 ABAP的静态代理 Spring AOP的动态代理 JDK动态代理的优缺点 CGLIB动态代理的优缺点 ABAP CGLIB的模拟实现 ABAP Pre ...

  9. SAP ABAP 解析 excel 文件的函数 TEXT_CONVERT_XLS_TO_SAP 单步执行分析

    本文是这篇文章SAP ABAP 处理 Excel 的标准函数 TEXT_CONVERT_XLS_TO_SAP 介绍的后续. 在本地新建一个 excel 文件,内容如下: 使用下面的 ABAP 代码进行 ...

最新文章

  1. CVPR 2020 | 腾讯优图17篇论文入选,含类比学习、人脸识别、物体检测、行人重识别等领域...
  2. 【MySQL】在centos7 纯IPv6环境下,安装mysql5.7
  3. edge浏览器如何把网页放到桌面_最强桌面浏览器
  4. webpack 与 热编译webpack-dev-server
  5. aem 渲染_AEM中的单元测试(大声思考)
  6. 怎么判断一个字符串的最长回文子串是否在头尾_LeetCode 5 迅速判断回文串的Manacher算法...
  7. Ubuntu 服务器设置软件多用户访问
  8. STM32L562开发板开箱记 STM32L562E-DK Discovery kit电路功能分析
  9. Oracle EBS连接数不足
  10. Atitit  发帖机实现(1)-----UsrQBm2008 页面上下文规范
  11. 2019eclipse 中文汉化包 安装教程
  12. 互联网骨干网及国际通用结算介绍
  13. 如何操作电脑压缩包解压文件?干货技巧!电脑压缩包怎样进行文件解压?
  14. 零基础学CocosCreator·第八季-双人对战五子棋
  15. android mixpanel可视化埋点框架解析
  16. NGUI|如何做出用鼠标滚动切换武器的效果
  17. Android系统根目录下的各个文件夹的作用与区别介绍
  18. 计算久期matlab,[MATLAB代码模板]固定收益证券计算
  19. 米卢:梅西是世界最佳 弗格森没有犯错误
  20. vue实现修改用户信息的全过程

热门文章

  1. Hadoop生态圈-Zookeeper的工作原理分析
  2. 使用日程安排自动化测试来更好地管理时间与资源
  3. JavaScript模块
  4. 野心勃勃的NoSQL新贵 MongoDB应用实战(5)
  5. Visual Studio新建的源文件的默认编码
  6. Arduino 实现八段数码管显示练习
  7. Android学习系列(16)--App列表之圆角ListView
  8. 基于Spark的电影推荐系统(电影网站)
  9. 挂载硬盘报错无法挂载、分区只读的解决方法
  10. 浅谈嵌入式软件的未来发展