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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 02.07.2009, 18:05   #5  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5813 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
! Как гарантированно перехватывать события на полях диалога
Коллега придумал оригинальный и вполне надежный способ гарантированно перехватывать события на полях диалога - даже когда заранее неизвестно, сколько полей будет в этом диалоге выведено (ну, в разумных пределах, конечно). Суть-то проблемы в чем?
  1. Методы-перехватчики идентифицируются формой в соответствии с названиями контролов на форме;
  2. Названия полям диалога даются в зависимости от числовых идентификаторов, присваиваемых объектам DialogField при добавлении полей в диалог, а также от индекса отображаемого DialogField'ом поля в поле-массиве (обычно этот индекс равен 1) - см. метод \Classes\DialogField\fieldname;
  3. В диалог в зависимости от настроек может быть добавлено произвольное количество дополнительных полей - это происходит при вызове super() в перекрытом методе \Classes\RunBase\dialog, в результате управлять нумерацией объектов DialogField внутри диалога при добавлении их методами addField()/addFieldValue() становится затруднительно.
Так вот, чтобы принудительно задавать эти самые номера объектам DialogField, коллега нашел такой способ:
X++:
class   DEV_FormMethodOverloadSample
extends RunBase
{
    // ссылка на диалог понадобится для методов-обработчиков
    // событий на полях диалога, которые мы собираемся повесить
    Dialog      dialog;
    DialogField df1;
    DialogField df2;
    // задаем идентификаторы для DialogField, заведомо бОльшие
    // того количества полей, которое может быть добавлено в диалог
    #define.DlgFldNum1  (10240)
    #define.DlgFldNum2  (10241)
    // ...
}
protected Object dialog(DialogRunbase _dialog = null, boolean _forceOnClient = false)
{
    ;
    dialog = super( _dialog, _forceOnClient );
    // вот в чем фишка! создаем DialogField сами и "привязываем" к диалогу
    df1 = new DialogField( dialog, typeid(AmountCur), #DlgFldNum1 );
    df1.init( dialog );
    // значение df1 можно установить здесь же или в putToDialog()

    df2 = new DialogField( dialog, typeid(JournalId), #DlgFldNum2 );
    df2.init( dialog );
    // ...
    return dialog;
}
public void dialogPostRun(DialogRunbase _dialog)
{
    super( _dialog );
    // вешаем свои обработчики на некоторые события контролов диалоговой формы
    // NB! наш класс должен иметь свойство RunOn == Client или Called from
    // и canSwapBetweenCS() должен возвращать true, иначе этот код будет
    // вызван на сервере, и никакого _dialog.formRun() мы не увидим
    _dialog.formRun().controlMethodOverload( true );
    _dialog.formRun().controlMethodOverloadObject( this );
}
protected boolean fld10240_1_modified()         // df1
{
    FormRealControl formControl;
    boolean         ret;
    ;
    formControl = dialog.formRun().controlCallingMethod();
    ret = formControl.modified();               // вызываем super()
    if (ret)
    {
        // дальше выполняем нужные действия
    }
    return ret;
}
protected void fld10241_1_lookup()              // df2
{
    FormStringControl formControl;
    ;
    formControl = dialog.formRun().controlCallingMethod();
    // дальше выполняем нужные действия
}
За это сообщение автора поблагодарили: mazzy (2), RVS (1), vvk (1), belugin (3), Logger (5), Denicce (2), oip (2), Stitch_MS (1), alex55 (1), plumbum (1), Kabardian (4), decoder (1), samolalex (1).
Теги
dialog, runbase, законченный пример, контрол, полезное

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Ошибка при выборе поля "подразделение" на форме Дима DAX: Программирование 5 01.10.2007 11:23
Сортировка поля на форме, который отображается Display методом IvanS DAX: Программирование 10 06.12.2006 14:54
Вызвать modified поля датасорса axaLearner DAX: Программирование 9 25.05.2006 11:18
значения по умолчанию в наследнике от RunBase NetBus DAX: Программирование 6 29.09.2005 18:13
Связанные поля в форме ravil DAX: Программирование 2 12.06.2003 13:48

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

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

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