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

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

  1. abap 创建出口历程_SAP abap 需找出口(BADI)的几种方法

    现在给出一些比较简单的方法 首先,大家要知道,一个程序的出口不会太多,需找出口,很多的时候都是在尝试 第二,方法:首先会给出事务码,然后通过SE93找出对应的程序Y 第三,se16里面,找到MODSA ...

  2. SAP ABAP第一,两,三代出口型BADI实现 解释的概念

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

  3. abap 创建出口历程_走进SAP ERP的发展探索历程

    原标题:走进SAP ERP的发展探索历程 了解过ERP的人一定知道行业巨头SAP,知道TA强,但是TA到底有多强?为什么这么强?让我们一探究竟. SAP诞生: 1972年,5位IBM德国分公司的软件工 ...

  4. abap 转换成字符串_SAP ABAP 处理字符串串串串串串串串(详细)

    关于ABAP中处理字符串的方法,非常详细,学习过程中总结一下分享给大家,,, ABAP/4 提供多个处理类型 C 即字符串 的数据对象的关键字. 处理字符串 的方法有: 1.拆分字符串split 2. ...

  5. abap 转换成字符串_SAP ABAP转换特殊字符乱码

    问题的起因是通过txt使用ABAP向SAP导数时,某些文字会转换为乱码. 嫌长不看版:codepage使用8402 有问题的文字为下表中未画删除线的文字: GBK举例表 来自:GBK编码 FE 0 1 ...

  6. abap开发注释快捷键_SAP ABAP 开发快捷键

    快速调整字体大小  Ctrl + 鼠标滚轮 剪切一行   Ctrl + Shift + X 删除一行   Ctrl + Shift + L 复制一行   Ctrl + Shift + T 转成小写  ...

  7. 如何创建最简单的 ABAP 数据库表,以及编码从数据库表中读取数据 (上) 试读版

    ABAP 标准培训教程 BC400 学习笔记之一:ABAP 服务器的架构和一个典型的 ABAP 程序结构介绍 ABAP 标准培训教程 BC400 学习笔记之二:Cross-client 和 Clien ...

  8. 如何创建最简单的 ABAP 数据库表,以及编码从数据库表中读取数据 (下)

    在本文的前续篇章:如何创建最简单的 ABAP 数据库表,以及编码从数据库表中读取数据 (上) 我们已经在系统里创建了两张数据库表 ZPERSON 和 ZMYORDERS, 并插入了对应的记录: 文章的 ...

  9. ABAP 7.53 中的ABAP SQL(原Open SQL)新特性

    S/4 HANA 1809 已经在上月发布,随之而来的是ABAP 7.53. 本文是更新文档中ABAP SQL的部分的翻译. 本次更新的内容较多,主要内容包括:Open SQL更名为ABAP SQL: ...

最新文章

  1. 解决THINKPHP 支付宝接口异步notify 无效可能的问题。
  2. 【iCore2双核心板】SRAM 读写实验(基于Verilog语言)
  3. SpringMvc 集成 shiro 实现权限角色管理-maven
  4. 用android LinearLayout和RelativeLayout实现精确布局(转)
  5. matlab 倒数第二个位置_MATLAB中运行以下程序后倒数第二部分画图程序要怎么改??、、、...
  6. 关于Django中JsonResponse返回中文字典编码错误的解决方案
  7. 被阿里P8面了两个小时,技术、业务有来有回......
  8. 中金:基金投顾试点扩容,买方时代已至
  9. java课程设计 扫雷_java扫雷游戏课程设计报告
  10. 怎样在中国消灭IE6浏览器
  11. 什么是CGCS2000坐标系
  12. 回归预测 | MATLAB实现Robust-ELM鲁棒极限学习机多输入单输出
  13. 软件的第三方CNAS测试的目的和意义以及测试内容和流程
  14. 玩转console.log 如何在console.log里面插入图片
  15. JavaScript核心知识总结(下)
  16. Fiddler抓包学习笔记
  17. 润乾报表制作一张报表的步骤
  18. 手机怎么修改照片大小尺寸?这两种方法轻松解决
  19. STM32F103的DAC功能实现音频输出
  20. nids与防火墙联动linux,nids与防火墙联动(NIDS and firewall linkage).doc

热门文章

  1. 【翻译】Sencha Touch 2入门:创建一个实用的天气应用程序之二
  2. javascript实现下拉条联动_JavaScript gt;gt;gt; 003
  3. edm邮件直投_EDM邮件直投专家
  4. sql依据单个字段去重_小白学习笔记,测试工程师必备SQL语句整理
  5. 浙大与北大计算机考研分数线,34所985大学考研分数线全部出炉,清华大学北大浙大等都接收调剂...
  6. 64位树莓派运行linux,树莓派3B+安装64位debian GUN/Linux系统
  7. linux 定时器_通过linux源码分析nodejs的keep-alive
  8. arp协议属于哪一层_网络工程师(3):详解ARP协议
  9. 织梦服务器怎么修改,织梦dedecms更换服务器搬家教程
  10. php 纯文本输出_关于PHP的语法介绍,新手必看