MS_DynamicsAXAOT - NetDevInfraWGinOSSConsortium/NetDevInfraWiki GitHub Wiki
-
TOP > ビジネス・アプリケーション > Dynamics > Dynamicsのカスタマイズ
- Dynamics AX開発(AOT)
- CRMのカスタマイズ
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 時点の姿とその設計思想として読むとよい。
-
AX はリッチクライアント。
以下、基本的な項目の情報。
AOT は、VB6 のような RAD 開発環境。
- 業務の DBMS アプリに特化しているため、項目移送のコードは実装不要。
- 画面と DB の項目の対応付けで処理できる(よくあるパターン)。
C# ベースらしい。
Java にも似ているため習得しやすい。
- 従って、その範囲で、殆どのことは出来る模様。
- アクセス解決演算子が「:」なので C++ っぽくも視える。
補足(「:」はスコープ解決演算子): X++ で
::は
静的メソッド呼び出し(ClassName::method())に使う演算子で、
C++ のスコープ解決演算子と同じ位置づけである。
インスタンス メンバへのアクセスは C# と同じく.を使う。
参考
- X++ プログラム言語の概要
http://www.infoq.com/jp/news/2011/08/X-Plus-Plus - オフコンを引きずる ERP にはさよならを、技術者が注目する次世代 ERP とは - TechTarget ジャパン ERP
http://techtarget.itmedia.co.jp/tt/news/1106/16/news02.html
DLL、COM のライブラリの呼出も可能。
-
これには AOT の System Documentation 以下にある組込ライブラリを使用する。
-
また、利用頻度の高い DLL、COM のラッパー・ライブラリが用意されている。
- DLL
- WinAPI.BringWindowToTop 等
https://msdn.microsoft.com/en-us/library/winapi.aspx
- WinAPI.BringWindowToTop 等
- COM
- DLL
そのまま .NET の呼出を実装できる。
-
独自開発のアセンブリも参照設定(Reference)でサーバ側に取り込む。
-
.NET Interop from X++ [AX 2012]
https://msdn.microsoft.com/ja-jp/library/cc598160.aspx
移行メモ(正誤): 元ページの「アセンプリ」は「アセンブリ」の
誤記と判断し、修正した。
.NET 言語からの呼び出しのみ可能。
X++ のライブラリが出来るということはないので、
以下のようにして X++ のコードを呼び出す必要がある。
- .NET Project を AOT に追加し、
- AOT のオブジェクトを .NET Project のソリューション エクスプローラーに D&D する。
- すると、Service Reference 的なプロキシクラスが自動生成される。
- このライブラリを経由して AX の Class・Table にアクセスする仕様。
- Dynamics CRM のエンティティ・アクセス方法に似ている。
詳しくは下記参照。
- Proxy Classes for .NET Interop to X++
https://msdn.microsoft.com/ja-jp/library/gg879799.aspx - Integration with X++ Objects from Visual Studio
https://msdn.microsoft.com/ja-jp/library/gg889166.aspx
.NET Business Connector を使用してアクセスすることもできる模様。
- .NET Business Connector Overview
https://msdn.microsoft.com/ja-jp/library/aa659581.aspx
補足(.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 ではソースがファイル化され、
この制約は解消されている。
サポート・サービスのトレーニング教材などが利用できる。
-
MSDN などは整理されてきている。
- Microsoft Dynamics AX
https://msdn.microsoft.com/en-us/library/hh881894.aspx
- Microsoft Dynamics AX
-
ブログなどの情報源はまだ少ない。
- Microsoft Dynamics AX PBC
http://www.pbc.co.jp/product/ax.html - Dynamics AX 情報サイト » チュートリアル
http://ax.next-ware.co.jp/?page_id=10
- Microsoft Dynamics AX PBC
-
カスタマイズが案外面倒である。
-
これは、下位レイヤのコードの動きを理解する必要があるため。
(詳しくは下記の「レイヤー」を参照) -
一般的に、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)**モデルが採用され、
標準コードを直接書き換えない方式に改められている。
以下を定義する。
- テーブル、ヴュー
- 必須入力 → 必須入力チェックとなるもよう。
- チェック処理もテーブルのメソッドに実装する。
この場合、CRUD 操作の既定のメソッドをオーバーライドする。
- プリミティブ型
- BaseEnums(基本列挙型)
- 拡張データ型(ドメイン的な)
移行メモ(正誤): 元ページの「基本列挙方」は「基本列挙型」の
誤記と判断し、修正した。
売り買い:数量 × 単価 = 金額
一つ実装すれば、色々な所で使える。
-
Class
- X++ のビジネスロジック
-
Form
- 画面(datasource、method、design を定義)
画面とデータを紐付けるだけ(項目移送は書かない)。 - 画面の項目はデザイナでコントロールの下に
フィールドを置くとその様に画面に出る。 - コントロールのイベントはメソッドのオーバーライドで実装する。
- 画面(datasource、method、design を定義)
-
MenuItem
画面を起動するリンクのようなもの。
国際化対応のリソースファイル(.NET とほぼ同じ仕様)。
- 多分、Job を実装する領域。
- X++ の動作確認(デバッグ実行)にも利用できる。
モジュールを Project にまとめて、インポート・エクスポートが可能。
例:
- 共通 → partner レイヤにインポート。
- 国毎 → enduser レイヤにインポート。
- 本 Wiki 内
Tags: ビジネス・アプリケーション