AXForum  
Go Back   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Forgotten Your Password?
Register Forum Rules FAQ Members List Today's Posts Search

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

    _dialog.dialogForm().formRun().controlMethodOverload(true);
    _dialog.dialogForm().formRun().controlMethodOverloadObject(this);
}
Old 14.07.2015, 15:43   #3  
syl is offline
syl
Участник
syl's Avatar
 
236 / 21 (1) +++
Join Date: 10.06.2015
Location: Киев
Тоже самое ((

Old 14.07.2015, 15:51   #4  
Proba is offline
Proba
Участник
 
60 / 13 (1) ++
Join Date: 25.06.2007
Location: Красноярск\Зеленогорск
А метод dialog перекрыт? Там переменная dialog инициализируется?
Old 14.07.2015, 15:53   #5  
syl is offline
syl
Участник
syl's Avatar
 
236 / 21 (1) +++
Join Date: 10.06.2015
Location: Киев
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;
}
Old 14.07.2015, 16:10   #6  
Proba is offline
Proba
Участник
 
60 / 13 (1) ++
Join Date: 25.06.2007
Location: Красноярск\Зеленогорск
Добавил в 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;
}
Так будет работать?
Old 14.07.2015, 16:15   #7  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5813 (201) ++++++++++
Join Date: 28.11.2005
Location: Москва
Blog Entries: 3
Quote:
Originally Posted by syl View Post
При определении в диалоге метода
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 переключаться между клиентом и сервером.
This post has been rated by: alex55 (1), syl (1).
Old 14.07.2015, 16:18   #8  
syl is offline
syl
Участник
syl's Avatar
 
236 / 21 (1) +++
Join Date: 10.06.2015
Location: Киев
Спасибо, переключил в CalledFrom - заработало!!!
Old 14.07.2015, 16:20   #9  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5813 (201) ++++++++++
Join Date: 28.11.2005
Location: Москва
Blog Entries: 3
Да, собственно, вот так будет работать:
X++:
Super(dialog);
dialog.dialogOnClient_RU().formRun().controlMethodOverload(true);
dialog.dialogOnClient_RU().formRun().controlMethodOverloadObject(this);
Но все равно без умения RunBase переключаться на клиента вешать серверный обработчик на поля клиентского диалога - не самая удачная идея с т.з. производительности и клиент-серверного трафика.
Old 14.10.2015, 22:22   #10  
dech is offline
dech
Участник
dech's Avatar
Самостоятельные клиенты AX
 
650 / 352 (13) ++++++
Join Date: 25.06.2009
Location: Омск
Blog Entries: 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
Old 15.10.2015, 00:34   #11  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5813 (201) ++++++++++
Join Date: 28.11.2005
Location: Москва
Blog Entries: 3
Ссылку на FormRun содержит клиентский экземпляр Dialog, поэтому попробуйте использовать dialogOnClient_RU() вместо dialogOnServer()
Old 15.10.2015, 09:00   #12  
dech is offline
dech
Участник
dech's Avatar
Самостоятельные клиенты AX
 
650 / 352 (13) ++++++
Join Date: 25.06.2009
Location: Омск
Blog Entries: 3
Quote:
Originally Posted by gl00mie View Post
Ссылку на FormRun содержит клиентский экземпляр Dialog, поэтому попробуйте использовать dialogOnClient_RU() вместо dialogOnServer()
К сожалению, у нас нет русской версии АХ4, только инглиш
__________________
// no comments
 

Similar Threads
Thread Thread Starter Forum Replies Last Post
Отчет с динамич высотой контролов 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

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Рейтинг@Mail.ru
All times are GMT +3. The time now is 11:25.
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Contacts E-mail, Advertising.