Mungkin banyak yang mengira bahwa kedua Field Mandatory Pencarian (Field yang wajib diinput datanya sebelum melakukan pencarian) di halaman yang satu ini datanya merupakan teks bebas. Padahal, sebenarnya kedua Field tersebut aslinya merupakan Field yang Lookup masing-masing ke tabel Propinsi dan Kabupaten.
Tentu saja hal ini sangat mudah diimplementasikan pada Aplikasi Web yang dihasilkan oleh PHPMaker, seperti yang sudah pernah saya bahas melalui artikel ini.
PHPMaker memiliki kemampuan yang sangat dahsyat sekaligus dengan fleksibilitas yang sangat tinggi untuk mengubah Lookup Field menjadi TextBox melalui fitur Extended Search yang terdapat di dalam panel Pencarian Cepat (Basic Search) maupun Pencarian Lanjutan (Advanced Search).
Selain itu, kedua Field Propinsi dan Kabupaten pada contoh kasus di atas dapat dijadikan sebagai Field Mandatory untuk melakukan pencarian data. Artinya, di kedua Field tersebut harus diinput terlebih dulu datanya sebelum melakukan pencarian.
Apabila kedua Field atau salah satu di antara Field tersebut tidak diinput datanya lalu Pengguna tetap melakukan pencarian data dengan mengklik tombol Cari, maka sistem akan menampilkan pesan yang memberitahukan bahwa kedua Field harus diisi terlebih dulu. Seketika itu juga proses pencarian akan dibatalkan oleh sistem.
Tidak hanya itu saja, kita pun dapat menentukan jumlah minimal karakter yang boleh dimasukkan pada kedua Field tadi.
PHPMaker memberikan kesempatan kepada Web Developer untuk membuat Field Mandatory Pencarian seperti itu. Dari contoh kasus di atas tadi, maka kita sebagai Web Developer cukup hanya menambahkan sedikit kode PHP berikut pada server event Form_CustomValidate yang terdapat di bawah lokasi berikut: Server Events -> Table-Specific -> List Page:
// Form Custom Validate event function Form_CustomValidate(&$CustomError) { // Return error message in CustomError // Jika Propinsi dan/atau Kabupaten belum ditentukan if ($this->Propinsi->AdvancedSearch->SearchValue == "" && !$this->Propinsi->AdvancedSearch->IssetSession() && isset($_GET["cmd"])) { $CustomError = "Propinsi belum ditentukan."; return FALSE; } elseif ($this->Kabupaten->AdvancedSearch->SearchValue == "" && !$this->Kabupaten->AdvancedSearch->IssetSession() && isset($_GET["cmd"])) { $CustomError = "Kabupaten belum ditentukan."; return FALSE; } // Jika Propinsi dan/atau Kabupaten tidak ditentukan setelah sebelumnya pencarian pernah dilakukan if ($this->Propinsi->AdvancedSearch->SearchValue == "" && isset($_GET["cmd"])) { $CustomError = "Propinsi belum ditentukan."; return FALSE; } elseif ($this->Kabupaten->AdvancedSearch->SearchValue == "" && isset($_GET["cmd"])) { $CustomError = "Kabupaten belum ditentukan."; return FALSE; } // Jika kata kunci Propinsi kurang dari 4 karakter if ( (strlen(trim($this->Propinsi->AdvancedSearch->SearchValue)) > 0) && (strlen(trim($this->Propinsi->AdvancedSearch->SearchValue)) < 4) ) { $CustomError = "Kata kunci Propinsi minimal 4 karakter."; return FALSE; } // Jika kata kunci Kabupaten kurang dari 3 karakter if ( (strlen(trim($this->Kabupaten->AdvancedSearch->SearchValue)) > 0) && (strlen(trim($this->Kabupaten->AdvancedSearch->SearchValue)) < 3) ) { $CustomError = "Kata kunci Kabupaten minimal 3 karakter"; return FALSE; } return TRUE; }
Perhatikanlah kode tersebut. Kita dapat menangani jika Field Propinsi dan/atau Kabupaten belum diisi, maka proses pencarian tidak dapat dilanjutkan. Demikian juga dengan kata kunci di Field Propinsi dan Kabupaten, masing-masing dapat kita tentukan jumlah minimal karakter-nya. Jika tidak memenuhi syarat, maka kita cukup mengisi variabel $CustomError dengan pesan error yang kita inginkan, lalu mengembalikan nilai FALSE untuk membatalkan proses pencarian.
Seperti namanya, server event Form_CustomValidate sangat cocok digunakan untuk validasi kriteria pencarian sebelum proses pencarian dilakukan. Betapa PHPMaker sudah menyediakan kerangka kerja yang demikian rapi, powerful, sekaligus fleksibel.
Wow, keren sekali PHPMaker, bukan? ๐
Charly mengatakan
Mat Pagi Pak Masino…
Mohon bantuannya, saya ingin mengambil nilai terpilih SELECT hasil dari pencairan untuk dijadikan nilai ForeignKey ke ke Link yang ini saya tuju, saya sudah coba-coba dengan Kode di bawah ini tapi tidak berhasil, mohon Pencerahannya Pak Masino…Makasih
// Page Render event
function Page_Render()
{
$this->OtherOptions[“addedit”]->UseDropDownButton = FALSE; // jangan gunakan style DropDownButton
$my_options = &$this->OtherOptions; // pastikan menggunakan area OtherOptions
$my_option = $my_options[“addedit”]; // dekat tombol addedit
$my_item = &$my_option->Add(“mynewbutton”); // tambahkan tombol baru
$my_item->Body = “Cetak“;
}
Charly mengatakan
“$my_item->Body = “Cetak“;”
Charly mengatakan
Maaf link nya gak jadi
href=\”” . HtmlEncode(“rptcetaklapprogrespekerjaan?” . Config(“TABLE_SHOW_MASTER”) . “=v_101_menu_lap_progres_pekerjaan&” . GetForeignKeyUrl(“fk_KdBulan”, get(“x_KdBulan”)) . “”) . “\”
Charly mengatakan
Kurang lebih seperti ini Pak Masino, mohon bantuannya
Masino Sinaga mengatakan
Pakai PHPMaker versi berapa?
Charly mengatakan
PHPMaker 2021 Pak Masino
Masino Sinaga mengatakan
Oke, pertanyaan selanjutnya: tidak bisanya itu seperti apa kondisinya? Apakah ada pesan error atau output yang muncul misalnya seperti apa?
Charly mengatakan
Siang Pak Masino, maaf baru bales atas tanggapan Pak Masino.
untuk pesan errornya tidak ada, tetapi output nya tidak muncul loading terus tanpa ada tampilan outputnya.
Dalam hal ini, yang saya inginkan menambahkan tombol diluar dari ListTable untuk tombol cetak, dan tombol cetak akan menampilan hasil pilihan Bulan dari SELECT, jika SELECT nya saya pilih Januari maka KdBulan berisi nilai 01 dan seterusnya dan akan meanpilan halaman REPORT. Permasalahanya get(โx_KdBulanโ) nilainya tidak bisa berubah sesuai dengan pilihan bulan pada SELECT
Mohon bantuannya Pak Masino, Makasih…salam
Masino Sinaga mengatakan
Coba tekan tombol F12 di browser, lalu cek apakah ada error Javascript dari panel Console.
Charly mengatakan
Maaf Pak Masino, apakah ini errornya
DevTools failed to load source map: Could not load content for chrome-extension://fheoggkfdfchfphceeifdbepaooicaho/sourceMap/chrome/scripts/iframe_form_detection.map: System error: net::ERR_BLOCKED_BY_CLI
Masino Sinaga mengatakan
Coba kalau pakai browser yang lain, apakah ada Javascript error setelah tekan F12?
Dani mengatakan
Pak Masino saya bertanya di luar context yang sedang dibahas, kenapa phpmaker ini mendapat nilai yang kurang bagus di gtmatrix di bagian *render-blocking resources* apakah phpmaker tidak menghendle hal tersebut yang membuat aplikasi sangat lambat jika di akses ratusan orang secara bersamaan
Masino Sinaga mengatakan
Karena kode Javascript yang digunakan aplikasi web akan dimuat secara asynchronously. Artinya, Pengguna harus menunggu terlebih dulu sampai jQuery dimuat, barulah kode Javascript tadi dijalankan.
Masino Sinaga mengatakan
Sebenarnya tidak ada kaitannya antara render-blocking resources dengan aplikasi sangat lambat jika diakses ratusan orang secara bersamaan.
Proses render itu terjadi di sisi browser si client, bukan di sisi server. Jadi, tidak ada kaitan di antara keduanya.
Aplikasi lambat itu ada banyak faktor yang menyebabkan. Bisa karena spec server-nya yang tidak bagus, bisa juga karena jaringan/network yang tidak bagus.
Dani mengatakan
Terima Kasih banyak pak atas balasan yang sangat mendetail menjadikan saya berfikir ulang tentang aplikasi yang saya buat.
Masino Sinaga mengatakan
Sama-sama mas.
Barusan saya menulis artikel terkait:
Mengapa PHPMaker Memuat Kode Javasript dan CSS secara Asynchronous?.
Masino Sinaga mengatakan
Ini ada artikel bagus mengenai Perbedaan antara Synchronous dan Asynchronous di Javascript.
PHPMaker pasti punya pertimbangan tersendiri, mengapa mereka memutuskan untuk menjalankan kode Javascript (termasuk juga kode Stylesheet) secara asynchronous.
Masino Sinaga mengatakan
Seperti yang dijelaskan juga pada artikel ini:
Async & Defer โ How to Load JavaScript Properly.