19.12.2011, 18:33 | #1 |
Участник
|
Переопределение методов у FormDataSource созданного в классе
Есть класс, который создает форму, добавляет контролы, создает и прикручивает к ним датасорс. Как у этого датасорса переопределить методы active(), init() и т. д. ?
|
|
19.12.2011, 20:57 | #2 |
Участник
|
Такого инструмента нет.
Возможно, если создавать программно форму в дереве АОТ, то это может получиться... |
|
19.12.2011, 21:05 | #3 |
Участник
|
Не думаю
Подобный функционал есть для контролов, должен скорее всего быть и для датасорсов. Вообще проблему можно было решить наследованием от FormDataSource и переопределением методов там, но такое наследование запрещено разработчиками axapta: (
|
|
19.12.2011, 21:26 | #4 |
Молодой, подающий надежды
|
Быть может проблему проще решить, накидав форму в АОТ. А контролы скрывать или показывать в зависимости от условий. Это как-то более "по-аксаптовски"...
|
|
19.12.2011, 21:41 | #5 |
Ищущий знания...
|
Цитата:
Посмотрел в AX2009 RU5 у класса FormDataSourse есть и метод active() и метод init() и пр. X++: static void Job27(Args _args) { FormDataSource fds; ; fds.active(); fds.init(); fds.validateWrite(); fds.write(); fds.validateDelete(); fds.delete(); }
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
19.12.2011, 21:42 | #6 |
Участник
|
Использовать АОТ не хотелось бы, потому что форм много, и они примерно одинаковые. Слишком много кода приходится копипастить из формы в форму, изменения минимальны. Да и best practices опять же.
|
|
19.12.2011, 21:47 | #7 |
Участник
|
|
|
19.12.2011, 22:38 | #8 |
Участник
|
Используйте одну форму и семейство классов для управления ею, посмотрите, как работают формы шапок журналов, посмотрите, как работает форма итогов по закупкам в 2009-й (там датасорс в дизайне формы - по таблице Common).
|
|
19.12.2011, 23:40 | #9 |
Ищущий знания...
|
Цитата:
Если я правильно понимаю, то вы делаете программируемую форму (ну т.е. форма создается из кода), так? Если да, то: 1. Все, что нужно сделать при инициализации формы можно сделать в том месте (наверное классе) откуда Вы эту форму создаете. 2. Все методы датасорса формы, можно перекрыть на самой таблице (например, write, update, insert, delete, validateWrite, validateDelete, изменения по полям можно отлавливать в методе modifiedField()). И уже на таблице выполнять какие либо бизнес требования. Если эти требования специфичны для Вашей форме, добавьте параметр на входе. Вообще конечно какой то немного извращенный способ создания формы. Может вы опишите какую цель преследуете? Возможно её можно решить как то иначе (проще).
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем Последний раз редактировалось lev; 20.12.2011 в 00:25. |
|
20.12.2011, 01:28 | #10 |
Участник
|
|
|
22.12.2011, 11:56 | #11 |
Участник
|
В AX2012 можно унаследоваться от FormObjectSetNotify, перекрыть методы onActive/onRefresh и после создания датасорса:
X++: formDS.addNotifyHandler(this);
__________________
The 50-50-90 rule: Any time you have a 50-50 chance of getting something right, there’s a 90% probability you’ll get it wrong. Последний раз редактировалось shogel; 22.12.2011 в 11:59. |
|
22.12.2011, 15:57 | #12 |
Участник
|
Вы не могли бы дать ссылку на соответствующую статью best practices, которая призывает создавать форым из класса? Ну, или на ту статью, которая показалась Вам соответствующей данному случаю?
А вообще-то, присоединяюсь к вопросу lev. Может, Вы все-таки опишите саму задачу, а не выбранный Вами способ ее решения? Просто подобный способ решения противоречит стандартной идеологии Axapta.
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
22.12.2011, 19:32 | #13 |
Участник
|
Best Practice не в том, чтобы создавать формы из класса, а в том, чтобы не умножать сущности без необходимости и не пользоваться пунктом "Дублировать" контекстного меню в AOT. В некоторых случаях без создания форм на лету не обойтись - посмотрите на тот же конфигуратор продукции и класс PBABuildForm.
|
|
|
За это сообщение автора поблагодарили: Pustik (2), alexkrut (1). |
22.12.2011, 20:48 | #14 |
Участник
|
Может быть, человек столкнулся с тем, что кто-то до него, на этом месте работы строил формы программно. Написано куча кода. И сейчас просят "кое-что отшлифовать". И без указанных выше переопределения методов в решении задачи не обойтись.Что делать? Переписывать все с нуля? Объяснить заказчику, что это фактически перекодирование проекта, которое займет уйму времени? Если так, то ситуация не самая приятная.
__________________
-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. |
|
23.12.2011, 10:38 | #15 |
Участник
|
Ребята, может, мы все-таки сначала послушаем "начальника транспортного цеха"? В смысле, автора темы.
Понятно, что ситуации бывают разные. Однако очевидно, что в Axapta форма - это не класс. Следовательно субклассирование невозможно, а все "обходные маневры" - это уже крайний случай, когда по другому не обойтись. Точнее, когда это "стоит дешевле", чем дублирование формы. Вопрос в том, а действительно ли в данной конкретной задаче по другому не обойтись? Или автор просто по неопытности пытается применить к Axapta навыки, полученные в других языках программирования?
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
27.12.2011, 08:44 | #16 |
Участник
|
По просьбам трудящихся
Про задачу.
На работе автоматизируем один из отделов предприятия. Отдел занимается документами. Документы эти на 70-80 процентов похожи. Формы уже есть. Создавались в AOT. В формах соответственно 70-80 процентов повторяющегося кода. Если кто-то вдруг не понимает зачем нужно избавляться от повторения кода - книжка по рефакторингу вам в помощь. Про ответы. Цитата:
Цитата:
Сообщение от lev
2. Все методы датасорса формы, можно перекрыть на самой таблице (например, write, update, insert, delete, validateWrite, validateDelete, изменения по полям можно отлавливать в методе modifiedField()). И уже на таблице выполнять какие либо бизнес требования. Если эти требования специфичны для Вашей форме, добавьте параметр на входе.
Спасибо, ваши ответы пока самые вменяемые здесь! |
|
|
За это сообщение автора поблагодарили: blokva (-2). |
27.12.2011, 09:58 | #17 |
Ищущий знания...
|
Цитата:
Цитата:
Про задачу.
На работе автоматизируем один из отделов предприятия. Отдел занимается документами. Документы эти на 70-80 процентов похожи. Формы уже есть. Создавались в AOT. В формах соответственно 70-80 процентов повторяющегося кода. Если кто-то вдруг не понимает зачем нужно избавляться от повторения кода - книжка по рефакторингу вам в помощь.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
|
За это сообщение автора поблагодарили: alexkrut (1). |