【增强】 使用BADI(Create BADI) (转载)

【增强】 使用BADI(Create BADI)

 

在前一篇(【增强】使用BADI(Implement BADI))中,记录了使用现存的BADI。这一篇将记录通过我们自己创建一个BADI并在我们自己的业务中去实现它。不同于Exit,因为BADI的背后是OO的原理,所以关于ABAP OO请查阅SAP专门关于OO的BC401.

1.创建BADI

Tcode: SE18 (BADI Builder)

 135

 

Menu: UtilitiesàCreate Classic BADI

(注:不能通过画面上的create来创建,除非使用一个enhancement Spot)

 229

 

进入:

 

 322

在Interface处,我们双击进入interface,我们定义一个Method:

 415

 

定义method:

 513

 

该method的parameter:

 

 611

然后我们激活该interface.

我们的BADI现在变成:

 78

 

我们这里不再去实现Fcode(Menu exit)与Subscreen(Screen Exit).

保存该BADI.

 

2.实现BADI

Tcode : SE19 (BADI Implementation)

 85

 

Create Implementation:

 

 92

进入实现:

 

 101

在interface处:

 

 1111

我们进入该method并进行coding如下:

 1210

 

最后,激活我们的implementation.

 1210

 

3.程序中使用自己创建的BADI

我们要使用的数据:

 142

SE38中我们coding如下:

*&———————————————————————*
*& Report  ZTEST_BADI
*&
*&———————————————————————*
*& Test  Create BADI and Implement it
*&———————————————————————*

REPORT ZTEST_BADI.

* for BADI,must define one instance variable for BADI interface
DATA:
lo_badi TYPE REF TO ZIF_EX_TEST_BADI_EDISON, “this name can get in BADI definition
lw_output type string.

* define Type
types:
begin of typ_SCARR,
CARRID type SCARR-CARRID,
CARRNAME type SCARR-CARRNAME,
CURRCODE type SCARR-CURRCODE,
END OF typ_SCARR.
* define data
DATA:
ls_scarr type typ_scarr,
lt_scarr type TABLE OF typ_scarr.

START-OF-SELECTION.

*1. get the data from DB
SELECT carrid
carrname
currcode
FROM scarr
into TABLE lt_scarr.

*2. get the BADI Insatance
Call METHOD cl_exithandler=>get_instance
CHANGING
instance = lo_badi.

*3. output the data
LOOP AT lt_scarr into ls_scarr.

 

lw_output = ls_scarr-CARRID.
**3-1. if BADI has active instance, then we will modify the output-content
CALL METHOD lo_badi->CHANGE_ITEM
EXPORTING
IM_CARRID  = ls_scarr-CARRID
IMPORTING
EM_DISPLAY = lw_output.

WRITE:/10 lw_output,
60 ls_scarr-CARRNAME,
100 ls_scarr-CURRCODE.

ENDLOOP.

最后结果:

 152

 

4.DeActive创建的BADI再查看效果

将我们刚active的implementation进行deActive

 

 162

再执行我们上面的程序:

 

 172

5.总结

1.SE18中创建BADI.需要定义好interface,这个interface name供后面program中调用。如果该BADI已经被implementation了,再修改了它的definition,需要regenerate一下。

2.SE19实现BADI,就是对interface的method进行实现。并激活与否,直接影响BADI是否起作用。

3.在其它程序中使用BADI。以下很重要:

1. CL_EXITHANDLER=》get_instance:用来取得BADI interface

2.再通过该interface的instance就可以随意地调用它的method了。

4.另外,在SE18中创建BADI的两个很重要的参数:

 182

(更多深入知识请查阅SAP相关资料文档)

 

转自:http://scnblogs.techweb.com.cn/tcsapbw/archives/652.html

 

posted @ 2013-05-06 11:00  VerySky  阅读(938)  评论(0)    收藏  举报