Sub-Process
Sub-Process adalah Activity yang berisi proses lain di dalamnya — sebuah proses di dalam proses. Ia memungkinkan Anda memecah diagram yang kompleks menjadi lapisan-lapisan yang lebih mudah dipahami, sekaligus memberikan kemampuan tambahan seperti penanganan exception secara kolektif.
Simbol: Persegi panjang sudut membulat dengan tanda + kecil di bagian bawah tengah
Mode tampil: Bisa collapsed (tanda + saja) atau expanded (isi terlihat)
Mengapa Sub-Process Ada?
Alasan 1: Menyederhanakan Diagram
Proses yang kompleks akan menghasilkan diagram yang terlalu besar dan tidak terbaca jika semua langkah ditaruh di satu level. Sub-Process memungkinkan drill-down — lihat gambaran besar dulu, baru masuk ke detail.
Level 1 (Gambaran Besar):
[Terima Permohonan] → [Sub-Process: Verifikasi] → [Sub-Process: Analisis] → [Sub-Process: Putusan]
Level 2 (Detail Verifikasi):
[Cek Kelengkapan] → [Validasi NIK] → [Cek Daftar Hitam] → [Verifikasi Agunan]
Alasan 2: Penanganan Exception Kolektif
Ini adalah keunggulan teknis yang tidak dimiliki sekumpulan Task biasa. Boundary Event yang dipasang di Sub-Process berlaku untuk semua aktivitas di dalamnya sekaligus.
┌─────────────────────────────────────────┐
│ Sub-Process: Proses Verifikasi │
│ [Cek A] → [Cek B] → [Cek C] → [Cek D] │
└─────────────────────────────────────────┘
◎ Error Boundary "Sistem Down"
↓
[Catat Error, Eskalasi ke IT]
Jika error terjadi di Cek A, B, C, atau D — semuanya ditangani oleh satu Boundary Event. Jauh lebih efisien daripada pasang Boundary Event di setiap Task.
Alasan 3: Scope Variabel dan Transaksi
Sub-Process membentuk scope sendiri — variabel yang dideklarasikan di dalamnya bisa bersifat lokal (hanya ada di dalam Sub-Process) dan tidak "mencemari" variabel proses induk.
Varian Sub-Process
1. Embedded Sub-Process (Sub-Process Biasa)
Sub-Process yang hidup di dalam proses induknya dan hanya bisa digunakan di sana.
Karakteristik:
- Definisi ada di dalam file BPMN yang sama dengan proses induk
- Berbagi instance proses yang sama dengan induk
- Mengakses variabel proses induk secara langsung
- Bisa memiliki variabel lokal
Kapan digunakan:
- Sekelompok aktivitas yang logis dan kohesif
- Kelompok aktivitas yang ingin dilindungi oleh satu Boundary Event
- Memecah kompleksitas tanpa membuat proses baru yang terpisah
Contoh:
[Start] → [Sub-Process: Pengumpulan Dokumen] → [Sub-Process: Analisis Kredit] → [End]
2. Event Sub-Process
Sub-Process yang tidak dipanggil dari alur normal, melainkan dipicu oleh sebuah Event yang terjadi di scope proses induk atau Sub-Process induknya.
Karakteristik:
- Tidak memiliki Sequence Flow masuk dari luar
- Dimulai oleh Start Event di dalamnya (Message, Timer, Error, Signal, Escalation, Compensation)
- Bisa interrupting (menghentikan proses induk) atau non-interrupting (berjalan paralel)
- Ditampilkan dengan garis putus-putus pada batas Sub-Process
Kapan digunakan:
- Penanganan exception yang berlaku untuk seluruh proses
- Sub-proses yang berjalan paralel dipicu oleh kondisi tertentu (notifikasi, reminder)
- Penanganan pembatalan (cancellation handler)
Contoh — Interrupting Event Sub-Process:
Proses Utama: Pengajuan Kredit (berjalan normal)
╔ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ╗
║ Event Sub-Process (Interrupting) ║
║ ◎ Error Start Event "Database Error" ║
║ ↓ ║
║ [Catat Log] → [Notif IT] → [End] ║
╚ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ╝
Jika error database terjadi di mana pun dalam Proses Utama, Event Sub-Process ini dipicu dan seluruh proses utama dihentikan.
Contoh — Non-Interrupting Event Sub-Process:
Proses Utama: Tunggu Persetujuan (berjalan normal)
╔ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ╗
║ Event Sub-Process (Non-Interrupting) ║
║ ◎ Timer Start Event "Setiap 24 jam" ║
║ ↓ ║
║ [Send Task: Kirim Reminder ke Approver] ║
╚ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ╝
Setiap 24 jam, reminder dikirim — sementara proses menunggu persetujuan tetap berjalan.
3. Transaction Sub-Process
Sub-Process dengan jaminan ACID (Atomicity, Consistency, Isolation, Durability) — semua aktivitas di dalamnya berhasil, atau semuanya dibatalkan (rollback).
Karakteristik:
- Ditampilkan dengan garis ganda pada batas Sub-Process
- Hanya bisa diakhiri oleh: End Event biasa, Error End Event, atau Cancel End Event
- Cancel End Event memicu kompensasi otomatis pada semua task yang sudah selesai
- Harus dipasangkan dengan Cancel Boundary Event di luarnya
Kapan digunakan:
- Proses yang melibatkan transaksi finansial (transfer, pembayaran multi-step)
- Booking yang terdiri dari beberapa reservasi (tiket + hotel + tur)
- Proses yang membutuhkan atomisitas bisnis
Contoh:
╔═══════════════════════════════════════════════╗
║ Transaction Sub-Process: Pemesanan Paket ║
║ ║
║ [Reservasi Hotel] → [Beli Tiket Pesawat] ║
║ → [Sewa Mobil] → [Bayar Paket] ║
║ ║
║ Jika Bayar Paket gagal → Cancel End Event ║
║ → Batalkan Hotel, Tiket, Sewa Mobil ║
╚═══════════════════════════════════════════════╝
◎ Cancel Boundary Event
↓
[Proses Refund]
4. Ad-Hoc Sub-Process
Sub-Process yang aktivitas di dalamnya tidak harus dieksekusi dalam urutan tertentu. Pelaksana bisa memilih aktivitas mana yang dikerjakan dan berapa kali, sesuai kebutuhan.
Karakteristik:
- Ditampilkan dengan tanda ~ (tilde) di bawah nama
- Tidak memiliki Sequence Flow antar aktivitas di dalamnya (atau minimal)
- Ada kondisi completion yang menentukan kapan Sub-Process selesai
- Cocok untuk pekerjaan berbasis pengetahuan (knowledge work)
Kapan digunakan:
- Proses investigasi atau penelitian
- Case management
- Pekerjaan yang urutannya bergantung pada pelaksana/situasi
Contoh:
╔ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ╗
║ Ad-Hoc Sub-Process: Investigasi Klaim ║
║ ║
║ [Wawancara Saksi] [Cek Dokumen] ║
║ [Survei Lapangan] [Konsultasi Ahli] ║
║ [Review CCTV] [Verifikasi Polis] ║
║ ║
║ Selesai jika: semua fakta terkumpul ║
╚ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ╝
5. Multi-Instance Sub-Process
Sub-Process yang dieksekusi beberapa kali — sekali untuk setiap item dalam sebuah koleksi. Mirip seperti for-each loop dalam pemrograman.
Dua mode:
- Sequential (tiga garis horizontal): dieksekusi satu per satu
- Parallel (tiga garis vertikal): semua dieksekusi serentak
Contoh Sequential:
[Sub-Process: Verifikasi Setiap Cabang]~ (sequential)
→ Dieksekusi 34 kali, satu untuk setiap provinsi, berurutan
→ Input: daftarProvinsi (collection)
→ Loop element: provinsi
Contoh Parallel:
[Sub-Process: Kirim RFQ ke Vendor]≡ (parallel)
→ Dieksekusi 5 kali sekaligus, satu untuk setiap vendor
→ Input: daftarVendor (collection)
→ Loop element: vendor
→ Selesai setelah: semua / mayoritas / yang pertama selesai
Aturan di dalam Sub-Process
Sub-Process memiliki aturan seperti proses normal:
- Harus memiliki tepat satu None Start Event (kecuali Event Sub-Process)
- Harus memiliki minimal satu End Event
- Semua aturan BPMN berlaku di dalam scope-nya
Selanjutnya: Call Activity →