フレームワークを拡張するコードを開発する

完了

要素の動作を変更する必要がある場合は、その要素の拡張機能を作成します。 一部の要素では、イベント ハンドラーの追加など、動作を変更するためにコードを作成する必要があります。 または、要素の構成を変更するためにクラスの拡張を作成する場合もあります。

クラスの拡張

テーブルに関連するビジネス ロジックを拡張するには、拡張クラスを作成します。 テーブルに別の ID フィールドを追加してそれを設定する場合は、挿入イベントのデータ イベント ハンドラーを作成し、そのイベント ハンドラーで新しいフィールドを設定するためのロジックを実装します。 テーブルを拡張し、テーブルのフィールドとメソッドに読みやすい方法でアクセスできるようにするクラスを作成できます。 クラスの拡張を作成するときは、ExtensionOf 属性で装飾し、_Extension 接尾語を使用し、クラスを final として示す必要があります。

次に示すのは、InventTable を拡張するクラスを作成する例です。 その後、この拡張されたクラスのコメントが使用されている場所に、メソッドを追加できます。

[ExtensionOf(tableStr(InventTable))]
final class InventTableNew_Extension
{
 	public void newDefaultInventLocationId()
	 {
	 //enter your code here
	 }
}

イベント ハンドラー

イベント ハンドラーは、フィールドが変更されたりレコードが削除されたりするときなど、特定のイベントが発生したときに実行されるコードを、要素に記述したりコピーしたりするための手段です。 テーブルやフォームなどの一部の要素には、デザイナー ウィンドウにイベント ノードがあり、展開すると、その要素に関連付けられているすべてのイベントの一覧が表示されます。 要素に現在存在しない補助動作を追加する必要がある場合は、その要素の拡張を作成し、拡張された要素にイベント ハンドラーを追加する必要があります。

次に示すのは、CustTable テーブルから抽出されたイベント ハンドラーのメソッドです。 要素デザイナー ウィンドウでイベントを右クリックし、イベント ハンドラー メソッドのコピーを選択することにより、これらのメソッドをコピーして、拡張した要素またはクラスに追加することができます。

テーブル デザイナー ウィンドウからイベント ハンドラーのメソッドをコピーする方法を示す Visual Studio のスクリーンショット。

  • OnDeleted イベント - テーブルでレコードが削除されるとトリガーするポストイベント ハンドラーです。 これを使用すると、たとえば、レコードが削除された後で情報ログ メッセージを表示できます。
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
[DataEventHandler(tableStr(CustTable), DataEventType::Deleted)]
public static void CustTable_onDeleted(Common sender, DataEventArgs e)
{
}
  • OnInserting イベント - これは、データが挿入されるとトリガーされます。 たとえば、新しい顧客を財務と運用アプリに追加すると、トリガーすることがあります。
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
[DataEventHandler(tableStr(CustTable), DataEventType::Inserting)]
public static void CustTable_onInserting(Common sender, DataEventArgs e)
{
}
  • OnValidatedWrite イベント - データが入力された後でトリガーするポストイベント ハンドラーです。 これは、ページに書き込まれているデータを検証するために使用されます。たとえば、生年月日を検証することにより、顧客が 18 歳以上であることを確認します。
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
[DataEventHandler(tableStr(CustTable), DataEventType::ValidatedWrite)]
public static void CustTable_onValidatedWrite(Common sender, DataEventArgs e)
{
}

コマンド チェーン

拡張する基本クラスで定義されているメソッドを、ロジックでラップできます。 また、イベント ハンドラーを使用しなくても、public メソッドと protected メソッドのロジックを拡張できます。

メソッドをラップすると、public メソッドと protected メソッドだけでなく、基本クラスの変数にもアクセスできます。 メソッドのラッパーと next キーワードを使用して、コマンド チェーン (CoC) を作成します。

CoC は、一連のレシーバーによって要求を処理する設計パターンです。 クラス、テーブル、データ エンティティ、フォームの protected メソッドまたは public メソッドをラップするには、拡張クラスを使用します。 メソッドをラップするときは、いくつかの制限事項に注意する必要があります。

  • ラッパー メソッドのシグネチャは、基本メソッドと同じである必要があります。
  • フォーム クラスを拡張する場合、ラップできるのはルートレベルのメソッドのみであり、入れ子になったクラスで定義されているメソッドはラップできません。

拡張クラスのラッパー メソッドでは、チェーン内の next メソッドと、最終的に元の実装が常に呼び出されるように、next を常に呼び出す必要があります。 このプロセスにより、チェーン内のすべてのメソッドが結果に関与することが保証されます。 メソッドでは、無条件に next() を呼び出す必要があります。