AXForum  
Zurück   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Kennwort vergessen?
Registrieren Forum Rules Hilfe Benutzerliste Heutige Beiträge Suchen

 
 
Themen-Optionen Thema durchsuchen Ansicht
Alt 20.06.2008, 14:38   #1  
Eldar9x ist offline
Eldar9x
MCTS
Benutzerbild von Eldar9x
Oracle
MCBMSS
 
1.064 / 166 (8) ++++++
Registriert seit: 29.09.2006
Ort: Казань
Передать временную таблицу из формы в класс
Есть класс, в котором объявлен курсор на НЕВРЕМЕННУЮ таблицу. При инициализации класса делаем этому курсору setTmp. Есть диалоговая форма, в которой датасорс - также по этой таблице. При инициализации ставим ее в setTmp.
В методе closeOk:
X++:
public void closeOk()
{
    DialogRunbase dialog = element.args().caller();
    ;

    SmmLineCreate.parmTmpData(SmmResponsible); //  SmmResponsible - та самая таблица

    dialog.updateServer();

    if( SmmLineCreate.checkCloseDialog(this) )
        super();
}
А парм-метод такой:
X++:
Common parmTmpData(Common _tmpResponsible = tmpResponsible)
{
    ;
    tmpResponsible.setTmpData(_tmpResponsible);
    return tmpResponsible;
}
После того как на диалоге создаю строку в таблице, сохраняю и жму OK, в классе :
вызов
X++:
boolean checkTmp()
{
    Boolean ret = true;
    ;
    select count(RecId) from tmpResponsible;

    if (!tmpResponsible.RecId)
        ret = checkFailed(strfmt("@SYS77621", "@ACL85"));

    return ret;
}
идет по настоящей таблице и записи диалоговой формы вообще не видит. В чем может быть решение?
Alt 20.06.2008, 15:00   #2  
Dron AKA andy ist offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Registriert seit: 27.03.2002
Ort: Москва
Запрос идет по постоянной таблице или все же по неинициализированной временной?
__________________
Андрей.
Alt 20.06.2008, 15:03   #3  
Eldar9x ist offline
Eldar9x
MCTS
Benutzerbild von Eldar9x
Oracle
MCBMSS
 
1.064 / 166 (8) ++++++
Registriert seit: 29.09.2006
Ort: Казань
X++:
          ?
значение smmResponsible.RecId после checkTmp в отладчике оказывается равно 4, это столько настоящих записей в самой таблице. Хотя в диалоге введена 1 строка. Значит, по постоянной.
Alt 20.06.2008, 15:10   #4  
e@gle ist offline
e@gle
MCTS
MCBMSS
 
164 / 72 (3) ++++
Registriert seit: 11.04.2005
Ort: Минск
Подход правильный. Все должно работать. Где-то ошибка в реализации.
Покажите код метода init() диалоговой формы.
__________________
С уважением, Павел Цераниди.
На пути к совершенству нет конца. Каждое новое достижение является отправной точкой для следующего крупного шага.
Alt 20.06.2008, 15:12   #5  
Eldar9x ist offline
Eldar9x
MCTS
Benutzerbild von Eldar9x
Oracle
MCBMSS
 
1.064 / 166 (8) ++++++
Registriert seit: 29.09.2006
Ort: Казань
X++:
public void init()
{
    if( !element.args().caller() )
        throw error("@SYS79604");

    smmLineCreate = element.args().caller().runbase();

    super();

    element.setDesign();

    SmmTmpDeliverCreate.setTmp(); // это еще один датасорс на таблице. Но сейчас он не используется.
    SmmResponsible.setTmp();         
}
Alt 20.06.2008, 15:15   #6  
Dron AKA andy ist offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Registriert seit: 27.03.2002
Ort: Москва
Что-то с tmpResponsible не так, проверяйте инициализацию класса.
__________________
Андрей.
Alt 20.06.2008, 15:24   #7  
Eldar9x ist offline
Eldar9x
MCTS
Benutzerbild von Eldar9x
Oracle
MCBMSS
 
1.064 / 166 (8) ++++++
Registriert seit: 29.09.2006
Ort: Казань
В случае с SmmTmpDeliverCreate все нормально, даже SmmLineCreate.parmTmpData(SmmTmpDeliverCreate) в closeOK не надо делать... Единственное отличие - SmmTmpDeliverCreate на самом деле временная

Geändert von Eldar9x (20.06.2008 um 15:27 Uhr)
Alt 20.06.2008, 15:42   #8  
e@gle ist offline
e@gle
MCTS
MCBMSS
 
164 / 72 (3) ++++
Registriert seit: 11.04.2005
Ort: Минск
Давайте уж заодоно и init() класса.
__________________
С уважением, Павел Цераниди.
На пути к совершенству нет конца. Каждое новое достижение является отправной точкой для следующего крупного шага.
Alt 20.06.2008, 15:51   #9  
Eldar9x ist offline
Eldar9x
MCTS
Benutzerbild von Eldar9x
Oracle
MCBMSS
 
1.064 / 166 (8) ++++++
Registriert seit: 29.09.2006
Ort: Казань
public boolean init()
{
boolean ret;
;

this.checkSelection();

ret = super();

tmpResponsible.setTmp();

this.initParmDefault();
this.fillTmpData(); // можно считать пустым


return ret;
}
Alt 20.06.2008, 15:55   #10  
Eldar9x ist offline
Eldar9x
MCTS
Benutzerbild von Eldar9x
Oracle
MCBMSS
 
1.064 / 166 (8) ++++++
Registriert seit: 29.09.2006
Ort: Казань
пробовал в filltmpdata():
X++:
    tmpResponsible.setTmp();
    tmpResponsible.EmplType = SmmEmplType::Direct;
    tmpResponsible.EmplId   = "000016";
    tmpResponsible.insert();
несмотря на setTmp() данные ложаться в постоянную таблицу... То есть setTmp может и не работать? Или повторный вызов setTmp отключает временность...
Alt 20.06.2008, 16:23   #11  
RVS ist offline
RVS
Сенбернар
Benutzerbild von RVS
Злыдни
 
696 / 130 (6) +++++
Registriert seit: 27.02.2003
Ort: Королев МО
Zitat:
Zitat von Eldar9x Beitrag anzeigen
Есть диалоговая форма, в которой датасорс
Вопросы:
- форма "настоящая" (в AOT нарисованная)? Или это диалог?
- как вы ее (форму) поднимаете из класса (код)?
__________________
Best Regards,
Roman
Alt 20.06.2008, 16:28   #12  
Eldar9x ist offline
Eldar9x
MCTS
Benutzerbild von Eldar9x
Oracle
MCBMSS
 
1.064 / 166 (8) ++++++
Registriert seit: 29.09.2006
Ort: Казань
Форма в АОТе
X++:
protected Object dialog()
{
    DialogRunbase   dialog = Dialog::newFormnameRunbase(this.dialogFormName(),this);
    ;

    dialog = super(dialog);
    dialog.caption(this.caption());

    dgDeliver = dialog.addGroup("@ACL95");
    dgDeliver.columns(2);

    dfDeliverDate   = dialog.addFieldValue(typeid(SmmWorkDate), deliverDate, this.dateLabel());

    return dialog;

}
Alt 20.06.2008, 16:34   #13  
RVS ist offline
RVS
Сенбернар
Benutzerbild von RVS
Злыдни
 
696 / 130 (6) +++++
Registriert seit: 27.02.2003
Ort: Королев МО
Попробуйте форму через classFactory.formRunClass() поднять. Мне помогло в свое время
__________________
Best Regards,
Roman
Alt 20.06.2008, 16:41   #14  
DSPIC ist offline
DSPIC
Боец
 
1.077 / 1243 (44) ++++++++
Registriert seit: 11.04.2008
Скорее всего проблема в том что класс живет на сервере, а временная таблица на клиенте.
Нужно паковать тавлицу и передавать через pack() unpack().
Проблема обсуждалась много раз, ищите на форуме.
Alt 20.06.2008, 16:53   #15  
petr ist offline
petr
Участник
Соотечественники
 
561 / 201 (8) ++++++
Registriert seit: 30.05.2005
Ort: Швейцария
или в перекрыть метод canSwapBetweenCS и вернуть false. Тогда можно не замарачивать с передачей временной таблицы с клиента на сервер.
This post has been rated by: Eldar9x (1).
Alt 20.06.2008, 17:12   #16  
DSPIC ist offline
DSPIC
Боец
 
1.077 / 1243 (44) ++++++++
Registriert seit: 11.04.2008
Zitat:
или в перекрыть метод canSwapBetweenCS и вернуть false. Тогда можно не замарачивать с передачей временной таблицы с клиента на сервер.
Это в случае, если
1. Функционал не требует больших вычислительных ресурсов
2. Функционал запускается сразу, без поддержки Batch
А вообще нестандартный подход перекрытия canSwapBetweenCS() [IMHO]
Alt 20.06.2008, 17:25   #17  
Eldar9x ist offline
Eldar9x
MCTS
Benutzerbild von Eldar9x
Oracle
MCBMSS
 
1.064 / 166 (8) ++++++
Registriert seit: 29.09.2006
Ort: Казань
X++:
   classFactory.formRunClass()
так как в АОТе не выходит - ругается что у объекта нет метода addGroup;
X++:
  canSwapBetweenCS   false
заработал как положено filltmpdata, но вызов SmmLineCreate.parmTmpData() в диалоге затирает эти данные.
Класс, действительно, живет на сервере. Видимо временный курсор диалога (датасорса) - на клиенте, а временный курсор класса - на сервере. Но ведь в случае с таблицей, которая на самом деле временная, это не вызывает проблем

Geändert von Eldar9x (20.06.2008 um 17:28 Uhr)
Alt 20.06.2008, 17:26   #18  
petr ist offline
petr
Участник
Соотечественники
 
561 / 201 (8) ++++++
Registriert seit: 30.05.2005
Ort: Швейцария
Если используется временная таблица, значит в диалоге пользователь должен что-то менять, изменять, выбирать - следовательно о пакетном режиме речь уже не идет.

Был у меня один класс, где я временную таблицу паковал, передавал с клиента на сервер, выглядело это уж больно извращено, много лишних телодвижений. Без этого код выглядит более аккуратно и логично.

Пример из стандарта - класс SalesCreateReleaseOrder

Использовать данный подход никого не агитирую, просто для богатства выбора привел...
Alt 20.06.2008, 17:36   #19  
Eldar9x ist offline
Eldar9x
MCTS
Benutzerbild von Eldar9x
Oracle
MCBMSS
 
1.064 / 166 (8) ++++++
Registriert seit: 29.09.2006
Ort: Казань
а что он делает этот метод?
Alt 20.06.2008, 17:41   #20  
DSPIC ist offline
DSPIC
Боец
 
1.077 / 1243 (44) ++++++++
Registriert seit: 11.04.2008
canSwapBetweenCS = can Swap Between Client Server
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Проблема с передачей контролов из формы в класс matew DAX: Программирование 0 28.04.2008 17:37
создать и передать временную таблицу kitty DAX: Программирование 11 13.07.2006 14:40
Как передать временную таблицу Aslan DAX: Программирование 15 23.05.2006 17:34
Как при вызове класса передать в него таблицу? ArturK DAX: Программирование 7 09.04.2004 12:15
Русская локализация Axapta 3 ? SlavaK DAX: Администрирование 59 01.07.2003 22:38

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Gehe zu

Рейтинг@Mail.ru
Alle Zeitangaben in WEZ +3. Es ist jetzt 06:21 Uhr.
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.