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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 08.05.2013, 13:21   #1  
kit22 is offline
kit22
Участник
 
30 / 12 (1) ++
Регистрация: 15.08.2012
Баг с фильтром в RunBase в AX 2009
Всем привет!

Есть диалог Runbase у которого есть кнопка "выбрать" (showQueryValues{return true}).

Открываю диалог, нажимаю кнопку "выбрать", изменяю фильтр, нажимаю "ОК" в форме фильтра. Все нормально работает. Нажимаю "Отмена" на диалоге. Еще раз открываю диалог, на диалоге видны параметры запуска, когда нажималась кнопка "ОК" на диалоге, а не отмена. НО если нажать кнопку выбрать, то он покажет в форме фильтра параметры, которые выбирались в прошлый раз, когда на фильтре нажал "ОК", а на диалоге "Отмена".

Посмотрел tutorial RunBase он также работает, но это можно лечить?

Проблема в том, что для формы фильтра и формы RunBase записи в xLastValue разные. Что-нибудь можно сделать?
Старый 08.05.2013, 14:20   #2  
user_ax is offline
user_ax
Участник
Аватар для user_ax
 
599 / 39 (3) +++
Регистрация: 07.10.2012
Адрес: ZP
Цитата:
Сообщение от kit22 Посмотреть сообщение
Всем привет!

Есть диалог Runbase у которого есть кнопка "выбрать" (showQueryValues{return true}).

Открываю диалог, нажимаю кнопку "выбрать", изменяю фильтр, нажимаю "ОК" в форме фильтра. Все нормально работает. Нажимаю "Отмена" на диалоге. Еще раз открываю диалог, на диалоге видны параметры запуска, когда нажималась кнопка "ОК" на диалоге, а не отмена. НО если нажать кнопку выбрать, то он покажет в форме фильтра параметры, которые выбирались в прошлый раз, когда на фильтре нажал "ОК", а на диалоге "Отмена".

Посмотрел tutorial RunBase он также работает, но это можно лечить?

Проблема в том, что для формы фильтра и формы RunBase записи в xLastValue разные. Что-нибудь можно сделать?
То же вопрос интересует, так как желательно, чтобы при повторном открытии фильтры очищались. Какой нибудь clearfilter() или lastvalue()
?
Старый 08.05.2013, 14:50   #3  
user_ax is offline
user_ax
Участник
Аватар для user_ax
 
599 / 39 (3) +++
Регистрация: 07.10.2012
Адрес: ZP
kit22, я так понимаю, вы хотите, чтобы при повторном открытии был очищено поле критерий на форме SysQueryForm?
Старый 08.05.2013, 15:22   #4  
online
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,736 / 404 (17) +++++++
Регистрация: 23.03.2006
нет там никакого бага. в форме запросов выберите "текущий запрос", по умолчанию выбран "последний запрос"
Старый 08.05.2013, 15:40   #5  
user_ax is offline
user_ax
Участник
Аватар для user_ax
 
599 / 39 (3) +++
Регистрация: 07.10.2012
Адрес: ZP
Цитата:
Сообщение от ice Посмотреть сообщение
нет там никакого бага. в форме запросов выберите "текущий запрос", по умолчанию выбран "последний запрос"
А есть способ изменить "по-умолчанию" ? Только править SysQueryForm?
Старый 08.05.2013, 18:37   #6  
_scorp_ is offline
_scorp_
Участник
Аватар для _scorp_
MCBMSS
 
488 / 369 (13) ++++++
Регистрация: 25.07.2007
Адрес: Москва
При создании queryRun дополнительно укажите
X++:
queryRun.promptLoadLastUsedQuery(false);
За это сообщение автора поблагодарили: kit22 (1).
Старый 08.05.2013, 23:42   #7  
kit22 is offline
kit22
Участник
 
30 / 12 (1) ++
Регистрация: 15.08.2012
Исправилось, если нажимать "Отмена" на диалоге, но теперь если нажать кнопку "Ок", то он не подгружает правильный запрос. Всегда подгружает предыдущий запрос.
Старый 09.05.2013, 11:59   #8  
_scorp_ is offline
_scorp_
Участник
Аватар для _scorp_
MCBMSS
 
488 / 369 (13) ++++++
Регистрация: 25.07.2007
Адрес: Москва
Цитата:
Сообщение от kit22 Посмотреть сообщение
Исправилось, если нажимать "Отмена" на диалоге, но теперь если нажать кнопку "Ок", то он не подгружает правильный запрос. Всегда подгружает предыдущий запрос.
Не пойму какого поведения Вы хотите добиться. Распишите по пунктам, как при каких условия должно все работать. Если Вам не нужен предыдущий запрос, просто исключите его из сериализации.
Старый 09.05.2013, 14:46   #9  
kit22 is offline
kit22
Участник
 
30 / 12 (1) ++
Регистрация: 15.08.2012
1) Если изменить фильтр по кнопке "Выбрать" (был фильтр1, стал фильтр2) и потом нажимать кнопку "ОК" на диалоге, то работало бы как обычно (при следующем открытии диалога и нажатии кнопки "выбрать" подгружался фильтр 2) - сейчас все нормально работает.
2) Но если изменить фильтр по кнопке выбрать(был фильтр1, стал фильтр2), а потом нажать кнопку "Отмена" на диалоге, то при следующем открытии диалога и нажатии кнопки "выбрать" подгружался фильтр1. - сейчас подгружает фильтр2.
Старый 09.05.2013, 16:49   #10  
_scorp_ is offline
_scorp_
Участник
Аватар для _scorp_
MCBMSS
 
488 / 369 (13) ++++++
Регистрация: 25.07.2007
Адрес: Москва
Цитата:
Сообщение от kit22 Посмотреть сообщение
2) Но если изменить фильтр по кнопке выбрать(был фильтр1, стал фильтр2), а потом нажать кнопку "Отмена" на диалоге, то при следующем открытии диалога и нажатии кнопки "выбрать" подгружался фильтр1. - сейчас подгружает фильтр2.
У меня так и работает, т.е. после повторного открытия диалога подгружается фильтр 1.
Попробуйте для начала почистить sysLastValue, возможно, у вас там в процессе всех этих манипуляций образовалась какая-нибудь "каша".
Если не поможет, то проверьте как у Вас происходит инициализация queryRun. Принцип должен быть следующий:
1. Объявите в classDeclaration переменную queryRun
X++:
SysQueryRun     queryRun;
2. Методы pack и unpack должны выглядеть следующим образом:
X++:
public container pack()
{
    ;
    return [#CurrentVersion,#CurrentList,queryrun.query().pack()];
}
public boolean unpack(container _packedClass)
{
    Version     version = RunBase::getVersion(_packedClass);
    container   packedQuery;
    ;

    switch (version)
    {
        case #CurrentVersion :
            [version, #CurrentList, packedQuery] = _packedClass;
            if (packedQuery)
            {
                queryRun = new SysQueryRun(packedQuery);
                queryRun.promptLoadLastUsedQuery(false);
            }
            break;

        default:
            return false;
    }
    return true;
}
3. Реализуйте метод initParmDefault
X++:
public void initParmDefault()
{
    ;
    this.initQuery();

    super();
}
4. Метод initQuery должен иметь примерно следующий вид:
X++:
protected void initQuery()
{
    Query   query = new Query();
    ;

    query.addDataSource(tablenum(EmplTable));
    queryRun = new SysQueryRun(query);
    queryRun.promptLoadLastUsedQuery(false);
}
5. Перекройте метод queryRun:
X++:
public QueryRun queryRun()
{
    ;
    return queryRun;
}
Должно все работать как Вы описали
Старый 09.05.2013, 18:10   #11  
kit22 is offline
kit22
Участник
 
30 / 12 (1) ++
Регистрация: 15.08.2012
Спасибо, работает!
Старый 23.12.2020, 15:24   #12  
online
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Вот интересно, а зачем в SysQueryRun.new стоит
X++:
loadLastUsedQuery   = true;
Поставить false и не будет таких проблем. Для чего кому-то потребовалось true по умолчанию?
Теги
ax2009, runbase

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
amer-ax: It was a great day! Blog bot DAX Blogs 3 29.12.2012 01:02
emeadaxsupport: New Content for Microsoft Dynamics AX 2012 : October 2011 Blog bot DAX Blogs 0 27.10.2011 17:11
axinthefield: Dynamics AX Event IDs Blog bot DAX Blogs 0 01.03.2011 22:11
emeadaxsupport: List of fixes that improve performance of certain features in Dynamics AX 2009 Blog bot DAX Blogs 0 13.10.2009 19:06
axStart: Microsoft Dynamics AX 2009 Hot Topics Web Seminar Series Blog bot DAX Blogs 0 06.08.2008 12:05
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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