AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 14.07.2015, 15:33   #1  
syl is offline
syl
Участник
Аватар для syl
 
236 / 21 (1) +++
Регистрация: 10.06.2015
Адрес: Киев
Методы контролов в диалоге
При определении в диалоге метода
X++:
public void dialogPostRun(DialogRunbase dialog)
{
    ;
    Super(dialog);
    dialog.formRun().controlMethodOverload(true);
    dialog.formRun().controlMethodOverloadObject(this);
}
Выскакивает ошибка: обьект не инициализаирован...
Старый 14.07.2015, 15:40   #2  
Proba is offline
Proba
Участник
 
60 / 13 (1) ++
Регистрация: 25.06.2007
Адрес: Красноярск\Зеленогорск
А если добавить dialogForm(), т.е. вот так
X++:
public void dialogPostRun(DialogRunbase _dialog)
{
    super(_dialog);

    _dialog.dialogForm().formRun().controlMethodOverload(true);
    _dialog.dialogForm().formRun().controlMethodOverloadObject(this);
}
Старый 14.07.2015, 15:43   #3  
syl is offline
syl
Участник
Аватар для syl
 
236 / 21 (1) +++
Регистрация: 10.06.2015
Адрес: Киев
Тоже самое ((

Старый 14.07.2015, 15:51   #4  
Proba is offline
Proba
Участник
 
60 / 13 (1) ++
Регистрация: 25.06.2007
Адрес: Красноярск\Зеленогорск
А метод dialog перекрыт? Там переменная dialog инициализируется?
Старый 14.07.2015, 15:53   #5  
syl is offline
syl
Участник
Аватар для syl
 
236 / 21 (1) +++
Регистрация: 10.06.2015
Адрес: Киев
X++:
protected Object dialog(DialogRunbase dialog, boolean forceOnClient)
{
    CustTrans           custTrans;
    CustTable           CustTable;
    SetEnumerator       setEnumerator = custTransSet.getEnumerator();
    container           con;
    ;
    if (setEnumerator.moveNext())
    {
      con = setEnumerator.current();
      custTrans = CustTrans::find(conpeek(con, 2));
      RegInERNN = FactureJour_RU::Calc_RegInERNN(CustTrans.AccountNum,
                                               CustTrans.CurrencyCode,
                                               CustTrans.TransDate,
                                               abs(CustTrans.AmountCur));
     CustTable = CustTable::find(custTrans.AccountNum, False);
     ZEU_INN_RU_Cust_Vend = CustTable.INN_RU;
    }

    dialog = super(dialog, forceOnClient);

    dlgFactureExtId     = dialog.addFieldValue(typeid(FactureExternalId_RU), factureexternalId);

    dlgNNGroup = dialog.addFieldValue(typeid(NumberSequenceGroupId), NNGroup);

    dlgFactureDate = dialog.addFieldValue(typeid(FactureDate_RU), factureDate);
    dlgFactuDocId       = dialog.addFieldValue(typeid(ZEU_FactuDocId), factureDocId);
    dlgFactureRasonId   = dialog.addFieldValue(typeid(ZEU_FactureRasonId), factureReasonId);

    dlgCorrectionReason = dialog.addFieldValue(typeid(ZEU_CorrectionReason), correctionReason);

    dlgResponsible     = dialog.addFieldValue(typeid(EmplId), ResponsibleId); 
    dlgINN_RU          = dialog.addFieldValue(typeid(INN_RU), ZEU_INN_RU_Cust_Vend); 
    dlgRegInERNN       = dialog.addFieldValue(typeid(ZEU_RegInERNN),RegInERNN); 
    dlgRegInERNN.allowEdit(false);

    return dialog;
}
Старый 14.07.2015, 16:10   #6  
Proba is offline
Proba
Участник
 
60 / 13 (1) ++
Регистрация: 25.06.2007
Адрес: Красноярск\Зеленогорск
Добавил в CustPrepaymentFactureCreate_RU метод dialogPostRun, все работает.
Перекомпилируйте класс инкрементно.
Если не может верните dialog на стандратный
X++:
protected Object dialog(DialogRunbase dialog, boolean forceOnClient)
{
    ;
    dialog = super(dialog, forceOnClient);
    dlgFactureDate = dialog.addFieldValue(typeid(FactureDate_RU), factureDate);

    return dialog;
}
Так будет работать?
Старый 14.07.2015, 16:15   #7  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от syl Посмотреть сообщение
При определении в диалоге метода
X++:
public void dialogPostRun(DialogRunbase dialog)
{
    ;
    Super(dialog);
    dialog.formRun().controlMethodOverload(true);
    dialog.formRun().controlMethodOverloadObject(this);
}
Выскакивает ошибка: обьект не инициализаирован...

Картинка стоит тысячи слов Судя по стеку вызовов, у вас RunBase не переключается на клиента при работе диалога. Если посмотреть на свойства CustPrepaymentFactureCreate_RU (наследника RunBase в данном примере), то там прописано RunOn == Server, так что переключаться на клиента он не умеет. А вот DialogRunbase переключаться на клиента умеет - и делает это, в итоге при работе диалога есть два экземпляра DialogRunbase: один клиентский, который рулит формой диалога и содержит непустую ссылку на FormRun, а другой - серверный, у которого такой ссылки нет. Вы на серверном экземпляре вызываете dialog.formRun() и получаете закономерную ошибку "объект не инициализирован".
Вообще, чтобы вешать свои обработчики на поля диалога, выполняемого на клиенте, нужен клиентский же объект, которого в вашем случае нет. Учите CustPrepaymentFactureCreate_RU переключаться между клиентом и сервером.
За это сообщение автора поблагодарили: alex55 (1), syl (1).
Старый 14.07.2015, 16:18   #8  
syl is offline
syl
Участник
Аватар для syl
 
236 / 21 (1) +++
Регистрация: 10.06.2015
Адрес: Киев
Спасибо, переключил в CalledFrom - заработало!!!
Старый 14.07.2015, 16:20   #9  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Да, собственно, вот так будет работать:
X++:
Super(dialog);
dialog.dialogOnClient_RU().formRun().controlMethodOverload(true);
dialog.dialogOnClient_RU().formRun().controlMethodOverloadObject(this);
Но все равно без умения RunBase переключаться на клиента вешать серверный обработчик на поля клиентского диалога - не самая удачная идея с т.з. производительности и клиент-серверного трафика.
Старый 14.10.2015, 22:22   #10  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
647 / 350 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Вернемся к нашим бар... диалогам)))
Допустим, у меня класс отрабатывает сложный запрос с формированием временной таблицы на сервере. Но параметры-то я ввожу на клиенте. Даже применяя метод dialogOnServer() мне не удалось добиться желаемого... Как мне реализовать данный метод, чтобы не было ошибки с пустым formRun?
X++:
public void dialogPostRun(Dialog _dialog)
{
    FormRun fr;
    ;

    super(_dialog);

    fr = _dialog.dialogOnServer().dialogForm().formRun();
    fr.controlMethodOverload(true);
    fr.controlMethodOverloadObject(this);
}
__________________
// no comments
Старый 15.10.2015, 00:34   #11  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Ссылку на FormRun содержит клиентский экземпляр Dialog, поэтому попробуйте использовать dialogOnClient_RU() вместо dialogOnServer()
Старый 15.10.2015, 09:00   #12  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
647 / 350 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Ссылку на FormRun содержит клиентский экземпляр Dialog, поэтому попробуйте использовать dialogOnClient_RU() вместо dialogOnServer()
К сожалению, у нас нет русской версии АХ4, только инглиш
__________________
// no comments
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Отчет с динамич высотой контролов IKA DAX: Программирование 2 28.02.2014 10:26
Итератор с поддержкой методов обратного вызова для обработки контролов на форме gl00mie DAX: Программирование 18 06.08.2013 22:16
Переопределение стандартных методов у динамически создаваемых контролов - вопрос с предисторией (многабукаф) TasmanianDevil DAX: Программирование 13 02.08.2012 07:39
Методы таблицы в DataSources (DAX4) Qaz Qwerty DAX: Программирование 2 16.06.2008 10:11
Методы контролов формы matew DAX: Программирование 2 06.05.2008 11:41

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 16:33.