Ada beberapa server event baru yang ditambahkan mulai PHPMaker versi 11. Empat di antaranya terkait dengan proses penambahan (Add) maupun pembaruan (Edit) untuk beberapa Record sekaligus dalam sebuah Grid (Grid-Add dan Grid-Edit). Selain itu, keempat server event tersebut juga terkait dengan pengolahan data di halaman Master/Detail-Add dan Master/Detail-Edit.
Server event yang pertama yang akan kita bahas bernama Grid_Inserting. Dari namanya saja kita sudah bisa menebak, bahwa server event ini akan dieksekusi ketika sistem sedang berusaha menyimpan beberapa Record sekaligus melalui sebuah Grid. Artinya, kita sebagai Web Developer masih diberi kesempatan oleh PHPMaker untuk membatalkan proses penyimpanan jika business-logic yang kita terapkan di server event ini tidak sesuai dengan Record-record yang akan dimasukkan tersebut. Cukup dengan mengembalikan nilai FALSE untuk membatalkan.
Karena server event ini dijalankan saat beberapa Record sedang ditambahkan, maka halaman yang terkait dengan server event ini adalah Grid-Add untuk satu buah Table. Selain itu, server event Grid_Inserting ini juga diterapkan pada halaman Master/Detail-Add untuk sebuah Table detail. Server event ini tidak memiliki argumen.
Anda dapat menggunakan server event ini untuk memeriksa semua Record yang akan dimasukkan. Jika Anda ingin membatalkan proses penambahan data, maka cukup kembalikan nilai FALSE. Sebaliknya, kembalikan nilai TRUE. Secara standar, server event Grid_Inserting akan mengembalikan nilai TRUE.
Perlu diingat, jika Anda ingin memeriksa masing-masing Record, tidak perlu menggunakan server event ini, tapi cukup gunakan server event Row_Inserting (silahkan cari dan baca artikel saya yang sudah membahas mengenai hal ini). Seperti yang sudah kita ketahui, server event Row_Inserting dipanggil untuk setiap Record yang terdapat di dalam grid.
Dalam contoh berikut akan ditunjukkan bagaimana mudahnya memeriksa nilai di field Percentage untuk semua Record sebelum disimpan ke database haruslah bernilai 100. Jika tidak, maka batalkan proses penambahan Record dan tampilkan pesan.
Satu hal lagi yang perlu diingat, bahwa urutan server event Grid_Inserting dipanggil sebelum server Row_Inserting dieksekusi. Artinya, nilai field pada saat itu belumlah dimuat oleh sistem, tapi Anda dapat memuat mereka dengan menggunakan cara Anda sendiri.
function Grid_Inserting() { $rsnew = $this->GetGridFormValues(); // Dapatkan nilai form dari record-record yang baru sebagai sebuah array dari array //var_dump($rsnew); die(); // Hilangkan komentar di kode ini untuk mengecek record-record dan mengakhiri script $sum = 0; foreach ($rsnew as $row) // Loop melalui record-record yang baru $sum += intval($row["Percentage"]); if ($sum < 100) { // Untuk membatalkan, cukup kembalikan nilai False $this->CancelMessage = "Total persentase haruslah 100."; $this->setFailureMessage($this->CancelMessage); return FALSE; } return TRUE; }
Keren, ‘kan? 🙂
Sandy mengatakan
halo pak masino sinaga.Apakah fungsi grid inserting ini bisa menghitung Grand Total dari SubTotal, seperti Kasir di Point Of Sales, Sebelum di eksekusi bisa kliatan terlebih dahulu Grand Totalnya… mohon penjelasannya , terima kasih
Masino Sinaga mengatakan
Kalau untuk menghitung di sisi server bisa, tapi tidak untuk ditampilkan di sisi client.
Kalau ingin menampilkan hasil perhitungan di Grid saat data diketik di bagian detail, Anda bisa menggunakan project Stock Inventory Management untuk PHPMaker 2023.
Sandy mengatakan
adakah cara / coding yang bisa dibuat contoh pak?
Masino Sinaga mengatakan
Sayangnya tidak ada, karena cukup rumit untuk menjelaskannya lewat artikel.
Itulah kenapa lebih simpel menjelaskannya lewat sebuah contoh project yang bisa langsung di-download, dipelajari, sehingga lebih mudah untuk mengimplementasikannya.