Lewati ke konten utama

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 →