Seperti yang sudah kita ketahui, PHPMaker menyediakan server event Row_CustomAction yang memudahkan Web Developer untuk mengeksekusi kode kostum sebanyak jumlah baris yang terpilih di tabel pada halaman List. Melalui server event ini, kita sebagai Web Developer misalnya dapat mengeksekusi sebuah perintah SQL sebanyak jumlah Record yang terpilih tadi.
Suatu ketika, kita ingin memastikan sekaligus menandai Record yang terakhir terpilih di halaman List tersebut. Katakanlah khusus untuk Record yang terakhir, kita akan mengeksekusi perintah SQL yang berbeda dengan Record-Record atau baris sebelumnya. Pernah ingin melakukan hal seperti itu? Bingung bagaimana caranya? Jangan khawatir! Berikut ini solusinya.
Seperti biasa, kita cukup hanya menambahkan sedikit kode PHP saja pada dua buah server event berikut, yaitu Page_Load dan Row_CustomAction.
Katakanlah kita akan memperbarui data di table1 berdasarkan field id sebagai Primary Key, di mana untuk perubahan data di baris terakhir berbeda dengan di baris-baris sebelumnya.
Ini kode di server event Page_Load yang terdapat di bawah bagian Server Events -> Table-Specific -> List Page:
// Page Load event function Page_Load() { //echo "Page Load"; $GLOBALS["RowSelected"] = 0; $this->CustomActions["desc"] = "Update Description"; }
Dalam contoh kode di atas, kita mendeklarasikan sebuah variabel global yang bernama RowSelected dan mengesetnya dengan nilai nol. Di bawahnya kita menambahkan sebuah tombol yang bernama Update Description dengan kata kunci penghubung desc kepada server event Row_CustomAction di bawah ini.
Selanjutnya tambahkan kode berikut pada server event Row_CustomAction yang terdapat di bawah bagian Server Events -> Table-Specific -> List Page:
// Row Custom Action event function Row_CustomAction($action, $row) { // Return FALSE to abort if ($action == "desc") { $row_max = sizeof(explode("OR", $this->GetKeyFilter())); $GLOBALS["RowSelected"]++; if ($row_max == $GLOBALS["RowSelected"]) { ew_Execute("UPDATE table1 SET description = 'This is the last row' WHERE id='" . $row["id"]."'"); } else { ew_Execute("UPDATE table1 SET description = 'Not the last row' WHERE id='" . $row["id"]."'"); } } return TRUE; }
Perhatikanlah pada kode di atas. Kita mengambil jumlah baris maksimum yang terpilih dengan mengoptimalkan method GetKeyFilter milik object Page atau Table, yaitu dengan memisahkan String berdasarkan kata kunci OR sebagai pemisahnya menggunakan function explode, lalu mengambil jumlah elemen dengan menggunakan function sizeof.
Selanjutnya nilai pada variabel global yang sebelumnya kita definisikan di server event Page_Load ditambahkan dengan nilai satu. Hal ini berfungsi sebagai counter di server event Row_CustomAction. Jika jumlah baris maksimum sama dengan nilai counter saat itu, maka itu artinya saat itu sistem sedang memproses baris yang terakhir. Dalam hal ini kita memisahkan perintah UPDATE untuk baris record terakhir dengan baris record-record sebelumnya.
Mudah sekali bukan? 😀
mardiutomo mengatakan
bagaimana mendeteksi sql kita berhasil atau menghasilkan error pada saat kita menggunakan perintah ew_Execute
Masino Sinaga mengatakan
Coba ini: