2

AX のダイアログでカスタム ルックアップ フィルターを作成しようとしています。

このポストx++ フィルター ルックアップのダイアログの指示に従いましたが、コードを実行すると、スタック トレース エラー -- FormRun オブジェクトが初期化されていません -- が表示されます。

私がやろうとしているのは、ItemId EDT からの選択に基づいて、ConfigId EDT の lookup() をフィルタリングすることです。カスタムの lookup() の準備ができており、適切に動作していますが、ダイアログ ボックスから呼び出すことができません。

public Object dialog(DialogRunbase _dialog, boolean _forceOnClient)
{
    DialogRunBase   dialog;
    ;

    dialog = super(_dialog, true);

    dialog.caption('@RID2885');

    dfItem = dialog.addField(typeid(ItemId));
    dfInventLoc = dialog.addField(typeid(InventLocationId));
    dfReplaceCost = dialog.addField(typeid(PdsCost));
    dfItemConfig = dialog.addField(typeid(ConfigId));
    dfColorId = dialog.addField(typeid(InventColorId), '@RID101');

    return dialog;
}

lookup() の呼び出しは次のとおりです。

void Fld_7_lookup()
{
    Formrun fr = this.dialogModify().parmDialog();
    Object control = fr.controlCallingMethod();    
    ;

    ConfigTable::lookupConfigIdSimple(control, dfItem.value());    
}

そして、これはスタックトレースエラーを取得し続ける場所です:

public void dialogPostRun(DialogRunbase _dialog)
{
    ;
     super(_dialog);
    **_dialog.formRun().controlMethodOverload(true);** // Causes Stack Trace error
    _dialog.formRun().controlMethodOverloadObject(this);       
}

ダイアログボックスで複数の構成を試しました。コードがそのポイントに到達すると、dialog() メソッドから渡された情報がまだ残っていますが、FormRun を取得しようとすると、そのオブジェクトは空白になります。

渡された DiaglogRunBase に関連付けられた FormRun オブジェクトがない理由を誰かが理解するのを手伝ってくれませんか?

ありがとう。

4

2 に答える 2

0

おそらく、メソッドsuper(_dialog)の最後に呼び出す必要があります。dialogPostRun

同様のソリューションもう1つを見てください。

于 2011-06-10T06:49:01.577 に答える
0

クラスが「Called From」で実行されるように設定されているかどうかを確認しましたか?

変更されたメソッドをオーバーライドするためのコード例を次に示します。おそらく、ルックアップにも同じ要件があります。

public void dialogPostRun(DialogRunbase _dialog)
{
// Must be overriden to enable overriding modified method
;
    _dialog.dialogForm().formRun().controlMethodOverload(true);
    _dialog.dialogForm().formRun().controlMethodOverloadObject(this);
    _dialog.formRun().controlMethodOverload(true);
    _dialog.formRun().controlMethodOverloadObject(this);

    super(_dialog);
}

カスタムメソッドの場合:

boolean Fld2_1_modified()
{
    FormStringControl c = dialog.formrun().controlCallingMethod();
    boolean ret;
    ;

    ret = c.modified(); // Super() Call the FormControl ->modified

    dlgCustomField.value(MyClass::someMethod(dlgCustomField.value())); // example

    return ret;
}
于 2011-06-15T21:05:04.800 に答える