|
![]() |
#1 |
Участник
|
Во вложении - вспомогательный класс для итератора, обновленный для использования в AX 2009.
PS. Для себя я сделал класс DEV_FormHelpers используемым в итераторе по умолчанию в тех случаях, когда в качестве метода обратного вызова указывается статический, а не экземплярный метод (т.е. _callbackObject == null): X++: public static client boolean DEV_iterateThroughFormControls( Object _parentControl, Object _callbackObject, identifiername _callbackObjectMethodName, Set _setOfClassIds2InvokeOn, boolean _recursive = true, classId _staticCallbackMethodClassId = classnum(DEV_FormHelpers) ) Последний раз редактировалось gl00mie; 14.09.2010 в 11:40. Причина: typo... |
|
![]() |
#2 |
Участник
|
вопрос из другой ветки Как глобально отключить автоопределение ширины столбца = autoSizeColumns(false) ?
а для каких задач может использоваться данный итератор? |
|
![]() |
#3 |
Участник
|
Собственно, большинство решаемых задач описаны в этой ветке:
|
|
![]() |
#4 |
Участник
|
Цитата:
Сообщение от gl00mie
![]() [/LIST]В общем, я лично с помощью итератора решаю в основном те задачи, которые при "традиционном" подходе требовали бы работы с каждым из заранее известного множества контролов в каждой из заранее известного множества форм, при том что эти множества на момент разработки могут быть еще неизвестны. "Традиционный" подход в таких случаях требует, как правило, слишком большого объема ручной работы, отказа от использования "автогрупп" контролов на основе табличных групп полей, внесения избыточных модификаций в стандартные формы (как с теми же гридами в AX 2009), плюс ко всему он еще и удорожает сопровождение сделанных модификаций.
Это же противоречит объектно-ориентированному подходу и полностью нарушает инкапсюляцию. Говоря в терминологии C++, ты создаешь класс, который является френдом очень многих других классов. Эдакий супер-френд. Со всеми вытекающими последствиями, которые вроде обсуждались у программистов С++. Например, чтобы выявить особенности поведения, тебе недостаточно понять как работает сам объект и его класс, тебе нужно понять как работают и все френды. Разве не так? |
|
![]() |
#5 |
Участник
|
Цитата:
![]() PS. Сперва очень долго не мог понять, при чем тут вообще SysSetupForm - мне и в голову не могло прийти совать в него код, специфичный для особенностей дизайна какой-то одной конкретной формы. Последний раз редактировалось gl00mie; 15.09.2010 в 12:42. |
|
![]() |
#6 |
Роман Долгополов (RDOL)
|
Цитата:
Сообщение от gl00mie
![]() А откуда взялось мнение, что всё вышеописанное реализуется в SysSetupForm?
![]() Но пара контролов на форме это пушкой по воробьям. Чем element.design().controlName() то не угодил? Вроде прекрасно достает контролы из автогрупп. Или уже не достает и я отстал от жизни? |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
![]() |
#7 |
Участник
|
Цитата:
Реализуется метод в форме. Но вызов то идет из SysSetupForm. Это и есть friend. Т.е. либо метод надо делать публичным, либо френдить SysSetupForm. Поэтому SysSetupForm получается френдом для очень многих форм (другими словами, SysSetupForm слишком много знает о деталях реализации других форм), что приводит к снижению инкапсюляции. (пусть в Аксапте нет ключевого слова friend. но смысл то и проблемы не меняются) Цитата:
Если определяется класс, который не реализует математических объектов вроде матриц или комплексных чисел и не является типом низкого уровня наподобие связанного списка, то:
[а] Не используйте глобальных данных. [b] Не используйте глобальных функций (не членов). [c] Не используйте общих данных-членов. [d] Не используйте функции friend (но только для того, чтобы избежать [а], [b] или [c]). [e] Не обращайтесь к данным-членам другого объекта непосредственно. [f] Не заводите в классе "поле типа"; используйте виртуальные функции. [g] Используйте функции-подстановки только как средство значительной оптимизации. ... Отметим, что общие базовые классы и друзья (friend) являются частью общего интерфейса класса (см. $$5.4.1 и $$12.4). Последний раз редактировалось mazzy; 16.09.2010 в 10:04. Причина: добавил цитаты из Страуструпа |
|
![]() |
#8 |
Роман Долгополов (RDOL)
|
Цитата:
![]() |
|
|
За это сообщение автора поблагодарили: tricky (1). |
Теги |
design, form, formreferencegroupcontrol, дизайн, законченный пример, итератор, округление, полезное, форма |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|