18.07.2008, 16:27 | #1 |
Модератор
|
метод Modified к stringControl
в методе RUN класса я генерируется форма с гридом. в родителе формы я положил источник , связанный с временной таблицей, которая запоняется в RUN класса.
Вопрос: Как к stringControl с именем "NameCtrl" добавить метод modified и по значению поля "NameCtrl" (выпадающий список, выбор пользователя) присвоить значение полю comboBoxControl с именем "TitleCtrl" ? вот код X++: void run() { Form form = new Form(formStr(InventJournalPrint_RU)); List reportList = List::create(inventJournalReportPackable.packReportList()); ListIterator it = new ListIterator(reportList); DictEnum dictEnum = new DictEnum(enumNum(InventJournalReportType_RU)); FormBuildDataSource formBuildDataSource; FormDataSource formDataSource; InventJournalReport_RU report; FormBuildTabControl tabControl; FormBuildTabPageControl pageControl; FormBuildGridControl gridControl; FormBuildGroupControl groupControl; FormBuildStringControl stringControl; FormBuildComboBoxControl comboBoxControl; FormBuildRealControl realControl; Args args; FormRun formRun; QueryBuildDataSource qbds; Str dsName; #define.DataGroupName("NamePosition"); if (reportList.empty()) return; control2Class = new Map(Types::Integer, Types::Class); groupControl = form.addControl(FormControlType::Group, ""); groupControl.widthMode(1); groupControl.heightMode(1); groupControl.frameType(1); tabControl = groupControl.addControl(FormControlType::Tab, ""); tabControl.widthMode(1); tabControl.heightMode(1); while (it.more()) { report = it.value(); if (! report) { it.next(); continue; } dsName = dictEnum.index2Symbol(report.reportType()); formBuildDataSource = form.addDataSource(dsName); formBuildDataSource.table(tableNum(OfficialsTrans_RU)); pageControl = tabControl.addControl(FormControlType::TabPage, ""); pageControl.caption(report.description()); pageControl.dataSource(dsName); pageControl.widthMode(1); pageControl.heightMode(1); gridControl = pageControl.addControl(FormControlType::Grid, ""); gridControl.widthMode(1); gridControl.heightMode(1); gridControl.dataSource(dsName); realControl = gridControl.addDataField(formBuildDataSource.id(), fieldNum(OfficialsTrans_RU, LineNum)); realControl.name("LineNum"); comboBoxControl = gridControl.addDataField(formBuildDataSource.id(), fieldNum(OfficialsTrans_RU, Position)); comboBoxControl.name("PositionCtrl"); control2Class.insert(comboBoxControl.id(), report); stringControl = gridControl.addDataField(formBuildDataSource.id(), fieldNum(OfficialsTrans_RU, Name)); stringControl.name("NameCtrl"); stringControl.lookupButton(2); control2Class.insert(stringControl.id(), report); comboBoxControl = gridControl.addDataField(formBuildDataSource.id(), fieldNum(OfficialsTrans_RU, Title)); comboBoxControl.name("TitleCtrl"); control2Class.insert(comboBoxControl.id(), report); it.next(); } args = new Args(); args.object(form); args.caller(this); formRun = classFactory.formRunClass(args); form = formRun.form(); formRun.init(); it.begin(); while (it.more()) { report = it.value(); if (! report) { it.next(); continue; } dsName = dictEnum.index2Symbol(report.reportType()); formDataSource = formRun.dataSource(dsName); qbds = formDataSource.query().dataSourceName(dsName); qbds.addRange(fieldNum(OfficialsTrans_RU, OffsessionId)).value(report.getOffSessionId()); qbds.addRange(fieldNum(OfficialsTrans_RU, reportType)).value(sysQuery::value(InventJournalReport_RU::inventJournalReportType2OffReportType(report.reportType()))); qbds.addSortField(fieldNum(OfficialsTrans_RU, LineNum)); offSessionId = report.getOffSessionId(); it.next(); } formRun.run(); formRun.wait(); } |
|
18.07.2008, 16:36 | #2 |
Участник
|
Суть вопроса доконца не понял, но думаю это поможет
Вопрос. как отследить modified на диалоге, который создал динамически? |
|
18.07.2008, 16:38 | #3 |
Участник
|
Вызовите следующие методы в run своего класса
X++: this.controlMethodOverload(true);
this.controlMethodOverloadObject(this); |
|
18.07.2008, 17:37 | #4 |
Модератор
|
Lucky13
код вставляем сюда? Цитата:
args = new Args(); args.object(form); args.caller(this); formRun = classFactory.formRunClass(args); form = formRun.form(); formRun.controlMethodOverload(true); formRun.controlMethodOverloadObject(this); formRun.init(); но что то не понимаю как полчить значение из NameCtrl и через select присвоить нове в TitleCtrl |
|
18.07.2008, 17:52 | #5 |
Модератор
|
в классе InventJournalPrintForm_RU в методе run прописал
formRun.controlMethodOverload(true); formRun.controlMethodOverloadObject(this); создал метод public void NameCtrl_modified в нем нужно найти по таблице OfficialsTrans_RU значение Title имея name и offSessionId чет я не соображу как будет выглядеть NameCtrl_modified Как получить значение с контрола NameCtrl ? |
|
18.07.2008, 18:25 | #6 |
MCTS
|
посмотрите \Forms\tutorial_Form_AddControl
__________________
В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню |
|
21.07.2008, 16:24 | #7 |
Модератор
|
Как дата сорсу в динамически созданной форме в поле присвоить значение?
formRun.dataSource(identifierStr(OfficialsTrans_RU)).object(fieldNum(OfficialsTrans_RU, Title)) что нибудь типа такого есть datasource.object(fieldnum(Table, Field)).value();? Последний раз редактировалось Poleax; 21.07.2008 в 16:30. |
|
21.07.2008, 16:29 | #8 |
Участник
|
Может так?
X++: formRun.dataSource(identifierStr(OfficialsTrans_RU)).cursor().(fieldNum(OfficialsTrans_RU, Title)) = "My Title"; formRun.dataSource(identifierStr(OfficialsTrans_RU)).refresh(); |
|
21.07.2008, 17:00 | #9 |
Модератор
|
Цитата:
formRun.dataSource(identifierStr(OfficialsTrans_RU)).cursor().(fieldNum(OfficialsTrans_RU, Title)) = "My Title";
Axapta 3. Может какой другой способ присвоить значение полю из DataSource ? |
|
21.07.2008, 17:06 | #10 |
Участник
|
Перестаньте маяться дурью и просто нарисуйте форму в AOT.
Давно бы уже решили задачу. |
|
21.07.2008, 17:10 | #11 |
Модератор
|
Сергей форму рисовать не будет.
Я просто допиливаю класс InventJournalPrintForm_RU осталось то просто присвоить значение в таблицу из DataSource. если знаешь помоги.. а то что с формой делать и так понятно. |
|
21.07.2008, 17:26 | #12 |
Участник
|
Сама постановка неправильна.
Сам датасорс управляет записью таблицы. Записывать в таблицу в обход датасорса - моветон и четкая установка нарваться на deadlock. Чтобы записать "значение в таблицу" нужно создать переменная типа таблица, найти запись по recId и обновить эту запись. { myTable myTable; myTable = MyTable::findrecid(myDataSource.cursor().recid, true); myTable.myValue = myValue; myTable.update(); } Переформулируйте задачу. Убедитесь, что у вас нет проблем с пониманием. |
|
21.07.2008, 17:43 | #13 |
Модератор
|
так то оно так только таблички OfficialsTrans_RU нет метода findrecid
и formRun.dataSource(identifierStr(OfficialsTrans_RU)).cursor().RecId ни чего не возвращает .. пусто. данная код вызывает из метода modified одного из поля на гриде. На гриде создается строка и при изменении одно поля друго должно заполняться автоматически. С табличкой хорошо работать когда там есть данные а тут еще строка не сохранилась из грида.. Последний раз редактировалось Poleax; 21.07.2008 в 17:48. |
|
21.07.2008, 17:54 | #14 |
Участник
|
Цитата:
{ OfficialsTrans_RU OfficialsTrans_RU; select forupdate OfficialsTrans_RU where OfficialsTrans_RU.recId == myDataSource.cursor().recid; OfficialsTrans_RU.myValue = myValue; OfficialsTrans_RU.update(); } Насчет formRun.dataSource(identifierStr(OfficialsTrans_RU)).cursor().RecId А с чего вы зяли, что в вашей динамической форме есть датасорс, который НАЗВАЕТСЯ также как и таблица? Вы точно уверены, что указывали название ДАТАСОРСА при создании? Делайте formRun.dataSource(N).cursor().RecId, где N - номер датасорса в форме. Или четко задавайте название датасорса при создании вашей динамической формы. Еще раз - перестаньте заниматься фигней (динамическим программированием), начните наконец решать задачу (нарисуйте форму с методами, просто вызовите ее в вашем методе) |
|
21.07.2008, 18:10 | #15 |
Модератор
|
mazzy респект за наставления и поучения. Фигней постараюсь больше не заниматься.
Все нормально, вопрос закрыт. З.Ы. интересно было выпендрится динамическим программированием... попытка удалась. |
|
21.07.2008, 18:39 | #16 |
Участник
|
Я все-таки повторю
|
|