Ketika Pengguna sedang memperbarui (Update) data di sebuah Aplikasi Web, maka pasti ada kemungkinan bahwa Pengguna lainnya juga sedang memperbarui atau mengubah data yang sama. Tentu saja hal ini bisa mengakibatkan adanya konflik ketika proses Update tadi dilakukan.
Mari kita simak ilustrasi berikut. Katakanlah Pengguna A dan Pengguna B di saat yang hampir bersamaan sedang memperbarui Record yang sama. Pengguna A sedang memperbarui Record pertama di tabel cars dengan mengganti data Transmiss Speed Count dari nilai 5 ke 3. Pada saat yang hampir bersamaan, Pengguna B juga memperbarui Record pertama di tabel cars tadi dengan mengganti nilai 5 ke 4.
Ketika Pengguna B duluan menyimpan, maka sistem akan menampilkan pesan berhasil menyimpan data. Kemudian, ketika Pengguna A menyimpan data tersebut belakangan, maka sistem akan menampilkan pesan bahwa data tersebut baru saja diubah oleh Pengguna lain. Hal ini terjadi karena data lama di form Edit yang dibuka Pengguna A masih bernilai 5, sementara data yang tersimpan di Database sudah bernilai 4. Jadi, sistem mendeteksi adanya konflik saat mengubah Record yang sama.
PHPMaker dapat menangani hal ini dengan sangat mudah. PHPMaker sudah menyediakan sebuah server event yang bernama Row_UpdateConflict yang berada di bawah Server Events -> Table-Specific -> Common di dalam project PHPMaker Anda. Pastikan sebelumnya Anda sudah memilih salah satu Table yang Anda inginkan dari panel Database di sebelah kiri dari project PHPMaker Anda, untuk memastikan Anda menambahkan kode di server event pada Table yang tepat.
Server event ini akan dipanggil jika konflik ditemukan sebelum memperbarui sebuah Record (jika pengaturan Check Conflicts diaktifkan melalui pengaturan Table di PHPMaker). Argumen dari server event ini adalah Record yang lama (sebagai array) dan Record yang baru (juga sebagai array) yang akan diperbarui.
Anda dapat menggunakan server event ini untuk mengatasi konflik sesuai dengan kriteria Anda. Jika Anda ingin mengabaikan konflik atau Anda telah mengatasi konflik di event ini (dengan mengeset nilai baru ke argumen rsnew) kemudian ingin melanjutkan pemutahiran (Update) data, maka cukup kembalikan nilai FALSE. Sebaliknya, cukup kembalikan nilai TRUE.
Secara standar, server event ini mengembalikan nilai TRUE; yang artinya Aplikasi Web yang Anda bangun dengan menggunakan PHPMaker akan selalu menggunakan penanganan konflik yang disediakan oleh sistem. Dengan kata lain, kalaupun Anda tidak menambahkan kode Anda ke dalam server event ini, maka sistem akan otomatis mendeteksi konflik jika beberapa Pengguna sedang mengubah atau memperbarui Record yang sama.
// Row Update Conflict event function Row_UpdateConflict($rsold, &$rsnew) { // Masukkan kode Anda di sini // Untuk mengabaikan konflik, kembalikan nilai FALSE return TRUE; }
Beberapa hal yang perlu diperhatikan terkait dengan server event Row_UpdateConflict adalah:
- Karena pemrosesan data yang sedang terjadi untuk dibandingkan pada waktu berikutnya diperlukan, maka dengan menggunakan fitur ini akan menambah waktu yang dibutuhkan untuk memuat halaman. Untuk performansi yang lebih baik, hanya seratus bytes pertama dari field BLOB yang diproses secara standar, tapi ada kesempatan bahwa perubahan dari data BLOB tidak terdeteksi (jika sekian bytes pertama tidak berubah). Anda dapat meningkatkan jumlah bytes dari menu Tools -> Advanced Settings. Jika Anda ingin memproses semua bytes, cukup masukkan nilai 0.
- Anda dapat menggunakan server event Row_UpdateConflict untuk mengatasi konflik sesuai dengan business logic Anda melalui kode.
- Fitur ini tidak dapat diterapkan untuk Inline-Edit dan Grid-Edit.
[…] Mudahnya Mengatasi Konflik Saat Update Data di Aplikasi Web dari PHPMaker […]