14.07.2015, 11:50 | #1 |
Участник
|
Получение значения из поля диалога AX2009
Доброго времени суток!
есть такой код в диалоге (При выборе значения лукап поля должны проверяться значения некоторых полей и выполняться некоторые действия, метод вызывается но все поля судя по дебаггеру пустые) как получить значение полей в диалоге: X++: protected boolean fld2_1_modified() { ; if ((dlgFactuDocId.value() == 'ПНЕ') || (dlgFactuDocId.value() == 'РКЕ')) { dlgRegInERNN.value(true); } else { dlgRegInERNN.value(false); } return true; } |
|
14.07.2015, 12:09 | #2 |
Участник
|
Напишите лучше что-то вроде этого:
X++: public boolean fld2_1_modified() { Object control = dialog.formRun().controlCallingMethod(); boolean ret = control.modified(); ; if (ret) { if ((dlgFactuDocId.value() == 'ПНЕ') || (dlgFactuDocId.value() == 'РКЕ')) { dlgRegInERNN.value(true); } else { dlgRegInERNN.value(false); } } return ret; } X++: dialog.customFieldName_RU("dlgRegInERNN"); dlgRegInERNN= dialog.addFieldValue(typeid(...), ...); dialog.customFieldName_RU("dlgFactuDocId"); dlgFactuDocId= dialog.addFieldValue(typeid(...), ...); Последний раз редактировалось Craz; 14.07.2015 в 12:12. Причина: вспомнил важный момент |
|
14.07.2015, 12:35 | #3 |
Участник
|
Все равно не работает.
Привожу код диалога: X++: class DialogHH extends RunBase { DialogField dlgFactureDate; DialogField dlgFactuDocId; DialogField dlgRegInERNN; DialogButton dialogButton; FactureDate_RU factureDate; FactuDocId factureDocId; RegInERNN regInERNN; #define.CurrentVersion(1) #localmacro.CurrentList factureDate, factureDocId, regInERNN #endmacro } public Object dialog() { DialogRunbase dlg; ; dlg = super(dlg) dlgFactureDate = dlg.addFieldValue(typeid(FactureDate_RU), factureDate); dlg.customFieldName_RU("dlgFactuDocId"); dlgFactuDocId = dlg.addFieldValue(typeid(FactuDocId), factureDocId); dlgRegInERNN = dlg.addFieldValue(typeid(RegInERNN),regInERNN); dlgRegInERNN.allowEdit(false); return dlg; } public void dialogPostRun(DialogRunbase dialog) { ; Super(dialog); dialog.formRun().controlMethodOverload(true); dialog.formRun().controlMethodOverloadObject(this); } protected boolean dlgFactuDocId_modified() { ; info(dlgFactuDocId.value()); if ((dlgFactuDocId.value() == 'ПНЕ') || (dlgFactuDocId.value() == 'РКЕ')) { dlgRegInERNN.value(true); } else { dlgRegInERNN.value(false); } return true; } public boolean getFromDialog() { ; factureDate = dlgFactureDate.value(); factureDocId = dlgFactuDocId.value(); regInERNN = dlgRegInERNN.value(); return true; } //Ну и само собой pack unpack .... Последний раз редактировалось syl; 14.07.2015 в 12:39. |
|
14.07.2015, 12:50 | #4 |
Участник
|
Очень странно, потому что я создал у себя ваш класс и у меня все отработало.
|
|
14.07.2015, 13:01 | #5 |
Участник
|
Если я в коде пишу dlgFactuDocId.value('ПНЕ'); то все работает, если методом простого выбора то по дебаггеру поле помечено как new, infolog выдает пустое значение....
P.S. Что то я ничего не понимаю, все поля кроме lookup полей работают корректно. В чем подвох? Последний раз редактировалось syl; 14.07.2015 в 13:29. |
|
14.07.2015, 16:17 | #6 |
Участник
|
Цитата:
Наводящий вопрос: Как Вы думаете, где происходит отработка штатного метода modify на объекте формы? Ну, грубо говоря, где выполняется super() метода модификации?
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
14.07.2015, 16:38 | #7 |
Участник
|
Цитата:
Сообщение от Владимир Максимов
Вы ВНИМАТЕЛЬНО посмотрите на то, что написал Вам Craz в самом первом ответе. И сравните со своим кодом. Не замечаете отличий Намекаю Обратите внимание на первые строчи метода
Наводящий вопрос: Как Вы думаете, где происходит отработка штатного метода modify на объекте формы? Ну, грубо говоря, где выполняется super() метода модификации? X++: Object control = dialog.formRun().controlCallingMethod(); boolean ret = control.modified(); |
|
14.07.2015, 17:00 | #8 |
Участник
|
В коде предполагается, что переменная dialog объявлена в classDeclaration и инициализирована предположительно в методе dialog().
|
|
14.07.2015, 17:20 | #9 |
Участник
|
|
|
14.07.2015, 17:24 | #10 |
Участник
|
В общем данный способ работает если диалог выполняется на стороне клиента (если перевести RunOn = Client). А есть способ заставить его работать в RunOn = CalledFrom?
|
|
14.07.2015, 17:33 | #11 |
Участник
|
Если вы добавили свой метод dialogPostRun(DialogRunbase dialog), то сохраняйте в classDeclaration ссылку на диалог, которую получаете в нем, только надо учесть, что это ссылка на серверный диалог, где нет ссылки на FormRun, поэтому приведенный код надо модифицировать вот так:
X++: Object control = dialog.dialogOnClinet_RU().formRun().controlCallingMethod(); boolean ret = control.modified(); |
|
|
За это сообщение автора поблагодарили: syl (1). |
14.07.2015, 18:14 | #12 |
Участник
|
Цитата:
X++: class DialogHH extends RunBase { DialogField dlgFactureDate; DialogField dlgFactuDocId; DialogField dlgRegInERNN; DialogButton dialogButton; FactureDate_RU factureDate; FactuDocId factureDocId; RegInERNN regInERNN; // Ссылка на класс диалога должна быть определена в ClassDeclaration // для перекрытия методов modified объектов диалога DialogRunbase dialog; #define.CurrentVersion(1) #localmacro.CurrentList factureDate, factureDocId, regInERNN #endmacro } public Object dialog(DialogRunbase _dialog, boolean _forceOnClient) { // DialogRunbase dialog; // определен в ClassDeclaration ; dialog = super(_dialog) dlgFactureDate = dialog.addFieldValue(typeid(FactureDate_RU), factureDate); dialog.customFieldName_RU("dlgFactuDocId"); dlgFactuDocId = dialog.addFieldValue(typeid(FactuDocId), factureDocId); dlgRegInERNN = dialog.addFieldValue(typeid(RegInERNN),regInERNN); dlgRegInERNN.allowEdit(false); return dialog; } public void dialogPostRun(DialogRunbase _dialog) { ; Super(_dialog); _dialog.formRun().controlMethodOverload(true); _dialog.formRun().controlMethodOverloadObject(this); } protected boolean dlgFactuDocId_modified() { FormControl control = dialog.formRun().controlCallingMethod(); boolean ret = control.modified(); ; if (ret) { if ((dlgFactuDocId.value() == 'ПНЕ') || (dlgFactuDocId.value() == 'РКЕ')) { dlgRegInERNN.value(true); } else { dlgRegInERNN.value(false); } } return true; } public boolean getFromDialog() { ; factureDate = dlgFactureDate.value(); factureDocId = dlgFactuDocId.value(); regInERNN = dlgRegInERNN.value(); return true; } public container pack() { return [#CurrentVersion,#CurrentList]; } public boolean unpack(container packedClass) { Version version = runbase::getVersion(packedClass); switch (version) { case #CurrentVersion: [version,#CurrentList] = packedClass; break; default: return false; } return true; }
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|