Note
コミュニティの関心グループが Yammer から Microsoft Viva Engage に移行されました。 Viva Engage コミュニティに参加し、最新のディスカッションに参加するには、「 Finance and Operations Viva Engage Community へのアクセスを要求する 」フォームに入力し、参加するコミュニティを選択します。
テーブルに関連するビジネス ロジックを拡張するときは、一般的なコーディング原則に従ってコードをクリーンに保ちます。 テーブルの個別のメソッドにアクションをカプセル化します。 Microsoft Dynamics AX 2012 では、オーバーレイを使用してテーブルにメソッドを直接追加します。 拡張機能を使用して同じタスクを完了するには、別の方法を使用します。 具体的には、拡張クラスを作成します。
たとえば、拡張機能を使用して 、MyInventLocationId という名前の新しいフィールドを InventTable テーブルに追加します。 挿入イベントのデータ イベント ハンドラーも作成し、新しいフィールドに入力するためのロジックを実装します。 そのアクションをカプセル化するには、 InventTable に新しいメソッドを作成し、そのメソッド に myDefaultInventLocationId という名前を付けます。
まず、拡張モデルで新しいクラスを作成します。 このクラスは、 InventTable テーブルを拡張し、読みやすく理解しやすい方法でテーブルのフィールドとメソッドにアクセスできるようにします。 拡張クラスの正しい名前を選択します。 この名前は、展開されるすべてのモデルのすべてのタイプにわたって一意でなければなりません。 詳細については、拡張機能の名前付けのガイドライン を参照してください。
[ExtensionOf(tableStr(InventTable))]
final class InventTableMy_Extension
{
public void myDefaultInventLocationId()
{
// This would have partner specific logic to initialize the new field.
this.MyInventLocationId = this.inventLocationId();
}
}
新しいメソッドを強化クラスを追加することができるようになりました。 これらのメソッドは、テーブルに直接定義されているかのように、 InventTable 型の変数の IntelliSense に表示されます。 この動作は、静的メソッドとインスタンス メソッドの両方に適用されます。
拡張クラスの場合は、次の規則に従います。
- 最終である必要があります。
- _拡張子で接尾辞を着ける必要があります。
- [ExtensionOf()] 属性で装飾されている必要があります。
たとえば、イベント ハンドラーから新しいメソッドを使用できるようになります。
class InventTableMy_EventHandler
{
[DataEventHandler(tableStr(InventTable), DataEventType::Inserting)]
public static void InventTable_onInserting(Common sender, DataEventArgs e)
{
InventTable inventTable = sender as InventTable;
// Call the method as if it was defined directly on InventTable.
inventTable.myDefaultInventLocationId();
}
}
Note
イベント ハンドラー クラスには、任意の数のイベントのハンドラーが含まれるのが一般的です。 ただし、イベント ハンドラーを拡張クラスに配置することはお勧 めしません 。 そうすることで、イベント ハンドラー メソッドが拡張されたタイプのメソッドとして使用可能となります。 これは、イベント ハンドラーが、その型のメソッドとして明示的にではなく、イベントを通じて呼び出されることを意図しているので正しくありません。