Membuat Popup Notifikasi Di AX
Disini kami menggunakan dynamics AX 2009, dimana pada AX versi ini sebenarnya tidak tersedia fitur real-time push notification antar user secara native. Artinya, ketika User A melakukan transaksi, sistem tidak bisa langsung menampilkan popup otomatis ke User B tanpa mekanisme tambahan.
- Membuat Popup Notifikasi Di AX
- 1️⃣ Konsep Solusi di AX 2009
- 2️⃣ Step 1 – Membuat Tabel Notifikasi
- 3️⃣ Step 2 – Mengirim Notifikasi (Dari User A)
- 4️⃣ Step 3 – Membuat Form Listener
- 6️⃣ Step 5 – Menjalankan Listener Otomatis Saat Login
- ⚠️ Best Practice Production (Sangat Disarankan)
- 🚀 Pengembangan Lebih Lanjut
Namun, sebagai programmer AX, kita bisa membuat solusi near real-time notification menggunakan:
- Tabel notifikasi
- Form listener
- Timer (setTimeOut)
- Startup class
Artikel ini membahas step-by-step lengkap dan best practice production-nya
🎯 Studi Kasus
- User A membuat transaksi
- User B yang sedang membuka AX langsung mendapatkan popup notifikasi.
1️⃣ Konsep Solusi di AX 2009
Karena AX 2009 berbasis session terpisah per user:
- Tidak ada broadcast antar client
- Tidak ada event push system
- Tidak ada SignalR / Notification service
Solusi yang stabil & bisa digunakan adalah:
✅ Simpan notifikasi di tabel
✅ Client melakukan polling tiap beberapa detik
✅ Jika ada data → tampilkan popup
2️⃣ Step 1 – Membuat Tabel Notifikasi
AOT → Data Dictionary → Tables → New Table
Nama tabel: MyUserNotification
Field yang Dibutuhkan:
Field NameTypeKeterangan
| ToUserId | UserId (EDT) | User tujuan |
| MessageText | String (500) | Isi pesan |
| IsRead | NoYesId | Status sudah dibaca |
| CreatedDateTime | UtcDateTime | Waktu dibuat |
🔹 Wajib Tambahkan Index (Penting untuk Performa)
Index Name: IdxUser
Kenapa membuat index penting?
Karena timer akan melakukan query berkala. Tanpa index, performa bisa drop.
3️⃣ Step 2 – Mengirim Notifikasi (Dari User A)
Contoh coding ketika transaksi berhasil:
MyUserNotification notif;
ttsBegin;
notif.clear();
notif.ToUserId = ‘USERB’;
notif.MessageText = “Transaksi baru telah dibuat.”;
notif.IsRead = NoYes::No;
notif.CreatedDateTime = DateTimeUtil::utcNow();
notif.insert();ttsCommit;
Anda bisa letakkan kode ini di:
- Button clicked()
- Method posting()
- Class service
Atau event transaksi tertentu
4️⃣ Step 3 – Membuat Form Listener
AOT → Forms → New Form
Nama: NotificationListener
>> Form ini tidak perlu design kompleks.
5️⃣ Step 4 – Menambahkan Timer di Form
Override method init():
public void init()
{
super();element.setTimeOut(identifierStr(checkNotification), 5000);
}
Penjelasan:
5000 = 5 detik
Setiap 5 detik sistem akan menjalankan method checkNotification()
🔹 Tambahkan Method Baru di Form
void checkNotification()
{
MyUserNotification notif;while select forUpdate notif
where notif.ToUserId == curUserId()
&& notif.IsRead == NoYes::No
{
Box::info(notif.MessageText);notif.IsRead = NoYes::Yes;
notif.update();
}element.setTimeOut(identifierStr(checkNotification), 5000);
}
⚠ Penting:
Timer harus dipanggil kembali di akhir method agar terus berjalan.
6️⃣ Step 5 – Menjalankan Listener Otomatis Saat Login
Agar semua user otomatis mengaktifkan listener saat login.
Buka:
Classes → SysStartupCmd
Override method run():
public void run()
{
super();new MenuFunction(menuitemDisplayStr(NotificationListener),
MenuItemType::Display).run();
}
Sekarang setiap user login, form listener akan berjalan otomatis.
🎯 Hasil Akhir:
✔ User A kirim notifikasi
✔ Tersimpan di tabel
✔ User B dalam ±5 detik muncul popup
✔ Tidak perlu restart AX
✔ Stabil di AX 2009
⚠️ Best Practice Production (Sangat Disarankan)
1️⃣ Jangan Polling Terlalu Cepat
Ideal: 5000–10000 ms
Terlalu cepat bisa membebani SQL Server.
2️⃣ Hindari Spam Popup
Jika notifikasi banyak, gunakan agregasi:
int countNotif;
select count(RecId) from notif
where notif.ToUserId == curUserId()
&& notif.IsRead == NoYes::No;if (countNotif > 0)
{
Box::info(strFmt(“Anda memiliki %1 notifikasi baru.”, countNotif));
}
3️⃣ Tambahkan Expiry Date (Optional Advanced)
Tambahkan field: ExpiredDateTime
Agar notifikasi lama tidak diproses lagi.
4️⃣ Tambahkan DataAreaId (Multi Company)
Jika sistem multi-company, tambahkan filter:
&& notif.dataAreaId == curext()
🚀 Pengembangan Lebih Lanjut
Solusi ini bisa dikembangkan menjadi:
- Notifikasi ke semua user
- Notifikasi berdasarkan role
- Notifikasi approval workflow
- Sistem alert overdue otomatis
- Popup non-blocking (form kecil modeless)
Di Microsoft Dynamics AX 2009 (5.0) memang tidak ada sistem broadcast notification bawaan, namun dengan kombinasi:
- Tabel notifikasi
- Timer pada form
- Startup trigger
Anda dapat membuat sistem notifikasi antar user yang stabil dan production-ready.
Dengan memanfaatkan tabel notifikasi dan mekanisme timer pada form, Anda dapat membangun sistem popup antar user yang stabil dan mendekati real-time di Microsoft Dynamics AX 2009 (versi 5.0).
Meskipun AX 2009 tidak menyediakan fitur broadcast notification secara native, pendekatan polling berbasis database ini terbukti aman, fleksibel, dan mudah dikembangkan sesuai kebutuhan bisnis. Baik untuk approval, alert transaksi, reminder, maupun monitoring operasional.
Dengan penerapan index yang tepat dan interval timer yang terkontrol, solusi ini dapat digunakan pada environment production tanpa membebani performa sistem secara signifikan.
Mukena Parasut Ringan & Anti Kusut!
🌟 Mukena parasut berkualitas, ringan, cepat kering, dan tidak mudah kusut. Cocok untuk aktivitas harian maupun traveling. Tampil simpel tapi tetap nyaman saat ibadah! ✨
~ shopee.co.id ~
Mukena Terusan Modern & Super Praktis
⚡ Mukena terusan dengan desain kekinian, rapi dan tidak ribet. Nyaman digunakan tanpa harus mengatur bagian atas dan bawah. Solusi praktis untuk wanita aktif! 🌸
~ shopee.co.id ~
Artikel Terkait
Rahasia dari Nol sampai Online: Panduan Lengkap Membuat Website untuk Pemula yang Ingin Langsung Praktik
Contoh Aplikasi Sederhana: “Hello World” di Microsoft Power Apps
Cara Unpublish atau Menonaktifkan Aplikasi Power Apps Setelah Dipublish
Kisah Inspiratif: Meningkatkan Produktivitas dengan Teknik Pomodoro
Cara Belajar Bahasa Asing dengan Metode Online yang Efektif dan Fleksibel
Mengoptimalkan Waktu dengan Metode Belajar “Two-minute Rule”