![]() |
#1 |
MCTS
|
Передать временную таблицу из формы в класс
Есть класс, в котором объявлен курсор на НЕВРЕМЕННУЮ таблицу. При инициализации класса делаем этому курсору 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;
} вызов X++: boolean checkTmp() { Boolean ret = true; ; select count(RecId) from tmpResponsible; if (!tmpResponsible.RecId) ret = checkFailed(strfmt("@SYS77621", "@ACL85")); return ret; } |
|
![]() |
#2 |
Moderator
|
Запрос идет по постоянной таблице или все же по неинициализированной временной?
__________________
Андрей. |
|
![]() |
#3 |
MCTS
|
X++: ? |
|
![]() |
#4 |
MCTS
|
Подход правильный. Все должно работать. Где-то ошибка в реализации.
Покажите код метода init() диалоговой формы.
__________________
С уважением, Павел Цераниди. На пути к совершенству нет конца. Каждое новое достижение является отправной точкой для следующего крупного шага. |
|
![]() |
#5 |
MCTS
|
X++: public void init() { if( !element.args().caller() ) throw error("@SYS79604"); smmLineCreate = element.args().caller().runbase(); super(); element.setDesign(); SmmTmpDeliverCreate.setTmp(); // это еще один датасорс на таблице. Но сейчас он не используется. SmmResponsible.setTmp(); } |
|
![]() |
#6 |
Moderator
|
Что-то с tmpResponsible не так, проверяйте инициализацию класса.
__________________
Андрей. |
|
![]() |
#7 |
MCTS
|
В случае с SmmTmpDeliverCreate все нормально, даже SmmLineCreate.parmTmpData(SmmTmpDeliverCreate) в closeOK не надо делать... Единственное отличие - SmmTmpDeliverCreate на самом деле временная
Geändert von Eldar9x (20.06.2008 um 15:27 Uhr) |
|
![]() |
#8 |
MCTS
|
Давайте уж заодоно и init() класса.
__________________
С уважением, Павел Цераниди. На пути к совершенству нет конца. Каждое новое достижение является отправной точкой для следующего крупного шага. |
|
![]() |
#9 |
MCTS
|
public boolean init()
{ boolean ret; ; this.checkSelection(); ret = super(); tmpResponsible.setTmp(); this.initParmDefault(); this.fillTmpData(); // можно считать пустым return ret; } |
|
![]() |
#10 |
MCTS
|
пробовал в filltmpdata():
X++: tmpResponsible.setTmp();
tmpResponsible.EmplType = SmmEmplType::Direct;
tmpResponsible.EmplId = "000016";
tmpResponsible.insert(); |
|
![]() |
#11 |
Сенбернар
|
Вопросы:
- форма "настоящая" (в AOT нарисованная)? Или это диалог? - как вы ее (форму) поднимаете из класса (код)?
__________________
Best Regards, Roman |
|
![]() |
#12 |
MCTS
|
Форма в АОТе
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; } |
|
![]() |
#13 |
Сенбернар
|
Попробуйте форму через classFactory.formRunClass() поднять. Мне помогло в свое время
![]()
__________________
Best Regards, Roman |
|
![]() |
#14 |
Боец
|
Скорее всего проблема в том что класс живет на сервере, а временная таблица на клиенте.
Нужно паковать тавлицу и передавать через pack() unpack(). Проблема обсуждалась много раз, ищите на форуме. |
|
![]() |
#15 |
Участник
|
или в перекрыть метод canSwapBetweenCS и вернуть false. Тогда можно не замарачивать с передачей временной таблицы с клиента на сервер.
|
|
|
This post has been rated by: Eldar9x (1). |
![]() |
#16 |
Боец
|
Zitat:
или в перекрыть метод canSwapBetweenCS и вернуть false. Тогда можно не замарачивать с передачей временной таблицы с клиента на сервер.
1. Функционал не требует больших вычислительных ресурсов 2. Функционал запускается сразу, без поддержки Batch А вообще нестандартный подход перекрытия canSwapBetweenCS() [IMHO] |
|
![]() |
#17 |
MCTS
|
X++: classFactory.formRunClass() X++: canSwapBetweenCS false Класс, действительно, живет на сервере. Видимо временный курсор диалога (датасорса) - на клиенте, а временный курсор класса - на сервере. Но ведь в случае с таблицей, которая на самом деле временная, это не вызывает проблем Geändert von Eldar9x (20.06.2008 um 17:28 Uhr) |
|
![]() |
#18 |
Участник
|
Если используется временная таблица, значит в диалоге пользователь должен что-то менять, изменять, выбирать - следовательно о пакетном режиме речь уже не идет.
Был у меня один класс, где я временную таблицу паковал, передавал с клиента на сервер, выглядело это уж больно извращено, много лишних телодвижений. Без этого код выглядит более аккуратно и логично. Пример из стандарта - класс SalesCreateReleaseOrder Использовать данный подход никого не агитирую, просто для богатства выбора привел... |
|
![]() |
#19 |
MCTS
|
а что он делает этот метод?
|
|
![]() |
#20 |
Боец
|
canSwapBetweenCS = can Swap Between Client Server
|
|
|
![]() |
||||
Thema | Antworten | |||
Проблема с передачей контролов из формы в класс | 0 | |||
создать и передать временную таблицу | 11 | |||
Как передать временную таблицу | 15 | |||
Как при вызове класса передать в него таблицу? | 7 | |||
Русская локализация Axapta 3 ? | 59 |
|