Ada empat server event yang sering digunakan oleh Web Developer untuk mengimplementasikan business-logic saat data sedang atau sudah berhasil ditambah atau diperbarui. Mereka adalah Row_Inserting, Row_Inserted, Row_Updating, dan Row_Updated.
Akhiran ing artinya sedang berlangsung, sedangkan akhiran ed sudah selesai berlangsung. Row_Inserting dan Row_Updating masing-masing artinya saat sistem sedang menambah dan saat sistem sedang memperbarui data ke Database. Sedangkan Row_Inserted dan Row_Updated masing-masing artinya saat sistem sudah selesai menambah dan memperbarui data ke Database.
Di keempat server event tersebut, masing-masing memiliki dua parameter, yaitu $rsold dan $rsnew. Arti dari kata rsold adalah recordset old, sedangkan rsnew adalah recordset new. Gampang kan?
Karena dari namanya demikian informatif, seharusnya kita tidak mengalami kesulitan lagi untuk membedakan keduanya, apalagi untuk menggunakannya. Object $rsold digunakan jika ingin mengambil nilai dari recordset yang lama, sedangkan object $rsnew jika ingin mengambil nilai dari recordset yang baru, atau jika ingin mengubah nilai recordset yang baru tadi.
Di server event Row_Inserting, kita akan lebih sering bermain-main dengan $rsnew. Mengapa? Karena semua data yang sedang ditambah pasti berasal dari recordset yang baru. kita menggunakan $rsold di server event ini saat menambah data dengan menggunakan cara Copy. Jika kita ingin mengetahui data aslinya, gunakan $rsold, karena data yang disalin tersebut disimpan di $rsold.
Contoh, di server event Row_Inserting kita ingin menyesuaikan nilai field Nama_Lengkap supaya saat disimpan ke Database semua karakter berubah menjadi karakter huruf besar semua, maka gunakan object $rsnew:
$rsnew["Nama_Lengkap"] = strtoupper($rsnew["Nama_Lengkap"]);
Di server event Row_Updating, kita harus berhati-hati membedakan antara $rsold dan $rsnew. Jika kita yakin data di suatu field saat Edit data tidak akan diubah (misalnya karena diset ReadOnly dari Fields setup), maka kita cukup menggunakan $rsold untuk mengambil nilai dari field tadi. Tapi jika kita yakin nilai di suatu field pada event ini pasti berubah saat proses Edit data, maka gunakan $rsnew.
Contoh, saat proses Edit data, nilai field Nama_Lengkap harus diubah nilainya berdasarkan gabungan dari Nama_Awal dan Nama_Akhir yang datanya tidak diubah pada server event Row_Updating, maka kodenya menjadi:
$rsnew["Nama_Lengkap"] = $rsold["Nama_Awal"] . " " . $rsold["Nama_Akhir"];
Dari contoh barusan, data pada field Nama_Awal dan Nama_Akhir tidak mengalami perubahan. Kita menggunakan object $rsold, yaitu ambil nilainya dari recordset yang lama.
Kadang-kadang kita tidak bisa memastikan apakah perubahan nilai di suatu field akan disimpan atau tidak, maka cara amannya kita bisa membandingkan antara nilai pada $rsold dan $rsnew, contoh:
$rsnew["Alamat"] = ($rsold["Alamat"] <> $rsnew["Alamat"]) ? $rsnew["Alamat"] : $rsold["Alamat"];
Perhatikanlah dari contoh barusan. Karena kita tidak bisa memastikan apakah field Alamat ini nantinya akan berubah atau tidak, tapi kita ingin saat proses Edit data Alamat harus tetap ikut disimpan, maka bandingkan nilai di recordset lama dan recordset baru. Jika tidak sama, maka itu artinya nilai pada recordset baru sudah berubah, lalu gunakan nilai tersebut. Sedangkan jika sama, maka tetap gunakan nilai pada recordset lama.
Dari penjelasan di kedua server event itu, seharusnya sudah bisa dibedakan $rsold dan $rsnew pada dua server event yang lainnya, yaitu Row_Inserted dan Row_Updated.
Betapa mudahnya, bukan? PHPMaker memang tidak ada lawannya! 😉
yocki mengatakan
Ok. tq artikelnya. bermanfaat sekali.. 🙂
Rudy mengatakan
siang Pak masino, kenapa isi object $rsnew tetep data lama ? padahal saat data sudah di edit menjadi data yang baru.
contoh : Kolom Site : Jakarta value nya saya rubah menjadi Bandung,
tapi saat row_updated
nilai $rsNew tetep Jakarta bukan Bandung
Masino Sinaga mengatakan
Kode yang Anda tulis seperti apa?
Rudy mengatakan
function Row_Updated($rsold, &$rsnew) {
//echo “Row Updated”;
$sShift = ew_ExecuteScalar(“SELECT Shift FROM shift WHERE id='”.$rsnew[“Shift”].”‘”);
$iFact_code = ew_ExecuteScalar(“SELECT FactCode FROM Plant WHERE Kode='”.$rsnew[“Site”].”‘”);
return TRUE;
}
Nilai $rsnew[“Site”] selalu nilai yg lama pak
walaupun sudah saya ganti saat proses edit data.
Masino Sinaga mengatakan
Cek, apakah field Kode itu sebagai Primary Key. Jika iya, maka data tersebut tidak bisa diubah.
Rudy mengatakan
Bukan Pak,, Bukan Primary key
Masino Sinaga mengatakan
Tampilkan aja datanya dengan echo.