09.04.2009, 13:14 | #1 |
Участник
|
Баг стандартного механизма перекрытия лукапа
Наткнулся на такую штуку. Поискал по форуму и чё-то ничего похожего не нашёл.
Ax 3.0 sp4. 1) Создал таблицу с единственным полем ItemId. 2) Создал форму под это поле. 3) Перекрыл lookup X++: public void lookup() { element.lookupItemId(this); } X++: void lookupItemId(Object _lookupCtrl) { SysTableLookup sysTableLookup; Query query = new Query(); ; //_lookupCtrl.text(_lookupCtrl.valuestr()); sysTableLookup = SysTableLookup::newParameters(tableNum(InventTable), _lookupCtrl); query.addDataSource(tableNum(InventTable)); sysTableLookup.addLookupfield(fieldNum(InventTable, ItemId)); sysTableLookup.parmQuery(query); sysTableLookup.performFormLookup(); } Выхожу из формы. Снова открываю форму. Лукап отказывается вставать на запись (ту которую до этого выбрали). Как вылечил? Написал в вверху метода X++: _lookupCtrl.text(_lookupCtrl.valuestr()); Тестовый проектик прилагаю
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему. Последний раз редактировалось miklenew; 09.04.2009 в 13:17. |
|
09.04.2009, 13:42 | #2 |
Участник
|
Хм, странно.
Лично у меня при перекрывании метода lookup система предлагает: public void lookup(FormControl _formControl, str _filterStr) { super(_formControl, _filterStr); } А параметр _filterStr, кажется, и отвечает за установку на записи. Или я ошибаюсь?
__________________
Ты лучше голодай, чем что попало есть, И лучше будь один, чем вместе с кем попало.
|
|
09.04.2009, 14:20 | #3 |
Участник
|
Цитата:
Это без разницы. Можете реализовать этот механизм и на поле датасорса. У вас всё равно такая бага получиться.
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему. |
|
09.04.2009, 14:24 | #4 |
Axapta
|
Теперь будет другой небольшой побочный эффект. Если вы введете руками (а не через выбор из лукапа) значение в данное поле, а потом сразу нажмете на лукап, то ваше введенное значение перезатрется.
Ну и еще. Если вы поместите ваше поле в грид, то позиционирование должно происходит и без вашей дополнительной строки. |
|
|
За это сообщение автора поблагодарили: miklenew (1). |
09.04.2009, 14:32 | #5 |
Участник
|
Цитата:
Во. Теперь понятно почему я раньше этой штуки не замечал.
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему. |
|
09.04.2009, 14:40 | #6 |
Участник
|
Версия ядра Axapta 3.0
Похоже что это зависит от версии ядра Axapta: различное поведение FormStringControl.text() и FormStringControl.valueStr() в некоторых случаях.
На релизе #1951.3730/514-193 SP3/OP023-71 lookup из проекта отрабатывает корректно (с позиционированием по тексту), на прочих имеющихся SP4 и SP5(kr2) - эффект повторяется. В Axapta 3.0 SP6 это пофиксено следующим образом: Classes\SysTableLookup.formRun() X++: ... switch (callingControl.handle()) { case classNum(FormStringControl): callingStringControl = callingControl; args.lookupValue(callingStringControl.hasChanged() ? callingStringControl.text() : callingStringControl.valueStr()); break; } ... Последний раз редактировалось petergunn; 09.04.2009 в 14:45. |
|
|
За это сообщение автора поблагодарили: Dron AKA andy (2), miklenew (5). |
Теги |
lookup, баг, ax3.0 |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|