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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 29.08.2018, 11:48   #1  
YoungPadawan is offline
YoungPadawan
Участник
 
21 / 23 (1) +++
Регистрация: 04.01.2017
FormTreeControl, Tree наследование. АХ2009
Здравствуйте!
Есть форма с деревом(Tree). Функционал работы дерева написан в методах дерева (на дизайне).
Хочу убрать код с дизайна.
Первое что приходит в голову: создать новый класс, передать в него контрол дерева, написать свои методы что бы соответствовать интерфейсу класса FormTreeControl и вызывать эти методы на том же дизайне в методах объекта Tree.
Этот вариант рабочий, но меня смущает то что нужно будет все равно перекрывать методы Tree и писать в них вызов своих.

И, как я думал, это решается наследованием.

Была идея создать наследника от FormTreeControl и добавить его на форму в коде.
Или в методе new объекта Tree написать такое this = new МойНаследник, но не смог проверить работает ли вообще такая конструкция, потому что класс FormTreeControl имеет модификатор final. И все мои надежды на "красивый" код рухнули.

Так вот, всем кто дочитал, есть ли какие-то варианты избавиться от какого-либо кода на дизайне?
Старый 29.08.2018, 12:02   #2  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2156 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Стандартные формы изучали?
__________________
Ivanhoe as is..
Старый 29.08.2018, 12:23   #3  
YoungPadawan is offline
YoungPadawan
Участник
 
21 / 23 (1) +++
Регистрация: 04.01.2017
Цитата:
Сообщение от Ivanhoe Посмотреть сообщение
Стандартные формы изучали?
Изучал.
В туториал - весь код в design ->Tree и в Element.

В правах групп пользователей - то что я описал в первом сообщении сообщении (методы класса вызываются в перекрытых методах на дизайне).

Последний раз редактировалось YoungPadawan; 29.08.2018 в 13:01.
Старый 29.08.2018, 12:51   #4  
SRF is offline
SRF
Участник
MCBMSS
Axapta Retail User
 
375 / 562 (19) +++++++
Регистрация: 08.08.2007
Записей в блоге: 1
Я думаю фраза про стандартные формы подразумевала не только tutorial*, но в том числе и формы, в которых используется также контрол tree. К сожалению, доступа к ax2009 у меня нет сейчас, но в DAX2012 то, что вы хотите сделать, реализовано в формах RTax25ProfitTable, DimensionDefaultingLookup(этой формы в dax2009 нет, лукап форма фин. аналитик).

У себя поискать примеры вы всегда можете по перекрестным ссылкам, думаю найдете.
__________________
Sergey Nefedov

Последний раз редактировалось SRF; 29.08.2018 в 12:53.
Старый 29.08.2018, 15:58   #5  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от YoungPadawan Посмотреть сообщение
Здравствуйте!
Есть форма с деревом(Tree). Функционал работы дерева написан в методах дерева (на дизайне).
Хочу убрать код с дизайна.
Первое что приходит в голову: создать новый класс, передать в него контрол дерева, написать свои методы что бы соответствовать интерфейсу класса FormTreeControl и вызывать эти методы на том же дизайне в методах объекта Tree.
Это Best Practices в среде Axapta. Именно так все и делается.

Более того, у многих форм есть связанный с этой формой "обслуживающий" класс, который инициализируется в init-формы и методы этого класса вызываются из методов объектов формы. Именно с целью убрать код из методов формы в класс, который позже может стать классом-родителем

В Ax2012 факт наличия обслуживающего форму класса вообще стало не явным стандартом по причине изменений в дизайне и структуре данных.

Цитата:
Сообщение от YoungPadawan Посмотреть сообщение
Этот вариант рабочий, но меня смущает то что нужно будет все равно перекрывать методы Tree и писать в них вызов своих.
Так вот Axapta устроена. С этим ничего не поделаешь...

Цитата:
Сообщение от YoungPadawan Посмотреть сообщение
И, как я думал, это решается наследованием.

Была идея создать наследника от FormTreeControl и добавить его на форму в коде.
Или в методе new объекта Tree написать такое this = new МойНаследник, но не смог проверить работает ли вообще такая конструкция, потому что класс FormTreeControl имеет модификатор final. И все мои надежды на "красивый" код рухнули.
"Это не наш метод" (с)

В среде Axapta классы визуальных объектов "неприкосновенны". Не перекрываются. А программное создание объектов на форме - моветон. Хотя, конечно, и так тоже делают...

Цитата:
Сообщение от YoungPadawan Посмотреть сообщение
Так вот, всем кто дочитал, есть ли какие-то варианты избавиться от какого-либо кода на дизайне?
Стандарт для Axapta

Форма - только отображает, а весь код - в связанном с этой формой классе. Вызов методов класса явным образом из соответствующих методов формы

Т.е. совсем ничего не писать в методах формы - не получится Но можно свести весь код к командам вызова соответствующих методов
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
За это сообщение автора поблагодарили: YoungPadawan (1).
Старый 30.08.2018, 08:17   #6  
TasmanianDevil is offline
TasmanianDevil
Мрачный тип
Аватар для TasmanianDevil
Злыдни
 
886 / 389 (14) ++++++
Регистрация: 24.01.2005
Адрес: Томск
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Но можно свести весь код к командам вызова соответствующих методов
Можно вообще свести все только к объявлению экземпляра обработчика в classDeclaration, его инициализации в init() формы (привязка к контролу дерева, форме и управляемому источнику данных на форме) и вызов отрисовки корня и первого уровня в run() формы. Все остальное - перехват и отработка классом-обработчиком событий контрола. Управление источником данных (создание/редактирование/удаление) - через контекстное меню дерева или перехват комбинаций клавиш на дереве, что тоже реализуемо в классе-обработчике. При должном уровне абстракции в реализации класса (работа через SysDict-семейство классов, Common и коды полей/таблиц) можно одним классом покрыть все деревья.

Мы у себя именно так и реализовали, дабы не повторять одно и то же по 17 иерархическим таблицам в 34 формах (на каждую по форме редактирования и lookup-форме).
__________________
Мы летаем, кружимся, нагоняем ужасы ...
За это сообщение автора поблагодарили: YoungPadawan (1).
Старый 30.08.2018, 08:51   #7  
YoungPadawan is offline
YoungPadawan
Участник
 
21 / 23 (1) +++
Регистрация: 04.01.2017
Спасибо за Ваши ответы)
Старый 30.08.2018, 10:23   #8  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1293 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Чтобы уж совсем все с нуля не писать, посмотрите класс CcFormTreeDatasource и его наследников - где и как используются.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Malaysia: Using a tree control Blog bot DAX Blogs 0 08.11.2012 11:11
xplusplus: Dynamics AX Application Object Tree (AOT) Blog bot DAX Blogs 0 25.11.2010 18:11
axaptapedia: FormTreeControl AutoScrolling when draging over top and bottom Blog bot DAX Blogs 0 01.07.2009 13:05
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

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

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

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