Tuesday, December 25, 2012

Workflow Approval Dasar dalam Joget

The case

Dalam pembuatan aplikasi enterprise, banyak aktivitas yang perlu dibuat form elektroniknya. Umumnya form ini perlu menggunakan persetujuan sebelum diakui oleh perusahaan. Aplikasi jenis ini ialah aplikasi berbasis workflow, akan lebih terstruktur dan maintenable jika dibuat memanfaatkan workflow engine yang sudah ada. Salah satu workflow engine yang open source adalah Joget Workflow. Artikel ini mencoba menjelaskan tahap awal pembuatan aplikasi workflow yaitu pembuatan diagram workflow.

Skenario yang didukung

Dokumen request dibuat oleh aktor pembuat, kemudian disubmit ke aktor approver (umumnya atasan). Tiap aktor diperbolehkan melakukan reject dokumen. Approver dapat melakukan pengembalian dokumen (return) atau persetujuan (approve).

Basic Workflow

Pada workflow ini, Pembuat dapat melakukan aktivitas 'BuatDokumen'. Tombol aktivitas yang dipilih (submit , reject/cancel, atau return) diisikan ke variabel 'Keputusan'. Variabel ini menjadi dasar bagi pengaturan aliran. BuatDokumen dibuat ada dua box, sebenarnya cuma satu, tetapi Workflow Engine melarang aliran (panah) ke starting activity selain dari start. Sehingga dibuat BuatDokumen kedua untuk memfasilitasi dikembalikannya dokumen dari atasan.

Variasi - Beda variabel

Variasi ini menggunakan variabel KeputusanPembuat untuk menyimpan aksi pembuat dan variabel KeputusanApprover1 untuk menyimpan aksi approver1. 
Keuntungannya ialah debugging flow lebih mudah, karena dasar dasar keputusan tersimpan di variabel yang berbeda.
Kerugiannya ialah tiap panah harus dicek bahwa telah menggunakan nama variabel keputusan yang sesuai.
Jika variasi ini tidak digunakan, yaitu hanya satu variabel workflow yang digunakan, isi variabel keputusan pembuat akan tertimpa keputusan approver1. Tiap pemilihan keputusan sebenarnya dapat direkam di luar Joget, sehingga menyederhanakan workflow dengan penggunaan hanya satu variabel Keputusan.

Enhance - Otherwise

Ketika tidak ada klausa otherwise, dan workflow engine mendapatkan isi variabel tidak memenuhi semua kondisional, maka workflow akan diterminasi. Satu cara untuk mencegah terminasi yang tidak diinginkan (misalnya karena ada bug di front-end sehingga variabel keputusan tidak terisi) ialah menambahkan klausa otherwise ke semua kondisional.




No comments: