![]() |
#4 |
NavAx
|
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: ![]() } 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. Не бойся разбираться в коде, это полезно и не так долго, как кажется |
|
|
|