日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

BADI的层次分析以及BADI里面的每个块的理解 看完你就懂!

發布時間:2023/12/14 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 BADI的层次分析以及BADI里面的每个块的理解 看完你就懂! 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在講本文之前有一個要認清的概念就是,我們建立的BADI imp,到底是怎么發揮增強的作用的:


badi本身是一個接口,可以創建很多IMP,但是這些IMP都怎么起作用呢?

(有兩種情況,第一是例如一個主數據的BADI,當你創建了IMP,當修改主數據的時候,就會走這些IMP的代碼。另外一個是,例如自己建一個Z的BADI,然后使用方法就是通過在自己的程序里面調用這個object,并且調用具體的method)


1、首先想知道例如在某個標準程序里面要做增強,我應該使用那些BADI,可以嘗試這樣:

? ? ? badi對象的信息存儲在SXS_INTER,SXC_EXIT, SXC_CLASSSXC_ATTR?這四個表中,ST05來監控一個TCODE來跟蹤,然后選擇查找有關上述幾個表和視圖的操作,就可獲得相關BADI。


2、可以通過一個程序取查找某些t-code會使用到哪些增強和出口的,在本博客的另外一個文章(分享一個查找t-code和程序的出口)可以看到。當然這個找到某些BADI增強之后,或許還是要通過設置斷點或者是方法1去確定那個才是最終的方案。


3、SE24查看CL_EXITHANDLER類的GET_INSTANCE方法,在 “CALL METHOD ?cl_exithandler=>get_class_name_by_interface”設置斷點,運行事務,DEBUG查看EXIT_NAME的值。


4、一個通過SE38在程序中搜索關鍵字CL_EXITHANDLER,查找程序使用BADI的方法。

http://blog.csdn.net/wbin9752/article/details/7951390


? ? ? 然后對這些BADI建立了相應的IMP之后,當你運行這些標準的t-code之后就會跳入這些IMP里面的method,實現增強。


本文章講述的是本人在初次接觸BADI的一個學習和了解的過程,并不去講述如何去創建這個BADI(這個網上也有很多),主要是為了幫助初學者如何去理解和簡單實用BADI。


首先講到的是BADI的層次概念:

BADI: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? UDM_BASIS_RULE
BADI interface: ? ? ? ? ? ? ? IF_EX_UDM_BASIS_RULE ?
badi interface class: ? ? ? ?CL_EX_UDM_BASIS_RULE
IMP: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ZUDM_BR00000003 ? ? ?
IMP class: ? ? ? ? ? ? ? ? ? ? ? ZCL_IM_UDM_BR00000003


1、BADI ? ? ? ? ? ? ? ? ?SE18進入之后:



輸入BADI的名稱之后進入的就是這個BADI的內容界面,里面有interface,interface怎么理解呢,其實就好比是這個BADI的一個框架,定義好這個BADI有哪些接口(method)



但是這個interface的接口具體有哪些輸入輸出變量或者是功能代碼是怎樣的就通過interface class實現: ?SE24輸入interface class的名稱(通常interface的class的名稱都是把interface名稱的前面的IF改成CL即可)



這個interface的class有了之后,就可以在程序里面實現增強了,怎么實現:

DATA: ? ?IT_BADI ? ??TYPE?REF?TO ??IF_EX_UDM_BASIS_RULE. ? ? ? ?(這里需要指向這個interface)


call?method?cl_exithandler=>get_instance ? ? ? ? ? ? ? ? ? ? ? (此函數是必須要有的,只要是要call ?BADI里面的method,都需要這個method)
?????changing
????????instance?=?IT_BADI.

CALL?METHOD?IT_BADI->EVALUATE ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(然后這里就直接調用里面的method了)
???EXPORTING
?????I_LOG?=?IT_LOG
?????IT_SELECT_OPTIONS??=?IT_SE
?????I_BUSINESS_PARTNER?=?IT_BUSSINESS
?????FLT_VAL?=?IT_FLT_VAL.


這些都是標準的,那我可不可以不創建BADI,然后我需要的只是這個interface而已,我自己創建一個class然后


在interface的欄目下輸入參考的interface,然后再method里面就有了!然后具體的使用方法也和上面的一樣,先定義一個interface變量,然后就call ?method就行了。


2、BADI的imp和imp class

已經知道BADI,去創建BADI的imp和imp class : ? ?SE19進入,然后創建



創建之后,里面可以自動帶出BADI的interface到imp里面,并且會自動創建imp class:



創建好了imp和imp class之后怎么在程序里面實現增強呢:

?DATA: ? ? ?IT_BADI?TYPE?REF?TO?ZCL_IM_UDM_BR00000003. ? ??(這里需要指向這個imp class


call?method?cl_exithandler=>get_instance
?????changing
????????instance?=?IT_BADI.

CALL?METHOD?IT_BADI->IF_EX_UDM_BASIS_RULE~EVALUATE ? ? ? ? ? ? ? ? (注意這里的method是這個,而不是直接的EVALUATE)
???EXPORTING
?????I_LOG?=?IT_LOG
?????IT_SELECT_OPTIONS??=?IT_SE
?????I_BUSINESS_PARTNER?=?IT_BUSSINESS
?????FLT_VAL?=?IT_FLT_VAL.



以上就是正常順序的創建BADI增強的,如果我們在程序中看到有call method,我們也可以通過這里去查找interface,BADI,等:

我們雙擊method的名字,可以查看到這個interface:



然后通過interface的名字去表SXS_INTER取查找對應的BADI,如果表里面沒有的話,就可以到SE24里面查找interface對應的class,說明這個interface沒有對應的BADI,是直接通過class來實現的。



如果知道了BADI IMP class,則可以通過SE24去反過來查找BADI 和BADI imp


以上就是剛接觸BADI時的個人理解,如有錯,歡迎指出,本人也會不斷的學習然后去更新文章!謝謝!

總結

以上是生活随笔為你收集整理的BADI的层次分析以及BADI里面的每个块的理解 看完你就懂!的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。