• BADI OVERVIEW


    什么是BADI,如何从SAP中查找BADI?

     Business Add-Ins are a new SAP enhancement technique based on ABAP Objects. They can be inserted into the SAP System to accommodate user requirements too specific to be included in the standard delivery. Since specific industries often require special functions, SAP allows you to predefine these points in your software.

    SAP预定义了一些Interface,客户可以自己定义实现Interface的Class进行客户化,在标准程序中会使用调用客户自定义Class的Instance,在获取Instance的过程使用了工厂模式,因此获取过程对用户是未知的。不过BADI也有一些局限性,就是有哪些Interface是固定死的,有的时候会发现需要Mix客户化代码的时候找不到Interface,什么时候SAP的OO里面直接支持AOP就好了。

    如何从SAP中查找BADI

    BADI作为SAP的第三代用户出口,他的应用也越来越广泛,但如何找到合适的badi是许多abap程序员的困惑。我这里就介绍一下我个人的应用的经验,供大家参考。

    什么是BADI,如何从SAP中查找BADI?

    1、badi对象的信息存储在SXS_INTER, SXC_EXIT, SXC_CLASS SXC_ATTR 这四个表中(参见SECE包);

    2、sap程序都会调用cl_exithandler=>get_instance来判断对象是否存在,并返回实例;其实get_instance就是对上述几个表和他们的视图V_EXT_IMP V_EXT_ACT进行查询和搜索。

    3、基于这个机理,我查用ST05来监控一个TCODE来跟踪,然后选择查找有关上述几个表和视图的操作,就可获得相关BADI。

    示例:用LE_SHP_DELIVERY_PROC控制跨月Cancel
    METHOD if_ex_le_shp_delivery_proc~change_delivery_header .
      DATA : thismonth(2) TYPE c.
      DATA : wa_likp TYPE LINE OF shp_likp_t.
      DATA : wa_log TYPE LINE OF shp_badi_error_log_t.
      CLEAR ct_log[],thismonth.
      thismonth = sy-datum+4(2). "----->這一個月的月份
      LOOP AT it_xlikp INTO wa_likp.
        CHECK is_v50agl-warenausg_storno ='X'."--->代表作GI cancel
        IF wa_likp-wadat_ist+4(2) < thismonth.
          wa_log-vbeln = cs_likp-vbeln.
          wa_log-msgty = 'E'. "錯誤訊息
          wa_log-msgid = 'ZDN_ERROR'. "這一個class要自己建
          wa_log-msgno = '001'.
          APPEND wa_log TO ct_log. "Error log寫入
        ENDIF.
      ENDLOOP.
    ENDMETHOD. "IF_EX_LE_SHP_DELIVERY_PROC~CHANGE_DELIVERY_HEADER

    TCODE:

    SE18
    SE19

    BADI的实现步骤。
    A.BADI定义
    1.SE18。
    2.输入要创建的BADI的名字,点击"Create"。
    3.输入BADI的描述性文本,在"Interface"选项卡上输入接口的名字,也可以采用SAP建议的接口的名字。同时,BADI类也会被创建。
    例如:对于BADI "ZTEST",SAP会建议"ZIF_EX_TEST"作为接口的名字,"ZCL_EX_TEST"作为类的名字。
    4.保存BADI。
    5.双击接口的名字,会跳转到Class Builder界面,在这里你可以定义接口的方法。
    6.保存并激活接口。
    B.在应用程序中调用BADI
    1.声明一个BADI接口的参考引用变量。
    例如:DATA exit_ref TYPE REF TO zif_ex_test.
    2.调用类CL_EXITHANDLER的静态方法GET_INSTANCE,将返回一个请求对象的实例。
    例如:
    CALL METHOD CL_EXITHANDLER=>GET_INSTANCE
    CHANGING instance = exit_ref。
    3.现在你可以调用BADI的所有方法了
    C.BADI实现
    1.SE19。
    2.输入BADI实现的名字,点击"Create"。
    3.输入BADI定义的名字。
    4.输入实现的描述性文本,在"Interface"选项卡上输入实现类的名字。可以采用SAP建议的名字。
    例如:"ZIMPTEST",SAP会建议"ZCL_IM_IMPTEST"。
    5.保存实现。
    6.双击某一方法名会跳转到Class Builder界面,在这里你可以添加代码来重定义接口方法。
    7.激活实现

    SAP BADI应用

    1.定义BADI
             1) T-Code:  SE18     Business Add-In Define.

       2) 输入要创建的BADI的名字,点击"Create"。

       3) 输入BADI的描述性文本,在"Interface"选项卡上输入接口的名字,也可以采用SAP建议的接口的名字。同时,BADI类也        会被创建。

         例如:对于BADI "ZTEST",SAP会建议"ZIF_EX_TEST"作为接口的名字,"ZCL_EX_TEST"作为类的名字。

       4) 保存BADI。

       5) 双击接口的名字,会跳转到Class Builder界面,在这里你可以定义接口的方法。

       6) 保存并激活接口。

    2.实现BADI
             1) T-Code:  SE19     Business Add-In Implementation
             2) 输入BADI实现的名字,点击"Create"。
             3) 输入BADI定义的名字。
             4) 输入实现的描述性文本,在"Interface"选项卡上输入实现类的名字。可以采用SAP建议的名字。

        例如:"ZIMPTEST",SAP会建议"ZCL_IM_IMPTEST"。

       5) 保存实现。

       6) 双击某一方法名会跳转到Class Builder界面,在这里你可以添加代码来重定义接口方法。

       7) 激活实现。

    3. 程序中调用BADI

    1) 先用类型参照引用出要调用的BADI
          2) 实例化BADI
          3) 实例化后就可以任意调用BADI 中的方法了。

    REPORT  ZZW_BAPI_01                                                 . 
    data exit type ref to ZIF_EX_ZW_BD_TEST. 
    call method cl_exithandler=>get_instance
         changing
            instance = exit. 
    call method exit->Z_ZW_01. 
    ==》

    badi 小记
    BADI作为SAP的第三代用户出口,他的应用也越来越广泛,但如何找到合适的badi是许多abap程序员的困惑。我这里就介绍一下我个人的应用的经验,供大家参考。

    1、badi对象的信息存储在SXS_INTER, SXC_EXIT, SXC_CLASS 和SXC_ATTR 这四个表中(参见SECE包);

    2、sap程序都会调用cl_exithandler=>get_instance来判断对象是否存在,并返回实例;其实get_instance就是对上述几个表和他们的视图(V_EXT_IMP 和 V_EXT_ACT)进行查询和搜索。

    3、基于这个机理,我查用ST05来监控一个TCODE来跟踪,然后选择查找有关上述几个表和视图的操作,就可获得相关BADI。

    4、se18 查找接口,se19 实现接口就可以实现用户增强。
    示例:用LE_SHP_DELIVERY_PROC控制跨月Cancel

    METHOD IF_EX_LE_SHP_DELIVERY_PROC~CHANGE_DELIVERY_HEADER .
    data : thismonth(2) type c.
    data : wa_likp type line of SHP_LIKP_T.
    data : wa_log type line of SHP_BADI_ERROR_LOG_T.
    clear ct_log[],thismonth.
    thismonth = sy-datum+4(2). "----->这一个月的月份
    loop at it_xlikp into wa_likp.
    check IS_V50AGL-WARENAUSG_STORNO ='X'."--->代表作GI cancel
    if wa_likp-WADAT_IST+4(2) < thismonth.
    wa_log-VBELN = cs_likp-vbeln.
    wa_log-MSGTY = 'E'. "错误信息
    wa_log-MSGID = 'ZDN_ERROR'. "这一个class要自己建
    wa_log-MSGNO = '001'.
    append wa_log to ct_log. "Error log写入
    endif.
    endloop.
    ENDMETHOD.
     
    SD相关的BADI 收藏 
    HU_BADI Business Add-Ins for Handling Units 
    LE_SHP_BADI Business Add-Ins in Shipping 
    LE_TRA_BADI Business Add-Ins in Transportation 
    LE_WM_BADI Business Add-Ins in Warehouse Management 
    MRM_BADI Business Add-Ins in Invoice Verification 
    PL_PACKINST_BADI Business Add-In in the Packing Instruction 
    S_BADI_FORMULA_BUILDER BADI Implementation with Formula Builder 
    VA_BADI BADIs R/3 Sales 
    VF_BADI BAdIs for Billing 
     
    BADI for VA01:
    ALV_SWITCH_GRID_LIST ALV: Customer Exit for Switch Grid to Li
    BADI_ISPS_GRANT BADI for IS-PS Grant Management
    BADI_SD_DMC_ORDER BADI for Dispute and Collection Manageme
    BADI_SD_DPBP Extensions in SD for DP90 with Billing P
    BADI_SD_DSD_ORDER BADI for Direct Store Delivery
    BADI_SD_MENUE_FM Menu Enhancement for Fund Management (FM
    BADI_SD_MENUE_TPM Menu Enhancement for TPM Retrofit
    BADI_SD_SALES General Enhancements for Sales Order Pro
    BADI_SD_SALES_BASIC Enhancements for Sales Order Processing
    BADI_SD_SALES_ITEM Enhancements for Sales Order Processing
    BADI_SD_TAB_CUST_H Tab Page for Own Details - Header Detail
    BADI_SD_TAB_CUST_I Tab Page for Own Data - Item Detail Orde
    BADI_SD_TO_FM Commitments Management in SD for Funds M
    EHS_DG_002 EHS: Template Material Processing - Inte
    EHS_PS_002 EHS: Call Report Information System from
    EHS_PS_002 EHS: Call Report Information System from
    EHS_PS_002 EHS: Call Report Information System from
    SD_COND_ACCESS_A Access in Pricing (replacement)
    SD_KONV_SELECT Addition to Data When Reading KONV
    SD_PRICING_COPY Enhancement for Copying Document Conditi
    VBX_SO_SEL_CRITERIA Batch Selection Criteria in Sales Order
     
    BADi for VA02
    ALV_SWITCH_GRID_LIST ALV: Customer Exit for Switch Grid to Li
    BADI_ISPS_GRANT BADI for IS-PS Grant Management
    BADI_SD_DMC_ORDER BADI for Dispute and Collection Manageme
    BADI_SD_DPBP Extensions in SD for DP90 with Billing P
    BADI_SD_DSD_ORDER BADI for Direct Store Delivery
    BADI_SD_MENUE_FM Menu Enhancement for Fund Management (FM
    BADI_SD_MENUE_TPM Menu Enhancement for TPM Retrofit
    BADI_SD_SALES General Enhancements for Sales Order Pro
    BADI_SD_SALES_BASIC Enhancements for Sales Order Processing
    BADI_SD_SALES_ITEM Enhancements for Sales Order Processing
    BADI_SD_TAB_CUST_H Tab Page for Own Details - Header Detail
    BADI_SD_TAB_CUST_I Tab Page for Own Data - Item Detail Orde
    BADI_SD_TO_FM Commitments Management in SD for Funds M
    EHS_DG_002 EHS: Template Material Processing - Inte
    EHS_PS_002 EHS: Call Report Information System from
    EHS_PS_002 EHS: Call Report Information System from
    EHS_PS_002 EHS: Call Report Information System from
    SD_COND_ACCESS_A Access in Pricing (replacement)
    SD_KONV_SELECT Addition to Data When Reading KONV
    SD_PRICING_COPY Enhancement for Copying Document Conditi
    VBX_SO_SEL_CRITERIA Batch Selection Criteria in Sales Order
     

     


  • 相关阅读:
    有向图的十字链表存储表示 以及相关操作(包括增加弧、删除弧、删除顶点等)
    数据结构学习笔记—图---图的连通性、顶点间的路径
    解决Vue父路由进入子路由选中样式消失的问题
    解决vue页面刷新,数据丢失
    解决PHP接收不到axios的POST的传参方式
    rem理解及应用【笔记】
    JS基础(学习笔记)
    css中的小技巧
    css中文单行、多行超出省略号和英文换行(学习笔记)
    关于JS(原生js+jq)中获取、设置或者删除元素属性和获取元素值
  • 原文地址:https://www.cnblogs.com/Nirvanacafe/p/4422440.html
Copyright © 2020-2023  润新知