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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 01.03.2010, 16:07   #1  
caper is offline
caper
Участник
 
16 / 10 (1) +
Регистрация: 26.10.2009
EP AX2009: сохранить параметры грида (фильтр, позиционирование)
Доброго всем дня!
делаю 2 UserControl'a для просмотра основных полей таблицы (грид) и для ввода/редактирования записи (форма), бросаю их на странички на портале, все работает.
Но - встает вопрос удобства работы.
Пример: пользователь отфильтровал записи в гриде (допустим, по дате, с применением фильтра) для редактирования, перешел к редактированию первой записи (т.е. на новую страничку портала), отредактировал, нажал "ОК" и редиректится на страничку с гридом и тут:

1. фильтр у грида не сохранился - заново пользователю формировать?
2. позиционирование на строке грида сбивается - активна всегда первая запись в гриде.

Есть ли возможность заставить портал запоминать позицию в гриде, фильтр грида...? ...кодом (если можно - примерчик)?
Старый 01.03.2010, 21:13   #2  
glibs is offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4,942 / 911 (40) +++++++
Регистрация: 10.06.2002
Адрес: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
1. Смотря как запрограммируете фильтр. Ввиду особенностей портала на Шарапоинте я, например, сохраняю примененный пользователем фильтр на списке, если делаю его в своих формах.

2. Штатно точно нет. Высока вероятность, что для решения задачи потребуется серьезная кастомизация движка портала.

Я предпочитаю обходить проблему специализированными фильтрами, реализацией процессов таким образом, чтобы в ВЭБе было приемлемо работать.
__________________
С уважением,
glibs®
Старый 02.03.2010, 09:35   #3  
caper is offline
caper
Участник
 
16 / 10 (1) +
Регистрация: 26.10.2009
Цитата:
Сообщение от glibs Посмотреть сообщение
1. Смотря как запрограммируете фильтр. Ввиду особенностей портала на Шарапоинте я, например, сохраняю примененный пользователем фильтр на списке, если делаю его в своих формах.
.
Я (пока?) использую стандартный фильтр у грида - т.е. совсем не программируя, не создавая свой.
Если я правильно понимаю, так как идет переход между страницами портала, то следует все, что нужно, сохранять (во viewstate?) и передавать между страницами, и при необходимости - восстанавливать.
да уж... непросто будет...
Старый 03.03.2010, 17:10   #4  
greench is offline
greench
Участник
Oracle
 
425 / 74 (3) ++++
Регистрация: 12.07.2007
Адрес: Киев
viewstate может не помочь, т.к. у вас есть переходы по страницам.
Старый 03.03.2010, 17:23   #5  
caper is offline
caper
Участник
 
16 / 10 (1) +
Регистрация: 26.10.2009
да, спасибо
пока складываю в Session...

ЗЫ А я правильно понял, что AxGridView не может создавать новые строки?
Старый 04.03.2010, 00:02   #6  
greench is offline
greench
Участник
Oracle
 
425 / 74 (3) ++++
Регистрация: 12.07.2007
Адрес: Киев
С порталом в 2009-й пока не работал, но теоретически если есть возможность вклиниться в события страницы, подобные событиям ASP.Net, то можно решить проблему и с помощью viewstate. Единственное, что состояния нужно будет сериализировать.
Старый 31.03.2010, 17:40   #7  
LEXAR is offline
LEXAR
Участник
 
27 / 17 (1) ++
Регистрация: 11.09.2009
В блоге The Microsoft Dynamics AX Enterprise Portal Blog предлагается перекрыть методы Pack() и Init() для используемого DataSet'а. Тогда при переходе между страницами и возврате на страницу с данным AxGridView, значение фильтра сохраняется и нет необходимости настраивать фильтр заново.
X++:
public container pack()
{
     container ret;
     SysLastValue sysLastValue;
     formdatasource filterDataSource;
     ;

    filterDataSource = SalesTable_ds; // Put your datasource name

    ttsbegin;
       // Delete last saved query for the current dataset
    delete_from sysLastValue
        where sysLastValue.Company      == curext()
           && sysLastValue.UserId       == curuserid()
           && sysLastValue.RecordType   == UtilElementType::DataSet
           && sysLastValue.ElementName  == filterDataSource.name()
           && sysLastValue.DesignName   == filterDataSource.name();

    // If there is a new queryRun() object then serialize and save it
    // in the sys last value table
    // Put your datasource name
    
    if (filterDataSource.queryRun())
   {
    
        sysLastValue.RecId = 0;
        sysLastValue.Company      = curext();
        sysLastValue.UserId       = curuserid();
        sysLastValue.RecordType   = UtilElementType::DataSet;
        sysLastValue.ElementName  = filterDataSource.name();
        sysLastValue.DesignName   = filterDataSource.name();
        sysLastValue.value = SysQuery::packRangeAndSortorder(filterDataSource.queryRun().query());    
        sysLastValue.insert();
    }
    ttscommit;

    ret = super();
    return ret;
}
X++:
public void init()
{
SysLastValue    sysLastValue;
    Query savedQuery;
    ;
    super();
// get the last value from the  sys last value table
    select firstonly sysLastValue
        where sysLastValue.Company      == curext()
           && sysLastValue.UserId       == curuserid()
           && sysLastValue.RecordType   == UtilElementType::DataSet
           && sysLastValue.ElementName  == this.name()
           && sysLastValue.DesignName   == this.name();
    if (sysLastValue && sysLastValue.Value)
    {
              // If there is an unpack error delete the saved query
       if (!SysQuery::unpackRangeAndSortorder(this.query(), sysLastValue.value))
        {
            ttsbegin;
            delete_from sysLastValue
                where sysLastValue.Company      == curext()
                   && sysLastValue.UserId       == curuserid()
                   && sysLastValue.RecordType   == UtilElementType::DataSet
                   && sysLastValue.ElementName  == this.name()
                   && sysLastValue.DesignName   == this.name();
            ttscommit;
        }
    }
}
Старый 31.03.2010, 19:47   #8  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от LEXAR Посмотреть сообщение
X++:
public container pack()
{
     container ret;
     SysLastValue sysLastValue;
...
    delete_from sysLastValue
        where sysLastValue.Company      == curext()
           && sysLastValue.UserId       == curuserid()
           && sysLastValue.RecordType   == UtilElementType::DataSet
           && sysLastValue.ElementName  == filterDataSource.name()
           && sysLastValue.DesignName   == filterDataSource.name();
...
Вот при всем уважении... не могу не встрять. Извините.

Лучше не хардкодить, а использовать нормальный класс и нормальные штатные методы:
ClassFactory.lastValueDelete
ClassFactory.lastValueGet
ClassFactory.lastValuePut

и уж чего не стоит делать, так это обнулять recid, лучше пользоваться методом clear().

X++:
public container pack()
{
     container ret;
     formdatasource filterDataSource;
     ;

    filterDataSource = SalesTable_ds; // Put your datasource name

    ttsbegin;
       // Delete last saved query for the current dataset
    classFactory.lastValueDelete(curext(),
                                 curuserid(),
                                 UtilElementType::DataSet,
                                 filterDataSource.name()
                                 filterDataSource.name());

    // If there is a new queryRun() object then serialize and save it
    // in the sys last value table
    // Put your datasource name
    
    if (filterDataSource.queryRun())
   {
        classFactory.lastValuePut(SysQuery::packRangeAndSortorder(filterDataSource.queryRun().query(),
                                  curext(),
                                  curuserid(),
                                  UtilElementType::DataSet,
                                  filterDataSource.name(),filterDataSource.name());
    }
    ttscommit;

    ret = super();
    return ret;
}
__________________
полезное на axForum, github, vk, coub.
Старый 31.03.2010, 20:59   #9  
LEXAR is offline
LEXAR
Участник
 
27 / 17 (1) ++
Регистрация: 11.09.2009
Я сам в коде не разбирался, случайно наткнулся на ответ в блоге, написал сюда. А код этот писали индусы
Старый 01.04.2010, 09:16   #10  
LEXAR is offline
LEXAR
Участник
 
27 / 17 (1) ++
Регистрация: 11.09.2009
Насчет сохранения выбранной строки:
http://www.eggheadcafe.com/software/...ion-after.aspx
Теги
ax2009, axgridview, enterprise portal, ep, грид

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
AX2009 расширеный фильтр Wamr DAX: Программирование 11 18.12.2010 17:27
Отладка кода C# при разработке под EP AX2009 player DAX: Программирование 4 24.09.2008 19:38
EP фильтр в Web форме zelibobis DAX: Программирование 2 10.01.2008 16:59
при построении перекрёстных ссылок выдаётся сообщение об ошибках mmmax DAX: Программирование 10 21.01.2005 12:42
Позиционирование курсора на строке грида JohNick DAX: Программирование 2 14.04.2004 12:28
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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