资讯详情

使用 ABAP 代码创建 SE18 里的 BAdI 增强实现

METHOD create_badi_impl.    DATA: lo_enh_impl TYPE REF TO if_enh_tool,         lo_badi_impl_tool TYPE REF TO cl_enh_tool_badi_impl,          lt_existing_badi_impls TYPE enh_badi_impl_data_it,          ls_badi_impl TYPE enh_badi_impl_data,         ls_filter_value TYPE enh_badiimpl_filter_value,         ls_filter_impl TYPE enh_badi_filter_impl,         ls_filter_root TYPE enh_badiimpl_filter_root,         ls_filter_id TYPE enh_badiimpl_filter_id,          lv_natual_number TYPE int4,          lx_enh_root TYPE REF TO cx_enh_root.    TRY. * Try to find whether the enhancement implementation exists.       lo_enh_impl = cl_enh_factory=>get_enhancement(           lock                   = abap_true "Must lock it otherwise it cannot be deleted later *          lock_4_activate        =           enhancement_id         = iv_enh_impl_name *        ddic_enh               = *        virtual_subobject      = *        before_export          = *        rfcdestination         = *        suppress_lang_dialog   = *        repairmode             = 'U' *        upgrade_mode           = *        run_dark               = *        cwb_handling           = ' ' *        is_xversionable_object = *        versno                 = *        bypassing_buffer       = *        find_version           = *        find_version_date      = *        find_version_time      = *        log_srcsystem          = *        logid                  = *        after_import           = *        i_devclass             = *        i_trkorr               = *        suppress_repair_popup  = *        request_language       = SY-LANGU *        fallback_masterlang    =              ).  *   If the enhancement implementation does not exist, the exception CX_ENH_IO_ERROR is thrown *   and value of lo_enh_impl remains the same as before the method is called.     CATCH cx_enh_root INTO lx_enh_root.    ENDTRY.    TRY. *  Delete the enhancement implementation if found       IF lo_enh_impl IS BOUND.          lo_enh_impl->if_enh_object~delete( *      EXPORTING *        nevertheless_delete = *        run_dark            = *        scwb_call           = ABAP_FALSE           CHANGING             devclass            = cv_package             trkorr              = cv_change_request                ).        lo_enh_impl->if_enh_object~unlock( ).        ENDIF.   *  Try to create new enhancement implementation       cl_enh_factory=>create_enhancement(         EXPORTING            enhname       = iv_enh_impl_name            enhtype       = cl_abstract_enh_tool_redef=>credefinition            enhtooltype   = cl_enh_tool_badi_impl=>tooltype            compositename = iv_comp_enh_impl_name *      scwb_call     = ' ' *      scwb_no_lock  = ' ' *      dark          = *      orig_lang     = *      check_mode    = ' ' *      genflag       =       IMPORTING           enhancement   = lo_enh_impl       CHANGING           trkorr        = cv_change_request           devclass      = cv_package       ).  * Enhancement is of type BAdI, so convert       lo_badi_impl_tool ?= lo_enh_impl.       lo_badi_impl_tool->set_spot_name( iv_enh_spot_name ).  * Prepare data for BAdI implementation creation       CLEAR ls_badi_impl.       ls_badi_impl-spot_name = iv_enh_spot_name.  "Enhancement spot       ls_badi_impl-badi_name = iv_badi_def_name.  "BAdI definition name       ls_badi_impl-impl_name = iv_badi_impl_name. "BAdI implementation name       ls_badi_impl-impl_class = iv_impl_class_name. "Implementation class  * Other implementation configuration are hard-coded       ls_badi_impl-active = 'X'.       ls_badi_impl-is_default = 'X'.       ls_badi_impl-impl_shorttext = 'BAdI implementation generated by FE Tool'.  * Create Filters * Attention! only process string type filter with comparaotr '=' here.       IF ( is_simple_string_filter IS NOT INITIAL  ). *        Filter root         lv_natual_number = 1.         ls_filter_id-filter_name = is_simple_string_filter-filter_name.         ls_filter_id-id = lv_natual_number.         ls_filter_root-root = lv_natual_number.         APPEND ls_filter_id TO ls_filter_root-filters.         APPEND ls_filter_root TO ls_badi_impl-filter_root.  *         Filter value         ls_filter_value-id = lv_natual_number.         ls_filter_value-filter_name = is_simple_string_filter-filter_name.         ls_filter_value-filter_type = 'S'.         ls_filter_value-compare = '='.         ls_filter_value-filter_string_value1 = is_simple_string_filter-filter_value.         APPEND ls_filter_value TO ls_badi_impl-filter_values.  *          Filters         ls_filter_impl-disj_idx = lv_natualnumber.
        ls_filter_impl-conj_idx = lv_natual_number.
        ls_filter_impl-filter_name = is_simple_string_filter-filter_name.
        ls_filter_impl-filter_type = 'S'.
        ls_filter_impl-compare = '='.
        ls_filter_impl-filter_string_value1 = is_simple_string_filter-filter_value.
        APPEND ls_filter_impl TO ls_badi_impl-filters.

      ENDIF.

* Add BAdI implementations
      lo_badi_impl_tool->add_implementation( im_implementation = ls_badi_impl  ).

* Save
      lo_badi_impl_tool->if_enh_object~save( ).

* Activate
      lo_badi_impl_tool->if_enh_object~activate( ).

* Generate.
      lo_badi_impl_tool->if_enh_object~generate( ).

* Unlock.
      lo_badi_impl_tool->if_enh_object~unlock( ).

    CATCH cx_enh_root INTO lx_enh_root.
      RAISE EXCEPTION TYPE /SFT/cx_badi_impl_handling
        EXPORTING
          previous = lx_enh_root.
  ENDTRY.
ENDMETHOD.

标签: 贴片电感cvi1014kz05

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台