Ringkasan Cepat Kerangka Kerja SysOperation Dynamics AX 2012
Diterbitkan: 15 Februari 2025 pukul 22.35.20 UTC
Terakhir diperbarui: 12 Januari 2026 pukul 08.38.51 UTC
Artikel ini memberikan gambaran singkat (atau contekan) tentang cara mengimplementasikan kelas pemrosesan dan pekerjaan batch dalam kerangka kerja SysOperation di Dynamics AX 2012 dan Dynamics 365 for Operations.
Dynamics AX 2012 SysOperation Framework Quick Overview
Informasi dalam posting ini didasarkan pada Dynamics AX 2012 R3. Informasi ini mungkin berlaku atau mungkin tidak berlaku untuk versi lain. (Update: Saya dapat mengkonfirmasi bahwa informasi dalam artikel ini juga berlaku untuk Dynamics 365 for Operations)
Postingan ini hanya dimaksudkan sebagai gambaran singkat dan contekan. Jika Anda baru mengenal kerangka kerja SysOperation, saya sangat menyarankan Anda untuk membaca white paper Microsoft tentang subjek ini juga. Informasi di sini mungkin berguna jika Anda hanya perlu penyegaran singkat tentang berbagai kelas yang terlibat dalam mengembangkan operasi dengan kerangka kerja ini.
Ada beberapa variasi, tetapi ketika saya menggunakan kerangka kerja tersebut, saya biasanya mengimplementasikan tiga kelas:
- Kontrak data (harus memperluas SysOperationDataContractBase)
- Layanan (harus memperluas SysOperationServiceBase)
- Pengontrol (harus memperluas SysOperationServiceController)
Selain itu, saya mungkin juga mengimplementasikan kelas UIBuilder (harus memperluas SysOperationUIBuilder), tetapi itu hanya diperlukan jika dialog karena alasan tertentu harus lebih canggih daripada yang dihasilkan secara otomatis oleh framework.
Kontrak data
Kontrak data menyimpan anggota data yang dibutuhkan untuk operasi Anda. Ini dapat dibandingkan dengan makro CurrentList tipikal yang didefinisikan dalam kerangka kerja RunBase, tetapi diimplementasikan sebagai sebuah kelas. Kontrak data harus memperluas SysOperationDataContractBase, tetapi akan tetap berfungsi meskipun tidak. Keuntungan dari memperluas kelas induk adalah menyediakan beberapa informasi sesi yang mungkin berguna.
class MyDataContract extends SysOperationDataContractBase
{
ItemId itemId;
}
Dalam contoh ini, itemId adalah anggota data. Anda perlu mengimplementasikan metode parm untuk setiap anggota data dan menandainya dengan DataMemberAttribute agar kerangka kerja mengetahui apa itu. Ini memungkinkan kerangka kerja untuk secara otomatis membangun dialog untuk Anda.
public ItemId parmItemId(ItemId _itemId = itemId)
{
;
itemId = _itemId;
return itemId;
}
Melayani
Kelas layanan adalah kelas yang berisi logika bisnis sebenarnya. Kelas ini tidak berkaitan dengan menampilkan dialog, pemrosesan batch, atau hal-hal semacamnya – itu adalah tanggung jawab kelas pengontrol. Dengan memisahkan hal ini, Anda lebih mungkin merancang kode Anda dengan baik dan membuat kode yang lebih dapat digunakan kembali.
Seperti halnya kelas kontrak data, kelas layanan tidak perlu mewarisi dari kelas tertentu, tetapi sebaiknya mewarisi dari kelas SysOperationServiceBase, setidaknya jika Anda mengharapkan layanan tersebut dijalankan sebagai pekerjaan batch, karena kelas induk menyediakan beberapa informasi tentang konteks batch. Metode yang memulai operasi (yaitu menjalankan logika bisnis) harus menerima objek dari kelas kontrak data Anda sebagai input dan harus diberi dekorasi [SysEntryPointAttribute]. Misalnya:
{
}
Dengan metode yang disebut run:
public void run(MyDataContract _dataContract)
{
// run business logic here
}
Pengontrol
Kelas controller menangani eksekusi dan pemrosesan batch operasi Anda. Kelas ini juga memastikan bahwa kode dieksekusi di CIL untuk performa maksimal. Kelas controller biasanya mewarisi dari kelas SysOperationServiceController, meskipun ada pilihan lain juga.
{
}
Konstruktor dari kelas induk menerima nama kelas, nama metode, dan (opsional) mode eksekusi sebagai parameter. Nama kelas dan nama metode harus berupa nama kelas layanan Anda dan metode yang akan dijalankan di dalamnya. Jadi, Anda dapat mengimplementasikan metode konstruktor pengontrol Anda seperti ini:
{
;
return new MyController(classStr(MyService),
methodStr(MyService, run));
}
Maka metode utama dari kelas MyController bisa sesederhana ini:
{
;
MyController::construct().startOperation();
}
Dan pada dasarnya Anda sudah selesai. Contoh di atas jelas sangat sederhana dan kerangka kerja ini berisi banyak pilihan dan kemungkinan lain, tetapi ini berfungsi sebagai gambaran singkat jika Anda perlu menyegarkan kembali pengetahuan Anda setelah lama tidak menggunakan kerangka kerja ini.
Bacaan Lebih Lanjut
Jika Anda menikmati postingan ini, Anda mungkin juga menyukai saran berikut:
- Menggunakan Kerangka Kerja SysExtension untuk Menemukan Subkelas Mana yang Akan Dibuat Instansi di Dynamics AX 2012
- Kesalahan "Tidak ada kelas metadata yang ditentukan untuk objek kontrak data" di Dynamics AX 2012
- Memanggil Layanan Dokumen AIF Langsung dari X++ di Dynamics AX 2012
