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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 24.05.2006, 11:24   #1  
miaa is offline
miaa
Участник
Аватар для miaa
 
23 / 10 (1) +
Регистрация: 26.09.2004
Адрес: Москва
? Как в расширенном фильтре у формы сделать, авто фильтрацию при запуске формы?
Здравствуйте!
На формах есть возможность установить расширенный фильтр (Ctrl + F3) и сохранить установленный запрос. (поле Выбор запроса).
А как сделать чтоб выбранный запрос автоматом применялся при запуске формы?
а то он изначально делает "используемый запрос" а потом приходится ручками выбирать нужные запрос?
Старый 24.05.2006, 14:26   #2  
akvi is offline
akvi
Участник
 
119 / 12 (1) ++
Регистрация: 31.03.2003
Адрес: Москва
Недавно выяснял этот вопрос здесь на форуме. Знатоки Аксапты утверждают, что никак нельзя сделать автоматическое применение последнего запроса. По крайней мере, без программирования здесь не обойтись. Или придется смириться...

Ax 3.0 SP4
Старый 24.05.2006, 14:35   #3  
miaa is offline
miaa
Участник
Аватар для miaa
 
23 / 10 (1) +
Регистрация: 26.09.2004
Адрес: Москва
А программирование данного момента сильно нудное?
Насколько я понимаю тут из syslastvalue надо вытащить старый запрос (их может быть несколько еще надо выбрать), а потом както его критерии наложить на датасорс... На вскидку это мне не кажется уж очень простым вариантом...
Старый 24.05.2006, 14:45   #4  
akvi is offline
akvi
Участник
 
119 / 12 (1) ++
Регистрация: 31.03.2003
Адрес: Москва
Посмотрите информацию по этой теме здесь: http://www.axforum.info/forums/searc...searchid=28197
Старый 25.05.2006, 18:16   #5  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Занялся исследованием этой хотелки и выплыло несколько моментов.

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;
2. В методе init() формы устанавливается значение этого флага в истину
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;
}
Вложения
Тип файла: xpo UserQuerySetup.xpo (5.7 Кб, 600 просмотров)
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: mazzy (5), Андре (5), Anton Sk. (1), sukhanchik (4), gl00mie (3), Yaroslav (1), S.Kuskov (3).
Теги
законченный пример, полезное, фильтр, форма

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Баг в расширенном фильтре DenisS DAX: Программирование 9 28.11.2013 12:09
Варианты join в расширенном фильтре Weez DAX: Программирование 10 20.07.2009 14:00
как правильно запретить обработку запроса при запуске формы? Beast-L DAX: Программирование 7 17.04.2007 17:27
Автоматический вызов lookup при запуске формы demID DAX: Программирование 6 24.09.2004 17:34
Русская локализация Axapta 3 ? SlavaK DAX: Администрирование 59 01.07.2003 22:38
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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