2016-11-10 9 views
1

Dynamics AX2012のメソッドsuper()を使用してプログラムを作成します。スーパーメソッドの使用

私はクラス( "A")といくつかのメソッドをビルドしました。私は前のクラスから拡張した別のクラス( "B")を作ります。
私のクラス「A」にはいくつかのメソッドがあります。 クラス "B"では、メソッドをオーバーライドします。そうします。 メソッドgetTable()をオーバーライドします。

protected SYCCarBrandTable getTable() 
{ 
    SYCCarBrandTable ret; 

    ret = super(); 
    { 
     select brandid,branddescription from ret 
     where ret.brandid == "Bentley"; 
    } 

    return ret; 
} 

は今、私の質問は

私はスーパーで()は、この新しい方法は、それがmotherclass「A」での拡張メソッドから、それですべてを取るなかったことを理解している...です。

しかし、メソッドにもっと多くのものを追加して、以前のメソッドのものとオーバーライドされたメソッドで追加したものを私に与えることができますか?

+0

'A.getTable'の内容を表示できますか? –

答えて

0

getTable()の実装を見ると、super()によって返された別のSYCCarBrandTableの値を基準+その他の新しく追加された基準として使用して、いくつかのSYCCarBrandTableレコードを選択したいようです。

なぜこのようなことをしたいのかわかりませんが、同じテーブル変数に対してselectステートメントを実行すると、実際には何も追加せずにすべての動作をオーバーライドしています。私はなぜそのようなことは便利だろうかわからない、そして、再び

protected SYCCarBrandTable getTable() 
{ 
    SYCCarBrandTable superCar; 
    SYCCarBrandTable ret; 

    superCar = super(); 

    select brandid,branddescription from ret 
     where ret.CriteriaA = superCar.CriteriaA 
     && ret.brandid == "Bentley"; 

    return ret; 
} 

を、これは1つのサンプルの方法である:私は右のそれを得た場合

、あなたは別のSYCCarBrandTableを使用する場合があります機能を完全にオーバーライドするのではなく、集約する機能です。

0

選択にcritriaを追加する場合は、クエリオブジェクトを使用して選択を設計する必要があります。 modifieQuery()やsetQueryRange()のような新しいメソッドをベースクラスで作成するよりも、このメソッドでは、基本クラスに必要な範囲をクエリに追加します。あなたのクラス "B"でこのメソッドをオーバーライドすると、superを呼び出し、範囲を追加するか、単にsuper()を使わずにメソッドをオーバーライドし、必要に応じて範囲を設定するだけです。ベースクラスのgetTableメソッドで、modifieQuery()を呼び出して実行します。

関連する問題