Belajar ABAP Part 8: Enhancement & BADI — Customisasi Tanpa Modify SAP
Enhancement & BADI adalah cara menambahkan logic/custom behavior tanpa mengubah source code SAP standar. Hal ini sangat penting agar sistem tetap upgrade safe.
Apa itu Enhancement?
Enhancement memungkinkan menancapkan kode tambahan pada titik tertentu di program SAP.
- User Exit — function modules siap pakai.
- Customer Exit — menambah field/logic via CMOD.
- Implicit Enhancement — otomatis tersedia di awal/akhir program.
- Explicit Enhancement — titik yang ditentukan oleh SAP developer.
Apa itu BADI?
BADI adalah framework enhancement berbasis OOP. Bisa multiple implementation, scalable, cocok di S/4HANA.
Contoh Implicit Enhancement
ENHANCEMENT 1 ZENH_MIGO_LOG.
WRITE: / 'MIGO Posting date updated by user:', sy-uname.
ENDENHANCEMENT.
Contoh Implementasi BADI
METHOD if_ex_me_process_po_cust~process_item.
DATA: ls_item TYPE mepoitem.
CALL METHOD im_item->get_data
RECEIVING re_data = ls_item.
IF ls_item-matnr IS INITIAL.
MESSAGE e001(zmsg) WITH 'Material must be filled'.
ENDIF.
ENDMETHOD.
Step by Step Implementasi BADI
- Buka transaksi SE18 untuk melihat definisi BADI.
- Pelajari interface & methods yang tersedia.
- Buat implementasi baru di SE19.
- Isi logic di method yang relevan sesuai kebutuhan bisnis.
- Aktifkan & transport agar bisa digunakan di sistem lain.
Real Case: Validasi Nilai PO Minimal
METHOD if_ex_me_process_po_cust~process_header.
DATA: ls_header TYPE mepoheader,
lt_items TYPE mepoitem_tab,
lv_total TYPE ekpo-netwr.
CALL METHOD im_header->get_data RECEIVING re_data = ls_header.
CALL METHOD im_header->get_items RECEIVING re_items = lt_items.
LOOP AT lt_items INTO DATA(ls_item).
lv_total = lv_total + ls_item-netwr.
ENDLOOP.
IF lv_total < 1000000.
MESSAGE e001(zmsg) WITH 'PO value must be at least 1,000,000 IDR'.
ENDIF.
ENDMETHOD.
ABAP Unit Test untuk BADI
CLASS ltc_badi_me_process_po_cust DEFINITION FINAL FOR TESTING
DURATION SHORT
RISK LEVEL HARMLESS.
PRIVATE SECTION.
DATA: mo_badi TYPE REF TO zcl_impl_me_process_po.
METHODS: setup.
METHODS: test_valid_po FOR TESTING.
METHODS: test_invalid_po FOR TESTING.
ENDCLASS.
CLASS ltc_badi_me_process_po_cust IMPLEMENTATION.
METHOD setup.
CREATE OBJECT mo_badi.
ENDMETHOD.
METHOD test_valid_po.
" PO 1.500.000 harus lolos
DATA: lt_items TYPE mepoitem_tab,
ls_item TYPE mepoitem,
ls_header TYPE mepoheader.
ls_item-netwr = 1500000.
APPEND ls_item TO lt_items.
TRY.
mo_badi->if_ex_me_process_po_cust~process_header(
im_header = NEW cl_po_header( ls_header )
).
cl_abap_unit_assert=>assert_true( act = abap_true ).
CATCH cx_root INTO DATA(lx).
cl_abap_unit_assert=>fail( msg = lx->get_text( ) ).
ENDTRY.
ENDMETHOD.
METHOD test_invalid_po.
" PO 500.000 harus gagal
DATA: lt_items TYPE mepoitem_tab,
ls_item TYPE mepoitem,
ls_header TYPE mepoheader.
ls_item-netwr = 500000.
APPEND ls_item TO lt_items.
TRY.
mo_badi->if_ex_me_process_po_cust~process_header(
im_header = NEW cl_po_header( ls_header )
).
cl_abap_unit_assert=>fail( msg = 'Invalid PO should not pass' ).
CATCH cx_sy_message_illegal_text INTO DATA(lx).
cl_abap_unit_assert=>assert_true( act = abap_true ).
ENDTRY.
ENDMETHOD.
ENDCLASS.
Kesimpulan
- Enhancement & BADI memungkinkan customisasi tanpa modify SAP standard.
- Gunakan BADI untuk sistem modern (S/4HANA).
- Tambahkan unit test agar logic bisa diuji otomatis.
- Dokumentasikan & gunakan transport request agar terkontrol.
👉 Lanjut ke: Belajar ABAP Part 9: ALV (ABAP List Viewer)
Comments
Post a Comment