Integrasi ABAP, RFC & BAPI Enterprise
Panduan konektivitas dan pertukaran data antara platform eksternal (Web/Portal/Microservices) dengan modul backend SAP melalui protokol RFC dan BAPI.
1. Memahami BAPI dan RFC
- RFC (Remote Function Call): Protokol komunikasi biner standar SAP untuk menjalankan function module dari sistem lain (sistem SAP lain atau aplikasi non-SAP seperti Node.js, Python, atau .NET).
- BAPI (Business Application Programming Interface): Kumpulan Function Module RFC standar yang dibungkus dengan business object model (BOR) untuk memastikan validasi logika bisnis, konsistensi data, dan integritas database tetap terjaga.
2. Siklus Eksekusi BAPI Standar
Setiap transaksi BAPI yang memodifikasi data (Create/Update/Delete) harus diakhiri dengan pemanggilan eksplisit BAPI_TRANSACTION_COMMIT untuk menyimpan perubahan ke database:
TEXT
Client App ────> BAPI_PO_CREATE1 ────> Validasi & Penyiapan Data Buffer
│ │
│ ▼
│<──────── Return (Type &class="tok-comment">#39;Sclass="tok-string">39; / 39;E39;) ────────────┘
│
├── Jika Return Type = &class="tok-comment">#39;S39;:
│ Client App ────> BAPI_TRANSACTION_COMMIT( WAIT = &class="tok-comment">#39;X39; )
│
└── Jika Return Type = &class="tok-comment">#39;E39;:
Client App ────> BAPI_TRANSACTION_ROLLBACK
3. Contoh Implementasi Function Module ABAP RFC
Berikut pola pembuatan Remote-Enabled Function Module (Processing Type: Remote-Enabled Module di SE37):
ABAP
FUNCTION z_get_material_stock.
*"class="tok-comment">----------------------------------------------------------------------
*class="tok-string">"*"Local Interface:
*" IMPORTING
*" VALUE(iv_matnr) TYPE matnr
*" VALUE(iv_werks) TYPE werks_d
*" EXPORTING
*" VALUE(ev_labst) TYPE labst
*" VALUE(ev_status) TYPE char1
*" VALUE(ev_message) TYPE bapi_msg
*"class="tok-comment">----------------------------------------------------------------------
" Lakukan validasi otorisasi pengguna terlebih dahulu
AUTHORITY-CHECK OBJECT &class="tok-comment">#39;M_MATE_WRK39;
ID &class="tok-comment">#39;WERKS39; FIELD iv_werks
ID &class="tok-comment">#39;ACTVTclass="tok-string">39; FIELD 39;0339;.
IF sy-subrc <> 0.
ev_status = &class="tok-comment">#39;E39;.
ev_message = &class="tok-comment">#39;Otorisasi tidak mencukupi untuk pabrik tersebut.39;.
RETURN;
ENDIF.
" Query data stok bebas (unrestricted stock)
SELECT SINGLE labst
FROM mard
INTO @ev_labst
WHERE matnr = @iv_matnr
AND werks = @iv_werks.
IF sy-subrc = 0.
ev_status = &class="tok-comment">#39;S39;.
ev_message = &class="tok-comment">#39;Data stok berhasil ditemukan.39;.
ELSE.
ev_status = &class="tok-comment">#39;W39;.
ev_message = &class="tok-comment">#39;Material tidak ditemukan pada lokasi terkait.39;.
ev_labst = 0.
ENDIF.
ENDFUNCTION.
Tips Best Practice> Gunakan selalu `WAIT = 'X'` saat menjalankan `BAPI_TRANSACTION_COMMIT` agar thread eksternal menunggu proses update task selesai sebelum mengeksekusi langkah berikutnya.