4

CustTable を拡張して、D365FO の新しい「コマンド チェーン」機能を使用しようとしています。

新しいテーブルに記録する前に、 update メソッドで値が変更されたかどうかを確認する必要があります。

[ExtensionOf(tableStr(CustTable))]
final class CustTable_Extension
{
    void update(boolean _updateSmmBusRelTable = true, boolean _updateParty = 
                true)
    {
        CustTable   custTable_Orig = this.orig();
        boolean hasChanged = this.CreditMax != custTable_Orig.CreditMax;

        next update(_updateSmmBusRelTable, _updateParty);

        if(hasChanged)
        {
            //do something
        }
    }
}

ただし、このコードを実行すると、「オブジェクトがオブジェクトのインスタンスに設定されていません」というエラーが発生します。「この」オブジェクトが null であるため、エラーが発生します。「next update(_updateSmmBusRelTable, _updateParty);」を呼び出すときにも同じエラーが発生します。

ドキュメントには次のように記載されています。「これにより、イベント ハンドラーを使用する必要なく、パブリック メソッドとプロテクト メソッドのロジックを拡張できます。メソッドをラップすると、クラスの他のパブリック メソッドとプロテクト メソッドおよび変数にもアクセスできます。」

何か案は?

4

3 に答える 3

2

ラッパー メソッドからデフォルト パラメータ値を削除してみてください。

[ExtensionOf(tableStr(CustTable))]
final class CustTable_Extension
{
    void update(boolean _updateSmmBusRelTable , boolean _updateParty )
    {
        CustTable   custTable_Orig = this.orig();
        boolean hasChanged = this.CreditMax != custTable_Orig.CreditMax;

        next update(_updateSmmBusRelTable, _updateParty);

        if(hasChanged)
        {
            //do something
        }
    }
}
于 2018-02-02T12:07:22.140 に答える