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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 12.08.2010, 08:17   #1  
ziva is offline
ziva
Иван Захаров
Злыдни
Лучший по профессии AXAWARD 2013
 
65 / 106 (4) +++++
Регистрация: 25.03.2005
Расширенные возможности отслеживания событий на диалогах классов-наследников RunBase
В AX2009 RU5 появилась возможность простого расширения возможностей отслеживания событий на диалогах классов-наследников RunBase.
Поясню как это использовать (на примере InventBaileeCreateCalc_RU):

1. Добавляем в classDeclaration следующую конструкцию:
X++:
    CustAccount         custAccount;
    DialogField         dialogCustAccount;
    #define.dialogCustAccount('dialogCustAccount')
Здесь мы вынуждены иметь hardcoded название будущего контрола на форме, но дальше мы увидим как красиво это играет.

2. В метод dialog() добавляем вызов ещё пары методов:

X++:
   ...

    dialog.customFieldName_RU(#dialogCustAccount);
    // здесь насильно устанавливаем название создаваемого контрола в форме диалога
    dialogCustAccount = dialog.addFieldValue(typeid(CustAccount), custAccount);

    ...

    dialog.allowControlMethodOverload_RU(true);
    // а теперь разрешаем инстансу настоящего класса отлавливать события контролов

3. Теперь создаём метод dialogCustAccount_modified(), который позволяет отлавливать события контрола с названием 'dialogCustAccount' (если бы мы не изменяли название контрола, то метод бы назвался Fld1_modified, или Fld3_2 - взависимости от того где и как вы вызываете dialog.addField или dialog.addFieldValue)

Примечание: Поля-массивы (Dimension) будут иметь наименование с суффиксом содержащим номер элемента массива. Пример: dialogDimension_1, dialogDimension_2, ...

Очень важное примечание: поскольку в этом методе вы имеете дело с серверной версией класса Dialog, то для корректной работы нужно не забывать обновлять значения полей "обрамляющим" вызовом методов updateServer() и updateClient())

X++:
protected boolean dialogCustAccount_modified()
{
    boolean ret = dialog.curFormControl_RU().modified();
    ;
    dialog.dialogOnClient_RU().updateServer();

    dialogContractCode.value('');
    dialogContractAccount.value('');

    this.dialogActivateFields();

    dialog.updateClient(dialog.dialogOnClient_RU());

    return ret;
}
Вот собственно и всё!
Таким же точно образом можно отслеживать методы lookup(), validate(), selectionChange() и др...

P.S.
Собственно изначально делал это в AX3, а теперь удалось получить это в рамках RU5. Пользуйтесь на здоровье!
За это сообщение автора поблагодарили: db (3), sukhanchik (5), gefr (1), konopello (2), MikeR (1), gl00mie (3), alex55 (1), jeky (1), imir (1).
Теги
ax2009, dialog, законченный пример, полезное

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Протоколирование запуска классов наследников RunBase polygris DAX: Программирование 9 11.02.2010 15:59
Расширенные возможности Query - арифметические операции в условие Where. Lemming DAX: Программирование 10 07.02.2008 14:38
Inside Dynamics AX 4.0: RunBase Framework Extension Part IV Blog bot DAX Blogs 0 02.10.2007 04:49
Inside Dynamics AX 4.0: RunBase Framework Extension Part III Blog bot DAX Blogs 0 02.10.2007 04:49
Inside Dynamics AX 4.0: RunBase Framework Extension Part I Blog bot DAX Blogs 0 30.09.2007 09:20

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 18:25.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.