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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 26.08.2016, 09:35   #1  
Vasiliusis is offline
Vasiliusis
Участник
 
225 / 13 (1) ++
Регистрация: 30.01.2013
Можно ли создать edit-метод в таблице кодом на X++?
Добрый день. В принципе, вопрос в сабже. Можно ли создать динамически из текстовой строки метод в таблице? (как в яваСкрипте, например, при помощи класса Function("текст_метода"))

Знаю, что можно создавать таким образом методы в классах при помощи ClassBuild. На предмет таблиц же Гугл ничего хорошего не выдал.

Мне это нужно для формы с гридом, в котором количество столбцов меняется в рантайме в зависимости от данных в базе. И к каждому столбцу я хочу прикрутить свой edit-метод. не создавать же в самом деле over9000 методов чтоб с запасом было...

или раз уж можно создавать методы в классах, может как-то можно к столбцам метод класса прикрутить в качестве DataMethod
Старый 26.08.2016, 09:56   #2  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Vasiliusis Посмотреть сообщение
Добрый день. В принципе, вопрос в сабже. Можно ли создать динамически из текстовой строки метод в таблице? (как в яваСкрипте, например, при помощи класса Function("текст_метода"))

Знаю, что можно создавать таким образом методы в классах при помощи ClassBuild. На предмет таблиц же Гугл ничего хорошего не выдал.

Мне это нужно для формы с гридом, в котором количество столбцов меняется в рантайме в зависимости от данных в базе. И к каждому столбцу я хочу прикрутить свой edit-метод. не создавать же в самом деле over9000 методов чтоб с запасом было...

или раз уж можно создавать методы в классах, может как-то можно к столбцам метод класса прикрутить в качестве DataMethod
ох, новое поколение выросло.

1. прямой ответ:
1.1. создавать метод из кода можно
1.2. уже открытая форма новый метод не подхватит - будет работать со старой версией таблицы
1.3. чтобы формы на других компьютерах "поняли", что таблица изменилась, необходимо в АОТ на этих формах нажать "восстановить". тогда клиент перечитает АОТ. это же действие можно сделать и программно. (АОТ кэшируется. и клиенты запрашивают обновления раз в 10-15 минут)


2. ответ по сути: НЕ делайте так
2.1. Вы запланировали "нереентерабельный код".
Другими словами в вашу форму без ошибок сможет зайти только один пользователь. Второй пользователь, зашедший в эту же форму с другими параметрами, тут же "сломает" вашу "красоту". Вы замучаетесь биться с аксаптой и обеспечивать монопольный доступ к форме. монопольный доступ к форме - совершенно бесполезное и абсолютно вредное поведение системы.

2.2. Пользователям будет неудобно работать с "over9000 полей"
Вы сейчас только о себе думаете - как бы вам не программировать много одинакового.
Предположим, вы успешно изнасиловали Аксапту и сделали "универсальный метод". Теперь пользователям нужно будет работать с этими полями. ВСЕМ пользователям. с КАЖДЫМ полем! Они вас проклянут.

а вам все равно придется добавлять признак обязательности, валидацию, лукапы и прочую интерфейсную чешую в код...
только теперь не на простые поля, а на программно созданные edit-fields. Со всеми вытекающими последствиями по трудоемкости отладки и разработки.
вас проклянут те, кто будет поддерживать решение после вас.

2.3. вы сломаете поиск по полям. Ну и быстродействие тоже.
Тут вроде все понятно.


В общем, не делайте так.

См. также Про программистский подход, программистское мышление и стереотипы

Последний раз редактировалось mazzy; 26.08.2016 в 10:00.
Старый 26.08.2016, 10:04   #3  
Vasiliusis is offline
Vasiliusis
Участник
 
225 / 13 (1) ++
Регистрация: 30.01.2013
Цитата:
Сообщение от mazzy Посмотреть сообщение
ох, новое поколение выросло.

1. прямой ответ:
1.1. создавать метод из кода можно
1.2. уже открытая форма новый метод не подхватит - будет работать со старой версией таблицы
1.3. чтобы формы на других компьютерах "поняли", что таблица изменилась, необходимо в АОТ на этих формах нажать "восстановить". тогда клиент перечитает АОТ. это же действие можно сделать и программно. (АОТ кэшируется. и клиенты запрашивают обновления раз в 10-15 минут)


2. ответ по сути: НЕ делайте так
2.1. Вы запланировали "нереентерабельный код".
Другими словами в вашу форму без ошибок сможет зайти только один пользователь. Второй пользователь, зашедший в эту же форму с другими параметрами, тут же "сломает" вашу "красоту". Вы замучаетесь биться с аксаптой и обеспечивать монопольный доступ к форме. монопольный доступ к форме - совершенно бесполезное и абсолютно вредное поведение системы.

2.2. Пользователям будет неудобно работать с "over9000 полей"
Вы сейчас только о себе думаете - как бы вам не программировать много одинакового.
Предположим, вы успешно изнасиловали Аксапту и сделали "универсальный метод". Теперь пользователям нужно будет работать с этими полями. ВСЕМ пользователям. с КАЖДЫМ полем! Они вас проклянут.

а вам все равно придется добавлять признак обязательности, валидацию, лукапы и прочую интерфейсную чешую в код...
только теперь не на простые поля, а на программно созданные edit-fields. Со всеми вытекающими последствиями по трудоемкости отладки и разработки.
вас проклянут те, кто будет поддерживать решение после вас.

2.3. вы сломаете поиск по полям. Ну и быстродействие тоже.
Тут вроде все понятно.


В общем, не делайте так.

См. также Про программистский подход, программистское мышление и стереотипы
спасибо вам, маццы, за столь развернутый ответ. а проклятия меня не пугают, еще не один политик от проклятий не сдох лол

Последний раз редактировалось Vasiliusis; 26.08.2016 в 10:10.
Старый 26.08.2016, 10:12   #4  
TasmanianDevil is offline
TasmanianDevil
Мрачный тип
Аватар для TasmanianDevil
Злыдни
 
886 / 389 (14) ++++++
Регистрация: 24.01.2005
Адрес: Томск
Цитата:
Сообщение от Vasiliusis Посмотреть сообщение
маццы
Так Маззи еще никто не называл
__________________
Мы летаем, кружимся, нагоняем ужасы ...
Старый 26.08.2016, 10:19   #5  
Vasiliusis is offline
Vasiliusis
Участник
 
225 / 13 (1) ++
Регистрация: 30.01.2013
Цитата:
Сообщение от TasmanianDevil Посмотреть сообщение
Так Маззи еще никто не называл
Ну по-английски читается именно так. Никто же не произносит Pizza как "пизза". Все говорят "Пицца".
Старый 26.08.2016, 10:28   #6  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от Vasiliusis Посмотреть сообщение
проклятия меня не пугают, еще не один политик от проклятий не сдох лол
Политики не умирают, поскольку кроме тех, кто их проклинает есть те, кому они нужны. А Ваш подход не нужен никому, кроме лично Вас потому, что так было можно в каком-то другом языке программирования. Так сказать, по привычке. Так что, в данной ситуации Вы не выживете

В общем, присоединяюсь к mazzy. В принципе, реализуемо, но сложно и не нужно. Вы идете против "поконов" (неписанных законов, обычаев) Axapta. "Напрягитесь" и придумайте другой дизайн для сопровождения нужного Вам функционала, но уже в рамках логики Axapta
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Старый 27.08.2016, 22:59   #7  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Посмотрите в сторону FormTableControl
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 28.08.2016, 09:58   #8  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от Maxim Gorbunov Посмотреть сообщение
Посмотрите в сторону FormTableControl
Во времена ax3 эта штука глючила страшно
Старый 28.08.2016, 10:11   #9  
pitersky is offline
pitersky
северный Будда
Аватар для pitersky
Ex AND Project
Соотечественники
 
1,507 / 428 (18) +++++++
Регистрация: 26.09.2007
Адрес: Солнечная система
Цитата:
Сообщение от Vasiliusis Посмотреть сообщение
Мне это нужно для формы с гридом, в котором количество столбцов меняется в рантайме в зависимости от данных в базе. И к каждому столбцу я хочу прикрутить свой edit-метод. не создавать же в самом деле over9000 методов чтоб с запасом было...
а можно поподробнее про условия задачи? из того, что вы написали, я лично никак не вижу необходимости предлагаемого действа
__________________
С уважением,
Вячеслав
Старый 28.08.2016, 17:34   #10  
ax_mct is offline
ax_mct
Banned
 
2,548 / 1091 (0) ++++++++
Регистрация: 10.10.2005
Адрес: Westlands
Подозреваю что вместо вертикали надо горизонтально.
То есть те сущности которые якобы требуют столбцов представить в виде строк.
А ! В ! С
на
А
В
С
И почему то мне кажется что будет правильней в любом случае.
Так как динамические столбцы это изврат независимо от АХ.
Старый 30.08.2016, 06:55   #11  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
647 / 350 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Цитата:
Сообщение от Vasiliusis Посмотреть сообщение
Мне это нужно для формы с гридом, в котором количество столбцов меняется в рантайме в зависимости от данных в базе.
Меня терзают смутные сомнения... Вы случайно раньше на Delphi+Firebird не работали?
__________________
// no comments
Старый 30.08.2016, 08:35   #12  
Vasiliusis is offline
Vasiliusis
Участник
 
225 / 13 (1) ++
Регистрация: 30.01.2013
Цитата:
Сообщение от dech Посмотреть сообщение
Меня терзают смутные сомнения... Вы случайно раньше на Delphi+Firebird не работали?
не работали
Старый 30.08.2016, 08:55   #13  
Vasiliusis is offline
Vasiliusis
Участник
 
225 / 13 (1) ++
Регистрация: 30.01.2013
Цитата:
Сообщение от pitersky Посмотреть сообщение
а можно поподробнее про условия задачи? из того, что вы написали, я лично никак не вижу необходимости предлагаемого действа
ок, значится так:

есть таблица пар типа "имя-значение", в которой содержатся строки. Эти строки в будущем должны выводиться как столбцы в таблице. Количество строк (то бишь, в моем случае, столбцов грида на будущей форме) может меняться в большую или в меньшую сторону.

Т.е. мне надо вертикальную структуру хранения данных для пользователей на форме сделать горизонтальной (динамически добавить в грид на форме столбцы, соответствующие строкам в таблице). Ну ладно, это я еще смогу сделать, знаю где искать.

Главная цель состоит в том, чтобы потом как-то обработать данные, вводимые пользователем в ячейки таких динамических столбцов. Единственное решение, которое видится - edit-метод. Но из-за того, что количество этих столбцов переменное я не могу написать edit-методы заранее. Вот я и спросил, можно ли генерить edit-методы (на уровень DataSource например) при добавления столбцов в грид прям в рантайме?

не, можно конечно написать этих edit-методов с запасом, штук 30, но ведь это не годится... вот как-то так
Старый 30.08.2016, 08:59   #14  
Vasiliusis is offline
Vasiliusis
Участник
 
225 / 13 (1) ++
Регистрация: 30.01.2013
Цитата:
Сообщение от ax_mct Посмотреть сообщение
Подозреваю что вместо вертикали надо горизонтально.
То есть те сущности которые якобы требуют столбцов представить в виде строк.
А ! В ! С
на
А
В
С
И почему то мне кажется что будет правильней в любом случае.
Так как динамические столбцы это изврат независимо от АХ.
надо из вертикального хранения в БД сделать горизонтально на форме
Старый 30.08.2016, 09:31   #15  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Vasiliusis Посмотреть сообщение
надо из вертикального хранения в БД сделать горизонтально на форме
facepalm!

Контрольные вопросы:
это надо пользователям? а кому? а пользователи то что хотят?

Про программистский подход, программистское мышление и стереотипы
Старый 30.08.2016, 09:36   #16  
Vasiliusis is offline
Vasiliusis
Участник
 
225 / 13 (1) ++
Регистрация: 30.01.2013
Цитата:
Сообщение от mazzy Посмотреть сообщение
facepalm!

Контрольные вопросы:
это надо пользователям? а кому? а пользователи то что хотят?

Про программистский подход, программистское мышление и стереотипы
Мацци, контрольные ответы: да. всем. хотят так.

Ну просто в мире программирования бывают сложные задачи,понимаете
Старый 30.08.2016, 09:50   #17  
macklakov is offline
macklakov
NavAx
Аватар для macklakov
 
2,232 / 975 (37) +++++++
Регистрация: 03.04.2002
Цитата:
Сообщение от Vasiliusis Посмотреть сообщение
Мацци, контрольные ответы: да. всем. хотят так.

Ну просто в мире программирования бывают сложные задачи,понимаете
Сдается мне это кто-то из старичков решил прикинуться малолетним дебилом и потроллить почтенную публику.
И у меня есть неопровержимые доказательства! Если верить профилю, у персонажа за плечами 3 года разработки. К 3-му году разработчик при одном упоминании о таком решении непроизвольно тянется к ведру с розгами, дабы выпроть негодника.
__________________
Isn't it nice when things just work?

Последний раз редактировалось macklakov; 30.08.2016 в 09:58.
За это сообщение автора поблагодарили: mazzy (2).
Старый 30.08.2016, 09:56   #18  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,309 / 3546 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Кстати, нормальное желание для тех, кто:
1. Привык к таблицам в Excel (в т.ч. сводным)
2. Знает, что такое перекрестные запросы (штука, не поддерживаемая АХ).

Т.е. все это похоже на требования к BI-системе только в сильно упрощенном виде.
Соответственно, и реализовывать все это проще с использованием ActiveX-компонент, имеющих отношение к BI. Самый наипростейший вариант (правда немного устаревший) - компонент SpreadSheet из пакета Office Web Components (OWC). Вариант потяжелее - это непосредственно Excel.
Самое сложное из всего этого - приучить пользователей, что если вывести данные так еще и можно (обычный отчет в Excel, где на скрытом листе данные, удобные для представления в АХ, а на отображаемом листе - сводная таблица, опирающаяся на эти данные), то вот обеспечить такую форму для ввода - это сильно сложно. Сильно = затраты на реализацию неоправданно высоки по сравнению с тем, чтобы приучить народ вводить в другом виде, но иметь отчет.

В мире большого объема данных такого рода отчет делается в кубах с помощью какого-либо средства просмотра (Excel, SSRS, QlickView и т.д.). А вариант "по-деревенски" - это выгрузка данных в Excel на скрытый лист с отображением сводной таблицы на другом листе
__________________
Возможно сделать все. Вопрос времени
За это сообщение автора поблагодарили: gl00mie (1).
Старый 30.08.2016, 10:22   #19  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,437 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Vasiliusis Посмотреть сообщение
Главная цель состоит в том, чтобы потом как-то обработать данные, вводимые пользователем в ячейки таких динамических столбцов. Единственное решение, которое видится - edit-метод
А редактировать непременно нужно в самом гриде? А если для целей редактирования отправлять пользователя в отдельное окно? Вообще нужно донести до пользователей что писать и читать данные не обязательно в одном и том же виде, не накладывает система такого ограничения.
Старый 30.08.2016, 10:29   #20  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Vasiliusis Посмотреть сообщение
Мацци, контрольные ответы: да. всем. хотят так.

Ну просто в мире программирования бывают сложные задачи,понимаете
Бггг.
Вы упорно не понимаете, что пользователи не живут в мире программирования.
Ну, ок.
Удачи.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Можно ли из кода изменить свойства Field в таблице, не в DS? АртемМелихов DAX: Программирование 20 10.06.2015 15:10
Можно ли динамически созданному контролу CheckBox прикрутить метод modified? Poleax DAX: Программирование 4 31.03.2009 19:58
Edit-метод и Relation - баг или фича ? TasmanianDevil DAX: Программирование 9 20.11.2008 10:16
Можно ли в display методе узнать для какого FormControl'а этот метод вызван? Dudnik Anton DAX: Программирование 3 01.02.2006 12:22
Создать Relation в AOT программным кодом EVGL DAX: Программирование 3 21.05.2003 12:47

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

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

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