MS_DynamicsAXAOT - NetDevInfraWGinOSSConsortium/NetDevInfraWiki GitHub Wiki

Dynamics AX開発(AOT)

概要

Dynamics AX 開発がどんな感じか見てみました。

補足(AOT は AX 2012 までの開発環境): 本ページが扱う AOT
(Application Object Tree)
は、Dynamics AX 2012 までのリッチクライアント
内蔵の開発環境である。
後継の Dynamics 365 Finance and Operations(旧 AX 7 / Dynamics 365 for
Operations)
では、開発環境が Visual Studio 上の拡張機能に移され、
AOT のオブジェクトも Visual Studio のプロジェクト/モデルとして扱う
形に変わった。
ソースは XML 形式でファイル化され、
Azure DevOps によるバージョン管理が前提になっている。
したがって以下の記述は、
AX 2012 時点の姿とその設計思想として読むとよい。

要約

基本項目

以下、基本的な項目の情報。

AOT開発環境

AOT は、VB6 のような RAD 開発環境。

  • 業務の DBMS アプリに特化しているため、項目移送のコードは実装不要。
  • 画面と DB の項目の対応付けで処理できる(よくあるパターン)。

X++

C# ベースらしい。
Java にも似ているため習得しやすい。

  • 従って、その範囲で、殆どのことは出来る模様。
  • アクセス解決演算子が「:」なので C++ っぽくも視える。

補足(「:」はスコープ解決演算子): X++ で ::
静的メソッド呼び出し(ClassName::method())に使う演算子で、
C++ のスコープ解決演算子と同じ位置づけである。
インスタンス メンバへのアクセスは C# と同じく . を使う。

参考

相互運用

DLL、COMの呼出し

DLL、COM のライブラリの呼出も可能。

.NETの呼出し

そのまま .NET の呼出を実装できる。

移行メモ(正誤): 元ページの「アセンプリ」は「アセンブリ」の
誤記と判断し、修正した。

.NETからの呼出

.NET 言語からの呼び出しのみ可能。

X++ のライブラリが出来るということはないので、
以下のようにして X++ のコードを呼び出す必要がある。

  1. .NET Project を AOT に追加し、
  2. AOT のオブジェクトを .NET Project のソリューション エクスプローラーに D&D する。
  3. すると、Service Reference 的なプロキシクラスが自動生成される。
  4. このライブラリを経由して AX の Class・Table にアクセスする仕様。
    • Dynamics CRM のエンティティ・アクセス方法に似ている。

詳しくは下記参照。

.NET Business Connector を使用してアクセスすることもできる模様。

補足(.NET Business Connector は廃止): .NET Business Connector は
AX 2012 R3 を最後に非推奨となり、後継の Dynamics 365 Finance and Operations
では提供されていない。
現在の外部連携は **OData / カスタム サービス(REST・SOAP)**が標準の手段である。

バージョン管理ツール

VCS、TFS、VSS などを選択できるが、大規模開発向けではなさそう。

移行メモ(正誤): 「VCS」は一般名詞(Version Control System)であり、
TFS・VSS と並ぶ製品名としては不自然なため、
元ページの列挙は「バージョン管理システム(TFS、VSS など)を選択できる」の
意と解釈した(元の表記はそのまま残している)。

補足: AX 2012 の AOT は、オブジェクトを **モデル ストア(DB)**で
管理するため、ファイル単位で差分を取るテキスト系 VCS とは相性が悪かった。
ここで「大規模開発向けではなさそう」と評されている理由はここにある。
前述のとおり、Dynamics 365 Finance and Operations ではソースがファイル化され、
この制約は解消されている。

情報量

サポート・サービスのトレーニング教材などが利用できる。

カスタマイズ

  • カスタマイズが案外面倒である。

  • これは、下位レイヤのコードの動きを理解する必要があるため。
    (詳しくは下記の「レイヤー」を参照)

  • 一般的に、Fit 率が 70% 以下になると難しくなると言われている。

詳細項目

以下、その他の詳細な項目の情報。

処理方式

  • 3 層 C/S 型のリッチクライアント

    • AX は、Web ではなく、リッチクライアントで動作する。
    • AX のクライアントは、AD に属す必要がある。
    • AX クライアントのインストール
      AX のインストーラのインストール・オプションでクライアントだけ選択する。
  • クライアント側の機能

    • 業務画面
    • 開発ツール(AOT)
    • Web サービス接続(VS、Office)
    • VS 連携は、VS Tool が必要
      • VS の .NET の Project を AOT に追加し AOT のオブジェクトにアクセス。
      • SSRS から AX のデータソースに繋げての Report の開発。

レイヤー

オブジェクトを管理している。

  • 青(EndUser が開発したもの)
  • 緑(Partner が開発したもの)
  • ピンク(MS が開発したもの)

オブジェクト指向の継承ではない。
ソースコードがコピーされる仕様。
従って下位レイヤのコードの変更はマージが必要。

補足(レイヤーの実体): AX 2012 のレイヤーは
SYS / SYP / GLS / GLP / FPK / SLN / ISV / ISP / VAR / VAP / CUS / USR / USP の
16 層で、上位(USR 側)のレイヤーにあるオブジェクトが下位を上書きして
実行される仕組みである。
本文の「青/緑/ピンク」は AOT 上での色分け表示を指している。
「継承ではなくコピー」であるため、
MS が下位レイヤを更新すると上位レイヤの改変分と衝突する——
これが「カスタマイズが案外面倒」の理由である。
Dynamics 365 Finance and Operations では、
レイヤーに代えて **拡張(Extension)**モデルが採用され、
標準コードを直接書き換えない方式に改められている。

AOTのツリー

データディクショナリ

以下を定義する。

  • テーブル、ヴュー
    • 必須入力 → 必須入力チェックとなるもよう。
    • チェック処理もテーブルのメソッドに実装する。

この場合、CRUD 操作の既定のメソッドをオーバーライドする。

データ型

  • プリミティブ型
  • BaseEnums(基本列挙型)
  • 拡張データ型(ドメイン的な)

移行メモ(正誤): 元ページの「基本列挙方」は「基本列挙型」の
誤記と判断し、修正した。

マップ

売り買い:数量 × 単価 = 金額
一つ実装すれば、色々な所で使える。

Class <-- Form <-- MenuItem

  • Class

    • X++ のビジネスロジック
  • Form

    • 画面(datasource、method、design を定義)
      画面とデータを紐付けるだけ(項目移送は書かない)。
    • 画面の項目はデザイナでコントロールの下に
      フィールドを置くとその様に画面に出る。
    • コントロールのイベントはメソッドのオーバーライドで実装する。
  • MenuItem
    画面を起動するリンクのようなもの。

LabelFiles

国際化対応のリソースファイル(.NET とほぼ同じ仕様)。

Job

  • 多分、Job を実装する領域。
  • X++ の動作確認(デバッグ実行)にも利用できる。

Project

モジュールを Project にまとめて、インポート・エクスポートが可能。

例:

  • 共通 → partner レイヤにインポート。
  • 国毎 → enduser レイヤにインポート。

参考


Tags: ビジネス・アプリケーション

⚠️ **GitHub.com Fallback** ⚠️