|
08.05.2013, 13:21 | #1 |
Участник
|
Баг с фильтром в RunBase в AX 2009
Всем привет!
Есть диалог Runbase у которого есть кнопка "выбрать" (showQueryValues{return true}). Открываю диалог, нажимаю кнопку "выбрать", изменяю фильтр, нажимаю "ОК" в форме фильтра. Все нормально работает. Нажимаю "Отмена" на диалоге. Еще раз открываю диалог, на диалоге видны параметры запуска, когда нажималась кнопка "ОК" на диалоге, а не отмена. НО если нажать кнопку выбрать, то он покажет в форме фильтра параметры, которые выбирались в прошлый раз, когда на фильтре нажал "ОК", а на диалоге "Отмена". Посмотрел tutorial RunBase он также работает, но это можно лечить? Проблема в том, что для формы фильтра и формы RunBase записи в xLastValue разные. Что-нибудь можно сделать? |
|
08.05.2013, 14:20 | #2 |
Участник
|
Цитата:
Сообщение от kit22
Всем привет!
Есть диалог Runbase у которого есть кнопка "выбрать" (showQueryValues{return true}). Открываю диалог, нажимаю кнопку "выбрать", изменяю фильтр, нажимаю "ОК" в форме фильтра. Все нормально работает. Нажимаю "Отмена" на диалоге. Еще раз открываю диалог, на диалоге видны параметры запуска, когда нажималась кнопка "ОК" на диалоге, а не отмена. НО если нажать кнопку выбрать, то он покажет в форме фильтра параметры, которые выбирались в прошлый раз, когда на фильтре нажал "ОК", а на диалоге "Отмена". Посмотрел tutorial RunBase он также работает, но это можно лечить? Проблема в том, что для формы фильтра и формы RunBase записи в xLastValue разные. Что-нибудь можно сделать? ? |
|
08.05.2013, 14:50 | #3 |
Участник
|
kit22, я так понимаю, вы хотите, чтобы при повторном открытии был очищено поле критерий на форме SysQueryForm?
|
|
08.05.2013, 15:22 | #4 |
Участник
|
нет там никакого бага. в форме запросов выберите "текущий запрос", по умолчанию выбран "последний запрос"
|
|
08.05.2013, 15:40 | #5 |
Участник
|
|
|
08.05.2013, 18:37 | #6 |
Участник
|
При создании queryRun дополнительно укажите
X++: queryRun.promptLoadLastUsedQuery(false); |
|
|
За это сообщение автора поблагодарили: kit22 (1). |
08.05.2013, 23:42 | #7 |
Участник
|
Исправилось, если нажимать "Отмена" на диалоге, но теперь если нажать кнопку "Ок", то он не подгружает правильный запрос. Всегда подгружает предыдущий запрос.
|
|
09.05.2013, 11:59 | #8 |
Участник
|
Не пойму какого поведения Вы хотите добиться. Распишите по пунктам, как при каких условия должно все работать. Если Вам не нужен предыдущий запрос, просто исключите его из сериализации.
|
|
09.05.2013, 14:46 | #9 |
Участник
|
1) Если изменить фильтр по кнопке "Выбрать" (был фильтр1, стал фильтр2) и потом нажимать кнопку "ОК" на диалоге, то работало бы как обычно (при следующем открытии диалога и нажатии кнопки "выбрать" подгружался фильтр 2) - сейчас все нормально работает.
2) Но если изменить фильтр по кнопке выбрать(был фильтр1, стал фильтр2), а потом нажать кнопку "Отмена" на диалоге, то при следующем открытии диалога и нажатии кнопки "выбрать" подгружался фильтр1. - сейчас подгружает фильтр2. |
|
09.05.2013, 16:49 | #10 |
Участник
|
Цитата:
Попробуйте для начала почистить sysLastValue, возможно, у вас там в процессе всех этих манипуляций образовалась какая-нибудь "каша". Если не поможет, то проверьте как у Вас происходит инициализация queryRun. Принцип должен быть следующий: 1. Объявите в classDeclaration переменную queryRun X++: SysQueryRun queryRun; 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; } X++: public void initParmDefault() { ; this.initQuery(); super(); } X++: protected void initQuery() { Query query = new Query(); ; query.addDataSource(tablenum(EmplTable)); queryRun = new SysQueryRun(query); queryRun.promptLoadLastUsedQuery(false); } X++: public QueryRun queryRun() { ; return queryRun; } |
|
23.12.2020, 15:24 | #11 |
Участник
|
Вот интересно, а зачем в SysQueryRun.new стоит
X++: loadLastUsedQuery = true; |
|
Теги |
ax2009, runbase |
|
|