Показать сообщение отдельно
Старый 18.06.2003, 12:46   #4  
macklakov is offline
macklakov
NavAx
Аватар для macklakov
 
2,129 / 916 (35) +++++++
Регистрация: 03.04.2002
2 Artild
Как я понимаю, ты хочешь создать что-то вроде мастера.
На днях решил подобную задачу, может и не очень элегантно, но работает без проблем.
Из create() вызываешь новую форму, через menuFunction, передаешь ей текущую форму, через args.caller() и датасорс, через parmObject(). В create нужно добавить дополнительный аргумент, чтобы его вызове из внешней формы создавалась строка, а не вызывалась форма.
void create(boolean aPPEND = false,
boolean extern = false // If created externally
){
Args args;
;
if(!extern){
args = new args();
args.caller(element);
args.parmObject(custTable_ds);
new menuFunction(menuItemDisplayStr(ISP_CustWizard),MenuItemType:isplay).run(args);
} else {
super(aPPEND);
}
}
В новой форме, в run, после super, создаешь временную таблицу, создаешь в ней новую запись и подставляешь ее в датасорс.
custTableTmp.setTmp();
custTableTmp.initValue();
custTableTmp.doInsert();
custTable.setTmpData(custTableTmp);
custTable_ds.executeQuery();
в датасорсе перебиваешь init:
public void init()
{
super();
custTable.setTmp();
}
Так же запрещаешь пользователю все лишние движения, кроме редактирования созданной записи.
По завершении редактирования (я ловлю closeOk), переносишь данные из временной в реальную, берешь курсор вызывавшей формы, создаешь новую запись и загоняешь в нее данные из временной таблицы.
public void closeOk()
{
FormDataSource formDataSource;
Object formDatasourceObj;
CustTable custTableDB;
;
select custTableTmp;
custTableDB.data(custTableTmp);
custTableDB.insert();
formDataSource = element.args().caller().dataSource(1);
formDatasourceObj = formDataSource;
formDatasourceObj.create(false,true);
formDataSource.cursor().data(custTableDB);

super();
}
Если что-то не сработало, сверься с InventTableWizard, я с него списывал, все работает.
P.S. Не бойся разбираться в коде, это полезно и не так долго, как кажется