Miklix

Dynamics AX 2012 SysOperation Framework 快速概覽

已發佈: 2025年2月15日 晚上10:35:51 [UTC]

本文簡要概述(或備忘單)如何在 Dynamics AX 2012 和 Dynamics 365 for Operations 中的 SysOperation 框架中實作處理類別和批次作業。


該頁面是由英語機器翻譯而來的,以便盡可能多的人可以訪問。不幸的是,機器翻譯還不是一項完善的技術,因此可能會出現錯誤。如果您願意,可以在這裡查看原始英文版本:

Dynamics AX 2012 SysOperation Framework Quick Overview

這篇文章中的資訊是基於 Dynamics AX 2012 R3。對於其他版本來說它可能有效,也可能無效。 (更新:我可以確認本文中的資訊也適用於 Dynamics 365 for Operations)


這篇文章僅作為一個快速概述和備忘單。如果您不熟悉 SysOperation 框架,我強烈建議您也閱讀 Microsoft 有關該主題的白皮書。如果您只是需要快速了解使用該框架進行開發操作所涉及的不同類,那麼這裡的資訊可能會很有用。

存在多種變化,但是當我使用框架時,我通常實作三個類別:

  • 資料契約(應擴展 SysOperationDataContractBase)
  • 服務(應擴展 SysOperationServiceBase)
  • 控制器(必須擴展 SysOperationServiceController)

此外,我還可以實作一個 UIBuilder 類別(必須擴展 SysOperationUIBuilder),但這僅當對話方塊由於某種原因必須比框架自動生成的對話框更高級時才是必要的。


資料契約

資料契約保存了你的操作所需的資料成員。它可以與 RunBase 框架中定義的典型 CurrentList 巨集進行比較,但作為類別實作。資料契約應該擴展 SysOperationDataContractBase,但即使不擴展也可以工作。擴展超類別的優點是它提供了一些可能方便的會話資訊。

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

在此範例中,itemId 是一個資料成員。您需要為每個資料成員實作一個 parm 方法,並用 DataMemberAttribute 標記它,以便框架知道它是什麼。這使得框架能夠自動為您建立對話框。

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

    itemId = _itemId;
    return itemId;
}


服務

服務類別是包含實際業務邏輯的類別。它不關心顯示對話框、批次或任何類似的東西——這是控制器類別的責任。透過分離這些,您更有可能設計好您的程式碼並編寫更多可重複使用的程式碼。

與資料契約類別一樣,服務類別不需要從任何特定類別繼承,但它應該從 SysOperationServiceBase 類別繼承,至少如果您希望服務作為批次作業運行,因為超類別提供了有關批次上下文的一些資訊。啟動作業(即執行業務邏輯)的方法必須將資料契約類別的物件作為輸入,並以 [SysEntryPointAttribute] 進行修飾。例如:

class MyService extends SysOperationServiceBase
{
}

使用名為 run 的方法:

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


控制器

控制器類別負責處理操作的執行和批次。它還確保程式碼在 CIL 中執行以獲得最佳效能。控制器類別通常繼承自 SysOperationServiceController 類,但也有其他選項。

class MyController extends SysOperationServiceController
{
}

超類別的建構子以類別名稱、方法名稱和(可選)執行模式作為參數。類別和方法名稱應該是您的服務類別的名稱和應在其上運行的方法。因此,您可以像這樣實作控制器的建構方法:

public static MyController construct()
{
    ;

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

然後 MyController 類別的 main 方法就可以很簡單了

public static void main(Args _args)
{
    ;

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

基本上你已經完成了。上面顯然是一個非常簡單的例子,框架包含大量其他選項和可能性,但如果您在一段時間沒有使用框架時需要複習一下,這可以作為一個快速概述。

分享至 Bluesky在 Facebook 分享在 LinkedIn 分享在 Tumblr 上分享分享至 X在 LinkedIn 分享固定在 Pinterest 上

米克爾·邦·克里斯滕森

關於作者

米克爾·邦·克里斯滕森
麥可 是 miklix.com 的創建者和所有者。他有超過 20 年的專業電腦程式設計師/軟體開發人員經驗,目前全職受僱於一家歐洲大型 IT 公司。不寫部落格時,他會將業餘時間花在各種各樣的興趣、愛好和活動上,這在一定程度上反映在本網站所涵蓋的主題的多樣性上。