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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

BADI 第三代增强 BADI 和 NEW BADI

發布時間:2023/12/14 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 BADI 第三代增强 BADI 和 NEW BADI 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

BADI:Bussiness Add-In。

第三代增強:源代碼是以接口的形式發布,通過調用接口方法的方式實現。用戶增強是通過實現一個或多個基于這個接口的類,對同一個增強可能會出現不同的源代碼,這些源碼是通過過濾器實現的。

分為Classic BADI和New BADI,

傳統方式的的BADI的調用是使用cl_exithandler=>get_instance,

新BADI的調用方式是get badi / call badi

創建ClassIc BADI?步驟:
1、SE19輸入BADI名字,比如MB_MIGO_BADI,單擊按鈕“創建實現”,在彈出的對話框中輸入BADI實現的名字和描述,比如ZMB_MB_MIGO_BADI,(自動)為BADI實現指定一個接口(IF_EX+BADI名);
2、創建一個實施類來實現這個接口(ZCL_IM_BADI名);
3、在實施類的相應方法中編寫代碼實現業務邏輯。

NEW BADI的創建步驟:

SE19?輸入增強點的名字,比如MB_MIGO_BADI,單擊按鈕“創建實現”,在彈出的對話框中輸入增強實現的名字和描述,比如ZMB_MB_MIGO_BADI_NEW,(自動)為BADI實現指定一個接口(IF_EX+BADI名);

2、創建一個實施類來實現這個接口(ZCL_IM_BADI名);
3、在實施類的相應方法中編寫代碼實現業務邏輯。

目前Classic BADI會自動遷移至NEW BADI中:

1、SE19輸入BADI名字,比如MB_MIGO_BADI,單擊按鈕“創建實現”,在彈出的對話框中輸入BADI實現的名字和描述,比如ZMB_MB_MIGO_BADI,(自動)為BADI實現指定一個接口(IF_EX+BADI名);
2、創建一個實施類來實現這個接口,ZCL_IM_BADI名;
3、保存,提示已移植BADI實現,回車,在彈出的對話框中,單擊創建按鈕,創建NEW BADI(增強實現),輸入增強實現的名字和描述,比如ZMB_MIGO_BADI_NEW;
4、保存激活NEW BADI;
5、刪除剛創建的BADI實現;
6、在NEW BADI(增強實現)中的執行類的相應方法中寫代碼實業務邏輯。

上圖表示Classic BADI??ZMB_MIGO_BADI?會自動的轉化為 NEW BADI??ZMB_MIGO_BADI_SPOT

并且在實際調用過程中,二者都是用的new badi的調用語法,原因應該是這個BADI正好是存在一個enhancement spot。

MIGO中的另一個增強BADI:MB_DOCUMENT_BADI?好像不存在enhancement spot,它就不存在NEW BADI

Enhancement spot 是BADI的容器,在容器中定義我們自己的多個BADI,

  • 創建 emhancement spot
  • 創建BADI (multiple use 多次使用,single user 只能有一個實現類,如果在SE18中創建了多個實現類或者多個enhancement implementation需要通過創建過濾器來解決,同一enhancement 不同的badi class之間可以通過過濾器或者default implementation和runtime behavior控制)
  • 定義BADI接口 ,創建method
  • 創建Enhancement的實例( implementation ),同一個badi可以建立多個實例class,但是需要打包在一起,但是他們都屬于同一enhancement Implementation(一個enhancement implementation 可以有多個BADI的實例,但是起作用的是只有一個,如果想實現JAVA中的多態,需要創建多個enhancement implementation )
  • BADI和NEW BADI的區別:
    1、CLASS BADI用call method獲取BADI,CALL METHOD CL_EXITHANDLER=>GET_INST CHANGING INSTANCE = badi_name
    NEW BADI不能用call method獲取BADI,要用GET BADI badi_name;
    2、CLASS BADI用CALL METHOD調用BADI中的方法 CALL METHOD badi_name->method EXPORTING LGORT = wa_lgort;
    NEW BADI用CALL BADI調用BADI中的方法 CALL BADI badi_name->method EXPORTING LGORT = wa_lgort;
    3、NEW BADI中新增了ENHANCEMENT SPOT增強點、ENHANCEMENT SECTION以及隱式增強點的概念。

    創建不同的BADI的實現以及對應的實現類 BADI Implementation 和 implementing class的關系是一對一的

    怎么查找已經實施BADI:找到該程序所在的Package,運行程序SNIF,輸入package可得到已經實現的自定義增強

    尋找新BADI,進入debug模式,然后再增加break/watchpoints新增動態斷點( GET BADI),變量名就是SE18中的BADI,然后可以找到增強實現。

    總結

    以上是生活随笔為你收集整理的BADI 第三代增强 BADI 和 NEW BADI的全部內容,希望文章能夠幫你解決所遇到的問題。

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