07.10.2017, 19:18 | #1 |
Участник
|
Kashperuk Ivan: Development tutorial: Extensibility: Replaceable in Chain of Command methods
Источник: http://kashperuk.blogspot.com/2017/1...ibility_7.html
============== Recently we announced a new and pretty powerful Extensibility feature, wrapping methods with Chain of Command in augmentation classes. This allows to write much cleaner extensions with fewer lines of code, as well as provides some extra capabilities like access to protected fields and methods of augmented object, easier way of ensuring a single transaction scope for standard and extension code, Источник: http://kashperuk.blogspot.com/2017/1...ibility_7.html
__________________
Расскажите о новых и интересных блогах по Microsoft Dynamics, напишите личное сообщение администратору. |
|
08.10.2017, 18:55 | #2 |
Banned
|
Цитата:
Note that by definition that means only one of the ISV solutions can replace it. If two attempt to accept() the result, an error will be shown.
That would typically mean that a logical conflict exists between the two ISV solutions, and the VAR would need to decide which ones to use, or make it configurable somehow. Я правильно понимаю что проверка конфликта решений ISV не на этапе компиляции, а как runtime error? |
|
08.10.2017, 19:24 | #3 |
Участник
|
Теперь тем кто вызывает заменяемый метод надо быть очень аккуратным - так как можно случайно не соблюсти какие-то внутренние инварианты класса при замене, а вызывающий код может понадеяться на это.
Я бы запретил вызывать оттуда private члены, например в-общем получается, что это как событие с дефолтным подписчиком, но не событие |
|
08.10.2017, 22:29 | #4 |
Участник
|
Цитата:
Это приводило к ситуации "Last man wins" (ну или first man, не суть) С введением конструктора EventHandlerResult::singleResponse() теперь упадет ошибка, что, мол, попытка повторного вызова - это подобно тому, как это сделано в SysExtension framework К сожалению, с Replaceable так не получается, то есть опять возвращаемся к First Man Wins - если безусловно не вызывать next() и ваш код вызовется первым, то у остальных не будет шанса, даже если по условиям ваш код ничего бы доп не сделал. Да и вообще, сосуществование нескольких ISV решений - сложная тема. Если у кого-то есть идеи, как ее решить, я бы с удовольствием послушал. |
|
08.10.2017, 22:30 | #5 |
Участник
|
Так вроде ж и нет доступа к приватным методам и членам основного класса
|
|
09.10.2017, 08:49 | #6 |
Участник
|
|
|
09.10.2017, 09:15 | #7 |
Участник
|
Цитата:
|
|
|
За это сообщение автора поблагодарили: trud (1). |
09.10.2017, 09:47 | #8 |
Участник
|
|
|
09.10.2017, 10:17 | #9 |
Участник
|
Пользователь, это расплывчатое понятие. Конечный пользователь? Вообще как с любой другой ошибкой в софте - репортить программеру.
Расширения ISV не должны брать ответсвенности за условия, про которые не знают. Последний раз редактировалось belugin; 09.10.2017 в 10:24. |
|
09.10.2017, 11:01 | #10 |
Участник
|
что за программер? ну т.е. я как конечный пользователь ставлю 2 сертифицированных решения из App store - у меня после этого перестает работать стандартный лукап по складам. т.е. по идее это ошибка MS(у разработчиков решений то все работает)
т.е. что должен суппорт MS делать с такой ошибкой? |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
09.10.2017, 11:22 | #11 |
Участник
|
То что у разработчика расширения все работает, это не значит что ошибка не его. Например у него может быть локаль EN-US а у пользователя тайская, и он это не учел. Как и возможность наличия расширения.
Я не знаю, как решает такие вопросы саппорт, как и вопросы при любых 3rd party расширениях для всего чего угодно. Наверное должен быть кто-то, кто поддерживает весь комплект в целом. Так же как если у вас антифирус конфликтует с какой-нибудь утилитой вы обращаетесь к сисадмину. |
|
09.10.2017, 12:00 | #12 |
Участник
|
так а как разработчик должен это учесть? т.е. если вы предлагаете генерить исключение, надо наверное и предлагать механизм обработки этого исключения. если механизма обработки нет, зачем тогда его генерить?
вообще вот отличное описание о "будущем" NAV, странно что для АХ не сделают подобное. russianerpexperience: Как вендор партнёра услышал, или будет ли Россия в облаке: новости о новейшей системе Dynamics 365 'Tenerife' с Directions EMEA 2017 т.е. решения надо делать на полностью extension и не extension(давая клиенту выбирать) для "не extension" иметь список перегруженных методов, соответственно додумывая дальше при установке 2 решений которые меняют одно и тоже выдавать конфликт(т.е. не давать ставить вообще если решения конфликтуют и возможности мержить код нет - например нет исходного кода), если возможность мержинга есть то выдавать что мержить - но это правда будет текущая модель работы из 2012 |
|
09.10.2017, 12:49 | #13 |
Участник
|
Цитата:
Мне кажется обработка исключений, кроме нескольких, заключается в том, чтобы прервать текущий процесс и вывести сообщение об ошибке. Цитата:
т.е. решения надо делать на полностью extension и не extension(давая клиенту выбирать)
для "не extension" иметь список перегруженных методов, соответственно додумывая дальше при установке 2 решений которые меняют одно и тоже выдавать конфликт(т.е. не давать ставить вообще если решения конфликтуют и возможности мержить код нет - например нет исходного кода), если возможность мержинга есть то выдавать что мержить - но это правда будет текущая модель работы из 2012 |
|
|
За это сообщение автора поблагодарили: ax_mct (3). |
09.10.2017, 14:45 | #14 |
Banned
|
Цитата:
На уровне поставщика платформы задача выглядит решаемой только если ограничить ISV до нескольких и очень тесно с ними работать. Что судя по всему и происходит и что судя по всему и является целью. Что имеет все шансы на успех но с совсем другими партнерами и клиентами. "Быстро, дешево, много" в части инсталляций - вполне работающий для прибыли для того у кого в руках контроль. Но рынка ISV рынка для D365FOE не будет, будет не больше одного ISV решения для бизнес-процессов на конкретном внедрении вот и все. И то если именно Microsоft будет формально или неформально гарантировать его совместимость. То есть тесная совместная работа Microsоft с 1-5 ISV и все. Между собой все решат и так я полагаю. |
|
Теги |
chain of command |
|
|