Seperti yang kita ketahui, PHPMaker memiliki kemampuan untuk menghasilkan halaman List yang menampilkan kumpulan Record pada sebuah tabel. Di setiap Record pada tabel tersebut terdapat elemen checkbox yang memungkinkan Pengguna untuk memilih satu atau beberapa Record dengan memberi tanda centang. Selanjutnya Pengguna bisa memperbarui atau menghapus Record yang sudah memiliki tanda centang tadi.
Sebenarnya ini merupakan fitur standar yang terdapat di halaman List. Pengguna dapat memperbarui (Multi-Update) atau bahkan menghapus (Multi-Delete) beberapa Record sekaligus berdasarkan Record yang terpilih melalui elemen checkbox tersebut.
Berangkat dari fitur tersebut, ternyata Web Developer masih membutuhkan kemudahan untuk melakukan aksi tertentu lainnya terhadap beberapa Record yang terpilih pada halaman List tadi. Tentu saja selain menggunakan fitur Multi-Update dan Multi-Delete. Lebih tepatnya fitur pemutahiran data tanpa harus menampilkan halaman seperti Multi-Update.
Masih bingung? Mari simak contoh berikut. Katakanlah seorang Pengguna ingin mengubah nilai yang terdapat pada field tertentu milik beberapa Record tanpa harus membuka halaman Multi-Update. Untuk itu, maka Pengguna harus memberi tanda centang pada elemen checkbox milik beberapa Record tadi, lalu mengklik sebuah tombol di halaman List tadi untuk selanjutnya memperbarui Record-Record tadi.
PHPMaker sudah menyediakan server event yang terkait dengan kebutuhan tersebut. Namanya adalah Row_CustomAction yang terdapat di halaman List. Seperti namanya, server event ini akan dipanggil oleh baris Record yang sudah ditandai dengan tanda centang melalui elemen checkbox untuk melakukan aksi yang bisa dikostumisasi.
Server event ini terkait erat dengan server event lain yang bernama Page_Load milik halaman List. Artinya, untuk menerapkan kebutuhan aksi kostum tadi, maka Anda sebagai Web Developer harus menulis kode di kedua server event tersebut (Page_Load dan Row_CustomAction).
Langsung saja kita simak contoh berikut.
function Page_Load() { $this->CustomActions["pesanan"] = "Perbarui Pesanan"; }
ID dari aksi kostum tersebut adalah pesanan, sedangkan teks yang akan ditampilkan pada tombol untuk mengeksekusi aksi kostum tadi adalah Perbarui Pesanan.
Dari contoh itu, sistem memperbarui nilai property CustomActions milik class Table di server event Page_Load. Akibatnya, sistem akan menambahkan elemen checkbox di setiap Record pada tabel yang terdapat di halaman List. Ya, mirip dengan fitur Multi-Update dan Multi-Delete.
Setelah itu, pastikan juga Anda menambahkan kode berikut di server event Row_CustomAction:
function Row_CustomAction($action, $row) { if ($action == "pesanan") ew_Execute("UPDATE orders SET Sudah_Pesan = 'Y' WHERE ID_Pesanan = " . $row["ID"]); // Asumsi: field ID bertipe integer }
Dari kode di server event Row_CustomAction tersebut, maka sistem akan memperbarui tabel orders dengan mengeset atau memperbarui nilai Y pada field Sudah_Pesan berdasarkan field ID_Pesanan.
Ketika Pengguna Aplikasi Web mengklik link atau tombol yang bertuliskan Perbarui Pesanan (sesuai dengan nama dari CustomAction tadi), maka sistem akan mengirim halaman List tersebut kembali ke dirinya sendiri. Pada saat itu terjadi, maka server event Row_CustomAction akan dipanggil (setelah memanggil server event Page_Load dan sebelum memanggil server event Page_Render) untuk setiap baris Record yang terpilih untuk memproses aksi kostum tadi.
Wouw! Betapa dahsyatnya menambahkan business-logic sendiri untuk mengubah beberapa Record yang diinginkan oleh Pengguna, bukan? 🙂
Cak Sobri mengatakan
Awalnya bingung dengan server event ini karna di versi 9 belum ada.. Ilmu baru, dasyatnya ruar biasa… 😀
Masino Sinaga mengatakan
Betul, sangat sederhana pengimplementasiannya, tetapi sangat dahsyat hasilnya. 🙂
Cak Sobri mengatakan
Bagaimana jika action pesanan disable di beberapa row di halaman list dengan syarat tertentu… ?
Masino Sinaga mengatakan
Tidak bisa dibuat seperti itu. Solusinya, jangan menggunakan Row_CustomAction, tapi dengan memanipulasi fitur/link Edit milik setiap record (bukan Multi-Update).
Anda bisa menyembunyikan link/fitur Edit yang terdapat di record tertentu dengan menggunakan server event ListOptions_Rendered atau Row_Rendered. Baca topik Server Events and Client Scripts di file Help PHPMaker.