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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 25.01.2024, 18:17   #1  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,940 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
TemporaryFormName - поймать в классе метод формы
Привет всем.
Задачка
Аксапта 2012 R3

Есть самописный класс лукапа (копия SysTableLookup со своими переделками)
В нем потребовалось запретить лукапу закрываться по клику на нем.
Ну, как обычно, хотим перехватит close, closeSelect и не дать уйти в super. Но там используется псевдоформа TemporaryFormName, которой нет в АОТ.

Попробовал применить controlMethodOverloadObject а оно не работает для методов формы close, closeSelect
Для контролов работает.
Видимо предназначено только для ловли методов контролов.

Мне это показалось странным. Был же сарайчик. Должна же быть возможность перехватить.

P.S. Сделал иначе - создал в АОТ свою форму MyTemporaryFormName
Прописал ее в классе. Методы все также не перехватываются в классе, но поскольку форма существует в аот, то можно в ней в методах close, closeSelect прописать нужный код.

P.P.S. Видел еще в 4-ке метод \Classes\TableLookup_RU\waitAndSearch
там жестко через WinApi идет работа. Но мне казалось что можно попроще средствами платформы 12-ки сделать.

P.P.P.S. В 2009-й еще были \Classes\SysSetupFormRun\addListener_W
добавляла к форме обработчик и тогда к нему приходили события на init / run формы
Но в 12-ке это похоже выпилили
Да и это были просто подписчики на события они не позволяли логику менять
т.е. не подходит этот костыль.

В общем, ощущение, что я просто что-то неправильно сделал и методы формы можно перехватить в управляющем классе и можно обойтись без создания своей формы лукапа в AOT
Старый 26.01.2024, 20:24   #2  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
В dax2012 форма для раскрывающегося списка - это просто базовый класс формы. А "TemporaryFormName" - это имя этой новой формы, чтобы не создавать макрос

X++:
protected FormRun formRun()
{
    Form                            form = new Form();

    form.name(identifierstr(TemporaryFormName));
(...)

Т.е. TemporaryFormName - не есть объект-форма. Здесь это используется просто как имя. Текст. Никаких реквизитов формы TemporaryFormName (да и самой формы) здесь не используют

Поэтому блокировка закрытия lookup-формы - это именно что запрет вызова super() в методе closeSelect()

Например, если посмотреть форму Lookup для множественного выбора SysLookupMultiSelectGrid, то у нее именно что метод closeSelect() закомментирован

Здесь же в ссылках ниже есть статья Максима Горбунова Создание Lookup формы, где он также пишет, что надо просто перекрыть closeSelect() если нужен контроль закрытия формы


PS: Чтобы создать форму именно на основе формы из AOT нужен другой синтаксис

X++:
form  = new Form(formstr(Dialog))

SysTableLookup - создает форму "с нуля". Без какого-либо шаблона формы в AOT. Поэтому и перехват методов невозможен. Не известен объект у которого эти методы надо перехватывать
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...

Последний раз редактировалось Владимир Максимов; 26.01.2024 в 20:35.
Старый 27.01.2024, 12:47   #3  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,940 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
*
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
PS: Чтобы создать форму именно на основе формы из AOT нужен другой синтаксис

X++:
form  = new Form(formstr(Dialog))
Да, все правильно. Я так и сделал. Написал в самописной форме нужный код и все заработало как мне надо.
Но вопрос был в другом. Как сделать так чтобы перехватить методы формы close, closeSelect классом обработчиком, не модифицируя саму форму. Потому-что как-то странно система себя ведет - методы контролов формы перехватывать можно, а методы формы не получается.

Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
SysTableLookup - создает форму "с нуля". Без какого-либо шаблона формы в AOT. Поэтому и перехват методов невозможен. Не известен объект у которого эти методы надо перехватывать
Нет. Дело не в этом. Движок аксапты одинаково работает. Для несуществующей в AOT формы созданной на лету успешно работает перехват методов на контролах.
Старый 28.01.2024, 13:43   #4  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1293 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Ну да, не до конца реализованы некоторые возможности.
На подавляющем большинстве контролов есть registerOverrideMethod методы.
А вот на FormRun такого не предусмотрели, как и для FormDataSource (в целом).

Для полей FormDataSource некоторые события перехватываются - есть registerOverrideMethod в FormDataObject, но опять же не все работают (например, lookup хотя написать можно, но не срабатывает).
А сам FormDataSource вроде наследник FormDataObject, но на нем перехват не работает. Вроде selectionChanged можно перехватить, но как-то из-за одного метода завязываться нет смысла.

Последний раз редактировалось Raven Melancholic; 28.01.2024 в 13:46.
Старый 29.01.2024, 11:11   #5  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от Logger Посмотреть сообщение
Но вопрос был в другом. Как сделать так чтобы перехватить методы формы close, closeSelect классом обработчиком, не модифицируя саму форму.
Я бы сделал по аналогии с RunBase и формой Dialog. Т.е. передавать в форму ссылку на класс, а в методах формы проверять факт наличия класса и определенного метода этого класса.

Если есть класс и в нем метод с заранее известным именем (validate ?), то выполнить этот метод
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
OZKA's DAX Journal: Модификация формы "Должностные лица". Blog bot DAX Blogs 0 30.09.2008 22:05
Создание Lookup формы Maxim Gorbunov DAX: База знаний и проекты 9 26.06.2007 16:44
Пару вопросов про формы в Аксапте Гений 1С DAX: Программирование 0 05.12.2006 16:28
Метод findValue у источника данных формы demID DAX: Программирование 3 01.10.2004 10:19
Динамические Lookup формы. Андрей Василюк DAX: База знаний и проекты 0 07.12.2001 07:07
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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