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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 15.06.2006, 10:51   #1  
Paul_ST is offline
Paul_ST
Участник
 
144 / 11 (1) +
Регистрация: 26.11.2003
Адрес: Екатеринбург
Сохранение параметров отчёта
Добрый день! Есть класс - наследник RunBaseBatch. В методе new() генерируется query, по которому создаётся queryRun. Данный объект возвращается методом queryRun(). В методе run() обрабатывается запрос - цикл while queryRun.next ...
Всё работает замечательно. Только - при повторном запуске класса последние введённые параметра запроса не сохраняются, но если нажать кнопку "Выбор", то в окне запроса они появляются и при закрытии окна запроса переходят в диалоговое окно запроса класса. Как сделать , чтобы при запуске класса последние введённые параметры запроса сразу появлялись (не приходилось бы нажимать на "Выбор" и "Ок")?
__________________
Paul_ST
Старый 15.06.2006, 10:53   #2  
Paul_ST is offline
Paul_ST
Участник
 
144 / 11 (1) +
Регистрация: 26.11.2003
Адрес: Екатеринбург
Пробовали помещать переменную queryRun в список сохраняемых параметров (#localmacro.CurrentList1
dateBegin
, dateEnd

#endmacro)
__________________
Paul_ST
Старый 15.06.2006, 10:54   #3  
Paul_ST is offline
Paul_ST
Участник
 
144 / 11 (1) +
Регистрация: 26.11.2003
Адрес: Екатеринбург
Сорри, ещё раз:
Пробовали помещать переменную queryRun в список сохраняемых параметров (#localmacro.CurrentList1
dateBegin
, dateEnd
, queryRun
#endmacro)
и сохранять, соответственно, методом pack(). Но возникает ошибка - некорректный тип параметра.
__________________
Paul_ST
Старый 15.06.2006, 11:17   #4  
Roman777 is offline
Roman777
NavAx
Аватар для Roman777
NavAx Club
 
320 / 64 (3) ++++
Регистрация: 10.02.2005
Адрес: г. Москва
1. queryRun нужно сгенерить в методе initParmDefault()
2. сделать сохранение этого queryRun в методе puck()
3. в методе unpack() сделать восстановление queryRun
Старый 15.06.2006, 11:17   #5  
latvik is offline
latvik
Участник
 
74 / 13 (1) ++
Регистрация: 27.05.2004
Адрес: Moscow, YS
метод pack() в студию!
Старый 15.06.2006, 11:20   #6  
Paul_ST is offline
Paul_ST
Участник
 
144 / 11 (1) +
Регистрация: 26.11.2003
Адрес: Екатеринбург
public container pack()
{
;
return [#CurrentVersion1, #CurrentList1];
}
, где #CurrentList1 - LocalMacro - см. в предыдущих сообщениях.

Кроме того return [#CurrentVersion1, #CurrentList1, queryRun]; тоже пытались делать
__________________
Paul_ST
Старый 15.06.2006, 11:24   #7  
Roman777 is offline
Roman777
NavAx
Аватар для Roman777
NavAx Club
 
320 / 64 (3) ++++
Регистрация: 10.02.2005
Адрес: г. Москва
нужно примерно так:

PHP код:
public container pack()
{
    return [
#CurrentVersion, #CurrentList] + [queryRun.pack()] + [super()];

Старый 15.06.2006, 11:25   #8  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
1) Метод ClassDeclaration. Определяешь 2 переменные

PHP код:
Query       queryMySample;
QueryRun queryRunMySample
2) Создай отдельный (новый) метод в котором будешь конструировать Query. Например, createQuery(). Этот метод формирует переменную типа Query, которую ты определил в ClassDeclaration как queryMySample

3) Создай еще один новый метод примерно такого содержания

PHP код:
public void makeQueryRun()
{
    ;
    if (! 
queryMySample)
    {
        
this.createQuery();
    }
    
queryRunMySample = new QueryRun(queryMySample);

4) Перекрываешь метод QueryRun

PHP код:
public QueryRun queryRun()
{
    return 
queryRunMySample;

5) Перекрываешь метод initParmDefault

PHP код:
// Переопределение данного метода нужно только при первом запуске
// когда у клиента еще не было Pack
void initParmDefault()
{
    
super();
    
this.makeQueryRun();

6) Перекрываешь метод Pack

PHP код:
public container pack()
{
   return [
#CurrentVersion, #CurrentList, queryRunMySample.query().pack()] + [super()];

7) Перекрываешь метод UnPack

PHP код:
public boolean  unpack(container  packedClass)
{
    
container       _basepackedQuery;
    
boolean         _ret;
    
Integer         _version    conpeek(packedClass,1);
    ;

    switch (
_version)
    {
        case 
#CurrentVersion:
            
[_version#CurrentList, packedQuery, _base] = packedClass;
            
if (queryIsPackedOk(packedQuery))
            {
               
queryMySample = new Query(packedQuery);
            }
            
this.makeQueryRun();
            
_ret super(_base);
            break;
        default:
            
_ret false;
    }
    return 
_ret;

Здесь queryIsPackedOk() - это метод класса Global. Вообще-то, он стандартный, но если его нет, то вот его код

PHP код:
/*MAN
Method to test a packed queryrun container is legal.
*/
static boolean queryIsPackedOk(PackedQueryRun packed)
{
    return 
sysQuery::isPackedOk(packed);

AXAPTA 2.5 SP3
Старый 15.06.2006, 11:25   #9  
Roman777 is offline
Roman777
NavAx
Аватар для Roman777
NavAx Club
 
320 / 64 (3) ++++
Регистрация: 10.02.2005
Адрес: г. Москва
а вот и Unpack() собственно:

PHP код:
public boolean unpack(container packedClass)
{
    
container       _base;
    
container       _packedQuery;
    
boolean         _ret;
    
Integer         _version    conPeek(packedClass,1);

    switch (
_version)
    {
        case 
#CurrentVersion:
            
[_version#CurrentList, _packedQuery, _base] = packedClass;
            
if (!_packedQuery)
                return 
false;
            
queryRun = new QueryRun(_packedQuery);
            
_ret super(_base);
            break;
        default:
            
_ret false;
    }
    return 
_ret;

Старый 15.06.2006, 11:28   #10  
Paul_ST is offline
Paul_ST
Участник
 
144 / 11 (1) +
Регистрация: 26.11.2003
Адрес: Екатеринбург
Спасибо! Попробуем
__________________
Paul_ST
Старый 03.08.2006, 11:15   #11  
DreamCreator is offline
DreamCreator
Moderator
Аватар для DreamCreator
Axapta Retail User
 
553 / 45 (3) +++
Регистрация: 04.11.2004
Адрес: Казань
!
День Добрый!
Аналогично делал сохранение параметров в диалоге, код заработал только после того как в pack() и unpack() убрал вызовы родительских классов, по причине того что в них не было команды возврата. Класс наследник RunBaseBatch.
мой pack:
PHP код:
public container pack()
{
    return [
#CurrentVersion, #CurrentList, queryRun.query().pack()];

родительский (RunBase) pack:
PHP код:
abstract public container pack()
{
#if.never
    
return [#CurrentVersion,#CurrentList];
#endif

unpack по аналогии.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Печать (сохранение) отчета в PDF konfet DAX: Программирование 41 12.12.2012 10:13
Экспорт / сохранение отчета в ASCII файл valentino DAX: Программирование 7 18.02.2008 11:57
Сохранение пользовательских настроек в диалоге отчета Андрей К. DAX: Программирование 14 26.04.2007 10:56
Размышления по поводу параметров отчета... NetBus DAX: Программирование 3 16.06.2006 18:28
Русская локализация Axapta 3 ? SlavaK DAX: Администрирование 59 01.07.2003 22:38
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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