05.07.2024, 19:29 | #1 |
Участник
|
Hookable(false) - как обойти?
Есть стандартная форма с гридом.
На поле, точнее его контроле, в методе modified вызывается метод, что устанавливает другое поле того же датасоурса Qty = 1 Этот modified добрый MS сделал Hookable(false)., а тот метод, что он вызывает, тот помечен как internal Мне надо , чтобы Qty устанавливалось в другое значение, но не понимаю, как подцепиться , чтобы мой код выполнялся после стандартного. Подскажите, пожалуйста, какие есть варианты? |
|
05.07.2024, 20:29 | #2 |
Участник
|
создать extensibility request, например?
|
|
06.07.2024, 10:04 | #3 |
Участник
|
Сколько это занимает по времени? Есть проблемы потом с накатыванием новой версии?
|
|
13.07.2024, 05:54 | #4 |
Участник
|
Вот здесь описывается https://dynamics365musings.com/overr...ain-of-command
как extension формы перегрузить метод lookup у котрола. Пример легко переписать под modified |
|
14.07.2024, 11:04 | #5 |
Участник
|
Цитата:
Сообщение от ice321i
Вот здесь описывается https://dynamics365musings.com/overr...ain-of-command
как extension формы перегрузить метод lookup у котрола. Пример легко переписать под modified |
|
14.07.2024, 11:08 | #6 |
Участник
|
Склоняюсь к идее сделать extension, а в нем сделать копию этого контрола и скрыть стандартный. Не знаю, прокатит ли
|
|
14.07.2024, 17:26 | #7 |
Участник
|
|
|
14.07.2024, 21:03 | #8 |
Участник
|
Цитата:
Сообщение от 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 |
Administrator
|
Цитата:
- в стандартном коде уже для нужного контрола / поля датасорса уже вызван registerOverrideMethod - или есть расширение, в котором вызван метод registerOverrideMethod то такой способ не подойдет (если вызван для контрола - то можно вызвать для датасорса, отменив тем самым по сути вызов перекрытого метода у контрола). Также обращу внимание, что если метод lookup перекрыт через обработчики событий (Event Hanler), то метод registerOverrideMethod - "отменит" эти перекрытия. Т.е. грубо говоря, используя метод registerOverrideMethod у разработчика не будет возможности "в случае, если условия сложились иначе - вызвать штатный код"
__________________
Возможно сделать все. Вопрос времени |
|
15.07.2024, 18:00 | #10 |
Участник
|
Цитата:
Сообщение от sukhanchik
Маленькая поправка - это сделать можно только один раз. Т.е. если:
- в стандартном коде уже для нужного контрола / поля датасорса уже вызван registerOverrideMethod - или есть расширение, в котором вызван метод registerOverrideMethod то такой способ не подойдет (если вызван для контрола - то можно вызвать для датасорса, отменив тем самым по сути вызов перекрытого метода у контрола). Также обращу внимание, что если метод lookup перекрыт через обработчики событий (Event Hanler), то метод registerOverrideMethod - "отменит" эти перекрытия. Т.е. грубо говоря, используя метод registerOverrideMethod у разработчика не будет возможности "в случае, если условия сложились иначе - вызвать штатный код" X++: formRun.controlMethodOverload(true);
formRun.ContolMethodOverloadObject(formRun); Последний раз редактировалось ice321i; 15.07.2024 в 18:24. |
|
|
За это сообщение автора поблагодарили: sukhanchik (4). |
Теги |
d365, registeroverridemethod |
|
|