Bagian pertama dari seri ini memperkenalkan beberapa langkah dasar untuk mengelola siklus hidup entitas apa pun dalam database. Bagian kedua dan terakhir kami akan menunjukkan kepada Anda bagaimana mendefinisikan alur kerja yang sebenarnya menggunakan tabel konfigurasi tambahan. Di sinilah pengguna disajikan dengan opsi yang diizinkan di setiap langkah. Kami juga akan mendemonstrasikan teknik untuk mengatasi penggunaan kembali 'rakitan' dan 'sub-rakitan' yang ketat dalam struktur Bill of Materials.
Mendefinisikan Opsi
Bagian 1 memperkenalkan tabel alur kerja inti dan bagaimana ini dapat dengan mudah dimasukkan ke dalam database Anda. Yang kita butuhkan sekarang adalah sesuatu untuk memandu pengguna memilih status logis berikutnya – sesuatu yang mendefinisikan alur kerja logis .
Diagram di bawah ini mendefinisikan semua komponen model database alur kerja:
Dua tabel konfigurasi, workflow_state_option
dan workflow_state_context
, telah ditambahkan ke model. Kita akan mulai dengan tabel opsi, yang mendefinisikan status berikutnya yang diizinkan . Setelah fungsinya dipahami, kita akan kembali ke tabel konteks dan menjelaskan peran yang dimainkannya.
Status Berikutnya yang Diizinkan
Tabel berikut agak mirip dengan tampilan SQL di seluruh tabel konfigurasi kami. Di sini kami menyembunyikan gabungan tabel dan kami hanya melihat kombinasi type_keys
. Jadi, mari kita pertimbangkan setiap NEGARA.HASIL kombinasi dan tentukan opsi tersedia untuk pengguna:
kombinasi STATE.OUTCOME (dari State Hierarchy) | Konteks Negara | Anak Cacat | Opsi 1 | Opsi 2 |
---|---|---|---|---|
APPLICATION_RECEIVED .DITERIMA | STANDAR_JOB _APPLICATION | N | APPLICATION_REVIEW | |
APPLICATION_RECEIVED .DITOLAK | STANDAR_JOB _APPLICATION | N | APPLICATION_CLOSED .NOT_HIRED | |
APPLICATION_REVIEW .LULUS | STANDAR_JOB _APPLICATION | N | INVITED_TO_INTERVIEW | |
APPLICATION_REVIEW .GAGAL | STANDAR_JOB _APPLICATION | N | APPLICATION_CLOSED .NOT_HIRED | |
INVITED_TO_INTERVIEW .DITERIMA | STANDAR_JOB _APPLICATION | N | WAWANCARA | |
INVITED_TO_INTERVIEW .DECLINED | STANDAR_JOB _APPLICATION | N | APPLICATION_CLOSED .NOT_HIRED | |
WAWANCARA .LULUS | STANDAR_JOB _APPLICATION | N | BUAT_TAWARKAN | SEEK_REFERENCES |
WAWANCARA.GAGAL | STANDAR_JOB _APPLICATION | N | APPLICATION_CLOSED | |
WAWANCARA .CANDIDATE_CANCELLED | STANDAR_JOB _APPLICATION | N | APPLICATION_CLOSED | INVITED_TO_INTERVIEW |
WAWANCARA .NO_SHOW | STANDAR_JOB _APPLICATION | N | APPLICATION_CLOSED | |
MAKE_OFFER.ACCEPTED | STANDAR_JOB _APPLICATION | N | SEEK_REFERENCES | |
MAKE_OFFER.DECLINED | STANDAR_JOB _APPLICATION | N | APPLICATION_CLOSED | |
SEEK_REFERENCES .LULUS | STANDAR_JOB _APPLICATION | N | APPLICATION_CLOSED .HIRED | |
SEEK_REFERENCES .GAGAL | STANDAR_JOB _APPLICATION | N | APPLICATION_CLOSED | |
APPLICATION_CLOSED .HIRED | STANDAR_JOB _APPLICATION | N | ||
APPLICATION_CLOSED .NOT_HIRED | STANDAR_JOB _APPLICATION | N |
Karena kita mengabaikan konteks untuk saat ini, Konteks Status dan Anak Cacat? berwarna abu-abu. Saya juga membatasi jumlah opsi dalam contoh ini menjadi dua untuk singkatnya, meskipun dalam praktiknya tidak ada batasan.
Jadi bagaimana cara kerjanya?
Bayangkan bahwa wawancara baru saja dilakukan dan pewawancara merekam hasilnya. Tabel dasar yang diperbarui adalah managed_entity_state
. Ada dua hasil logis:LULUS dan GAGAL. Jadi managed_entity_state
saat ini diperbarui dengan hasil yang dipilih (wf_state_type_outcome_id
). Dalam model contoh, pewawancara juga dapat memasukkan beberapa catatan tentang wawancara tersebut.
Jika pewawancara memilih LULUS, mereka akan diberikan dua opsi lagi:MAKE_OFFER dan SEEK_REFERENCES. Ini adalah negara bagian berikutnya dalam alur kerja kami. Mereka mirip dengan go to
pernyataan dalam pemrograman. Untuk salah satu opsi, baris baru dimasukkan ke managed_entity_state
, memindahkan lamaran pekerjaan ke status berikutnya dalam proses alur kerja. Pengguna dapat menetapkan tenggat waktu untuk ini dengan memasukkan due_date
.
Sebaliknya, jika pewawancara memilih FAILED, hanya ada satu pilihan:APPLICATION_CLOSED. Jadi managed_entity_state
baru baris disisipkan menggunakan status APPLICATION_CLOSED (wf_state_type_state_id
).
Anda akan melihat bahwa tidak ada opsi yang tersedia untuk status APPLICATION_CLOSED. Ini menandakan bahwa akhir dari proses alur kerja telah tercapai.
Tabel Konteks
Mari kita lihat konfigurasi untuk proses lamaran pekerjaan teknis untuk melihat apa peran tabel konteks bermain:
Kombinasi STATE.OUTCOME (dari Hirarki Negara) | Konteks Negara | Anak Cacat | Opsi 1 | Opsi 2 |
---|---|---|---|---|
APPLICATION_RECEIVED .DITERIMA | TECHNICAL_JOB _APPLICATION | N | APLIKASI _REVIEW | |
APPLICATION_RECEIVED .DITOLAK | TECHNICAL_JOB _APPLICATION | N | APLIKASI _TUTUP | |
APPLICATION_REVIEW .LULUS | TECHNICAL_JOB _APPLICATION | N | INVITED_TO _INTERVIEW | |
APPLICATION_REVIEW .GAGAL | TECHNICAL_JOB _APPLICATION | N | APLIKASI _TUTUP | |
INVITED_TO_INTERVIEW .DITERIMA | TECHNICAL_JOB _APPLICATION | N | TEST_APTITUDE | |
INVITED_TO_INTERVIEW .DECLINED | TECHNICAL_JOB _APPLICATION | N | APLIKASI _TUTUP | |
UJI_APTITUDE .LULUS | TECHNICAL_JOB _APPLICATION | N | WAWANCARA | MENCARI _REFERENCES |
UJI_APTITUDE .GAGAL | TECHNICAL_JOB _APPLICATION | N | APLIKASI _TUTUP | |
WAWANCARA .LULUS | TECHNICAL_JOB _APPLICATION | N | MAKE_OFFER | MENCARI _REFERENCES |
WAWANCARA .GAGAL | TECHNICAL_JOB _APPLICATION | N | APLIKASI _TUTUP | |
WAWANCARA .CANDIDATE_CANCELLED | TECHNICAL_JOB _APPLICATION | Y | - | - |
WAWANCARA .NO_SHOW | TECHNICAL_JOB _APPLICATION | N | APLIKASI _TUTUP | INVITED_TO _INTERVIEW |
MAKE_OFFER .DITERIMA | TECHNICAL_JOB _APPLICATION | N | MENCARI _REFERENCES | |
MAKE_OFFER .DITOLAK | TECHNICAL_JOB _APPLICATION | N | APLIKASI _TUTUP | |
SEEK_REFERENCES .LULUS | TECHNICAL_JOB _APPLICATION | N | APLIKASI _CLOSED.SUCCESS | |
SEEK_REFERENCES .GAGAL | TECHNICAL_JOB _APPLICATION | N | APLIKASI _TUTUP | |
APPLICATION_CLOSED .HIRED | TECHNICAL_JOB _APPLICATION | N | ||
APPLICATION_CLOSED .TIDAK_HIRED | TECHNICAL_JOB _APPLICATION | N | TIDAK CUKUP _PENGALAMAN | LEBIH _KUALIFIKASI |
Di sini konteksnya adalah TECHNICAL_JOB_APPLICATION. Mengapa ini penting? Karena itu memungkinkan kita untuk mengesampingkan hasil. Ingat, kami sebelumnya menyatakan bahwa kami dapat menggunakan kembali 'rakitan' dan 'sub-rakitan' dalam struktur Bill of Materials (BOM). Ini berguna ketika kita mendefinisikan sesuatu sekali dan menggunakannya kembali, tetapi bisa juga terlalu kaku. Bagaimana jika kita tidak ingin menggunakan kembali semuanya?
Dengan memasukkan workflow_state_context
antara workflow_state_hierarchy
dan workflow_state_option
, kita dapat menggunakan kembali dan mengesampingkan hasil. Dalam model ini, kita dapat menentukan apakah suatu hasil diaktifkan atau dinonaktifkan untuk proses yang berbeda.
Dalam contoh di atas, kombinasi INTERVIEW.CANDIDATE_CANCELLED dinonaktifkan. Dengan kata lain, kami mengatakan bahwa itu bukan hasil yang diizinkan untuk lamaran pekerjaan teknis. Akibatnya, pewawancara tidak akan dapat memilihnya saat merekam hasil wawancara kerja teknis karena kueri kami hanya memilih opsi di mana workflow_state_context.child_disabled = ‘N’
.
Karena workflow_state_option
bukan anak langsung dari workflow_state_hierarchy
, kita harus mendefinisikan satu set opsi yang terpisah setiap kali sebuah status digunakan. Namun pertukaran ini memungkinkan kami untuk menyempurnakan opsi untuk setiap proses.
Hasil yang Memenuhi Syarat
Kami juga memiliki opsi untuk menentukan kualifikasi yang lebih terperinci untuk hasil. Ada dua cara untuk melakukannya:
- Anda dapat membuat level keempat di BOM Anda untuk menentukan kualifikasi di bawah hasil dalam hierarki. Uji tuntas harus dilakukan dengan pendekatan ini. Misalnya, hasil GAGAL digunakan untuk status yang berbeda. Apakah Anda ingin memiliki kualifikasi yang sama untuk status GAGAL yang berbeda? Mungkin tidak.
- Anda dapat menentukan qualifier Anda di
workflow_state_type
tetapi tidak mengikatnya ke hierarki apa pun; mereka berdiri bebas. Anda kemudian menggunakanworkflow_state_option
untuk membuat daftar kualifikasi untuk konteks hasil tertentu. Inilah yang ditunjukkan oleh konfigurasi di atas, di mana kualifikasi OVER_QUALIFIED dan INSUFFICIENT_EXPERIENCE terdaftar sebagai opsi untuk hasil APPLICATION_CLOSED.NOT_HIRED.
Dalam kedua kasus tersebut, aplikasi harus mengenali bahwa qualifier telah dipilih daripada status atau hasil – workflow_level_type
akan menunjukkan ini – dan perbarui managed_entity_state.wf_state_type_qual_id
dengan nilai yang dipilih.
Beberapa Data Konfigurasi Tabel
Anda mungkin ingin melihat data konfigurasi yang mendasarinya, tabel demi tabel. Di sini kita memiliki ids
dan type_keys
mereka merujuk dalam tanda kurung. Demi singkatnya, hanya nilai-nilai yang terkait dengan artikel yang disajikan.
jenis_level_alur kerja
id | type_key |
---|---|
1 | PROSES |
2 | NEGARA |
3 | HASIL |
4 | KUALIFIKASI |
alur kerja_status_tipe
id | type_key | alur kerja_level_type_id |
---|---|---|
1 | STANDARD_JOB_APPLICATION | 1 (PROSES) |
2 | TECHNICAL_APPLICATION | 1 (PROSES) |
3 | WAWANCARA | 2 (NEGARA) |
4 | LULUS | 3 (HASIL) |
5 | GAGAL | 3 (HASIL) |
6 | MAKE_OFFER | 2 (NEGARA) |
7 | SEEK_REFERENCES | 2 (STATE) |
8 | APPLICATION_CLOSED | 2 (STATE) |
9 | DISEWA | 3 (HASIL) |
10 | NOT_HIRED | 3 (HASIL) |
11 | INSUFFICIENT_EXPERIENCE | 4 (KUALIFIER) |
12 | OVER_QUALIFIED | 4 (KUALIFIER) |
alur kerja_status_hierarki
id | state_type_parent_id | state_type_child_id |
---|---|---|
1 | 1 (STANDARD_JOB_APPLICATION) | 3 (WAWANCARA) |
2 | 2 (TECHNICAL_JOB_APPLICATION) | 3 (WAWANCARA) |
3 | 3 (WAWANCARA) | 4 (LULUS) |
4 | 3 (WAWANCARA) | 5 (GAGAL) |
5 | 1 (STANDARD_JOB_APPLICATION) | 8 (APPLICATION_CLOSED) |
6 | 2 (TECHNICAL_JOB_APPLICATION) | 8 (APPLICATION_CLOSED) |
7 | 8 (APPLICATION_CLOSED) | 9 (DIREDAKSI) |
8 | 8 (APPLICATION_CLOSED) | 10 (NOT_HIRED) |
konteks_kondisi_alur kerja
id | state_type_id | negara_hierarki_id | child_disabled |
---|---|---|---|
1 | 1 (STANDARD_JOB_ APPLICATION) | 3 (WAWANCARA.LULUS) | T |
2 | 1 (STANDARD_JOB_ APPLICATION) | 4 (WAWANCARA.GAGAL) | T |
3 | 1 (STANDARD_JOB_ APPLICATION) | 7 (APPLICATION_CLOSED. HIRED) | T |
4 | 1 (STANDARD_JOB_ APPLICATION) | 5 (APPLICATION_CLOSED. NOT_HIRED) | T |
5 | 2 (TECHNICAL_APPLICATION) | 6 (APPLICATION_CLOSED. NOT_HIRED) | T |
alur kerja_state_option
id | state_context_id | state_type_id |
---|---|---|
1 | 1 (STANDAR_JOB_ APLIKASI. WAWANCARA. LULUS) | 6 (MAKE_OFFER) |
2 | 1 (STANDAR_JOB_ APLIKASI. WAWANCARA. LULUS) | 7 (SEEK_REFERENCES) |
3 | 2 (STANDAR_JOB_ APLIKASI. WAWANCARA. GAGAL) | 8 (APPLICATION_CLOSED) |
4 | 5 (TECHNICAL_JOB_ APPLICATION. APPLICATION_CLOSED. NOT_HIRED) | 11 (INSUFFICIENT_EXPERIENCE) |
5 | 5 (TECHNICAL _JOB_ APPLICATION. APPLICATION_CLOSED. NOT_HIRED) | 12 (OVER_QUALIFIED) |
Jelas, pengaturan ini cukup rumit. Sebaiknya dikelola melalui aplikasi dengan antarmuka yang ramah pengguna.
Urutan Alternatif
Anda akan melihat bahwa sejumlah tabel memiliki kolom bernama alt_sequence
. Ini digunakan untuk mengurutkan daftar nilai untuk berbagai pilihan yang disajikan kepada pengguna. Biasanya ini akan diurutkan berdasarkan penggunaan, dengan opsi yang paling sering digunakan di bagian atas.
Sementara artikel ini menjelaskan aplikasi pekerjaan, model dapat digunakan untuk banyak jenis alur kerja di mana status entitas perlu dikelola dari waktu ke waktu. Atau, model dapat berfungsi sebagai pola untuk disesuaikan dengan kebutuhan khusus Anda sendiri.