Event vs Trigger di Business Central AL: Panduan Waktu Eksekusi untuk Developer
By Mirko Peters ·
Kuasai pengembangan AL di Business Central dengan memahami kapan harus menggunakan trigger dan kapan menggunakan event subscriber untuk logika bisnis kustom, validasi, dan pemeriksaan posting.
Automatically translated with AI from the original post. Read the English original

Memahami perbedaan antara trigger dan event di pengembangan AL Microsoft Dynamics 365 Business Central sangat penting untuk menulis extension yang bersih dan mudah dipelihara. Memilih mekanisme eksekusi yang tepat memastikan aturan validasi Anda berjalan pada waktu yang tepat, mencegah entri data yang salah, dan menjaga pembaruan cloud tetap lancar tanpa menduplikasi kode aplikasi inti.
Poin Penting
- Trigger ditanamkan langsung di dalam objek AL tertentu untuk mengeksekusi kode segera ketika peristiwa objek atau modifikasi data terjadi.
- Event subscriber memungkinkan extension Anda mendengarkan notifikasi tingkat sistem tanpa memodifikasi kode aplikasi inti atau menyalin proses native yang besar.
- Memilih antara event 'on before' dan 'on after' menentukan apakah kode kustom Anda dapat mencegah transaksi atau hanya bereaksi terhadap tindakan yang telah selesai.
- Waktu yang tepat memastikan aturan validasi menangkap kesalahan sejak dini sekaligus mencegah hambatan performa selama operasi berat seperti posting pesanan penjualan.
Arsitektur Logika Kustom di Business Central
Saat memperluas Dynamics 365 Business Central menggunakan Application Language (AL) milik Microsoft, menulis kode hanyalah separuh dari pekerjaan. Tantangan sebenarnya terletak pada menentukan di mana dan kapan kode tersebut harus dieksekusi. Baik Anda menambahkan field level reward sederhana ke data pelanggan maupun menerapkan pemeriksaan kepatuhan yang kompleks sebelum faktur dibuat, keawetan dan stabilitas extension Anda bergantung pada cara Anda terhubung ke sistem.
Model pengembangan lama sering mendorong developer untuk menulis ulang kode aplikasi native secara langsung. Jika Anda ingin sebuah pemeriksaan berjalan sebelum dokumen diposting, Anda menyisipkan logika langsung ke dalam rutin posting inti. Meskipun cara ini berhasil untuk sementara, setiap pembaruan besar Microsoft berubah menjadi proyek rekonsiliasi yang menyakitkan. Pengembangan extension Business Central modern mengandalkan model modular berbasis aplikasi. Alih-alih menulis ulang rutin standar, developer menggunakan titik koneksi bawaan, khususnya trigger dan event, untuk menyisipkan logika kustom secara aman di samping kode aplikasi standar.
Mengupas Trigger AL
Trigger adalah lokasi yang telah ditentukan di dalam objek AL tempat Anda dapat menulis kode yang dieksekusi secara otomatis ketika tindakan tertentu terjadi. Setiap objek standar dan kustom, termasuk tabel, extension tabel, halaman, extension halaman, laporan, dan codeunit, memiliki titik-titik native ini.
Pertimbangkan skenario praktis berikut: organisasi Anda telah menambahkan field Reward ID kustom pada data pelanggan. Ketika pengguna memilih level reward dari daftar dropdown, Anda perlu sistem segera memverifikasi apakah akun pelanggan diblokir atau apakah atribut sekunder perlu diperbarui. Dengan memanfaatkan trigger OnValidate pada field tersebut, kode Anda dijalankan tepat pada saat pengguna melakukan perubahan.
Kapan Menggunakan Trigger
Trigger paling tepat digunakan ketika logika bisnis Anda hanya berlaku untuk satu objek dan konteks terdekatnya. Contohnya:
- Memvalidasi bahwa bidang tanggal kustom berada dalam kuartal bisnis yang dapat diterima.
- Menjalankan logika inisialisasi saat halaman kartu dibuka untuk entri baru.
- Mengosongkan nilai bidang dependen ketika opsi utama dibatalkan pilihannya.
Karena trigger dibatasi secara ketat pada objek induknya, kode lokal menjadi mudah ditemukan, dibaca, dan dipelihara dalam jangka panjang.
Memanfaatkan Event dan Event Subscriber di Business Central
Sementara trigger menangani tindakan lokal, proses multi-langkah yang lebih luas, seperti memposting pesanan penjualan, mengirim persediaan, atau membuat jurnal keuangan, memerlukan pendekatan yang lebih canggih. Anda tidak bisa begitu saja menyisipkan kode validasi di tengah rutin posting yang besar tanpa merusak model ekstensi.
Di sinilah event dan event subscriber menjadi sangat penting. Bayangkan event sebagai pemberitahuan resmi yang disiarkan oleh aplikasi standar Business Central. Sistem mengumumkan tonggak penting, misalnya 'sebuah record akan segera disisipkan' atau 'sebuah dokumen penjualan akan segera diposting.' Ekstensi Anda dapat menyimak pemberitahuan ini menggunakan prosedur event subscriber.
Ketika Business Central memunculkan event bernama tersebut, prosedur subscriber Anda aktif, menjalankan aturan kustom, lalu memberi lampu hijau atau menghentikan proses dengan pesan kesalahan yang deskriptif. Yang terpenting, ekstensi Anda tidak perlu menyalin, menempel, atau menulis ulang mesin posting yang mendasarinya.
Kekuatan Waktu: OnBefore vs. OnAfter
Saat membangun event subscriber di AL, konvensi penamaan menunjukkan waktu eksekusinya. Memahami waktu ini sangat penting untuk keandalan sistem:
- Event OnBefore: Event ini dijalankan tepat sebelum tindakan standar selesai atau dikomit. Ini adalah penempatan yang ideal untuk logika pemblokiran dan pemeriksaan validasi. Jika dokumen kepatuhan yang diperlukan tidak ada pada pesanan penjualan, event posting OnBefore dapat mendeteksi kekurangan tersebut, membatalkan transaksi, dan menampilkan pesan peringatan yang membantu.
- Event OnAfter: Event ini dijalankan segera setelah proses standar berhasil diselesaikan. Gunakan subscriber OnAfter ketika Anda perlu bereaksi terhadap tindakan yang sudah selesai, misalnya membuat tugas tindak lanjut secara otomatis, memperbarui tabel log eksternal, atau memberi tahu account manager setelah pesanan selesai diposting sepenuhnya.
Aturan yang berjalan terlalu lambat tidak dapat mencegah transaksi yang keliru, sedangkan aturan yang berjalan terlalu dini mungkin belum memiliki data yang dihitung selama rutin standar. Memetakan logika Anda ke signature event yang tepat menghilangkan jebakan ini.
Kesimpulan
Menguasai keseimbangan antara trigger objek dan event subscriber mengubah cara Anda mendekati ekstensi Business Central. Dengan memanfaatkan trigger lokal untuk validasi bidang dan event subscriber untuk proses lintas sistem, Anda memastikan kustomisasi tetap tangguh terhadap pembaruan cloud sekaligus menjaga lingkungan tetap cepat dan aman.
Untuk mendalami prinsip desain aplikasi modern dan mendengarkan pembahasan arsitektur dari para ahli, Dengarkan episode lengkapnya di M365 FM Podcast. Simak untuk mempelajari bagaimana cloud architect dan developer mengoptimalkan ekosistem Microsoft demi kesuksesan bisnis di dunia nyata!
Pertanyaan Umum
Apa perbedaan utama antara trigger dan event subscriber dalam AL?
Trigger adalah titik eksekusi kode yang telah ditentukan dan langsung berada di dalam objek AL tertentu (seperti bidang tabel atau halaman), sedangkan event subscriber adalah prosedur terpisah dalam ekstensi Anda yang menyimak pemberitahuan yang dipublikasikan dari aplikasi dasar atau objek lain tanpa mengubah kode asli.
Bisakah event subscriber mencegah pesanan penjualan diposting?
Bisa. Jika Anda menggunakan event subscriber 'on before' yang terkait dengan proses posting, kode kustom Anda dapat mengevaluasi kondisi bisnis, menampilkan pesan kesalahan, dan menghentikan transaksi sebelum rutin posting menyelesaikan entri.
Kapan sebaiknya saya menggunakan trigger validasi bidang tabel alih-alih event subscriber?
Gunakan trigger validasi bidang tabel ketika aturan bisnis Anda secara ketat terkait dengan perubahan nilai bidang tertentu, misalnya memeriksa apakah Reward ID kustom ada atau memastikan bidang status terkait diperbarui segera setelah input pengguna.
Mengapa waktu eksekusi sangat penting saat menulis event subscriber AL?
Waktu eksekusi menentukan apakah kode Anda berjalan sebelum atau sesudah proses inti selesai. Jika aturan Anda berjalan terlalu awal, data yang diperlukan mungkin belum terisi; jika berjalan terlalu lambat, Anda kehilangan kemampuan untuk memblokir transaksi yang tidak valid.