Aplikasi Web manapun pasti tidak akan pernah terlepas dari fitur pengiriman Email saat event tertentu terjadi. PHPMaker sudah menyediakan sebuah server event yang bernama Email_Sending yang lokasinya berada di bawah Server Events -> Table-Specific -> Common di dalam project PHPMaker Anda. Pastikan sebelumnya Anda sudah memilih salah satu Table 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.
Server event ini dipanggil sebelum pemberitahuan lewat Email dikirimkan oleh sistem. Anda dapat mengkostumisasi isi Email dengan menggunakan server event ini. Server event Email_Sending memiliki parameter berikut:
- Email – instansiasi dari object Email yang mengandung semua informasi mengenai Email yang akan dikirim. Ini merupakan instansiasi dari class cEmail (lihat contoh di bawah).
- Args – sebuah array yang mengandung informasi tambahan.
Beberapa event atau halaman yang menggunakan fitur pengiriman Email adalah sebagai berikut:
- Halaman Add, Record yang baru dalam format array dapat diakses dengan menggunakan $Args[“rsnew”].
- Halaman Copy, Record yang lama dalam format array dapat diakses dengan $Args[“rsold”].
- Halaman Edit/Update, data yang lama dari Record dalam format array dapat diakses dengan $Args[“rsold”], sedangkan data yang baru dari Record dalam format array dapat diakses dengan $Args[“rsnew”].
- Halaman Register, Record yang baru dalam format array dapat diakses dengan menggunakan $Args[“rs”].
Anda dapat mendapatkan nilai di Field tertentu, misalnya dengan menggunakan kode berikut:
$rsnew = $Args["rsnew"]; $MyValue = $rsnew["MyField"];
atau
$MyValue = $Args["rsnew"]["MyField"];
Kembalikan nilai FALSE di dalam server event ini jika Anda ingin membatalkan pengiriman Email.
Untuk halaman Grid-Add/Edit atau Update, ada lebih dari satu Record, sehingga argumennya merupakan array dari array (array multidimensional).
Mari simak contoh berikut. Katakanlah ada sebuah field Email di suatu Record, dan Anda ingin mengganti data penerima Email menjadi nilai dari field tersebut.
function Email_Sending(&$Email, &$Args) { //var_dump($Email); //var_dump($Args); //exit(); if (CurrentPageID() == "add") { // Jika halaman Add $Email->Recipient = $Args["rsnew"]["MyEmailField"]; // Ganti penerima ke nilai field pada record baru $Email->Subject = "My New Subject"; // Ganti subject Email $Email->Content .= "\nAdded by " . CurrentUserName(); // Tambahkan isi Email lainnya } return TRUE; }
Menyenangkan sekali, bukan? 🙂
Saya sudah setting $Email->Recipient = $Args[“rsnew”][“penerima@domain.com”];
pada kondisi CurrentPageID() == “add”
Juga sudah aktifkan Email Notofication On Add.
Saat save ada pesan berikut : “You must provide at least one recipient email address”
Kode yang Anda buat itu salah. Seharusnya seperti ini (diasumsikan nama field yang menyimpan Email penerima adalah “Email_Penerima”):
Itu khan tiap ada inputkan order, saya send email, apakah yg dimaksud di table Order Master ditambahkan 1 field, lalu “Email_Penerima” adalah field tersebut ?
Iya.
ok trm kasih, saya coba nya
ok sudah bisa.
Bagaimana menyembunyikan Content berikut ?
Record status changed:
table: test
key value: 00001
action: Inserted
Mainkan property ReplaceContent dari object Email. Baca menu Help untuk info lebih lanjut!
Pak Masino, gimana cara nya menambahkan attachment di email notifikasi tersebut.
Tambahkan kode ini di server event tersebut:
oke sipp,
kalau cc dan bcc pak ?
Mirip seperti di atas:
Pak Masino,
Kalo Emailsender nya ingin dibuat custome, Email sender sesuai dengan account yg login.
trims
Gunakan global function yang bernama ew_ExecuteScalar untuk mengambil data Email dari user yang sedang login, lalu assign-kan data Email tersebut seperti pada komentar yang ini.
sore bang masino, saya ingin tanya:
bagaimana cara mengirimkan email otomatis (untuk user dan untuk ReportTo) setelah user mengisi/edit/hapus data?
misalkan dari contoh demo phpmaker yg ada, userA (dengan ReportTo userG) mengisi data/edit/hapus data, maka akan ada notifikasi otomatis ke email userA dan userG sebagai atasannya.
email notifikasi kepada userA:
Anda telah menambahkan data tgl 12-10-2016 10:16:13 (diambil dari ew_CurrentDateTime) pada tabel Order Detail dengan perincian sbb:
Order ID : 10248
Product ID : Queso Cabrales
Unit Price : $14.00
Quantity : 13
Discount : 0%
Sub Total : $182.00
dan juga akan ada email notifikasi otomatis untuk atasan dari userA (Report To) yaitu userG :
Bawahan Anda, “UserA” telah menambahkan data tgl 12-10-2016 10:16:13 pada tabel Order Detail dengan perincian sbb:
Order ID : 10248
Product ID : Queso Cabrales
Unit Price : $14.00
Quantity : 13
Discount : 0%
Sub Total : $182.00
begitu pula bila user mengedit/menghapus data akan ada email konfirmasi kepada user & atasannya (Reports To). bagaimana caranya pak mengirim 2 email notifikasi sekaligus seperti itu? terimakasih.
Silahkan baca kembali artikel di atas. Pada prinsipnya, Anda bisa menggunakan server event Email_Sending seperti yang sudah dibahas di artikel itu.
pak masino, saya membuat multi-update dalam suatu view (bukan Table), (database menggunakan Mysql) dan menambahkan business logic di server event row_updated dan email_sending, proses update data berhasil dan business logic di row_update berjalan dengan baik, tapi business logic di email_sending tidak berjalan, saya mau menampung isi field Id di variable $id_inv dengan code sebagai berikut :
$id_inv = $Args[“rsold”][“Id”];
tapi setelah di jalankan $id_inv kosong, lalu saya coba dengan code :
$id_inv = $Args[“rsold”][“Id”];
hasilnya tetap sama yaitu kosong, ini karena apa ya ?
mohon pencerahan nya
maaf saya ralat :
tapi setelah di jalankan $id_inv kosong, lalu saya coba dengan code :
$id_inv = $Args[“rsnew”][“Id”];
hasilnya tetap sama yaitu kosong, ini karena apa ya ?
mohon pencerahan nya
Biasanya, karena field Id tersebut tidak diaktifkan dari Fields -> Multi-Update Page -> Multi-Update.
field Id nya disable (gray) pak .. tidak bisa diapa-apakan
Coba cek nilainya dengan kode ini:
var_dump($Args[“rsold”][“Id”]);
Kemungkinan karena multi-update itu, makanya nilai Id-nya berbeda-beda, sehingga tidak bisa ditangkap oleh sistem (?). Atau mungkin nilai-nya menjadi dalam bentuk array (?).
Dear pak Masino
kenapa ya send email nya tidak berfungsi saat event grid edit, tapi jika edit dengan metode biasa (single) berhasil .
mohon pencerahan nya
Terimakasih
Karena CurrentPageID untuk edit single tidak sama dengan edit di grid-edit.
bisakah menyimpan function send email pada saat event grid edit.. bukan di email_sending ?
Bisa.
Pak Masino,
Untuk yang kirim email setelah edit apakah hanya dengan mengubah
add menjadi edit dan rsnew menjadi rsold, terimakasih
function Email_Sending(&$Email, &$Args) {
if (CurrentPageID() == “Edit”) {
$Email->Recipient = $Args[“rsold”][“MyEmailField”]; // Ganti penerima ke nilai field pada record baru
$Email->Subject = “My New Subject”; // Ganti subject Email
$Email->Content .= “\nAdded by ” . CurrentUserName(); // Tambahkan isi Email lainnya
}
return TRUE;
}
CurrentPageID() selalu mengembalikan nilai dalam huruf kecil semua. Jadi, “Edit” itu seharusnya “edit”.
Untuk rsold atau rsnew, tergantung kondisi. Kalau nilainya berubah di halaman Edit, gunakan rsnew, sebaliknya rsold.
kalau currentPage nya di gridadd penulisannya CurrentPageID() == “gridadd” gitu ya pak ?
Bukan, karena saat mode gridadd, nilai dari function CurrentPageID() adalah “list”. Coba CurrentPage()->CurrentAction
Halo pak, saya mau nanya bisakah di phpmaker sewaktu user habis login bisa kirim email berdasarkan hasil dari sql misal saya ambil table food
select * from food where expired date > sysdate
hasilnya di kirim ke email yang menangani stok food tersebut apakah bisa phpmaker menangani hal seperti ini atau hanya bisa di even add, update, delete saja, mohon petunjuknya
Tentu bisa, pakai server event User_LoggedOut yang akan dieksekusi setelah user berhasil logout.