|
![]() |
#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 |
Moderator
|
Что-то с tmpResponsible не так, проверяйте инициализацию класса.
__________________
Андрей. |
|
![]() |
#5 |
MCTS
|
Подход правильный. Все должно работать. Где-то ошибка в реализации.
Покажите код метода init() диалоговой формы.
__________________
С уважением, Павел Цераниди. На пути к совершенству нет конца. Каждое новое достижение является отправной точкой для следующего крупного шага. |
|
![]() |
#6 |
MCTS
|
X++: public void init() { if( !element.args().caller() ) throw error("@SYS79604"); smmLineCreate = element.args().caller().runbase(); super(); element.setDesign(); SmmTmpDeliverCreate.setTmp(); // это еще один датасорс на таблице. Но сейчас он не используется. SmmResponsible.setTmp(); } |
|
![]() |
#7 |
MCTS
|
В случае с SmmTmpDeliverCreate все нормально, даже SmmLineCreate.parmTmpData(SmmTmpDeliverCreate) в closeOK не надо делать... Единственное отличие - SmmTmpDeliverCreate на самом деле временная
Последний раз редактировалось Eldar9x; 20.06.2008 в 15:27. |
|
![]() |
#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. Тогда можно не замарачивать с передачей временной таблицы с клиента на сервер.
|
|
|
За это сообщение автора поблагодарили: Eldar9x (1). |
![]() |
#16 |
Боец
|
Цитата:
или в перекрыть метод canSwapBetweenCS и вернуть false. Тогда можно не замарачивать с передачей временной таблицы с клиента на сервер.
1. Функционал не требует больших вычислительных ресурсов 2. Функционал запускается сразу, без поддержки Batch А вообще нестандартный подход перекрытия canSwapBetweenCS() [IMHO] |
|
![]() |
#17 |
MCTS
|
X++: classFactory.formRunClass() X++: canSwapBetweenCS false Класс, действительно, живет на сервере. Видимо временный курсор диалога (датасорса) - на клиенте, а временный курсор класса - на сервере. Но ведь в случае с таблицей, которая на самом деле временная, это не вызывает проблем Последний раз редактировалось Eldar9x; 20.06.2008 в 17:28. |
|
![]() |
#18 |
Участник
|
Если используется временная таблица, значит в диалоге пользователь должен что-то менять, изменять, выбирать - следовательно о пакетном режиме речь уже не идет.
Был у меня один класс, где я временную таблицу паковал, передавал с клиента на сервер, выглядело это уж больно извращено, много лишних телодвижений. Без этого код выглядит более аккуратно и логично. Пример из стандарта - класс SalesCreateReleaseOrder Использовать данный подход никого не агитирую, просто для богатства выбора привел... |
|
![]() |
#19 |
MCTS
|
а что он делает этот метод?
|
|
![]() |
#20 |
Боец
|
canSwapBetweenCS = can Swap Between Client Server
|
|
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|