03.12.2013, 20:20 | #1 |
Участник
|
Динамически создаваемые LookUp-ы и создание на них динамической обработки
Как на динамически создаваемый LookUp
например dlgFactureExtIdNumSeq = dialog.addFieldValue(typeid(NumberSequenceGroupId), factureexternalId); повесить метод обработки, чтобы передать данные для фильтра в другое поле, созданное так : dlgFactureExtId = dialog.addFieldValue(typeid(FactureExternalId_RU), factureexternalId); ? |
|
03.12.2013, 22:13 | #2 |
Молодой, подающий надежды
|
Для 2009 старше RU5 можно перекрыть метод lookup по аналогии с примером в теме Расширенные возможности отслеживания событий на диалогах классов-наследников RunBase
В 2012 можно использовать метод контрола registerOverrideMethod() X++: dlgFactureExtId.registerOverrideMethod(methodStr(FormStringControl, lookup), methodStr(MyClass, dlgFactureExtId_lookup), this);
__________________
Кононов Пётр |
|
|
За это сообщение автора поблагодарили: Dzha (1). |
04.12.2013, 19:52 | #3 |
Участник
|
Создаю динамическую форму :
protected Object dialog(DialogRunbase dialog, boolean forceOnClient) ..... dlgFactuDocId = dialog.addFieldValue(typeid(ZEU_FactuDocId), factureDocId); //Fld2_1 ..... dlgFactureExtIdNumSeq = dialog.addFieldValue(typeid(NumberSequenceGroupId), factureexternalId); //Fld5_1 dlgZEU_SourceFacture = dialog.addFieldValue(typeid(FactureExternalId_RU), ZEU_SourceFacture); dlgZEU_CorrectionReason = dialog.addFieldValue(typeid(ZEU_CorrectionReason), ZEU_CorrectionReason); dlgZEU_SourceFacture.visible(false); dlgZEU_CorrectionReason.visible(false); dialog.allowControlMethodOverload_RU(true); ..... Создаю обработку на выбор LookUp : protected boolean Fld2_1_modified() { boolean ret=True; ; if (!(ZEU_FactureDoc::find(dlgFactuDocId.value()).DocType == ZEU_DocType::RK)) { dlgZEU_SourceFacture.visible(true); dlgZEU_CorrectionReason.visible(true); } else { dlgZEU_SourceFacture.visible(false); dlgZEU_CorrectionReason.visible(false); } // for Repaint dialog dialog2.dialogOnClient_RU().updateServer(); dialog2.updateClient(dialog2.dialogOnClient_RU()); return ret; } Суть в том, что при выборе LookUp Fld2_1 надо проверять выбранное значение и соответственно делать видимыми/невидимыми два поля ввода. Проблемы : 1. dlgFactuDocId.value() - пустое 2. Если включен блок // for Repaint dialog, то визуально эти два поля появляются на форме, но при этом текст Fld2_1 становится пустым 3. Если не включен блок // for Repaint dialog, то визуально эти два поля НЕ появляются на форме, и при этом текст Fld2_1 не пустой (хотя dlgFactuDocId.value() все равно пустой) Что я не так делаю ? |
|
05.12.2013, 09:04 | #4 |
Участник
|
Чтобы решить первую проблему, попробуйте дописать свой код как показано ниже. Вторая проблема возможно исчезнет сама.
X++: protected boolean Fld2_1_modified() { Object control = dialog.formRun().controlCallingMethod(); boolean ret = control.modified(); boolean vsblity; ; if (ret) { vsblity = ZEU_FactureDoc::find(dlgFactuDocId.value()).DocType != ZEU_DocType::RK; dlgZEU_SourceFacture.visible(vsblity); dlgZEU_CorrectionReason.visible(vsblity); // for Repaint dialog dialog2.dialogOnClient_RU().updateServer(); dialog2.updateClient(dialog2.dialogOnClient_RU()); } return ret; }
__________________
// no comments |
|
05.12.2013, 11:47 | #5 |
Участник
|
Во время выполнения строка :
Object control = dialog2.formRun().controlCallingMethod(); ругается на "объект controlCallingMethod() не инициализирован" |
|
05.12.2013, 12:01 | #6 |
Программатор
|
dialog2?
|
|
05.12.2013, 12:13 | #7 |
Участник
|
Дело в том, что в форме которую я рехтую в ClassDeclaretion объявлено DialogRunbase dialog2; И в методе protected Object dialog(DialogRunbase dialog, boolean forceOnClient)
есть присваивание dialog2=dialog; К объекту dialog вне этого метода доступа нет. |
|
05.12.2013, 12:30 | #8 |
Программатор
|
что то вы не так делаете с кучей диалогов
объявите глобальной переменной один диалог и работайте с ним а потом public Object dialog() { ; dialog = super(); ******************* return dialog; } Последний раз редактировалось Sada; 05.12.2013 в 12:32. |
|
05.12.2013, 12:36 | #9 |
Участник
|
Попробую. Проблема в том что этот dialog был кем-то написан до меня и почему так не стандартно я не знаю. И для чего надо forceOnClient ?
|
|
05.12.2013, 12:52 | #10 |
Участник
|
Поменял
//class CustPrepaymentFactureCreate_RU extends RunBase на public class CustPrepaymentFactureCreate_RU extends RunBaseBatch Оставил только один dialog. Его метод поменял на public Object dialog() { ; dialog = super(); ******************* return dialog; } Во время выполнения строка все равно ругается: Object control = dialog.formRun().controlCallingMethod(); ругается на "объект controlCallingMethod() не инициализирован" |
|
Теги |
lookup filter, lookupvalue |
|
|