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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

BADI 入门篇

發布時間:2025/3/20 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 BADI 入门篇 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.1 BADIs
  
  BADI Name
  /KJEPS/BADI2
  Description
  BADI for change visibility of EPS fields
  Dev. Class
  /KJEPS/JD
  
  
  1.1.1 Method SET_SCREEN_COND_VBAP
  Overview:
  Method Name
  SET_SCREEN_COND_VBAP
  Description
  Change field visibility for Sales order item screen
  Function
  Called from PBO module of SAPMV45A 8450 and return EX_SCREEN_VISIBLE
  
  
  Interface:
  Importing Parameters
  Field Name
  Reference
  Description
  Mandatory
  IN_VBAK
  VBAK
  Sales Order Header
  X
  IN_VBAP
  VBAP
  Processing Sales Order Item
  
  
  IN_TRTYP
  TRTYP
  Transaction type
  
  
  IN_XVBAP
  VA_VBAPVB_T
  Document Structure for XVBAP/YVBAP (Sales order item)
  
  
  IN_XVBEP
  VA_VBEPVB_T
  Structure of Document for XVBEP/YVBEP (schedule line)
  
  
  IN_XVBKD
  VA_VBKDVB_T
  Reference structure for XVBKD/YVBKD (business data)
  
  
  IN_XVBPA
  VA_VBPAVB_T
  (partner function)
  
  
  
  Changing Parameters
  Field Name
  Reference
  Description
  Mandatory
  EX_SCREEN_VISIBLE
  C
  ‘X’ = EPS screen is visible
  Space = EPS screen is not visible
  
  
  以上一個是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'.
  
  
  *Check the BADI whether was implemented.
  *檢查BADI是否被用戶給實現過了,傳入BADI的定義名字和接口類名
   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, 然后看上面的系統中的程序. 執行到
  這里的時候會判斷這個變量是否被用戶的程序給修改了,如果修改了就不顯示SUBSCREEN了.
  *******************************************************************
   if ldf_screen_visible = space.
   loop at screen.
   screen-active = '0'.
   modify screen.
   endloop.
   endif.
  *******************************************************************

總結

以上是生活随笔為你收集整理的BADI 入门篇的全部內容,希望文章能夠幫你解決所遇到的問題。

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