Ketika Pengguna mencari data di sebuah Aplikasi Web, maka sebenarnya sistem melakukan penyaringan record dari seluruh kumpulan record yang terdapat di sebuah tabel, lalu hasilnya ditampilkan ke dalam halaman List. Sering kali sebelum hasil pencarian tadi akan ditampilkan ke halaman List, dibutuhkan kondisi penyaringan tambahan yang harus dilakukan oleh Web Developer agar hasil pencarian tadi sesuai dengan kebutuhan sistem.
Contoh: Khusus untuk Pengguna yang memiliki Level Pengguna (User Level) Operator ketika melakukan pencarian data, perlu ditambahkan kondisi tertentu yang sesuai dengan level tersebut pada bagian klausa WHERE dari pernyataan SQL ke Database.
PHPMaker sudah menyediakan server event yang bernama Recordset_Searching yang lokasinya berada di bawah Server Events -> Table-Specific -> Common pada project PHPMaker Anda. Pastikan sebelumnya Anda sudah memilih salah satu tabel 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.
Sesuai dengan namanya, server event ini akan dipanggil pada saat atau menjelang detik-detik pencarian record mulai dilakukan. Itu artinya, Anda sebagai Web Developer masih diberi kesempatan oleh PHPMaker untuk menambahkan kondisi tertentu di bagian klausa WHERE pada pernyataan SQL yang digunakan oleh sistem untuk menyaring record di tabel tersebut.
Server event ini merupakan member dari Class Table. Anda sebagai Web Developer dapat menggunakan member lainnya yang terdapat di Class ini (jika dibutuhkan). Ada satu argumen untuk server event Recordset_Searching, yaitu variabel $filter. Kalau Anda perhatikan dengan seksama, sebenarnya server event ini mirip dengan server event yang dulu sudah pernah kita bahas, yaitu Recordset_Selecting.
Perhatikan contoh berikut:
function Recordset_Searching(&$filter) { if (CurrentUserLevel() == 1) // level 1 = Operator ew_AddFilter($filter, "Field1 = '1234'"); // tambahkan ekspresi filter }
Dalam contoh tersebut, Anda sebagai Web Developer dapat menambahkan (bukan menimpa) kriteria penyaringan dengan menggunakan Global Function yang sudah disediakan oleh PHPMaker bernama ew_AddFilter hanya untuk Pengguna yang memiliki level dengan kode 1 (Operator). Fungsi ini memiliki dua argumen. Argumen pertama merupakan variabel $filter, dan argumen kedua merupakan ekspresi filter yang diinginkan. Pastikan ekspresi filter tersebut valid untuk disisipkan ke dalam pernyataan SQL. Dalam contoh di atas Field1 = ‘1234’ merupakan ekspresi filter yang valid untuk field yang bernama Field1 dan memiliki tipe string/varchar/char.
Perbedaan antara Recodset_Searching dengan Recordset_Selecting adalah, server event Recordset_Searching hanya dipanggil ketika Pengguna melakukan pencarian data, baik dengan menggunakan metode Pencarian Cepat (Quick Search) maupun Pencarian Lanjutan (Advanced Search) di mana hasilnya akan ditampilkan kembali ke halaman List.
Sedangkan server event Recordset_Selecting akan dipanggil di beberapa halaman berikut: List, View, Edit, Delete, dan Update.
Untuk kesekian kalinya lagi, Web Developer sangat dimanjakan oleh PHPMaker untuk menambahkan business-logic tertentu sesuai dengan kebutuhan, sehingga Aplikasi Web yang dihasilkan oleh PHPMaker dapat dibuat dengan sangat cepat, mudah, dan lagi-lagi… menyenangkan! 🙂
Halo Bang Masino,
Mau nanya.
Saya punya lookup table.
Saya mau menyaring lookup tersebut dari Parent field. Tapi ada tambahan kriteria.
Oleh karena itu, saya tidak pakai Parent filter.
Page ini bentuknya header dan detail.
Di page header, saya pilih supplier A.
Kemudian di page detail, saya harus menyaring tabel master item dengan supplier “A” dan “N/A”
Saya tambahkan di lookup selecting seperti ini:
if ($fld->FldName == “material_id”) {
$sFilter = “supplier = ‘” . Page(“tr_header”)->supplier->CurrentValue . “‘”;
ew_AddFilter($filter, $sFilter);
}
TIdak berhasil.
Jadi intinya saya mau ambil field Supplier di header.
Mohon saran Bang. Terima kasih banyak.
Tidak berhasilnya seperti apa ya? Apakah ada error yang muncul?
Saya sudah pilih nama Supplier yang berbentuk lookup table di header.
Di detail, saya klik lookup table untuk pilih Material, “no records found”.
Secara sintax php ataupun mysql sepertinya benar, tapi value dari CurrentValue tidak ada.
Coba ganti kode ini
menjadi:
Sudah saya ganti sesuai instruksi, tapi hasilnya “no records found”.
Sepertinya lookup table di page detail (meski dalam bentuk grid) tidak bisa mengambil value di page header.
Karena ketika saya ganti pakai fixed value, filter sukses.
Coba pakai fitur Dynamic Selection List (baca topik tersebut dari menu Help PHPMaker). Fitur ini mendukung Master/Detail juga.
Bang Masino, apakah Server Event ini bisa menghilangkan Karakter saat Pencarian data ?
jadi misalnya ada Field Nota = nomor_nota.
Outuput = N-22001.A
di Database = N22001A
nah, jika User melakukan input dengan “tanda baca” sesuai Output, maka tidak ketemu datanya,
bagaimana caranya menghilangkan tanda baca tersebut Saat akan memuat Pencarian .
atau ada Server Event lain yang bisa digunakan ?
Sepertinya bisa pakai server event Recordset_SearchValidated atau Recordset_Searching.