24.05.2006, 11:24 | #1 |
Участник
|
Как в расширенном фильтре у формы сделать, авто фильтрацию при запуске формы?
Здравствуйте!
На формах есть возможность установить расширенный фильтр (Ctrl + F3) и сохранить установленный запрос. (поле Выбор запроса). А как сделать чтоб выбранный запрос автоматом применялся при запуске формы? а то он изначально делает "используемый запрос" а потом приходится ручками выбирать нужные запрос? |
|
24.05.2006, 14:26 | #2 |
Участник
|
Недавно выяснял этот вопрос здесь на форуме. Знатоки Аксапты утверждают, что никак нельзя сделать автоматическое применение последнего запроса. По крайней мере, без программирования здесь не обойтись. Или придется смириться...
Ax 3.0 SP4 |
|
24.05.2006, 14:35 | #3 |
Участник
|
А программирование данного момента сильно нудное?
Насколько я понимаю тут из syslastvalue надо вытащить старый запрос (их может быть несколько еще надо выбрать), а потом както его критерии наложить на датасорс... На вскидку это мне не кажется уж очень простым вариантом... |
|
24.05.2006, 14:45 | #4 |
Участник
|
Посмотрите информацию по этой теме здесь: http://www.axforum.info/forums/searc...searchid=28197
|
|
25.05.2006, 18:16 | #5 |
Участник
|
Занялся исследованием этой хотелки и выплыло несколько моментов.
1. Что такое пользовательский фильтр? Это запрос, хранящийся в QueryRun датасоурса. Для того, чтобы он туда попал необходимо для начала создать этот QueryRun. Создается он ядром в вызове executeQuery датасоурса, после создания уходит на сервер. Отсюда первый момент - первоначально выполяется оригинальный Query. 2. Помимо того, что для наложения фильтра необходимо выполнить оригинальный запрос - результат этого запроса еще и отобразится на форме, т.е. если после этого накладывать пользовательский фильтр, то на форме появится мелькание. 3. Вызов формы возможен через "переход к основной таблице" - т.е. пользовательский фильтр может помешать отображению данных Если обойти первый момент я не представляю как, то второй и третий обойти можно. В общем, что бы не возиться с sysLastValue, написал класс-надстройку над движком расширенных фильтров. Из нюансов. 1. Для использования советую перекрывать метод executeQuery() датасоурса - пример использования ниже 2. Выбор запросов для использования - по названию (как в списке фильтра) с помощью методов queryLoad() или queryLoadLastUsed() (этот метод вызывает "Ранее использованный запрос"). Получить названия можно с помощью пары методов SavedQueriesCount() и SavedQueryName(). Сюда же входят "Ранее использованный запрос" и "Используемый запрос" 3. Метод buildSavedQueriesBox() позволяет заполнять FormComboBox списком запросов. Пример использования для формы LedgerTable. 1. В classDeclaration формы добавляется булевый флаг userFilter X++: boolean userFilter; 3. Перекрывается метода executeQuery() на датасоурсе LedgerTable X++: public void executeQuery() { UserQuerySetup userQuerySetup; boolean lookup = element.args().lookupValue() != "" || element.args().dataset(); // флаг для проверки перехода по JumpRef ; super(); if (userFilter && !lookup) { userQuerySetup = new UserQuerySetup(element, LedgerTable_QR); if (userQuerySetup.UserQuery()) { userQuerySetup.queryLoadLastUsed(); // вызов "Ранее использованного запроса" // или загрузка первого сохраненного запроса (или любого по номеру) // userQuerySetup.queryLoad(userQuerySetup.SavedQueryName(1)); userQuerySetup.queryUpdate(); // обновление запроса в QueryRun датасоурса userFilter = false; LedgerTable_DS.research(); // запрос из QueryRun перевыполняется } } userFilter = false; }
__________________
Axapta v.3.0 sp5 kr2 |
|
|
За это сообщение автора поблагодарили: mazzy (5), Андре (5), Anton Sk. (1), sukhanchik (4), gl00mie (3), Yaroslav (1), S.Kuskov (3). |