次の方法で共有


拡張機能によってモデル要素をカスタマイズする

メモ

コミュニティの関心グループが Yammer から Microsoft Viva Engage に移行されました。 Viva Engage コミュニティに参加し、最新のディスカッションに参加するには、「 Finance and Operations Viva Engage Community へのアクセスを要求する 」フォームに入力し、参加するコミュニティを選択します。

このチュートリアルでは、フリート管理拡張機能モデルについて説明します。 このモデルには、フリート管理アプリケーションの機能を拡張する要素が含まれています。 拡張機能 を作成することにより、モデル要素をカスタマイズすることができます。 Microsoft Dynamics AX 2012 のオーバーレイ機能とは異なり、拡張機能はベースライン モデル要素をオーバーレイしません。 代わりに、拡張機能は、モデルと関連するビジネス ロジックに追加またはカスタマイズする個別のアセンブリとしてコンパイルされます。 テーブルにフィールドを追加したり、フォームにコントロールを追加したりするなど、メタデータを拡張できます。 イベント ハンドラーとプラグイン クラスを定義することで、ビジネス ロジックを拡張またはカスタマイズすることもできます。 テーブル、フォーム、フォーム データ ソース、フォーム コントロールなどの定義済みイベントに対してイベント ハンドラーを作成できるようになりました。 プラグインは、アプリケーションのビジネス ロジックを交換または拡張するできるようにする新しい機能拡張の概念でもあります。

前提条件

このチュートリアルでは、リモート デスクトップを使用して環境にアクセスし、インスタンスの管理者としてプロビジョニングする必要があります。

フリート管理モデルを理解する

フリート管理アプリケーションは、車両、顧客、および車両予約を管理するためのシステムをレンタカー会社に提供します。 アプリケーションは、フリート係とフリート マネージャの役割で使用されるよう設計されています。

フリート係

担当者は、顧客との対面または電話でのやり取りを処理する受付従業員です。 担当者は主に、アプリケーションに顧客情報を入力する、顧客の車両予約を作成する、車両アクセサリをオファーすることで予約をアップセルする、車両レンタルの終了時に車両の返却を処理することに関心を持っています。 担当者は、各自のニーズを予測し、楽しくて印象的なエクスペリエンスを提供しながら、顧客とやり取りすることにより、フリート管理ワークスペースを使用して顧客とのやり取りを準備することに大部分の時間を費やします。

車両管理者

マネージャーは、業務要件とプロセスの設定を処理するバック オフィス従業員です。 マネージャーは、車両の情報を入力する、使用可能な車両アクセサを定義する、車両メンテナンス、価格を決定する、および収益、アップセルの成功などのビジネス パフォーマンス測定を分析することに主に関心を持っています。 アプリケーションのビジネス ロジックは、次の 3 つの主なエンティティとそれらの間の関係を中心に展開されます。

顧客

顧客は、車両の予約を行い、車両のアクセサリを選択し、車両をチェックアウトおよび返却をし、車両のレンタル料を支払うためにフリート係に連絡します。 顧客関連の情報は、FMCustomer というテーブルに保管されています。

車両及び運搬具

車両は主として価格が異なり、車両のクラスに比例します。 車両に関する情報を格納するテーブルの名前は、 FMVehicleで始まります。

予約とレンタル

予約は、顧客と車両間の関係を管理します。 予約情報には、予約日、顧客情報、車両の選択と価格、そしてアクセサリや手数料などの追加料金が含まれます。 FMRental テーブルと FMRentalCharge テーブルには、予約とレンタル情報が格納されます。 計算エンジンは、車両予約の価格決定に関連するトランザクションの情報を処理します。 このデータ モデルを使用することで、Fleet Management アプリケーションは基本的なレンタカー 体験を提供します。

フリート管理モデルを拡張

レンタカー会社が割引を通じて顧客に価格インセンティブを提供できるようにする追加機能を使用して、基本的な Fleet Management アプリケーションをカスタマイズできます。 これらの割引機能を有効にする追加のビジネス ロジックとデータを Fleet Management Extension モデルに格納します。 割引機能は、3 つの主要なカスタマイズを介してフリート管理アプリケーションに価値を追加します。

フリート管理拡張データモデル

割引関連の情報を格納する 2 つの新しいテーブルを追加します。 FEDiscounts には、すべての割引とその料金のリストが保存されています。 FERentalDiscountRelationTable は、割引が適用される予約を追跡します。 価格スキームへの割引の追加を考慮して、既存のテーブルを拡張します。 FMRental という名前の特定の予約の車両料金を追跡するテーブルを拡張して、車両料金の割引に対応します。 FMRentalCharge という名前の予約のアクセサリを追跡するテーブルを拡張して、アクセサリに適用される割引に対応します。

フリートマネジメント拡張計算エンジン

基本計算エンジンをカスタマイズして、新しい割引によって定義されたさまざまな価格スキームを追加します。 基本計算エンジンの機能をプラグイン クラスに置き換えます。 車両が 7 日を超える期間予約されている場合、車両フリート管理モデルでは、車両の 1 日あたりのレートと低い週単位のレートの差に基づいて節約額が計算されます。 プラグインは、同じ動作を割引を使用して実現できるため、1 週間あたりの料金の計算を削除します。

フリート管理ユーザーインターフェース拡張機能

FMRental という名前のフォームに含まれるレンタルを拡張して、クラークが予約に割引を適用できるようにします。 画面上の価格概要がリアルタイムで更新され、予約に関連する車両やアクセサリに適用できる割引に関連する割引情報が表示されます。 次の手順では、フリート管理拡張機能モデルで行われるカスタマイズを確認し、カスタマイズの一部を自分用に再実装します。

セットアップ

前のチュートリアルでフリート管理ソリューションを開いていない場合は、次の手順に従います。フリート管理ソリューション ファイルは Dynamics AX ダウンロード可能 VM で入手できます。

  1. デスクトップで、Visual Studio ショートカットをダブルクリックして、開発環境を開きます。
  2. FleetManagement ソリューションを開きます。 ファイル メニューで、開くをポイントし、プロジェクト/ソリューションを選択します。
  3. デスクトップを参照し、FleetManagement フォルダーを開きます。 ソリューション ファイルがコンピュータにない場合、この作成手順は、フリート管理サンプル アプリケーションのエンドツーエンド シナリオ. に記載されています。
  4. FleetManagement という名前のソリューション ファイルを選択します。 表示されるファイル タイプは Microsoft Visual Studio Solution です。
  5. 開く を選択します。 ソリューションを開くには時間がかかる場合があります。

デモ データのインストール

デモ データを既にインストールしている場合は、次のセクションに進むことができます。

  1. VM で Microsoft Edge を開き、アプリケーションのベース URL に移動します。

  2. サインインします。

  3. ダッシュボードでナビゲーション ウィンドウを開き、[ フリート管理] > [セットアップ] > [フリートのセットアップ] に移動します。

    [モデル構成のカスタマイズ] の [Fleet Setup]\(フリートのセットアップ\) メニューのスクリーンショット。

  4. [ デモ データのセットアップ] を選択します

    [モデルのカスタマイズ] の [構成] ページのスクリーンショット。

  5. デモ データの再読み込みを促すメッセージが表示されたら、はいを選択します。

  6. データの読み込みが完了したら、[ 閉じる] を選択します。

  7. ダッシュボードでナビゲーション バーを開き、[ システム管理] > [共通] > [集計測定値の管理] に移動します。 (手順 7 から 9 は、新しいリリースには適用されません)。

  8. FMAggregateMeasurements を選択し、アクション ペインで今すぐ更新を選択します。

  9. 処理が完了するまで待機します。 ページの上部にある一連の移動ドットは、進行中の処理を示します。 インジケータが消えて、前回処理時刻 フィールドが更新されると、処理が完了します。

ワンボックス環境で FMRental フォームを開く

  1. VM で Microsoft Edge を開き、Dynamics AX アプリケーションのベース URL に移動します。 詳細については、トピック 開発環境の配置とアクセス を参照してください。

  2. 求められた場合にログインします。

  3. 予約管理 タイルをクリックして予約管理ワークスペースを開きます。

    [予約管理] タイルのスクリーンショット。

  4. 予約管理ワークスペースが開いたら、現在のレンタルを選択します。

    [現在のレンタル] オプションを含む [Reservation Management] ワークスペースのスクリーンショット。

  5. グリッド ビューでレンタル フォームが開きます。

    グリッド ビューの [レンタル] フォームのスクリーンショット。

  6. レンタル フォームを読み込んだら、オプション > ビューの変更 > ヘッダーを選択して、ヘッダーの表示を開きます。

    [レンタル] フォームの [ヘッダー] ビューのスクリーンショット。

  7. ヘッダーの表示フォームを読み込んだら、下までスクロールし、割引 タブを展開します。このタブはフリート管理モデルに含まれていません。 これは、 FMRental フォームの拡張機能として Fleet Management Extension Model でモデル化されています。

    ヘッダー ビュー フォームの [割引] タブのスクリーンショット。

  8. 割引を追加するために追加を選択します。

  9. 得意先割引を選択し、OK を選択します。 選択した割引が 割引 グリッドに追加されます。

    [割引] グリッドに追加された頻繁な顧客割引のスクリーンショット。

  10. FactBox を開くには、ショートカット キー Alt+F2 を使用します。

  11. 右側のレンタル合計ファクトボックスを展開し、適用される割引を表示します。

    割引額が表示されている [レンタルの合計 FactBox] のスクリーンショット。

フリート管理割引の拡張プロジェクトの概要

このチュートリアルでは、 FleetManagementDiscounts プロジェクトに Fleet Management Extension という名前のモデルに属するモデル要素が含まれています。 ここでは、プロジェクト要素について調べて学習します。

  1. Visual Studio の ソリューション エクスプローラーFleetManagement Discounts プロジェクトで、[ ユーザー インターフェイス] > [フォーム拡張機能] を展開します。

    FleetManagement Discounts プロジェクトが展開されたソリューション エクスプローラーのスクリーンショット。

    FMRental.Extension 要素は、2 つの新しいデータ ソースと新しいタブ コントロールを追加することによって FMRental フォームの機能を拡張する拡張要素です。

  2. ソリューション エクスプローラーで、FMRental.Extension をダブルクリックしてデザイナーを開きます。 次のイメージに示します。

    • 斜体のテキストで示されているデータ ソースはベースライン フォームで定義されているデータ ソースです。
    • 太字で示されているデータ ソースは現在の拡張子で定義されています。

    デザイナーは、その拡張機能を含めて、モデル要素の統合ビューを表示します。 読み取り専用ノードは斜体で表示さえrますが、現在の拡張機能に属するノードはカスタマイズの種類を示す他の視覚的な記号と共に太字で表示されます。

    FMRental.Extension デザイナーのスクリーンショット。

  3. デザイナーの検索ボックスに、次の図に示すように「 e: 」と入力します。 このフィルターには、現在の拡張機能に属しているノードのみが表示されます。

    現在の拡張ノードを表示するようにフィルター処理されたデザイナーのスクリーンショット。

  4. e:LineViewDiscountsを入力してデザイナーをフィルター処理し、LineViewDiscounts という名前に一致し、現在の拡張機能に属するノードを表示することもできます。

    LineViewDiscounts ノードを表示するようにフィルター処理されたデザイナーのスクリーンショット。

  5. 内容を確認するには、LineViewDiscounts ノードを展開します。

    展開された LineViewDiscounts ノードのスクリーンショット。

FMRental.Extension XML ファイルを開いてメタデータを表示

  1. ソリューション エクスプローラーで、FMRental.Extension フォーム拡張機能を右クリックし、[開く] を選択します。

  2. [ ファイルを指定して開く ] ダイアログ ボックスで、[ XML (テキスト) エディター] を選択し、[ OK] を選択します

  3. メッセージが表示されたら、[ はい ] を選択してデザイナーを閉じます。

  4. 対応する負符号を選択して、 Controls ノードと DataSources ノードの子ノードを折りたたみます。 正しい結果については次の図を参照してください。

    XML エディターの FMRental 拡張コードのスクリーンショット。

    XML ファイルには、FMRental.Extension 要素に関連付けられているメタデータが含まれます。 このファイルに、拡張機能の一部である 1 つのみのタブ ページ コントロールおよび 2 つのデータ ソースを説明するメタデータが含まれることがわかります。 基本フォームからのメタデータが含まれていないことを確認することもできます。

フリート管理の割引拡張プロジェクトにおけるその他の要素を表示

FleetManagement Discounts プロジェクトには 2 つの新しいテーブル FEDiscount および FERentalDiscountRelationTable と、既存のフリート管理テーブル FMRental および FMRentalCharge への 2 つの拡張が含まれています。

  1. ソリューション エクスプローラーFleetManagement Discounts で、[データ モデル] > [テーブル拡張機能] > FMRental.Extension をダブルクリックしてデザイナーを開きます。

  2. フィールドノードを展開し、拡張子に追加されたフィールド FEVehicleRateDiscount がベース FMRental テーブルに含まれていることを確認します。

    FEVehicleRateDiscount フィールドを示す [フィールド] ノードのスクリーンショット。

  3. 同様に、デザイナーで FMRentalChange.Extension 要素を開いて、その内容を調べます。

データ イベント ハンドラーの検査

ソリューション エクスプローラーの FleetManagement 割引プロジェクトで、コード > クラス > FMRentalCharge_Extension をダブルクリックしてコード エディターを開きます。

FMRentalCharge 拡張機能コード エディターのスクリーンショット。

このクラスには、FMRentalCharge テーブルの更新および挿入イベントに登録するイベント ハンドラーの実装が含まれています。 Microsoft Dynamics AX では、テーブルおよび他の種類で発生する可能性のあるデータ イベントが導入されます。 テーブルのデータイベントを登録することで、基本の X++ コードをオーバーレイせずに、アプリケーションがビジネスロジックを拡張できるようになります。 このチュートリアルの後半では、テーブル イベントのサブスクライブがいかに簡単であるかを確認します。

メモ

このクラスは、_Extension サフィックスで示される拡張クラスです。 イベント ハンドラーは任意のクラスで記述でき、クラスは拡張クラスである必要はありません。 拡張メソッドを作成するには、拡張クラスが必要です。 詳細については、拡張メソッドの記事の「拡張メソッド」セクション 参照してください。

プラグイン クラスの表示

前のセクションで示した FMRentalCharge_Extension クラスのイベント ハンドラー コードでは、両方のイベント ハンドラーが FMTotalsEngineBase::GetInstance を呼び出して、Fleet Management 計算エンジンの現在のインスタンスを取得します。 計算エンジンは、プラグイン クラスを使用して実装されます。 クラス ファクトリは、コンフィギュレーションまたはビジネス データに基づくプラグイン クラスの適切なインスタンスを作成します。

  1. FMRentalCharge_Extension.xpp表示されるコード エディター ウィンドウで、GetInstance を右クリックし、[定義へ移動] を選択します。 コード エディターは抽象クラス FMTotalsEngineBase で開きます。 この抽象クラスはプラグインポイントと呼ばれ、次の属性に関連付けられています: [Microsoft.Dynamics.AX.Platform.Extensibility.ExportInterfaceAttribute()]

    コード エディターの [定義に移動] オプションのスクリーンショット。

    プラグイン クラスは、抽象クラスやインターフェイスの拡張機能または実装を表します。 プラグイン クラスは、メタデータとプラグイン ポイントを定義する属性に関連付けられます。 この例では、2 つのプラグイン クラスが FMTotalsEngineBase プラグイン ポイントに関連付けられています。 基本計算エンジンは、プラグイン クラス FMTotalsEngine によって定義されます。 プロジェクト FleetManagement に移行された > コード > クラス で見つけることができます。

    FMTotalsEngineBase 抽象クラス コードのスクリーンショット。

    割引計算エンジンは、プラグイン クラス FEDiscountEngine によって定義されます。 プロジェクト FleetManagement Discounts > Code > Classes の中で見つけることができます。

    FEDiscountEngine クラス コードのスクリーンショット。

  2. GetInstance メソッドを確認します。 このメソッドは、プラグイン ファクトリ SysPluginFactory::Instance を使用して、現在のプラグイン メタデータに基づいて現在の計算エンジンのインスタンスを作成します。 プラグイン メタデータは、グローバル構成テーブルの FMParameters で指定されます。

    FMParameters 構成テーブル コードのスクリーンショット。

    また、財務アプリと運用アプリでは、構成可能なプラグイン クラスもサポートされています。このクラスに関連付けられているプラグイン メタデータは、開発時には認識されず、管理者が実行時に構成できます。 このチュートリアルでは、その機能についてカバーしていません。

追加のフリート管理拡張機能を作成しなさい。

このセクションでは、Visual Studio ツールを使用して拡張機能を作成して操作する方法を示します。

FMVehicle テーブルを拡張する

  1. ソリューション エクスプローラーで、FleetManagement 割引プロジェクトを選択します。

  2. Visual Studio の アプリケーション エクスプローラーで、[ 表示>アプリケーション エクスプローラー] を選択し、FMVehicle という名前のテーブルを検索します。 フィルター バーに FMVehicle type:Table と入力し、Enter を押します。

    FMVehicle のアプリケーション エクスプローラーの検索結果のスクリーンショット。

  3. FMVehicle を右クリックしてから、拡張機能の作成を選択します。

    FMVehicle の [拡張機能の作成] オプションを示すアプリケーション エクスプローラーのスクリーンショット。

    FMVehicle.Extension という名前の FleetManagement Discounts プロジェクトで FMVehicle テーブルの拡張機能が作成されます。

    ソリューション エクスプローラーの FMVehicle.Extension のスクリーンショット。

  4. ソリューション エクスプローラーで、FMVehicle.Extension を右クリックしてからプログラムから開くを選択します。 ダイアログ ボックスで XML (テキスト) エディターを選択してから OK を選択します。 注記: この拡張子ファイルは、データベースの FMVehicle テーブルのメタデータを含まない簡単なテンプレートです。 拡張ファイルには、常に拡張を定義するメタデータのみが含まれており、基本モデル要素のメタデータは含まれていません。

    テキスト エディターの FMVehicle 拡張 XML ファイルのスクリーンショット。

  5. XML エディターを閉じます。

  6. ソリューション エクスプローラーで、FMVehicle.Extension をダブルクリックしてデザイナーを開きます。

  7. フィールド を右クリックし、新しい整数型フィールドを追加します。 フィールドの名前を NumberOfCylinders に変更します。

  8. プロパティ ウィンドウで、新しいフィールドのラベル プロパティを NumberofCylinders に設定します。

  9. NumberOfCylinders フィールドを AutoReport フィールド グループにドラッグ アンド ドロップして、ベース テーブルのフィールド グループを拡張します。

    AutoReport フィールド グループに追加された NumberOfCylinders フィールドのスクリーンショット。

  10. FMVehicle.Extension を保存します。

  11. イベントノードを展開します。 イベント ノードには、テーブルが公開するすべてのイベントが一覧表示されます。 この一覧には、フレームワークが定義するイベントと、アプリケーション開発者が定義するメソッドのデリゲートが含まれます。

    FMVehicle デザイナーの [イベント] ノードのスクリーンショット。

    メモ

    テーブルのイベント、フォームイベント、フォーム データ ソース イベント、フォーム コントロール イベントなど、異なるフレームワーク イベントが、さまざまなタイプの要素とサブ要素のデザイナーに公開されています。

  12. onValidatedWrite を右クリックし、イベント ハンドラー メソッドをコピー を選択します。

    デザイナーの onValidateWrite イベント コンテキスト メニューのスクリーンショット。

    このステップは、イベント ハンドラー メソッドのシグネチャをクリップボードにコピーします。

  13. FMVehicleEventHandlers という名前の新しいクラスを FleetManagement Discounts プロジェクトに追加します。

  14. ソリューション エクスプローラーで、FEVehicleEventHandlers をダブルクリックしてコード エディターを開きます。

  15. 右クリックし、手順 12 にコピーしたイベント ハンドラー メソッドを貼り付けます。

    Class FMVehicleEventHandlers
    {
        /// <summary>
        ///
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        [DataEventHandler(tableStr(FMVehicle), DataEventType::ValidatedWrite)]
        public static void FMVehicle_onValidatedWrite(Common sender, DataEventArgs e)
        {
        }
    }
    
  16. 次のコードを FMVehicleonValidatedWrite イベント ハンドラーに挿入します。 このコードは、シリンダの数が 8 を超えることができないことを検証します。

    [DataEventHandler(tableStr(FMVehicle), DataEventType::ValidatedWrite)]
    public static void FMVehicle_onValidatedWrite(Common sender, DataEventArgs e)
        {
            ValidateEventArgs validateArgs = e as ValidateEventArgs;
            FMVehicle vehicle = sender as FMVehicle;
            boolean result = validateArgs.parmValidateResult();
    
            if (vehicle.NumberOfCylinders > 8)
            {
                result = checkFailed("Invalid number of cylinders.");
                validateArgs.parmValidateResult(result);
            }
        }
    
  17. FMVehicleEventHandlers クラス を保存する

    ヒント

    モデルの任意の クラス にイベント ハンドラー を貼り付けて定義することができます。 クラス FMVehicleEventHandlers は、例としてのみ使用されます。

FMVehicle フォームを拡張する

次に、FleetManagement 割引プロジェクトの FMVehicle フォーム拡張機能を追加します。 まず、 ソリューション エクスプローラーでこのプロジェクトを選択します。

  1. アプリケーション エクスプローラーを使用して、FMVehicle という名前のフォームを見つけます。 アプリケーション エクスプローラーのフィルター バーに、「FMVehicle type:form」と入力します。

  2. フォームを右クリックし、[ 拡張機能の作成] を選択します。

  3. 次の図に示すように、 NumberOfCylinders という名前の新しい整数コントロールを Attributes2 グループ コントロールに追加します。 このコントロールは、デザイン> タブ > TabPageDetails > TabHeader > DetailsDetails > Attributes2 を展開すると見つけることができます。

    Attributes2 グループに追加された NumberOfCylinders 整数コントロールのスクリーンショット。

  4. 次のように新しいコントロールをプロパティ ウィンドウの NumberOfCylinders データ フィールドにバインドします。

    プロパティ ウィンドウのデータ フィールド バインドのスクリーンショット。

  5. FMVehicle.Extension を保存し、プロジェクトをビルドします。

拡張機能をテスト

  1. ソリューション エクスプローラーで、FleetManagement 割引を右クリックしてから、StartUp プロジェクトとして設定をクリックします。

  2. 同様に、 FleetManagement Discounts で、 FMVehicle.Extension フォームをスタートアップ オブジェクトとして設定します。

  3. Ctrl+F5 キーを押してデバッグなしで開始するか、デバッグ メニューを使用します。

  4. 車両フォームが開いた後、車両を選択して詳細を表示します。

  5. 詳細タブを展開し、新しいシリンダの数フィールドを確認します。

    新しい [シリンダー数] フィールドを示す [詳細] タブのスクリーンショット。

  6. アクション ウィンドウで、編集をクリックしてシリンダの数フィールドの値を 12 に変更します。

  7. アクション ウィンドウで、保存をクリックします。

  8. 検証エラーを確認します。

  9. 有効なシリンダ数を 9 より小さく入力し、次に新しい値を保存します。

フォーム コントロールでのイベント ハンドラーを試す

既存のコントロールにイベント ハンドラー メソッドを追加できます。

  1. FMRental フォーム デザイナーで AddLine コマンド ボタン コントロールを検索し、OnClicked イベントを右クリックし、次に選択イベント ハンドラーのメソッドをコピーを選択します。

    FMRental フォーム デザイナーの AddLine OnClicked イベントのスクリーンショット。

  2. フリート管理拡張モデルのクラスでイベント ハンドラー メソッドを貼り付け、X++ コードを追加して実装します。

    /// <summary>
    ///
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    [FormControlEventHandler(formControlStr(FMRental, AddLine), FormControlEventType::Clicked)]
    public static void AddLine_OnClicked(FormControl sender, FormControlEventArgs e)
    {
    }
    

AddLine_OnClicked イベント ハンドラーを実装する場合は、 sender パラメーターを使用してボタン コントロール インスタンスにアクセスできます。

FormButtonControl button = sender as FormButtonControl;

親フォームや、変数のいずれかにアクセスする場合は、この例では、FormRun インスタンスとデータ ソースのいずれかにアクセスする方法が示されています。

FormRun fr;
fr = sender.formRun();
var frDs = fr.dataSource("FMRental");

フォーム データ ソースでのイベント ハンドラーを試す

テーブル、フォーム コントロール、その他の要素型と同様に、フォーム データ ソースフィールドとフォーム データ ソース フィールドはフレームワーク レベルのイベントを提供します。 次の例は、フォーム データ ソースの ValidatingWrite イベントまたはフォーム データ ソースの検証イベントを使用して FMRental フォームのユーザー入力を検証する方法を示しています。 この機能は、Platform Update 7 以降で利用できます。

/// <summary>
/// When saving a new rental, prevent setting the start mileage on the FMRental form to a value that is equal to 1
/// </summary>
[FormDataSourceEventHandler(formDataSourceStr(FMRental, FMRental), FormDataSourceEventType::ValidatingWrite)]
public static void FMRental_OnValidatingWrite(FormDataSource sender, FormDataSourceEventArgs e)
{
    var datasource = sender as FormDataSource;
    var args = e as FormDataSourceCancelEventArgs;
    if (args != null && datasource != null)
    {
        FMRental record = datasource.cursor() as FMRental;
        if (record.recId == 0)
        {
            if(record.startmileage == 1)
            {
                boolean doCancel = !checkFailed("Start Mileage = 1 is not allowed");
                args.cancel(doCancel);
            }
        }
    }
}
/// <summary>
/// Prevent changing the start mileage field on the FMRental form to a value that is equal to 1
/// </summary>
[FormDataFieldEventHandler(formDataFieldStr(FMRental, FMRental, StartMileage), FormDataFieldEventType::Validating)]
public static void StartMileage_OnValidating(FormDataObject sender, FormDataFieldEventArgs e)
{
    var dataObject = sender as FormDataObject;
    var args = e as FormDataFieldCancelEventArgs;
    if (args != null && dataObject != null)
    {
        var datasource = dataObject.datasource() as FormDataSource;
        if (datasource != null)
        {
            FMRental record = datasource.cursor() as FMRental;
            if (record.RecId > 0)
            {
                if (record.StartMileage == 1 )
                {
                    boolean doCancel = !checkFailed("Start Mileage = 1 is not allowed");
                    args.cancel(doCancel);
                }
            }
        }
    }
}

テーブル 拡張子ディスプレイを試し、メソッドを編集

拡張メソッドを使用すると、X++ コードを重ねて作成することなく、これらのテーブルに新しい表示および編集メソッドを作成することで、テーブルを拡張できます。 拡張メソッドは、_Extension サフィックスを持つ名前のクラスに属している必要があります。 たとえば、このクラスは、CupHoldersDisplay と呼ばれる拡張表示メソッドを使用して、FMVehicle テーブルを拡張する方法を表示します。

public static class FMVehicle_Extension
{
    public static display int CupHoldersDisplay(FMVehicle vehicle)
    {
        return 7;
    }
}

フォームまたはフォーム拡張機能では、次の図に示すように、Data Source = FMVehicle メソッドと Data メソッドを設定することで = FMVehicle_Extension::CupHoldersDisplayコントロールをこの表示メソッドにバインドできます。

フォームプロパティの拡張表示メソッドバインドのスクリーンショット。

展開用のフリート拡張パッケージを作成する

テスト、実稼働前、運用環境などの別の環境に拡張機能をデプロイするには、デプロイ パッケージを作成する必要があります。

  1. Visual Studio の Dynamics AX メニューで、配置をポイントしてから、配置パッケージの作成を選択します。

    Dynamics AX メニューの [配置パッケージの作成] オプションのスクリーンショット。

  2. フリート管理拡張 チェック ボックスをオンにします。

  3. [ パッケージ ファイルの場所 ] テキスト ボックスに「 c:\FMLab」と入力します。

  4. 作成を選択します。 フリート管理拡張パッケージを含む配置パッケージが作成されます。

追加リソース

FMLab サンプル コードをダウンロードする