AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 09.04.2009, 13:14   #1  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Баг стандартного механизма перекрытия лукапа
Наткнулся на такую штуку. Поискал по форуму и чё-то ничего похожего не нашёл.
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());
И всё теперь работает как надо.
Тестовый проектик прилагаю
Вложения
Тип файла: xpo MRD_Proba.xpo (9.3 Кб, 192 просмотров)
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему.

Последний раз редактировалось miklenew; 09.04.2009 в 13:17.
Старый 09.04.2009, 13:42   #2  
klimova_m is offline
klimova_m
Участник
 
43 / 18 (1) ++
Регистрация: 17.11.2008
Адрес: С.Петербург
Хм, странно.
Лично у меня при перекрывании метода lookup система предлагает:

public void lookup(FormControl _formControl, str _filterStr)
{
super(_formControl, _filterStr);
}

А параметр _filterStr, кажется, и отвечает за установку на записи. Или я ошибаюсь?
__________________
Ты лучше голодай, чем что попало есть,
И лучше будь один, чем вместе с кем попало.
Старый 09.04.2009, 14:20   #3  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Цитата:
Сообщение от klimova_m Посмотреть сообщение
Хм, странно.
Лично у меня при перекрывании метода lookup система предлагает:

public void lookup(FormControl _formControl, str _filterStr)
{
super(_formControl, _filterStr);
}

А параметр _filterStr, кажется, и отвечает за установку на записи. Или я ошибаюсь?
Вы просто перекрыли на поле датасорса, а я на контроле.
Это без разницы.
Можете реализовать этот механизм и на поле датасорса.
У вас всё равно такая бага получиться.
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему.
Старый 09.04.2009, 14:24   #4  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Цитата:
Сообщение от miklenew Посмотреть сообщение
И всё теперь работает как надо.
Теперь будет другой небольшой побочный эффект. Если вы введете руками (а не через выбор из лукапа) значение в данное поле, а потом сразу нажмете на лукап, то ваше введенное значение перезатрется.

Ну и еще. Если вы поместите ваше поле в грид, то позиционирование должно происходит и без вашей дополнительной строки.
За это сообщение автора поблагодарили: miklenew (1).
Старый 09.04.2009, 14:32   #5  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Цитата:
Сообщение от oip Посмотреть сообщение
Теперь будет другой небольшой побочный эффект. Если вы введете руками (а не через выбор из лукапа) значение в данное поле, а потом сразу нажмете на лукап, то ваше введенное значение перезатрется.
Да есть такое. Но лучше уж так.
Цитата:
Сообщение от oip Посмотреть сообщение
Ну и еще. Если вы поместите ваше поле в грид, то позиционирование должно происходит и без вашей дополнительной строки.
Во. Теперь понятно почему я раньше этой штуки не замечал.
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему.
Старый 09.04.2009, 14:40   #6  
petergunn is offline
petergunn
Участник
 
118 / 274 (10) ++++++
Регистрация: 30.08.2005
Адрес: Tyumen
-> Версия ядра 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

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
После перекрытия JumpRef поля на DataSource в контекстном меню так и не появился переход к основной таблице. Кирилл DAX: Программирование 7 01.02.2007 11:42
Нашёл баг, причем очень похоже на баг ядра (SP5 FP2 KR2) Deep Dreamer DAX: Программирование 5 10.11.2006 18:04
Баг в методе класса OLAPCreateSchema Косых Артём DAX: Программирование 2 28.04.2006 12:20
баг в 2.5. Будьте осторожнее с символом "_" подчеркивание levsha DAX: Программирование 5 07.12.2004 12:26
Макросы и символ ')' Баг? SnowMan DAX: Программирование 2 09.09.2003 14:50
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 06:25.