【增强】 使用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

methodparameter:

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.

136

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再查看效果

将我们刚activeimplementation进行deActive

162

再执行我们上面的程序:

172

5.总结

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

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

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

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

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

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

182

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


发表于: 星期一, 11月 22nd, 2010 12:42 下午
归类于:ABAP , SAP ABAP
Trackback: http://scnblogs.techweb.com.cn/tcsapbw/archives/652.html/trackback
阅读次数:



0 votes, average: 0.00 out of 50 votes, average: 0.00 out of 50 votes, average: 0.00 out of 50 votes, average: 0.00 out of 50 votes, average: 0.00 out of 5 (0 votes, average: 0.00 out of 5)
You need to be a registered member to rate this post.
Loading ... Loading ...

我要评论:

您必须登录后才可以进行评论。 还没有scnblogs的博客?现在就注册吧