查看文章 |
1.1 BADIs
1.1.1 Method SET_SCREEN_COND_VBAPOverview:
Interface: Importing Parameters
Changing Parameters
以上一个是BADI的定义, 那么什么是BADI呢, 说土点就是现在你定义个接口类,但是这个接口 类有一些方法,但是这些方法都是空的,这些方法也有都自己的IMPORTING ,EXPORTING, CHANING参数.但是这些方法没有被实现, 而你却还要在自己当前写的程序中去调用这个 没有被实现的方法, 这里就出现了一堆问题,
为什么要调用它? 为什么这个BADI是空的? 为什么要做这样的一个空的东西? 下面将回答这些问题, 因为比较偷懒所以没找到比较好的例子, 以下是一个SAP的业务场景: SALES ORDER的ITEM数据行的DETAIL信息, SAP系统给客户留了一个BADI, 这个 BADI被系统的标准程序调用过, 显示一个SUBSCREEN, 里面包含一些信息, 如下:
如果某个用户实施了SAP的产品,不希望出现这个SUBSCREEN的话, 客户想把这个屏幕给隐 藏掉, 所以给客户预留了一个BADI的DEFINITION. 也就是最上面的那个表. 使用SE18可以看到这个定义. 这三个方法在标准的程序中是怎么被调用的. 以下是系统标准程序 *Define class load class cl_exithandler definition load. *Define the Sales Order Control Table instance data: lds_soctrl type /kjeps/soctrl, ldf_screen_visible(1) type C value space, ldf_pre_existing type c, exit type ref to /KJEPS/IF_EX_BADI2, ldf_badi_name type exit_def value '/KJEPS/BADI2'. *Chck the BADI whether was implemented. CALL METHOD CL_EXITHANDLER=>GET_INSTANCE EXPORTING EXIT_NAME = ldf_badi_name NULL_INSTANCE_ACCEPTED = space IMPORTING ACT_IMP_EXISTING = ldf_pre_existing CHANGING INSTANCE = exit. *IF the BADI has implemented, and then call corresponding method. *如果这个BADI被用户实现了,下面的这个参数会等于’X’ *如果实现了,就调用客户实现的方法. if ldf_pre_existing = gcf_on. CALL METHOD EXIT->SET_SCREEN_COND_VBAP EXPORTING IN_VBAK = vbak IN_VBAP = vbap IN_TRTYP = t180-trtyp IN_XVBAP = xvbap[] IN_XVBEP = xvbep[] IN_XVBKD = xvbkd[] IN_XVBPA = xvbpa[] CHANGING EX_SCREEN_VISIBLE = ldf_screen_visible. endif. if ldf_screen_visible = space. loop at screen. screen-active = '0'. modify screen. endloop. endif.
那么这里客户如何是实现这个BADI的DEFINITION呢,使用SE19
其中的SET_SCREEN_COND_VBAP被实现了,把SUBSCREEN的显示的一个变量清除了. 这就表示,用户不想看见那个显示数据的SUBSCREEN, 然后看上面的系统中的程序. 执行到 loop at screen. screen-active = '0'. modify screen. endloop. endif. |



