Hari ini kita akan membahas betapa mudahnya me-redirect Pengguna Akhir ke halaman lain menggunakan Modal dialog di aplikasi web yang dihasilkan oleh PHPMaker 2021. Kemampuan ini baru saja saya ketahui ketika mencoba kode di server event Row_Inserting untuk me-redirect Pengguna dari halaman Add pada Modal dialog, ke halaman View yang juga masih menggunakan Modal dialog.
Artinya, dengan menggunakan PHPMaker 2021, kita sekarang sudah bisa me-redirect Pengguna dari halaman satu ke halaman lain, yang sama-sama menggunakan Modal dialog. Kemampuan ini sepertinya baru saya rasakan di versi 2021. Di versi-versi major sebelumnya, PHPMaker belum memiliki kemampuan tersebut. Satu lagi alasan kuat, mengapa harus selalu menggunakan PHPMaker 2021, yaitu versi terakhir saat artikel ini ditulis.
Katakanlah kita ingin membuat business-logic seperti ini melalui file project demo2021. Ketika Pengguna Akhir menambah lalu menyimpan data Order Details baru dari form/halaman Add, ternyata data tersebut sudah pernah dientri sebelumya dan sudah tersimpan di database. Sistem akan mencegah proses penyimpanan, menampilkan pesan error, lalu menampilkan data tersebut pada form/halaman View.
Perhatikanlah kata-kata bercetakan tebal pada alinea sebelum ini. Di situ tercantum form/halaman Add dan form/halaman View. Itu artinya, dalam hal ini kita menggunakan Modal dialog untuk kedua halaman tersebut. Untuk itu, maka pastikan kita sudah mengaktifkan pilihan Modal dialog yang masing-masing terdapat di bawah View Page dan Add Page pada Table setup milik table orderdetails di dalam project PHPMaker 2021.
Setelah itu, cukup copy lalu paste-kan kode PHP berikut ke dalam server event Row_Inserting milik table orderdetails, tepat sebelum baris kode return true:
// check the current new record in the database ... global $basePath; $row = ExecuteRow("SELECT OrderID, ProductID FROM orderdetails WHERE OrderID = " . $rsnew["OrderID"] . " AND ProductID = " . $rsnew["ProductID"]); if (!empty($row)) { // if not empty if ( ($row["OrderID"] == $rsnew["OrderID"]) && ($row["ProductID"] == $rsnew["ProductID"]) ) { // if found // show the failure message $this->setFailureMessage("OrderID <strong>" . $row["OrderID"] . "</strong> and ProductID <strong>" . $row["ProductID"] . "</strong> already exists. Here is the View page that displays the existing record."); // redirect to the View page $this->terminate($basePath . "orderdetails/view/" . $row["OrderID"] . "/" . $row["ProductID"]); return false; }
Dengan kata lain, kode selengkapnya di server event Row_Inserting di atas tadi, kira-kira seperti ini (asumsi: belum ada kode PHP lainnya):
// Row Inserting event function Row_Inserting($rsold, &$rsnew) { // Enter your code here // To cancel, set return value to false // check the current new record in the database ... global $basePath; $row = ExecuteRow("SELECT OrderID, ProductID FROM orderdetails WHERE OrderID = " . $rsnew["OrderID"] . " AND ProductID = " . $rsnew["ProductID"]); if (!empty($row)) { // if not empty if ( ($row["OrderID"] == $rsnew["OrderID"]) && ($row["ProductID"] == $rsnew["ProductID"]) ) { // if found // show the failure message $this->setFailureMessage("OrderID <strong>" . $row["OrderID"] . "</strong> and ProductID <strong>" . $row["ProductID"] . "</strong> already exists. Here is the View page that displays the existing record."); // redirect to the View page $this->terminate($basePath . "orderdetails/view/" . $row["OrderID"] . "/" . $row["ProductID"]); return false; } } return true; }
O iya, sekedar informasi saja. Contoh kode ini sebenarnya sudah pernah kita bahas pada artikel saya yang berjudul: Menampilkan Data pada Halaman View Jika Sudah Pernah Dientri di PHPMaker 2021. Di artikel tersebut penekanannya adalah bagaimana mudahnya kita me-redirect ke halaman View dari halaman Add. Sedangkan di artikel ini, penekanannya adalah kita dapat me-redirect dari satu Modal dialog ke Modal dialog berikutnya, tanpa harus menutup Modal dialog yang pertama.
Oke, kembali ke kode di atas. Pertama sekali, kita memeriksa data di table orderdetails berdasarkan field OrderID dan ProductID menggunakan global function ExecuteRow. Jika datanya ditemukan, maka tampilkan pesan error, lalu redirect Pengguna Akhir ke halaman View yang menampilkan data yang akan dientri tadi.
Perhatikan bahwa saat me-redirect ke halaman View menggunakan method terminate(), kita menambahkan variable global yang bernama $basePath dimana variabel ini digunakan di file layout.php yang berada di dalam sub-direktori views.
Artinya, karena URL standar/default yang digunakan oleh PHPMaker 2021 adalah orderdetailsview, sementara pada kode di atas tadi kita memisahkan jenis halamannya, sehingga URL nya menjadi orderdetails/view, maka kita wajib menambahkan variabel $basePath sebelum alamat halaman View.
Tujuannya, supaya jendela Modal dialog saat menampilkan halaman View tersebut, tombol dan caption pada Modal dialog nya akan otomatis menyesuaikan. Jika tidak, maka saat halaman View ditampilkan, caption di Modal dialog masih menggunakan Add atau Tambah, dan tombol Add serta Cancel akan terbawa, alias tidak sinkron dengan halaman View.
Sebelum mencoba hasilnya, pastikan kita sudah men-generate ulang semua file script menggunakan PHPMaker 2021 seperti biasa. Setelah itu, silahkan akses aplikasi web yang dihasilkan tersebut melalui browser. Login menggunakan username admin dan password master, lalu cobalah menambahkan data baru yang sudah pernah tersimpan di database melalui menu Order Details.
Saat menambah data, kita menggunakan Modal dialog untuk menampilkan halaman Add. Kemudian sistem me-redirect ke halaman View yang masih menggunakan Modal dialog. Saat data di halaman View ditampilkan, Modal dialog sebelumnya masih aktif dan tidak tertutup.
Satu lagi pengalaman yang luar biasa saat menggunakan PHPMaker 2021. Diam-diam ternyata PHPMaker sudah menambahkan kemampuan ini di versi 2021.
PHPMaker gitu, lho! 😉
sukirno kasau mengatakan
pak masino saya punya masalah di phpmaker 2021 ketika , hasil generate berjalan lancar di local, semenatara jika saya pindahkan ke hosting, reportnya tidak bisa terbuka pesan errornya “An internal error has occurred while processing your request.”, kira2 masalahya dimn ya? terima kasih sebelumnya
Masino Sinaga mengatakan
Aktifkan pengaturan berikut dari menu Tools -> Advanced Settings:
– Debug
– Treat PHP warnings and notices as errors
lalu generate ulang semua file script seperti biasa.
Setelah itu, upload ulang semua file script ke server hosting, lalu coba lagi akses aplikasi web-nya.
sukirno mengatakan
saya pernah alami yang seperti ini, sy jalankan seperti yang mas masino sarankan,, muncul errornya tapi anehnya kalau saya pindahkan hosting lain, berjalan dengan mulus, jadi kesimpulan saya masalahnya bukan pada phpmakernya tapi pada hostingnya., dan sampai skrg saya belum dapat solusi ahirnysa saya putuskan pindah hosting
Masino Sinaga mengatakan
Biasanya penyebab kasus seperti itu terjadi karena perbedaan versi PHP yang digunakan oleh hosting yang satu dengan yang lainnya berbeda-beda. Untuk PHPMaker 2021 disarankan untuk menggunakan PHP 7.2 ke atas.