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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 10.10.2017, 23:11   #1  
Blog bot is offline
Blog bot
Участник
 
25,459 / 846 (79) +++++++
Регистрация: 28.10.2006
mfp: Replaceable methods
Источник: https://blogs.msdn.microsoft.com/mfp...eable-methods/
==============
Chain of command enables wrapping of methods – but you must call next. This ensure the "chain" is not broken, and everyone wrapping the method will indeed be called. However, sometimes it makes sense to break the chain. Here are some examples where this could be useful: In lookup methods. The base implementation will open...

==============
Источник: https://blogs.msdn.microsoft.com/mfp...eable-methods/
__________________
Расскажите о новых и интересных блогах по Microsoft Dynamics, напишите личное сообщение администратору.
Старый 11.10.2017, 01:07   #2  
ax_mct is offline
ax_mct
Banned
 
2,548 / 1091 (0) ++++++++
Регистрация: 10.10.2005
Адрес: Westlands
Эх Ваня, Ваня...


Цитата:
Chain of command enables wrapping of methods – but you must call next. This ensure the "chain" is not broken, and everyone wrapping the method will indeed be called.

However, sometimes it makes sense to break the chain. Here are some examples where this could be useful:

In lookup methods. The base implementation will open a lookup dialog, anyone wrapping will (likely) also open a dialog. Yet the user only expects one lookup.

In methods with complex SQL operations. As of now; there are select statements (including delete_from, update_recordset, insert_recordset) we cannot make extensible. One way to work around the limitation is to move the statement to a dedicated method, and make the method replaceable.

In conversion methods. Here you can conditionally call next, to skip the base conversion, if your logic can handle the conversion.

In Platform Update 11 – we can now decorate methods with the [Replaceable] attribute. This will relax the compiler, so it doesn't look for the next keyword. Logically, this means that when wrapping a Replaceable method, there is no guarantee that your logic will fire. Someone else might be replacing the method, and breaking the chain.

The author of the code is still in control of which methods are replaceable.

My dear "partner in crime" Vanya Kashperuk has written a great post about the new capability here: http://kashperuk.blogspot.dk/2017/10...ibility_7.html
Обратите внимание на рассматриваемые примеры. Как далек он (изобретатель то есть) от клиента.

Сижу я значит на клиенте пол-года-год и все это время лукапы отгружаю. Паллетами.
Старый 11.10.2017, 04:38   #3  
trud is offline
trud
Участник
Лучший по профессии 2017
 
1,038 / 1629 (57) ++++++++
Регистрация: 07.06.2003
Записей в блоге: 1
ну т.е. по сути они изобрели заново слои. со всеми теми же проблемами, но без вообще хоть какого-то тулинга разрешения конфликтов и сравнения, без поддержки существования нескольких версий(в CoC методы вызываются рандомно, т.е. если вы один и тот же метод замените в USR и ISV никто не гарантирует что вызовется USR).
главное конечно чтоб не получилось как с windows phone
Цитата:
«Мы очень старались стимулировать разработчиков. Платили деньги… писали для них приложения…
Старый 11.10.2017, 08:58   #4  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2922 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от trud Посмотреть сообщение
ну т.е. по сути они изобрели заново слои.
В слоях мы можем омерлеерить любой метод, а здесь - только такой как позволено.

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

Будут ли так делать или просто проставят атрибут в методах по требованию - посмотрим.
Старый 11.10.2017, 09:58   #5  
trud is offline
trud
Участник
Лучший по профессии 2017
 
1,038 / 1629 (57) ++++++++
Регистрация: 07.06.2003
Записей в блоге: 1
Цитата:
Сообщение от belugin Посмотреть сообщение
В слоях мы можем омерлеерить любой метод, а здесь - только такой как позволено.

По идее к этому должно прилагаться описание (например в XML документации), на что надеется вызывающий код
Не понял идею с документацией. ну т.е. если смотреть его примеры - типичная задача - добавить в insert_recordset доп. поле.
Старый 11.10.2017, 10:03   #6  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2922 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от trud Посмотреть сообщение
Не понял идею с документацией. ну т.е. если смотреть его примеры - типичная задача - добавить в insert_recordset доп. поле.
Например в документации написать какой-нибудь признак, по которым разводить экстеншены с этими дополнительными полями (например генерация проводок для какого-то нового своего модуля). Либо в документации разрешить перекрывать только клиентам (которым не надо ни с кем сливаться).
Старый 11.10.2017, 10:05   #7  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от belugin Посмотреть сообщение
В слоях мы можем омерлеерить любой метод, а здесь - только такой как позволено.

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

Будут ли так делать или просто проставят атрибут в методах по требованию - посмотрим.
Можешь привести пример, как ты видишь текст такой вот секции?
Отличался ли бы этот текст от метода к методу?
Старый 11.10.2017, 10:24   #8  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2922 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от kashperuk Посмотреть сообщение
Можешь привести пример, как ты видишь текст такой вот секции?
Дупустим, у нас есть корреспонденция проводок реализованная на таких методах а не событиях.

"Расширение должно вызывать метод, кроме того, случая, когда в параметрах ГК установлено значения признака SummarizationAlgorithm равного значению, которое добавлено компанией-автором расширения.

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

Но на самом деле более очевидным было бы ввдедения интерфейса SummarizationAlgorithm и вызов его методов.

Цитата:
Отличался ли бы этот текст от метода к методу?
Да, потому, что нельзя придумать такой универсальный признак, по которому перекрывающие расширения гарантированно не пересекались.
Теги
chain of command

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Kashperuk Ivan: Development tutorial: Extensibility: Replaceable in Chain of Command methods Blog bot DAX Blogs 13 09.10.2017 14:45
mfp: What is new in X++ in AX7? Blog bot DAX Blogs 2 10.02.2016 00:29
mfp: X++ in AX7: Extension methods Blog bot DAX Blogs 10 17.12.2015 18:22
Kashperuk Ivan: Tutorial: Caching display methods Blog bot DAX Blogs 3 29.09.2015 22:07
axaptapedia: Table Methods Generator Blog bot DAX Blogs 0 13.02.2009 02:05
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 11:59.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.