Idealnya, saat sebuah record sedang diubah di sebuah aplikasi web, maka sistem harus bisa mengunci record tersebut agar tidak dapat diubah oleh Pengguna lain pada saat yang sama. Apalagi jika data tersebut berpotensi dapat diubah oleh lebih dari satu Pengguna di saat yang hampir bersamaan.
Contoh, di sebuah aplikasi web ticket system, dimana sebuah tiket berpotensi dapat dijawab oleh lebih dari satu petugas helpdesk di saat yang hampir bersamaan, maka sistem seharusnya bisa mengunci ticket yang sedang dijawab oleh petugas A. Jika petugas A sudah selesai menjawab ticket tadi, barulah petugas helpdesk lainnya dapat menambahkan jawaban/respon lain (jika diperlukan).
Pertanyaan selanjutnya, bagaimana jika petugas A yang sudah terlanjur menampilkan tiket dalam mode reply (edit), tadi tidak pernah merespon atau menyimpan perubahan, apa yang akan terjadi? Selain itu, bagaimana cara membatasi agar sebuah record itu dapat dikunci? Apa saja kriteria supaya sistem dapat mengenali bahwa suatu record itu sedang dikunci atau tidak?
Kembali ke contoh ticket system tadi, bayangkan jika record tadi sudah dikunci oleh sistem karena sedang dalam mode edit/reply, tapi si petugas tidak pernah menambahkan jawaban/respon, maka yang terjadi adalah ticket tadi menjadi tidak bisa diakses oleh petugas helpdesk lainnya.
Tentu kita tidak menginginkan kondisi ini terjadi di aplikasi web yang kita bangun, bukan? Karena alih-alih mempercepat waktu respon tiket, maka yang terjadi justru sebaliknya, petugas helpdesk lain akan terhambat untuk membantu merespon tiket yang statusnya gantung tadi.
Untuk menjawab kebutuhan tersebut, harus ditetapkan adanya batasan waktu maksimal penguncian record. Tujuannya sudah jelas seperti yang sudah dijelaskan sebelumnya, agar petugas helpdesk lain dapat merespon ticket tadi jika petugas sebelumnya ternyata tidak pernah memberikan respon atau jawaban.
Katakanlah sistem membatasi maksimal waktu penguncian record adalah 1 (Satu) menit. Jika petugas A sudah memilih ticket tadi untuk direspon, tapi kenyataannya dia tidak pernah menambahkan respon ke ticket tadi, maka sistem harus bisa melakukan pembukaan kunci secara otomatis setelah 1 menit berlalu.
Caranya bagaimana? Dengan menambahkan fitur count-down (hitung-mundur).
Pertanyaan selanjutnya, lalu bagaimana jika si petugas A tadi masih belum selesai merespon ticket tadi, apakah sistem akan tetap membuka paksa penguncian ticket tersebut setelah hitung-mundur selesai? Jawabannya tentu tidak. Tidak lucu bukan, jika sistem tiba-tiba membuka penguncian, sementara si petugas tadi belum selesai merespon ticket tadi?
Lalu bagaimana solusinya? Nah, sistem harus bisa menampilkan kotak pesan berupa warning yang disertai hitung-mundur saat sekian detik terakhir akan selesai. Sistem juga harus bisa memberi kesempatan kepada si petugas A, untuk menambah waktu penguncian (jika dibutuhkan), misalnya dengan cara mengklik tombol di pesan tadi.
Saat petugas A mengklik tombol OK pada pesan tadi, maka yang terjadi di belakang layar adalah, sistem akan memperbarui lagi tanggal dan jam yang sudah tersimpan di database sebelumnya. Mengapa? Supaya sistem dapat mengenali batasan waktu yang terbaru, sehingga waktu penguncian yang sebelumnya menjadi diperbarui.
Di saat yang bersamaan, sistem juga harus bisa memperbarui hitung-mundur yang sudah hampir habis tadi, menjadi dimulai lagi dari awal, pada halaman record yang sedang terbuka untuk diperbarui tadi. Demikian seterusnya, semua kemungkinan pada siklus itu harus bisa ditangani oleh sistem.
Untuk mengimplementasikan semua kebutuhan itu, bayangkanlah lagi jika Anda ingin menerapkannya pada aplikasi web yang Anda buat. Harus dari mana memulainya? Apa saja yang dibutuhkan? Perlukah kita menulis kode dari awal atau copy-paste dari library tertentu yang kita cari dari Google? Hohoho…
Jika Anda mengembangkan aplikasi web dengan PHPMaker 2023, maka semua kebutuhan tadi dapat diimplementasikan dengan sangat mudah dan cepat. PHPMaker sudah menyediakan fitur npm packages dari menu Tools -> npm packages untuk menambahkan Javascript Count Down Library.
PHPMaker juga sudah menyediakan Server Events untuk meng-include-kan file Javascript Library yang sudah kita tambahkan lewat npm packages tadi. Setelah itu, kita bisa membuat Javascript function yang bersifat global, dengan mengoptimalkan beberapa fitur yang terdapat di Javascript Library tadi melalui fitur Client Scripts.
Selanjutnya kita bisa membuat API untuk memperbarui tanggal dan jam, user, dan status record apakah dikunci atau tidak, melalui fitur Server Events di dalam project PHPMaker. API ini harus bisa dipanggil dari sisi client, saat hitungan-mundur tadi berlangsung. Dengan cara ini, maka kita bisa memperbarui tanggal dan jam ke database, untuk menandai kapan terakhir sebuah record itu sedang dikunci, dan oleh user yang mana.
Semua kerangka kerja itu sudah tersedia di PHPMaker. Kita tinggal mengoptimalkannya saja. Apapun proses bisnis yang kita inginkan, dapat disolusikan cukup dengan menulis sedikit kode PHP dan Javascript/jQuery saja masing-masing melalui fitur Server Events dan Client Scripts.
Jika Anda membutuhkan fitur penguncian record ini, maka penulis sudah menyediakan sebuah project sederhana yang bernama Record Locking. Dengan project ini, Anda dapat belajar sekaligus menjadi tahu, di bagian mana saja pada project PHPMaker yang perlu Anda tambahkan kode di sisi server maupun client.
Penulis sudah meluangkan waktu yang tidak sedikit untuk melakukan riset, mulai dari memilih Javascript Count Down Library yang dapat memenuhi kebutuhan tadi. Dilanjutkan dengan mengeksplorasi dan bereksperimen agar fitur-fitur yang sudah disebutkan di atas bisa diterapkan pada aplikasi web. Dan yang paling penting, hasilnya sudah terbukti melalui sebuah project PHPMaker.
Kita tidak perlu lagi menulis kode dari titik nol. Cukup dengan menambahkan sedikit kode saja di sisi Server Events maupun Client Scripts. Waktu pengembangan pun menjadi bisa lebih cepat, dengan kualitas aplikasi web yang sudah teruji.
Jika ingin mencoba demonya, maka cobalah login dengan user yang berbeda pada 2 browser yang berbeda pula. Cobalah untuk mengubah data di menu Complaints atau Customers dari browser pertama. Sistem akan menampilkan hitung-mundur di bagian atas dan bawah halaman.
Ketika pengguna sedang mengubah sebuah record di salah satu menu tadi, sistem juga akan memberitahukan bahwa record sedang dikunci oleh user tersebut sejak tanggal dan jam tertentu, disertai saran untuk mengingatkan agar menyimpan data tersebut, supaya user lain dapat mengubah record tadi.
Nah, jika penasaran, cobalah tidak langsung menyimpan data yang sedang diubah itu. Di saat yang hampir bersamaan, cobalah login menggunakan user kedua, dari browser yang berbeda, lalu ubah data yang sama. Anda akan melihat bahwa sistem menampilkan pesan, bahwa record tersebut sedang dikunci oleh user pertama sejak tanggal dan jam yang sudah tersimpan sebelumnya di database.
Tentu saja melalui project ini, kita bisa menentukan dengan mudah berapa lama waktu maksimal waktu penguncian, dan berapa detik terakhir sistem akan menampilkan kotak pesan disertai pilihan untuk mengklik tombol OK agar sistem dapat menambahkan waktu penguncian otomatis.
Ada begitu banyak hal yang bisa dipelajari dan mendapatkan manfaatnya dengan menggunakan project yang cukup sederhana namun powerful ini. Beberapa trik yang tadinya belum Anda pikirkan, sudah tersedia di project ini, seperti misalnya bagaimana cara menangani hitung-mundur yang dapat diperbarui waktu session-nya, bagimana memperbarui data di database lewat event yang terjadi di sisi client tanpa harus memuat ulang halaman, bagaimana menangani hitung mundur menggunakan SweetAlert, dan masih banyak lagi.
Dengan project ini pula, Anda dapat mempelajari struktur kerangka kerja di dalam sebuah project PHPMaker, sekaligus menjadi tahu lagi, bahwa untuk mengimplementasikan semua kebutuhan di atas tadi, cukup dengan menulis sedikit kode, baik di bagian Server Events, maupun di bagian Client Scripts. Selebihnya sudah ditangani lewat generate code oleh PHPMaker.
Pengembangan aplikasi web pun terasa lebih mudah, cepat, sekaligus menyenangkan dengan menggunakan PHPMaker.
Tinggalkan Balasan