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? 🙂
hendra mengatakan
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”
Masino Sinaga mengatakan
Kode yang Anda buat itu salah. Seharusnya seperti ini (diasumsikan nama field yang menyimpan Email penerima adalah “Email_Penerima”):
hendra mengatakan
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 ?
Masino Sinaga mengatakan
Iya.
hendra mengatakan
ok trm kasih, saya coba nya
hendra mengatakan
ok sudah bisa.
Bagaimana menyembunyikan Content berikut ?
Record status changed:
table: test
key value: 00001
action: Inserted
Masino Sinaga mengatakan
Mainkan property ReplaceContent dari object Email. Baca menu Help untuk info lebih lanjut!
Rudy mengatakan
Pak Masino, gimana cara nya menambahkan attachment di email notifikasi tersebut.
Masino Sinaga mengatakan
Tambahkan kode ini di server event tersebut:
rudy mengatakan
oke sipp,
kalau cc dan bcc pak ?
Masino Sinaga mengatakan
Mirip seperti di atas:
sidik mengatakan
Pak Masino,
Kalo Emailsender nya ingin dibuat custome, Email sender sesuai dengan account yg login.
trims
Masino Sinaga mengatakan
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.
desthy mengatakan
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.
Masino Sinaga mengatakan
Silahkan baca kembali artikel di atas. Pada prinsipnya, Anda bisa menggunakan server event Email_Sending seperti yang sudah dibahas di artikel itu.
Rudy Budiana mengatakan
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
Rudy Budiana mengatakan
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
Masino Sinaga mengatakan
Biasanya, karena field Id tersebut tidak diaktifkan dari Fields -> Multi-Update Page -> Multi-Update.
Rudy Budiana mengatakan
field Id nya disable (gray) pak .. tidak bisa diapa-apakan
Masino Sinaga mengatakan
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 (?).
Rudy Budiana mengatakan
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
Masino Sinaga mengatakan
Karena CurrentPageID untuk edit single tidak sama dengan edit di grid-edit.
Rudy Budiana mengatakan
bisakah menyimpan function send email pada saat event grid edit.. bukan di email_sending ?
Masino Sinaga mengatakan
Bisa.
sidik mengatakan
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;
}
Masino Sinaga mengatakan
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.
ikhsan mengatakan
kalau currentPage nya di gridadd penulisannya CurrentPageID() == “gridadd” gitu ya pak ?
Masino Sinaga mengatakan
Bukan, karena saat mode gridadd, nilai dari function CurrentPageID() adalah “list”. Coba CurrentPage()->CurrentAction
leo mengatakan
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
Masino Sinaga mengatakan
Tentu bisa, pakai server event User_LoggedOut yang akan dieksekusi setelah user berhasil logout.