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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 09.03.2006, 16:14   #1  
if_maks is offline
if_maks
Участник
 
226 / 15 (1) ++
Регистрация: 26.08.2003
? Фильтрация в 2.5
Добрый день всем.
Подскажите как можно наложить фильтр на отображаемую в форме таблицу, причем так что бы пользователь не мог его снять в Axapta ver. 2.5?
Пытаюсь использовать QueryBuildRange.status(RangeStatus::LOCKED); однако если вызвать 2-а раза контекстное меню --> "Найти..." и нажать ОК, не вводя значения, указаные выше ограничения слетают.
Спасибо!
Старый 09.03.2006, 16:16   #2  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Искать и возобновлять ranges в ExecuteQuery перед super
Старый 09.03.2006, 16:19   #3  
if_maks is offline
if_maks
Участник
 
226 / 15 (1) ++
Регистрация: 26.08.2003
пробовал - та же история
Старый 09.03.2006, 16:50   #4  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
код - в студию
Старый 09.03.2006, 17:05   #5  
if_maks is offline
if_maks
Участник
 
226 / 15 (1) ++
Регистрация: 26.08.2003
Переменная qr инициализируется раньше в методе init() формы.
Метод setFormRange() вызывается после super() в методе init() соотвествующего dataSource
метод собственно накладывает ограничения на dataSource и запрещает их редактировать.
PHP код:
void setFormRange()
{
    
int                     fieldNo;
    
Query                   query;
    
QueryBuildDataSource    queryBuildDataSource;
    
QueryBuildRange         qbr;
    ;
    
query qr.query();   
    
SalesTable_ds.query(query);
    
queryBuildDataSource query.dataSourceNo(1);
    for (
fieldNo 1fieldNo <= queryBuildDataSource.rangeCount(); fieldNo++)
    {
        
qbr queryBuildDataSource.range(fieldNo);
        
qbr.status(RangeStatus::LOCKED);
    }

в executeQuery() перед super() вызываю этот же метод setFormRange()
Старый 09.03.2006, 17:36   #6  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
да... ну.... хм...
все пользовательские фильтры и сортировки хранятся в _ds.queryRun().query(...). То есть если Вы хотите их убрать, то менять нужно именно этот query.
С другой стороны, просто так брать и подменять запрос, на мой взгляд, слишком жестоко.
Старый 09.03.2006, 17:51   #7  
if_maks is offline
if_maks
Участник
 
226 / 15 (1) ++
Регистрация: 26.08.2003
да, если идти дальше действительно просто подменять query я не стану, т.к. нужно сохранить возможность накладывать пользовательские сортировки и фильтры с учетом фильтров хранящихся в qr.query().
но я застрял сразу с тем, что мои фильтры qr.query() - можно легко сбросить, а это уже против правил.
Может кто нибудь еще справился с подобной проблемой или просто знает как решить такую задачу или она не имеет решения в 2.5?
(нужно сделать аналог доступа на уровне записи как в это работает в 3.0)
Старый 09.03.2006, 17:56   #8  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
а в 3.0 такая же фигня - после двойного поиска фильтр можно менять
-------------
я же говорю, только проверив и восстановив все свои фильтры в executeQuery Вы сможете себя обезопасить
Старый 09.03.2006, 17:58   #9  
if_maks is offline
if_maks
Участник
 
226 / 15 (1) ++
Регистрация: 26.08.2003
Ну да, я про тот который настраивается в стандартном функционале и который отбирает записи как это... "на уровне ядра"
Старый 09.03.2006, 18:51   #10  
if_maks is offline
if_maks
Участник
 
226 / 15 (1) ++
Регистрация: 26.08.2003
Спасибо Wamr - натолкнули на мысль, однако действительно жестокость для аксапты неприемлема ...
PHP код:
void setFormRange()
{
    
int                     rangeNo;
    
Query                   query;
    
QueryBuildDataSource    qbds;
    
QueryBuildDataSource    qbdsUser;
    
QueryBuildRange         qbr;
    
QueryBuildRange         qbrUser;
    ;
//    if (ctrlSalesId.text())
    
query qr.query();
    
qbdsUser this.query().dataSourceName("SalesTable");
    
qbds query.dataSourceNo(1);
    for (
rangeNo 1rangeNo <= qbds.rangeCount(); rangeNo++)
    {
        
qbr qbds.range(rangeNo);
        
qbrUser qbdsUser.findRange(fieldExt2Id(qbr.field()));
        if (!
qbrUser)
            
qbrUser this.query().dataSourceName("SalesTable").addRange(fieldExt2Id(qbr.field()));
        
qbrUser.value(qbr.value());
        
qbrUser.status(RangeStatus::HIDDEN);
    }

дело в шляпе.
Старый 10.03.2006, 11:04   #11  
akvi is offline
akvi
Участник
 
119 / 12 (1) ++
Регистрация: 31.03.2003
Адрес: Москва
Еще есть работа по настройке прав доступа на уровне записей в списках Axapta 2.5:
http://axapta.mazzy.ru/works/accessrecord/
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Фильтрация в Lookup'е IvanS DAX: Программирование 18 16.08.2006 09:57
Фильтрация записей Лиса* DAX: Функционал 0 08.09.2004 11:07
Связь Delayed и фильтрация ArturK DAX: Программирование 3 19.03.2004 13:04
Расширенная фильтрация Андре DAX: Программирование 3 22.07.2002 18:25
Фильтрация в Lookup-форме Rem DAX: Программирование 5 27.04.2002 08:27

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

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

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