Lewati ke konten utama

Service Task

Service Task adalah task yang dieksekusi sepenuhnya otomatis oleh sistem — tanpa intervensi manusia sama sekali. Ketika BPMS mencapai Service Task, ia langsung menjalankan logika yang sudah dikonfigurasi, menunggu hasilnya, lalu melanjutkan ke step berikutnya.

Simbol: Ikon roda gigi di sudut kiri atas persegi panjang sudut membulat


Definisi yang Tepat

Service Task menjawab: "Apa yang dilakukan sistem secara otomatis di titik ini?"

Kata kunci untuk mengenali Service Task:

  • Sistem mengirim email otomatis
  • Sistem memanggil API pihak ketiga
  • Sistem menyimpan data ke database
  • Sistem menghasilkan dokumen (PDF, laporan)
  • Sistem mengintegrasikan data antar aplikasi

Mekanisme Implementasi

Cara Service Task diimplementasikan bergantung pada BPMS yang digunakan, namun secara konseptual ada tiga pendekatan:

1. Java Delegate / Delegate Expression (Camunda, Flowable)

Kode Java yang dijalankan langsung oleh engine:

@Component
public class KirimEmailDelegate implements JavaDelegate {
@Override
public void execute(DelegateExecution execution) {
String email = (String) execution.getVariable("emailPelanggan");
String nama = (String) execution.getVariable("namaPelanggan");
emailService.kirim(email, "Permohonan Anda Diterima", buildTemplate(nama));
}
}

Dikonfigurasi di properti Service Task:

Implementation: Delegate Expression
Value: ${kirimEmailDelegate}

2. External Task Pattern (Camunda 7+, Camunda 8)

Service Task tidak dieksekusi di dalam engine, melainkan oleh external worker yang polling ke engine. Ideal untuk integrasi dengan sistem non-Java.

Proses di Engine: [Service Task: Validasi KTP]
↕ polling
External Worker (Python/Node.js):
- Ambil task dari engine
- Panggil API Dukcapil
- Kirim hasil kembali ke engine

Keunggulan:

  • Bisa ditulis dalam bahasa apapun (Python, Node.js, Go, dll.)
  • Lebih tahan terhadap kegagalan (engine tidak menunggu sinkron)
  • Mudah di-scale secara independen

3. Connector (Camunda, Flowable)

Konfigurasi deklaratif untuk integrasi umum tanpa kode:

<serviceTask id="kirimEmail" name="Kirim Notifikasi">
<extensionElements>
<camunda:connector>
<camunda:connectorId>mail-send</camunda:connectorId>
<camunda:inputOutput>
<camunda:inputParameter name="to">${emailPelanggan}</camunda:inputParameter>
<camunda:inputParameter name="subject">Permohonan Diproses</camunda:inputParameter>
</camunda:inputOutput>
</camunda:connector>
</extensionElements>
</serviceTask>

Jenis-Jenis Service Task Berdasarkan Fungsi

Integrasi API Eksternal

Memanggil layanan pihak ketiga. Ini adalah penggunaan Service Task yang paling umum.

ContohAPI yang Dipanggil
Validasi NIKAPI Dukcapil
Cek kreditAPI SLIK OJK / BI Checking
Kirim SMS OTPAPI Telco / SMS Gateway
Verifikasi rekeningAPI bank tujuan
Geocoding alamatGoogle Maps API
Konversi mata uangAPI kurs Bank Indonesia

Contoh dalam diagram:

Lane: Sistem
[Service Task: Validasi NIK via API Dukcapil]
- Input: ${nik}, ${namaLengkap}, ${tanggalLahir}
- Output: ${validasiNIK} (valid/invalid), ${detailKTP}
- Timeout: 30 detik
- Retry: 3 kali

Pengiriman Notifikasi

Mengirim komunikasi otomatis ke pengguna atau sistem.

JenisContoh
EmailKonfirmasi pendaftaran, notifikasi persetujuan
SMSOTP, status pengiriman, reminder
Push NotificationUpdate aplikasi mobile
WhatsApp BusinessNotifikasi transaksi, pengingat
WebhookMemberi tahu sistem lain via HTTP POST

Operasi Database

Membaca atau menulis data tanpa interaksi pengguna.

[Service Task: Simpan Data Permohonan ke Database]
[Service Task: Ambil Riwayat Kredit dari Core Banking]
[Service Task: Update Status di Tabel Transaksi]

Pembuatan Dokumen

Menghasilkan dokumen output secara otomatis.

[Service Task: Generate Surat Keputusan Kredit (PDF)]
[Service Task: Buat Laporan Rekonsiliasi (Excel)]
[Service Task: Generate Nomor Rekening]

Kalkulasi dan Transformasi Data

Melakukan komputasi yang hasilnya disimpan sebagai variabel proses.

[Service Task: Hitung Angsuran Kredit]
- Input: ${pokokPinjaman}, ${sukuBunga}, ${tenorBulan}
- Output: ${angsuranPerBulan}, ${totalBunga}, ${jadwalAngsuran}

Penanganan Error di Service Task

Service Task yang memanggil sistem eksternal harus mempertimbangkan kegagalan. Pendekatan yang direkomendasikan:

Retry Otomatis

Konfigurasi retry untuk kegagalan sementara (network timeout, service unavailable):

Retries: 3
Retry Time Cycle: R3/PT10M (3 kali, setiap 10 menit)

Error Boundary Event

Untuk kegagalan yang tidak bisa di-retry, gunakan Error Boundary Event:

[Service Task: Proses Pembayaran]
◎ Error Boundary "Kartu Ditolak"

[User Task: Pilih Metode Pembayaran Lain]

Timeout

Selalu definisikan batas waktu agar proses tidak stuck jika service eksternal tidak merespons:

[Service Task: Validasi Data]
◎ Timer Boundary (30 detik)

[Service Task: Catat Timeout, Lanjutkan Default]

Contoh Lengkap: Proses Pembukaan Rekening Online

[User Task: Isi Formulir Pendaftaran]

[Service Task: Validasi NIK via Dukcapil] ◎ Error → [Notif NIK Tidak Valid]

[Service Task: Cek Daftar Hitam OJK] ◎ Error → [Notif Ditolak]

[Service Task: Generate Nomor Rekening]

[Service Task: Simpan ke Core Banking]

[Service Task: Kirim Email Selamat Datang]

[Service Task: Kirim SMS Nomor Rekening]

[End Event]

Kesalahan Umum

1. Service Task untuk Pekerjaan Manusia

Jika ada manusia yang mengklik, mengisi, atau memutuskan — itu User Task, bukan Service Task.

2. Tidak Ada Penanganan Error

Service Task yang memanggil API eksternal tanpa Error Boundary Event adalah bom waktu. Sistem eksternal pasti akan gagal suatu saat.

3. Logic Bisnis di Dalam Service Task

Jika Service Task memutuskan jalur proses berdasarkan aturan bisnis yang kompleks — pisahkan ke Business Rule Task. Service Task seharusnya hanya eksekutor, bukan pengambil keputusan.

4. Transaksi yang Terlalu Panjang

Jika satu Service Task melakukan terlalu banyak hal (validasi + simpan + kirim email), pecah menjadi beberapa Service Task. Ini memudahkan penanganan error dan retry.


Selanjutnya: Script Task →