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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 05.07.2024, 19:29   #1  
kitty is offline
kitty
Участник
 
370 / 30 (2) +++
Регистрация: 24.05.2005
Hookable(false) - как обойти?
Есть стандартная форма с гридом.
На поле, точнее его контроле, в методе modified вызывается метод, что устанавливает другое поле того же датасоурса Qty = 1
Этот modified добрый MS сделал Hookable(false)., а тот метод, что он вызывает, тот помечен как internal

Мне надо , чтобы Qty устанавливалось в другое значение, но не понимаю, как подцепиться , чтобы мой код выполнялся после стандартного.

Подскажите, пожалуйста, какие есть варианты?
Старый 05.07.2024, 20:29   #2  
lvan is offline
lvan
Участник
Аватар для lvan
Лучший по профессии 2014
 
858 / 82 (4) ++++
Регистрация: 15.04.2011
Записей в блоге: 1
создать extensibility request, например?
Старый 06.07.2024, 10:04   #3  
kitty is offline
kitty
Участник
 
370 / 30 (2) +++
Регистрация: 24.05.2005
Сколько это занимает по времени? Есть проблемы потом с накатыванием новой версии?
Старый 13.07.2024, 05:54   #4  
ice321i is offline
ice321i
Участник
 
63 / 54 (2) ++++
Регистрация: 22.10.2007
Вот здесь описывается https://dynamics365musings.com/overr...ain-of-command
как extension формы перегрузить метод lookup у котрола. Пример легко переписать под modified
Старый 14.07.2024, 11:04   #5  
kitty is offline
kitty
Участник
 
370 / 30 (2) +++
Регистрация: 24.05.2005
Цитата:
Сообщение от ice321i Посмотреть сообщение
Вот здесь описывается https://dynamics365musings.com/overr...ain-of-command
как extension формы перегрузить метод lookup у котрола. Пример легко переписать под modified
Спасибо за Вашу попытку помочь, но, как указала в теме, hookable[false]
Старый 14.07.2024, 11:08   #6  
kitty is offline
kitty
Участник
 
370 / 30 (2) +++
Регистрация: 24.05.2005
Склоняюсь к идее сделать extension, а в нем сделать копию этого контрола и скрыть стандартный. Не знаю, прокатит ли
Старый 14.07.2024, 17:26   #7  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от kitty Посмотреть сообщение
Склоняюсь к идее сделать extension, а в нем сделать копию этого контрола и скрыть стандартный. Не знаю, прокатит ли
Теперь, с введением последних технологий, нам остается только копипаст
Старый 14.07.2024, 21:03   #8  
ice321i is offline
ice321i
Участник
 
63 / 54 (2) ++++
Регистрация: 22.10.2007
Цитата:
Сообщение от kitty Посмотреть сообщение
Спасибо за Вашу попытку помочь, но, как указала в теме, hookable[false]
Не надо делать расширение метода контрола, а предлагается перегрузить его в расширении формы.
Перегрузить нужный вам метод у контрола с помощью registerOverrideMethod указав ваш метод который будет вызываться, вместо стандартного.
X++:
ExtensionOf(formStr(CustTable))]
final class TutorialCustTable_Form_Extension
{
    public void init()
    {
        next init();

        Posting_CustGroup.registerOverrideMethod(methodStr(FormDataObject, lookup), formMethodStr(CustTable, overridenCustGroupLookup));
    }

    public void overridenCustGroupLookup(FormStringControl _formControl)
    {
        SysTableLookup      sysTableLookup  = SysTableLookup::newParameters(tableNum(CustGroup), _formControl);

        // Add the lookup columns
        sysTableLookup.addLookupfield(fieldNum(CustGroup, CustGroup));
        sysTableLookup.addLookupfield(fieldNum(CustGroup, Name));
        sysTableLookup.addLookupfield(fieldNum(CustGroup, PaymTermId));

        // Run the lookup
        sysTableLookup.performFormLookup();
    }
}

Последний раз редактировалось ice321i; 14.07.2024 в 21:24.
За это сообщение автора поблагодарили: Logger (3).
Старый 15.07.2024, 16:51   #9  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,317 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от ice321i Посмотреть сообщение
Не надо делать расширение метода контрола, а предлагается перегрузить его в расширении формы.
Перегрузить нужный вам метод у контрола с помощью registerOverrideMethod указав ваш метод который будет вызываться, вместо стандартного.
Маленькая поправка - это сделать можно только один раз. Т.е. если:
- в стандартном коде уже для нужного контрола / поля датасорса уже вызван registerOverrideMethod
- или есть расширение, в котором вызван метод registerOverrideMethod

то такой способ не подойдет (если вызван для контрола - то можно вызвать для датасорса, отменив тем самым по сути вызов перекрытого метода у контрола).

Также обращу внимание, что если метод lookup перекрыт через обработчики событий (Event Hanler), то метод registerOverrideMethod - "отменит" эти перекрытия.
Т.е. грубо говоря, используя метод registerOverrideMethod у разработчика не будет возможности "в случае, если условия сложились иначе - вызвать штатный код"
__________________
Возможно сделать все. Вопрос времени
Старый 15.07.2024, 18:00   #10  
ice321i is offline
ice321i
Участник
 
63 / 54 (2) ++++
Регистрация: 22.10.2007
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
Маленькая поправка - это сделать можно только один раз. Т.е. если:
- в стандартном коде уже для нужного контрола / поля датасорса уже вызван registerOverrideMethod
- или есть расширение, в котором вызван метод registerOverrideMethod

то такой способ не подойдет (если вызван для контрола - то можно вызвать для датасорса, отменив тем самым по сути вызов перекрытого метода у контрола).

Также обращу внимание, что если метод lookup перекрыт через обработчики событий (Event Hanler), то метод registerOverrideMethod - "отменит" эти перекрытия.
Т.е. грубо говоря, используя метод registerOverrideMethod у разработчика не будет возможности "в случае, если условия сложились иначе - вызвать штатный код"
Если в стандарте уже вызван registerOverrideMethod, то можно и это обойти, используя в своем расширении запрет на вызов перегруженых методов:

X++:
formRun.controlMethodOverload(true);
formRun.ContolMethodOverloadObject(formRun);
Но есть нюанс, вызываться престанут все перегруженые методы на форме))

Последний раз редактировалось ice321i; 15.07.2024 в 18:24.
За это сообщение автора поблагодарили: sukhanchik (4).
Теги
d365, registeroverridemethod

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
как обойти ошибку - запись не выбиралась для обновления oleggy DAX: Программирование 18 03.09.2021 14:13
emeadaxsupport: Short System Data Type "IdentifierName" resulting in false Best Practice checks Blog bot DAX Blogs 0 18.06.2014 10:11
Ax2009 RU4 RHRMOrderTrans_ds.AllowEdit(false) и validationWrite Dimitori DAX: Программирование 2 08.04.2011 11:35
closeDocument(boolean _save = false, int _workBook = 1) Daido DAX: Программирование 1 03.11.2007 09:58
QueryBuildDataSource.enabled(false); в 3.0 не работает в 2.5!!! McCoy DAX: Программирование 1 11.01.2006 15:41
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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