Background Jobs & Batch Processing
Target: ABAP Developer (Lanjutan)
Prasyarat: Modul 6: Reports & Selection Screen, Modul 9: Debugging & Performance
Lingkungan: SAP NetWeaver, SAP S/4HANA (On-Premise / Private Cloud)
Gambaran Umum
Dalam operasional bisnis harian, sistem SAP sering dituntut untuk memproses jutaan baris data: perhitungan depresiasi aset akhir bulan, kalkulasi penggajian ribuan karyawan, pencetakan massal faktur penagihan, hingga sinkronisasi stok antar-gudang.
Jika kalkulasi masif tersebut dijalankan secara interaktif di layar pengguna (dialog mode), layar SAP GUI akan membeku (freeze), pengguna tidak dapat melakukan pekerjaan lain, dan server aplikasi akan memutus paksa transaksi tersebut karena melanggar batas waktu eksekusi proses dialog.
Background Jobs (Batch Processing) adalah mekanisme komputasi asinkron milik server aplikasi SAP (AS ABAP) untuk menjalankan program di latar belakang tanpa keterlibatan pengguna, bebas dari batas waktu dialog, dan dapat dijadwalkan secara berkala (misal: setiap tengah malam).
Daftar Isi
π’ Fundamental
- Mengapa Background Processing Diperlukan
- Dialog vs Background: Parameter rdisp/max_wprun_time & Dump TIME_OUT
- Konfigurasi Selection Variants pada Program Pelaporan
- Anatomi Penjadwalan Job di T-Code SM36
π‘ Lanjutan
- Monitoring & Siklus Hidup Job di T-Code SM37
- Membaca Job Log & Manajemen Spool Cetak via SP01
- Investigasi & Debugging Background Job via Perintah JDBG
- Penanganan Kegagalan: Analisis Crash, Pembatalan, & Rerun
- Evolusi Modern: Menuju Application Jobs di ABAP Cloud
π οΈ Praktik & Rujukan
- Praktik: Konfigurasi, Eksekusi, & Debugging Job Batch Penjualan
- Ringkasan & Cheat Code Background Processing
- Referensi Resmi
1. π’ Mengapa Background Processing Diperlukan
Tiga alasan utama mengapa program wajib dialihkan ke Background Processing:
- Membebaskan Pengguna: Pengguna tidak perlu menunggu di depan komputer selama proses penarikan data berjalan.
- Optimalisasi Beban Server (Off-Peak Hours): Komputasi berat dijadwalkan pada malam hari saat beban kerja karyawan sedang sepi (off-peak).
- Imunitas Terhadap Batas Waktu: Background Work Process tidak memiliki batas waktu pemutusan transaksi otomatis.
2. π’ Dialog vs Background: Parameter rdisp/max_wprun_time & Dump TIME_OUT
Server aplikasi SAP membagi sumber daya CPU menjadi beberapa jenis Work Process (dapat dipantau di T-Code SM50):
Arsitektur Work Process SAP:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β 1. Dialog Work Process (DIA) β
β - Menangani interaksi langsung dengan user di layar GUI β
β - Dibatasi oleh profil timeout: rdisp/max_wprun_time β
β - Jika eksekusi melebihi batas --> Dump: TIME_OUT β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β 2. Background Work Process (BTC) β
β - Menangani komputasi massal tanpa layar antarmuka β
β - Bebas batas waktu eksekusi dialog β
β - Output layar dialihkan ke antrean Spool (SP01) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββIMPORTANT
Klarifikasi Batas Waktu Dialog (
TIME_OUT): Sering beredar asumsi bahwa batas waktu proses dialog SAP selalu 60 detik. Secara teknis, angka ini bukan nilai mutlak yang universal, melainkan diatur oleh parameter profil sistemrdisp/max_wprun_time(dapat diperiksa melalui T-CodeRZ11). Standar bawaan SAP umumnya berkisar antara 300 hingga 600 detik (5 s/d 10 menit) tergantung konfigurasi tim Basis perusahaan. Jika proses dialog melampaui durasi tersebut, SAP Kernel membekukan transaksi dan memicu short dumpTIME_OUT.
3. π’ Konfigurasi Selection Variants pada Program Pelaporan
Karena program background berjalan otomatis tanpa ada manusia yang mengisi kolom input Selection Screen, seluruh nilai filter wajib disimpan terlebih dahulu dalam bentuk Selection Variant:
Langkah Membuat Variant
- Buka program report di
SE38Klik Execute (F8). - Isi kolom input (misal: Tanggal Transaksi, Kode Organisasi).
- Klik tombol Save as Variant (ikon disket di toolbar atas).
- Beri nama varian (misal:
VAR_MIDNIGHT_RUN) dan deskripsi. - Anda dapat mengaktifkan opsi dinamis (misal: parameter tanggal otomatis mengambil Current Date atau Previous Day dari variabel sistem).
- Simpan. Varian ini yang nantinya dipanggil oleh scheduler job.
4. π’ Anatomi Penjadwalan Job di T-Code SM36
T-Code SM36 (Define Background Job) adalah pusat pembuatan jadwal komputasi batch:
Struktur Penjadwalan SM36:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Job Name: ZJOB_SALES_AGGREGATION_DAILY β
β Job Class: B (Medium Priority) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β 1. Steps (Langkah Eksekusi): β
β βββ Step 1: Program ZREP_AGGREGATE_SALES (Varian VAR_01) β
β βββ Step 2: Program ZREP_SEND_EMAIL_NOTIFICATION β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β 2. Start Condition (Waktu Picu): β
β βββ Immediate (Jalankan detik ini juga) β
β βββ Date/Time (Setiap hari pukul 23:00:00) β
β βββ After Job (Berjalan otomatis setelah Job X sukses) β
β βββ After Event (Berjalan saat ada sinyal sistem/file) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββPrioritas Job (Job Class)
- Class A (High Priority): Direservasikan untuk tugas darurat atau operasi bisnis super kritis.
- Class B (Medium Priority): Untuk tugas batch terjadwal reguler.
- Class C (Low Priority): Prioritas standar bawaan (default) untuk program umum.
5. π‘ Monitoring & Siklus Hidup Job di T-Code SM37
T-Code SM37 (Job Overview) digunakan untuk memantau kesehatan dan riwayat eksekusi seluruh background job di sistem.
Status-Status dalam Siklus Hidup Job
[ Scheduled ] --> Job telah didaftarkan, namun belum memiliki Start Condition
β
βΌ
[ Released ] --> Job telah memiliki Start Condition dan siap dipicu scheduler
β
βΌ
[ Ready ] --> Syarat waktu terpenuhi, job sedang antre menunggu Background WP kosong
β
βΌ
[ Active ] --> Program sedang berjalan aktif di memori server
β
βββββββββββββββββββββββββββββββββ
βΌ βΌ
[ Finished ] π’ [ Canceled ] π΄
Eksekusi selesai sukses Terjadi Crash / Dump / Pembatalan6. π‘ Membaca Job Log & Manajemen Spool Cetak via SP01
1. Job Log
Pada layar SM37, pilih satu baris job Klik tombol Job Log. Sistem akan menampilkan kronologi teks proses per detik, termasuk seluruh pesan MESSAGE ... TYPE 'I'/'W'/'S' yang dipicu oleh program.
2. Spool Request (SP01)
Instruksi seperti WRITE: / 'Data Laporan' pada program batch tidak hilang. Sistem otomatis mengalihkan seluruh output visual tersebut ke dalam file antrean cetak yang disebut Spool Request:
- Pada
SM37, klik tombol Spool. - Klik tombol Type Representation (kacamata) untuk membaca layout laporan visual di layar monitor Anda atau mengunduhnya ke file teks/PDF.
7. π‘ Investigasi & Debugging Background Job via Perintah JDBG
Mendebug program dialog sangat mudah dengan perintah /h. Namun bagaimana cara mendebug program batch yang gagal hanya saat dijalankan di lingkungan background?
SAP menyediakan trik resmi JDBG:
- Buka T-Code
SM37. - Cari job Anda yang berstatus Finished atau Canceled.
- Letakkan kursor tepat pada baris job yang ingin diinvestigasi.
- Jangan tekan tombol apa pun pada toolbar. Langsung ketikkan perintah
JDBGpada kotak input Transaction Code (kiri atas) lalu tekan Enter. - Sistem SAP akan langsung mereproduksi lingkungan background job tersebut di dalam ABAP Debugger interaktif, berhenti tepat di baris pertama kode program!
8. π‘ Penanganan Kegagalan: Analisis Crash, Pembatalan, & Rerun
Jika sebuah job berstatus Canceled (Merah):
- Buka Job Log di
SM37untuk melihat baris terakhir yang dieksekusi sebelum berhenti. - Jika penyebabnya adalah runtime fatal dump, buka T-Code
ST22dan cari insiden crash pada jam dan nama user background terkait. - Setelah masalah diperbaiki, job dapat diulang langsung dari
SM37dengan memilih menu: Job Repeat Run.
9. π‘ Evolusi Modern: Menuju Application Jobs di ABAP Cloud
| Aspek Operasional | Classic SAP GUI (NetWeaver / S/4HANA On-Premise) | SAP ABAP Cloud (S/4HANA Cloud / BTP) |
|---|---|---|
| Tool Penjadwalan | T-Code SM36 | Fiori App βApplication Jobsβ |
| Tool Monitoring | T-Code SM37 | Fiori App βApplication Job Templatesβ |
| Desain Program | Program Report ABAP biasa (REPORT ...) | Class yang mengimplementasikan interface resmi |
| Interface Runtime | Menggunakan Event START-OF-SELECTION | Menggunakan interface modern seperti IF_APJ_RT_RUN (Catatan: interface awal seperti IF_APJ_DT_EXEC_OBJECT/IF_APJ_RT_EXEC_OBJECT kini berstatus legacy di release tertentu) |
10. π οΈ Praktik: Konfigurasi, Eksekusi, & Debugging Job Batch Penjualan
Skenario Bisnis
Kita memiliki program batch ZREP_SALES_NIGHTLY yang bertugas membaca dokumen pesanan terbuka dan mencetak ringkasan total omset harian.
Langkah 1: Kode Program Pelaporan (ZREP_SALES_NIGHTLY)
*&---------------------------------------------------------------------*
*& Report ZREP_SALES_NIGHTLY
*&---------------------------------------------------------------------*
*& Program Penarikan Data Penjualan Terjadwal Harian
*&---------------------------------------------------------------------*
REPORT zrep_sales_nightly LINE-SIZE 85.
TABLES: ztsales_order.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS: s_erdat FOR sy-datum OBLIGATORY.
PARAMETERS: p_status TYPE c LENGTH 1 DEFAULT 'A' OBLIGATORY.
SELECTION-SCREEN END OF BLOCK b1.
START-OF-SELECTION.
WRITE: / sy-uline(80).
WRITE: / '|', (76) 'LAPORAN REKAPITULASI PENJUALAN HARIAN (BATCH RUN)' CENTERED, '|'.
WRITE: / sy-uline(80).
SELECT order_id, customer, gross_amount, order_status
FROM ztsales_order
WHERE order_status = @p_status
ORDER BY order_id
INTO TABLE @DATA(lt_orders).
IF lt_orders IS INITIAL.
MESSAGE 'Tidak ada data pesanan terbuka yang perlu diproses malam ini.' TYPE 'I'.
WRITE: / '| STATUS: NIHIL. Tidak ditemukan dokumen pesanan sesuai kriteria.', (14) ' ', '|'.
WRITE: / sy-uline(80).
RETURN.
ENDIF.
DATA(lv_total) = 0.
LOOP AT lt_orders INTO DATA(ls_ord).
WRITE: / '| No. Pesanan:', (15) ls_ord-order_id,
'| Pelanggan :', (22) ls_ord-customer,
'| Nilai: Rp', (16) ls_ord-gross_amount, '|'.
lv_total = lv_total + ls_ord-gross_amount.
ENDLOOP.
WRITE: / sy-uline(80).
WRITE: / '| TOTAL OMSET TERKUMPUL HARI INI: Rp', (18) lv_total, (23) ' ', '|'.
WRITE: / sy-uline(80).Langkah 2: Menyimpan Varian di SE38
- Jalankan program, isi
s_erdat = Current Datedanp_status = 'A'. - Klik tombol Save as Variant Beri nama
NIGHT_ACTIVESimpan.
Langkah 3: Menjadwalkan Job di SM36
- Masukkan Job Name:
ZJOB_SALES_REKAP. - Klik Step: Masukkan Program
ZREP_SALES_NIGHTLYdan VariantNIGHT_ACTIVESimpan. - Klik Start Condition Pilih Immediate (untuk simulasi pengujian sekarang) Simpan.
- Klik tombol Save utama (ikon disket). Status berubah menjadi Released.
Langkah 4: Memeriksa Hasil di SM37
- Buka
SM37Masukkan Job NameZJOB_SALES_REKAPEksekusi. - Status menunjukkan Finished (Hijau).
- Klik tombol Spool Klik ikon kacamata: Laporan rapi muncul di layar tanpa membebani interaksi dialog!
11. π Ringkasan & Cheat Code Background Processing
Peta Konsep
Background Processing (AS ABAP)
βββ 1. Karakteristik Komputasi
β βββ Dialog WP (Terikat timeout profil rdisp/max_wprun_time)
β βββ Background WP (Bebas batas waktu, output ke Spool)
βββ 2. Manajemen Penjadwalan (SM36)
β βββ Step (Program ABAP + Varian input)
β βββ Priority Class (A = Kritis, B = Sedang, C = Standar)
β βββ Start Condition (Immediate, Date/Time, After Job/Event)
βββ 3. Siklus Hidup & Monitoring (SM37)
β βββ Status: Scheduled ββ> Released ββ> Ready ββ> Active ββ> Finished / Canceled
β βββ Job Log (Catatan kronologi eksekusi per detik)
β βββ Spool Request (SP01 - Arsip cetak output visual)
βββ 4. Trik Investigasi
βββ Perintah JDBG (Menjalankan ulang background job di interactive debugger)Cheat Code T-Code 10 Detik
SM36 β Membuat dan menjadwalkan Background Job baru
SM37 β Monitoring status, membaca Job Log, dan akses Spool
SP01 β Spool Viewer (Membaca dan mengunduh output cetak batch)
SM50 β Meninjau status Background Work Process (BTC) aktif
RZ11 β Memeriksa nilai parameter timeout sistem (rdisp/max_wprun_time)
JDBG β Perintah sakti di SM37 untuk mendebug background job