Miklix

Gambaran Keseluruhan Pantas Rangka Kerja SysOperation Dynamics AX 2012

Diterbitkan: 19 Mac 2025 pada 9:29:34 PTG UTC

Artikel ini menyediakan gambaran keseluruhan pantas (atau helaian cheat) tentang cara melaksanakan kelas pemprosesan dan kerja kelompok dalam rangka kerja SysOperation dalam Dynamics AX 2012 dan Dynamics 365 for Operations.


Halaman ini telah diterjemahkan mesin daripada bahasa Inggeris untuk menjadikannya boleh diakses oleh seramai mungkin orang. Malangnya, terjemahan mesin belum lagi merupakan teknologi yang sempurna, jadi ralat boleh berlaku. Jika anda mahu, anda boleh melihat versi bahasa Inggeris asal di sini:

Dynamics AX 2012 SysOperation Framework Quick Overview

Maklumat dalam pos ini adalah berdasarkan Dynamics AX 2012 R3. Ia mungkin sah atau tidak sah untuk versi lain. (Kemas kini: Saya boleh mengesahkan bahawa maklumat dalam artikel ini juga sah untuk Dynamics 365 for Operations)


Pos ini hanya bertujuan sebagai gambaran keseluruhan dan lembaran pantas. Jika anda baru dengan rangka kerja SysOperation, saya sangat mengesyorkan anda membaca kertas putih Microsoft mengenai subjek ini juga. Maklumat di sini mungkin berguna jika anda hanya memerlukan sedikit pemahaman mengenai kelas-kelas yang terlibat dalam pembangunan operasi dengan rangka kerja ini.

Terdapat variasi, tetapi apabila saya menggunakan rangka kerja ini, saya biasanya melaksanakan tiga kelas:

  • Kontrak data (sepatutnya mengembangkan SysOperationDataContractBase)
  • Perkhidmatan (sepatutnya mengembangkan SysOperationServiceBase)
  • Pengawal (mesti mengembangkan SysOperationServiceController)

Selain itu, saya juga mungkin melaksanakan kelas UIBuilder (mesti mengembangkan SysOperationUIBuilder), tetapi itu hanya perlu jika dialog untuk sebab tertentu perlu lebih maju daripada apa yang dijana secara automatik oleh rangka kerja.


Kontrak Data

Kontrak data memegang ahli data yang diperlukan untuk operasi anda. Ia boleh dibandingkan dengan makro CurrentList biasa yang ditakrifkan dalam rangka kerja RunBase, tetapi dilaksanakan sebagai kelas sebaliknya. Kontrak data sepatutnya mengembangkan SysOperationDataContractBase, tetapi ia akan berfungsi walaupun ia tidak melakukannya. Kelebihan mengembangkan kelas super adalah ia menyediakan beberapa maklumat sesi yang mungkin berguna.

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

Dalam contoh ini, itemId adalah ahli data. Anda perlu melaksanakan kaedah parm untuk setiap ahli data dan menandakannya dengan DataMemberAttribute supaya rangka kerja tahu apa itu. Ini membolehkan rangka kerja membina dialog secara automatik untuk anda.

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

    itemId = _itemId;
    return itemId;
}


Perkhidmatan

Kelas perkhidmatan adalah kelas yang mengandungi logik perniagaan yang sebenar. Ia tidak berkenaan dengan menunjukkan dialog, pemprosesan batch atau perkara seperti itu – itu adalah tanggungjawab kelas pengawal. Dengan memisahkan ini, anda lebih cenderung untuk merekabentuk kod anda dengan baik dan membuat kod yang lebih boleh digunakan semula.

Seperti kelas kontrak data, kelas perkhidmatan tidak perlu mewarisi daripada apa-apa secara khusus, tetapi ia harus mewarisi daripada kelas SysOperationServiceBase, sekurang-kurangnya jika anda menjangkakan bahawa perkhidmatan itu akan dijalankan sebagai pekerjaan batch, kerana kelas super menyediakan beberapa maklumat tentang konteks batch. Kaedah yang memulakan operasi (iaitu menjalankan logik perniagaan) mesti menerima objek kelas kontrak data anda sebagai input dan harus dihiasi dengan [SysEntryPointAttribute]. Contohnya:

class MyService extends SysOperationServiceBase
{
}

dengan kaedah yang dipanggil run:

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


Pengawal

Kelas pengawal mengendalikan pelaksanaan dan pemprosesan batch operasi anda. Ia juga memastikan bahawa kod dijalankan dalam CIL untuk prestasi maksimum. Kelas pengawal biasanya mewarisi daripada kelas SysOperationServiceController, walaupun terdapat pilihan lain juga.

class MyController extends SysOperationServiceController
{
}

Pengurus kelas super menerima nama kelas, nama kaedah dan (secara pilihan) mod pelaksanaan sebagai parameter. Nama kelas dan kaedah seharusnya adalah nama kelas perkhidmatan anda dan kaedah yang perlu dijalankan padanya. Jadi, anda mungkin melaksanakan kaedah pembina pengawal anda seperti ini:

public static MyController construct()
{
    ;

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

Kemudian kaedah utama kelas MyController boleh sesederhana ini

public static void main(Args _args)
{
    ;

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

Dan anda pada dasarnya telah selesai. Di atas adalah contoh yang sangat mudah dan rangka kerja ini mengandungi pelbagai pilihan dan kemungkinan lain, tetapi ini berfungsi sebagai gambaran keseluruhan yang cepat jika anda memerlukan sedikit pemahaman apabila anda belum menggunakan rangka kerja ini untuk seketika.

Kongsi di BlueskyKongsi di FacebookKongsi di LinkedInKongsi di TumblrKongsi di XKongsi di LinkedInSematkan pada Pinterest

Mikkel Christensen

Mengenai Pengarang

Mikkel Christensen
Mikkel ialah pencipta dan pemilik miklix.com. Beliau mempunyai lebih 20 tahun pengalaman sebagai pengaturcara komputer/pembangun perisian profesional dan kini bekerja sepenuh masa untuk sebuah syarikat IT Eropah yang besar. Apabila tidak menulis blog, dia menghabiskan masa lapangnya dengan pelbagai minat, hobi dan aktiviti, yang mungkin sedikit sebanyak dapat dilihat dalam pelbagai topik yang diliputi di laman web ini.