|
![]() |
#1 |
Moderator
|
Цитата:
При таком раскладе - я могу представить что годков через 5 такой работы и вправду 85% типичных внедрений можно будет делать на чистых extensions. Только зная микрософтовское отношение к инвестициям в реинженеринг и рефакторинг, я больше верю в давление на микрософт (чтобы не лочили) или к хакерским подходам (когда в режиме on-premise система работает не совсем так как микрософт планировал ![]() |
|
|
За это сообщение автора поблагодарили: mazzy (5). |
![]() |
#2 |
Участник
|
уважаемые, навижиноводы, а в навике эвенты-события-триггераНаФункции есть? или что-то подобное?
|
|
![]() |
#3 |
Administrator
|
триггеры на таблице в целом, триггеры на каждом поле, триггеры на контролах формы.
нужны еще триггеры (счетчик запуска функции, например) - пишем сами внутри ф-ции |
|
![]() |
#4 |
Участник
|
|
|
![]() |
#5 |
Участник
|
С NAV 2015 и выше появились системные Events. Если Microsoft заявил их публичными, то почему нельзя ими пользоваться?. На 2017 вроде таких ~250.
https://community.dynamics.com/nav/b...l-about-events
__________________
--------------------------------------------------------------------------------------------- "Собрать стадо из баранов легко, трудно собрать стадо из кошек" Профессор Сергей Капица |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
![]() |
#6 |
Участник
|
Цитата:
Я не знаю можно или нельзя. Поэтому спрашиваю. ух, ты: Subscriber functions cannot access the sender and or access global variables. https://msdn.microsoft.com/en-us/lib...v=nav.90).aspx Set the Event property to Publisher. This makes the function an event publisher. https://msdn.microsoft.com/en-us/lib...v=nav.90).aspx т.е. опубликовать событие можно просто изменив свойство функции. но при этом подписчики не получают доступ к паблишеру... А в CRM также? Тогда снова актуален вопрос: Как правильно вести разработку в условиях, когда часть кода закрыта от изменения, а платформа предоставляет систему событий и подписок? Поделитесь, = какие приемы эффективной разработки вы используете? = Какие плюсы и минусы у закрытого кода в вашей системе? = Что на ваш взгляд должен сделать майкрософт, как поставщик продукта, чтобы разработка была эффективной? |
|
![]() |
#7 |
Участник
|
В Аксапте тоже есть события.
но я пока не видел ни одного использования. в каких-то объектах стандартных событий много, в каких-то объектах (view) станадртных событий вообще нет. а в классах события похоже прописываются только руками я правильно понимаю, что поставщик бизнес-логики должен продумать и опубликовать систему событий для каждого бизнес-объекта? а как это сейчас происходит в Навике и в MS CRM? |
|
![]() |
#8 |
Banned
|
Вот еще:
https://ievgensaxblog.wordpress.com/...ut-overlaying/ А вот это самое интересное https://ievgensaxblog.wordpress.com/...ut-overlaying/ Цитата:
AX 7. How to override form data source field methods without overlaying.
|
|
|
За это сообщение автора поблагодарили: mazzy (2). |
![]() |
#9 |
Участник
|
Цитата:
Сообщение от ax_mct
![]() Вот еще:
https://ievgensaxblog.wordpress.com/...ut-overlaying/ А вот это самое интересное https://ievgensaxblog.wordpress.com/...ut-overlaying/ немного напоминает технику программного переопределения методов в dialog(). X++: sender.object(fieldNum(SalesLine, ItemId)).registerOverrideMethod(methodStr(FormDataObject, jumpRef), methodStr(SalesTableFormExtensionOverrides, itemId_OnJumpRef), overrides); а другие способы есть? можно ли как-то создать собственный event в объекте, который находится в закрытом участке? Последний раз редактировалось mazzy; 21.03.2017 в 15:07. |
|
![]() |
#10 |
Moderator
|
Цитата:
Так что вопрос не в методах кодинга, а в соответствии между реальностью и той версией реальности, которая содержалась в ТЗ на разработку неизменяемого куска кода. Если соответствие слишком слабо, никакие хитровывернутые фреймворки и механизмы расширения не помогут... Последний раз редактировалось fed; 21.03.2017 в 15:27. |
|
![]() |
#11 |
Участник
|
Цитата:
Закрытость нужна для того, чтобы вендор знал, что не менять, чтобы не сломать расширения. Если расширятель может добавить любой интерфейс в любом месте, то, очевидно, вендор не знает что он не может менять. Последний раз редактировалось belugin; 21.03.2017 в 16:18. Причина: eventHandler -> event |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
![]() |
#12 |
Administrator
|
Цитата:
Сообщение от belugin
![]() Мне кажется, закрытость кода противоречит возможности создания там eventHandler просто по определению.
Закрытость нужна для того, чтобы вендор знал, что не менять, чтобы не сломать расширения. Если расширятель может добавить любой интерфейс в любом месте, то, очевидно, вендор не знает что он не может менять. Т.е. скажем так - вендор в лице MS априори заинтересован в закрытом коде. Просто в силу общей политики MS. Вот есть пример 1: MS SQL Server Я могу создать Database Trigger, который мне запретит допустим грохать вьюшки. Код SQL Server-а закрыт. Я даже вьюшку могу зашифровать и закрыть ее. Тем не менее - сей триггер - это в некотором смысле extension и eventHandler. Я сильно сомневаюсь, что MS сильно задумывается о том, каким синтаксисом T-SQL я это делал и вполне может чего-то поменять не задумываясь о том, что у меня сломается ![]() Пример 2: MS Office (Word/Excel) и VBA. VBA - по своей сути - это и есть eventHandler-ы и extension-ы. Ну т.е. это не самостоятельный язык; люди покупающие офис в большинстве своем не стремятся писать много кода на VBA, но ... исходный код Word / Excel нам недоступен. Доступны только сигнатуры методов. Т.е. оттрассировать Word / Excel в их "sys-слое" нельзя.
__________________
Возможно сделать все. Вопрос времени |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
![]() |
#13 |
Участник
|
Цитата:
Цитата:
Пример 2:
MS Office (Word/Excel) и VBA. VBA - по своей сути - это и есть eventHandler-ы и extension-ы. |
|
![]() |
#14 |
Участник
|
ребяты, страдания сюда: Клуб анонимных оверлейщиков
я знаю, что есть другие продукты. вопрос что делать в данном конкретном раскладе в данных конкретных условиях. Как вести разработку с минимальными в долгосрочной перспективе трудозатратами в условиях, есть куча унаследованного кода И часть кода закрыта от изменения, а платформа предоставляет систему событий и подписок? |
|
![]() |
#15 |
Moderator
|
Цитата:
Сообщение от mazzy
![]() ребяты, страдания сюда: Клуб анонимных оверлейщиков
|
|
![]() |
#16 |
Участник
|
извини, я конечно же неправильно сформулировал.
я хотел спросить что "вендор должен реализовать в коде", чтобы у всех было меньше трудозатрат. |
|
![]() |
#17 |
Moderator
|
Ах да - еще неплохо было бы "Стену плача" (Aka Microsoft Connect) заменить на какое-то более структурированное средство. Чтобы там можно было бы и требования собирать, и вывешивать бета-версии спецификаций (по крайней мере - какую-то выжимку из них)и тд и тп.
Вообще - с переходом к модели подписки, плата за софт начинает становится все более похожей на налог. (Поскольку платишь ты не столько за готовый продукт, сколько за какие-то сервисы, которые в будущем будут как-то развиваться). Ну и хочется напомнить об известном принципе "No taxation without representation". Если вендоры (не только микрософт) будут активно толкать пользователей в сторону модели подписки, очень вероятно что этих вендоров судебным образом продавят на какую-то модель участия пользовательской базы в принятии решений о том как собранные за подписку деньги потратить... |
|
![]() |
#18 |
Administrator
|
Было бы хорошо отделить вариант CRM от вариант АХ.
В CRM исходный код закрыт. Поэтому разработчики могут только догадываться, как он работает. Цитата:
В АХ исходный код открыт. Да, нельзя изменить сигнатуры методов, но как минимум код можно прочитать и понять, что он делает. Как максимум - можно его потрассировать на конкретной ситуации и выяснить - виноват алгоритм (ошибка в коде) или сам дурак - поставил галку "Нескладируемая" у группы моделей номенклатуры и думаешь - почему InventTrans не создается ![]() Подходы к разработке могут быть разными в условиях, когда код закрыт от изменения, но открыт на чтение, вплоть до того, что он трассируем - от условий, когда код неизвестен в принципе. В случае, когда доступ к коду закрыт вообще - подход Артема оправдан. Если доступ открыт - то можно его проанализировать и подумать, как исправлять. Где "врезаться". Если код открыт, то можно создать какой-нибудь eventHandler на PriceDisc* классе и прикрутить туда метеорологический способ определения цены. Если код закрыт - то самое простое - залезть в заказ и переопределить место, куда цена приходит уже рассчитанная.
__________________
Возможно сделать все. Вопрос времени Последний раз редактировалось sukhanchik; 21.03.2017 в 15:12. |
|
|
За это сообщение автора поблагодарили: mazzy (2), ax_mct (5). |
![]() |
#19 |
Administrator
|
Ну т.е. получается - будет одна "большая дырка", через которую будут делать все
![]() Я конечно утрирую, но все определит количество доступных разработчику event-ов. В рамках поставленной mazzy задачи - если будут event-ы на PriceDisc*-классах, то "врежемся" туда. Если будет event только на строке заказа при подстановке цены - то "врежемся" туда. Если оставят "дырку" только на этапе разноски заказа - то значит там будем менять цену. Будет спрос на event что-нибудь типа "при старте системы", в который будет загружаться своя форма, свой код и дальше будет работать "свой extension". Который не будет мешать MS-у обновлять свой никем не используемый код ![]() Я шучу конечно, но общий смысл такой - если есть какой-то объект в системе, который все постоянно модифицируют, то после закрытия такого объекта - будет проще его вообще не трогать, а закодить копию (копию по сути) этого объекта "на стороне". Ну т.е. есть к примеру, заказы на продажу. Их закрыли на изменение. Я пошел и добавил свой объект "акты оказанных услуг" ![]() ![]() ![]() ![]()
__________________
Возможно сделать все. Вопрос времени |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
![]() |
#20 |
Участник
|
А вот кстати вопрос - так можно с точки зрения лицензионных соглашений? т.е. можете ли вы продублировать функциональность системы поставив еще дополнительно у дублируемых меню айтемов(они же ваши, новые) более дешевый тип лицензии(например task вместо enterprise)
|
|
|
За это сообщение автора поблагодарили: ax_mct (5), mazzy (2). |