Создайте фильтр поиска для dialox в Dynamics AX 4.0 - PullRequest
1 голос
/ 09 июня 2011

Я пытаюсь создать собственный фильтр поиска в диалоге в AX.

Я следовал инструкциям в этом посте x ++ Фильтр поиска в диалоговом окне и получаю ошибку Stack Trace - объект FormRun не инициализирован - когда я запускаю свой код.

То, что я пытаюсь сделать, это отфильтровать поиск () для ConfigId EDT на основе выбора из ItemId EDT.У меня есть собственный 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, этот объект остается пустым.

Может кто-нибудь помочь мне понять, почему нетОбъект FormRun, связанный с переданным входом в DiaglogRunBase?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 16 июня 2011

Вы проверили, установлен ли ваш класс на "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;
}
0 голосов
/ 10 июня 2011

Может, вам следует вызывать super(_dialog) последним в методе dialogPostRun.

Посмотрите на аналогичное решение и еще один .

...