Miklix

Ringkasan Cepat Kerangka Kerja SysOperation Dynamics AX 2012

Diterbitkan: 15 Februari 2025 pukul 22.35.20 UTC

Artikel ini menyediakan ikhtisar cepat (atau lembar contekan) tentang cara mengimplementasikan kelas pemrosesan dan pekerjaan batch dalam kerangka kerja SysOperation di Dynamics AX 2012 dan Dynamics 365 for Operations.


Halaman ini diterjemahkan oleh mesin dari bahasa Inggris agar dapat diakses oleh sebanyak mungkin orang. Sayangnya, terjemahan mesin belum merupakan teknologi yang sempurna, sehingga kesalahan dapat terjadi. Jika Anda mau, Anda dapat melihat versi bahasa Inggris aslinya di sini:

Dynamics AX 2012 SysOperation Framework Quick Overview

Informasi dalam posting ini berdasarkan Dynamics AX 2012 R3. Informasi ini mungkin berlaku atau tidak berlaku untuk versi lain. (Pembaruan: Saya dapat mengonfirmasi bahwa informasi dalam artikel ini juga berlaku untuk Dynamics 365 for Operations)


Tulisan ini hanya dimaksudkan sebagai ikhtisar singkat dan lembar contekan. Jika Anda baru mengenal kerangka kerja SysOperation, saya sangat menyarankan Anda untuk membaca white paper Microsoft tentang topik ini juga. Informasi di sini mungkin berguna jika Anda hanya perlu sedikit penyegaran tentang berbagai kelas yang terlibat dalam pengembangan operasi dengan kerangka kerja ini.

Ada variasinya, tetapi ketika saya menggunakan framework ini, saya biasanya menerapkan tiga kelas:

  • Kontrak data (harus memperluas SysOperationDataContractBase)
  • Layanan (harus memperluas SysOperationServiceBase)
  • Pengendali ( harus memperluas SysOperationServiceController)

Selain itu, saya juga dapat mengimplementasikan kelas UIBuilder ( harus memperluas SysOperationUIBuilder), tetapi itu hanya diperlukan jika dialog karena alasan tertentu harus lebih maju daripada yang dihasilkan kerangka kerja secara otomatis.


Kontrak data

Kontrak data menyimpan anggota data yang dibutuhkan untuk operasi Anda. Kontrak data dapat dibandingkan dengan makro CurrentList yang umum didefinisikan dalam kerangka kerja RunBase, tetapi diimplementasikan sebagai kelas. Kontrak data harus memperluas SysOperationDataContractBase, tetapi akan berfungsi meskipun tidak. Keuntungan memperluas kelas super adalah menyediakan beberapa informasi sesi yang mungkin berguna.

[DataContractAttribute]
class MyDataContract extends SysOperationDataContractBase
{
    ItemId itemId;
}

Dalam contoh ini, itemId adalah anggota data. Anda perlu menerapkan metode parm untuk setiap anggota data dan menandainya dengan DataMemberAttribute sehingga kerangka kerja mengetahui apa itu. Hal ini memungkinkan kerangka kerja untuk secara otomatis membuat dialog untuk Anda.

[DataMemberAttribute]
public ItemId parmItemId(ItemId _itemId = itemId)
{
    ;

    itemId = _itemId;
    return itemId;
}


Melayani

Kelas layanan adalah kelas yang berisi logika bisnis yang sebenarnya. Kelas ini tidak terkait dengan menampilkan dialog, pemrosesan batch, atau hal semacam itu – hal itu merupakan tanggung jawab kelas pengontrol. Dengan memisahkannya, Anda cenderung dapat mendesain kode dengan baik dan membuat kode yang lebih dapat digunakan kembali.

Seperti kelas kontrak data, kelas layanan tidak perlu mewarisi dari apa pun secara khusus, tetapi harus mewarisi dari kelas SysOperationServiceBase, setidaknya jika Anda mengharapkan bahwa layanan akan dijalankan sebagai pekerjaan batch, karena kelas super menyediakan beberapa informasi tentang konteks batch. Metode yang memulai operasi (yaitu menjalankan logika bisnis) harus mengambil objek dari kelas kontrak data Anda sebagai input dan harus dihiasi dengan [SysEntryPointAttribute]. Misalnya:

class MyService extends SysOperationServiceBase
{
}

dengan metode yang disebut run:

[SysEntryPointAttribute]
public void run(MyDataContract _dataContract)
{
    // run business logic here
}


Pengendali

Kelas pengontrol menangani eksekusi dan pemrosesan batch operasi Anda. Kelas ini juga memastikan bahwa kode dieksekusi dalam CIL untuk kinerja maksimum. Kelas pengontrol biasanya mewarisi kelas SysOperationServiceController, meskipun ada opsi lain juga.

class MyController extends SysOperationServiceController
{
}

Konstruktor kelas super mengambil nama kelas, nama metode, dan (opsional) mode eksekusi sebagai parameter. Nama kelas dan metode harus merupakan nama kelas layanan Anda dan metode yang harus dijalankan di dalamnya. Jadi, Anda dapat mengimplementasikan metode konstruksi pengontrol seperti ini:

public static MyController construct()
{
    ;

    return new MyController(classStr(MyService),
    methodStr(MyService, run));
}

Maka metode utama dari kelas MyController bisa sesederhana

public static void main(Args _args)
{
    ;

    MyController::construct().startOperation();
}

Dan pada dasarnya Anda sudah selesai. Contoh di atas jelas merupakan contoh yang sangat sederhana dan kerangka kerja tersebut berisi banyak sekali opsi dan kemungkinan lain, tetapi ini berfungsi sebagai ikhtisar singkat jika Anda perlu menyegarkan pemahaman Anda setelah beberapa lama tidak menggunakan kerangka kerja tersebut.

Bagikan di BlueskyBagikan di FacebookBagikan di LinkedInBagikan di TumblrBagikan di XBagikan di LinkedInPin di Pinterest

Mikkel Bang Christensen

Tentang Penulis

Mikkel Bang Christensen
Mikkel adalah pencipta dan pemilik miklix.com. Dia memiliki lebih dari 20 tahun pengalaman sebagai pemrogram komputer profesional/pengembang perangkat lunak dan saat ini bekerja penuh waktu di sebuah perusahaan IT besar di Eropa. Ketika tidak menulis blog, ia menghabiskan waktu luangnya untuk beragam minat, hobi, dan kegiatan, yang mungkin sampai batas tertentu tercermin dalam berbagai topik yang dibahas di situs web ini.