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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 21.03.2017, 14:12   #21  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от ax_mct Посмотреть сообщение
Всякие точки расширения и события - это пластмассовая косточка с клубничным вкусом. Пососать.
Ой, все. Страдать пожалуйста сюда: Клуб анонимных оверлейщиков


Цитата:
Сообщение от ax_mct Посмотреть сообщение
Правильно вести разработку в условиях, когда часть кода закрыта от изменения - не представляется возможным.
...
Событий и подписок - недостаточно.
Возможно. Замечание принимается.
Уточню название темы:

Как вести разработку с минимальными в долгосрочной перспективе трудозатратами
в условиях, есть куча унаследованного кода И часть кода закрыта от изменения,
а платформа предоставляет систему событий и подписок?

что должен сделать вендор?
что может сделать партнер/заказчик своими силами?
__________________
полезное на axForum, github, vk, coub.

Последний раз редактировалось mazzy; 21.03.2017 в 14:17.
За это сообщение автора поблагодарили: ax_mct (7).
Старый 21.03.2017, 14:32   #22  
ax_mct is offline
ax_mct
Banned
 
2,548 / 1091 (0) ++++++++
Регистрация: 10.10.2005
Адрес: Westlands
Цитата:
Сообщение от mazzy Посмотреть сообщение
Как вести разработку с минимальными в долгосрочной перспективе трудозатратами
в условиях, есть куча унаследованного кода И часть кода закрыта от изменения,
а платформа предоставляет систему событий и подписок?

что должен сделать вендор?
что может сделать партнер/заказчик своими силами?
Каким бы нехорошим не был подход с рефлексией, но он заслуживает серьезного внимания.
https://ievgensaxblog.wordpress.com/...xtension-code/

X++:
using System.Reflection;
 
/// <summary>
/// Handles events raised by <c>SalesLineTypeEventHandler</c> class.
/// </summary>
public class SalesLineTypeEventHandler
{
    [PostHandlerFor(classStr(SalesLineType), methodStr(SalesLineType, insert))]
    public static void SalesLineType_Post_insert(XppPrePostArgs _args)
    {
        SalesLineType salesLineType = _args.getThis();
 
        var bindFlags = BindingFlags::Instance | BindingFlags::NonPublic;
 
        var field = salesLineType.GetType().GetField("salesLine", bindFlags);
 
        SalesLine salesLine = field.GetValue(salesLineType);
 
        if (salesLine)
        {
            salesLine.MyNewField = 42;
            salesLine.doUpdate();
        }
    }
}
Вендор же никому ничего не должен
Старый 21.03.2017, 14:34   #23  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,909 / 5730 (197) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
Цитата:
Сообщение от mazzy Посмотреть сообщение

что должен сделать вендор?
что может сделать партнер/заказчик своими силами?
Ну я бы сказал - вендор должен постоянно анализировать доработки на идущих проектах, которые были сделаны оверлеерингом. Контактировать с партнером, если смысл доработок не понятен. Реинженерить и дописывать свои собственные классы так чтобы в дальнейшем типичные доработки можно было бы делать без оверлееринга.
При таком раскладе - я могу представить что годков через 5 такой работы и вправду 85% типичных внедрений можно будет делать на чистых extensions.
Только зная микрософтовское отношение к инвестициям в реинженеринг и рефакторинг, я больше верю в давление на микрософт (чтобы не лочили) или к хакерским подходам (когда в режиме on-premise система работает не совсем так как микрософт планировал )
За это сообщение автора поблагодарили: mazzy (5).
Старый 21.03.2017, 14:41   #24  
ax_mct is offline
ax_mct
Banned
 
2,548 / 1091 (0) ++++++++
Регистрация: 10.10.2005
Адрес: Westlands
Вот еще:
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).
Старый 21.03.2017, 14:43   #25  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от ax_mct Посмотреть сообщение
Каким бы нехорошим не был подход с рефлексией, но он заслуживает серьезного внимания.
Да, заслуживает.
Но рефлексия - это тут же уход в динамическое программирование взамен статической компиляции. Со всеми плюсами и минусами.

И соответствующими холиварами на эту тему )))

Цитата:
Сообщение от ax_mct Посмотреть сообщение
Вендор же никому ничего не должен
это тоже неправда )))
но должен он очень мало чего и мало кому. это так.
__________________
полезное на axForum, github, vk, coub.
Старый 21.03.2017, 14:45   #26  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
ребяты, страдания сюда: Клуб анонимных оверлейщиков

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

Как вести разработку с минимальными в долгосрочной перспективе трудозатратами
в условиях, есть куча унаследованного кода И часть кода закрыта от изменения,
а платформа предоставляет систему событий и подписок?
__________________
полезное на axForum, github, vk, coub.
Старый 21.03.2017, 14:48   #27  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,909 / 5730 (197) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
Ах да - еще неплохо было бы "Стену плача" (Aka Microsoft Connect) заменить на какое-то более структурированное средство. Чтобы там можно было бы и требования собирать, и вывешивать бета-версии спецификаций (по крайней мере - какую-то выжимку из них)и тд и тп.
Вообще - с переходом к модели подписки, плата за софт начинает становится все более похожей на налог. (Поскольку платишь ты не столько за готовый продукт, сколько за какие-то сервисы, которые в будущем будут как-то развиваться).
Ну и хочется напомнить об известном принципе "No taxation without representation". Если вендоры (не только микрософт) будут активно толкать пользователей в сторону модели подписки, очень вероятно что этих вендоров судебным образом продавят на какую-то модель участия пользовательской базы в принятии решений о том как собранные за подписку деньги потратить...
Старый 21.03.2017, 14:49   #28  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,909 / 5730 (197) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
Цитата:
Сообщение от mazzy Посмотреть сообщение
ребяты, страдания сюда: Клуб анонимных оверлейщиков
Дык ты сам спросил "что вендор должен делать"...
Старый 21.03.2017, 14:52   #29  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от fed Посмотреть сообщение
Дык ты сам спросил "что вендор должен делать"...
извини, я конечно же неправильно сформулировал.
я хотел спросить что "вендор должен реализовать в коде", чтобы у всех было меньше трудозатрат.
__________________
полезное на axForum, github, vk, coub.
Старый 21.03.2017, 15:05   #30  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от ax_mct Посмотреть сообщение
спасибо, суть понятна.
немного напоминает технику программного переопределения методов в dialog().

X++:
sender.object(fieldNum(SalesLine, ItemId)).registerOverrideMethod(methodStr(FormDataObject, jumpRef),
            methodStr(SalesTableFormExtensionOverrides, itemId_OnJumpRef), overrides);
прикрутить делегатов и будет как у нормальных людей.

а другие способы есть?
можно ли как-то создать собственный event в объекте, который находится в закрытом участке?
__________________
полезное на axForum, github, vk, coub.

Последний раз редактировалось mazzy; 21.03.2017 в 15:07.
Старый 21.03.2017, 15:10   #31  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,322 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Было бы хорошо отделить вариант CRM от вариант АХ.
В CRM исходный код закрыт. Поэтому разработчики могут только догадываться, как он работает.
Цитата:
Сообщение от Артем Enot Грунин Посмотреть сообщение
Системные механизмы используют множество согласованных обработчиков, логика которых не документирована. На практике, если не подходит стандарт - делаешь рядом что-то свое. Победить и изменить - как правило, себе дороже.
В ранних внедрениях АХ это было знакомо, когда внедренцы не зная стандартную функциональность - самостоятельно писали аналогичную функциональность под конкретного клиента.

В АХ исходный код открыт. Да, нельзя изменить сигнатуры методов, но как минимум код можно прочитать и понять, что он делает. Как максимум - можно его потрассировать на конкретной ситуации и выяснить - виноват алгоритм (ошибка в коде) или сам дурак - поставил галку "Нескладируемая" у группы моделей номенклатуры и думаешь - почему InventTrans не создается

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

В случае, когда доступ к коду закрыт вообще - подход Артема оправдан. Если доступ открыт - то можно его проанализировать и подумать, как исправлять. Где "врезаться".
Если код открыт, то можно создать какой-нибудь eventHandler на PriceDisc* классе и прикрутить туда метеорологический способ определения цены.
Если код закрыт - то самое простое - залезть в заказ и переопределить место, куда цена приходит уже рассчитанная.
__________________
Возможно сделать все. Вопрос времени

Последний раз редактировалось sukhanchik; 21.03.2017 в 15:12.
За это сообщение автора поблагодарили: mazzy (2), ax_mct (5).
Старый 21.03.2017, 15:14   #32  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,909 / 5730 (197) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
Цитата:
Сообщение от mazzy Посмотреть сообщение

а другие способы есть?
можно ли как-то создать собственный event в объекте, который находится в закрытом участке?
Если задуматься, то ты спрашиваешь: "Есть ли универсальный способ использовать призвольный кусок кода в произвольной задаче?" То есть - все потеницальные способы, которые тут назвали или могут назвать, подходят только в том случае, если задача в понимании авторов куска и реальная прикладная задача отличаются несильно.
Так что вопрос не в методах кодинга, а в соответствии между реальностью и той версией реальности, которая содержалась в ТЗ на разработку неизменяемого куска кода. Если соответствие слишком слабо, никакие хитровывернутые фреймворки и механизмы расширения не помогут...

Последний раз редактировалось fed; 21.03.2017 в 15:27.
Старый 21.03.2017, 15:28   #33  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от mazzy Посмотреть сообщение
можно ли как-то создать собственный event в объекте, который находится в закрытом участке?
Мне кажется, закрытость кода противоречит возможности создания там event просто по определению.

Закрытость нужна для того, чтобы вендор знал, что не менять, чтобы не сломать расширения. Если расширятель может добавить любой интерфейс в любом месте, то, очевидно, вендор не знает что он не может менять.

Последний раз редактировалось belugin; 21.03.2017 в 16:18. Причина: eventHandler -> event
За это сообщение автора поблагодарили: mazzy (2).
Старый 21.03.2017, 15:42   #34  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,322 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от belugin Посмотреть сообщение
Мне кажется, закрытость кода противоречит возможности создания там eventHandler просто по определению.

Закрытость нужна для того, чтобы вендор знал, что не менять, чтобы не сломать расширения. Если расширятель может добавить любой интерфейс в любом месте, то, очевидно, вендор не знает что он не может менять.
Закрытость позволяет вендору скрывать свои ошибки и не делиться архитектурой системы с конкурентами. Все публикуемые косяки в АХ всегда публиковались на закрытом партнерском сайте, а никак не на support.microsoft.com, открытым для всех.
Т.е. скажем так - вендор в лице 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).
Старый 21.03.2017, 15:48   #35  
Артем Enot Грунин is offline
Артем Enot Грунин
Moderator
Аватар для Артем Enot Грунин
MCBMSS
Злыдни
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,912 / 623 (28) +++++++
Регистрация: 16.08.2007
Адрес: Пермь!
Записей в блоге: 151
По сути да, это эвент ресиверы. Есть воронка обработки события, куда можно встроиться на разных этапах, в том числе и до вызова системной логики. Приблизительно 99% событий доступны для обработки, но мы не можем отключить обработчики от MS. Максимум "исправить" то что они сделали. Так работать можно, модель рабочая. Но, как я говорил, в каких то случаях, проще написать свое
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

MS Certified Dirty Magic Professional
За это сообщение автора поблагодарили: mazzy (2).
Старый 21.03.2017, 16:17   #36  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
Вот есть пример 1:
Я могу создать Database Trigger, который мне запретит допустим грохать вьюшки.
Это использование существующего event а.

Цитата:
Пример 2:
MS Office (Word/Excel) и VBA.
VBA - по своей сути - это и есть eventHandler-ы и extension-ы.
Это тоже использование существующего event а - вы не можете добавить в Word.Application новый эвент
Старый 21.03.2017, 16:43   #37  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,322 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Перечитал еще раз сообщения, подумал.
Если код закрыт, то действительно, новый event на PriceDisc*-классах я не создам. Но я могу увидеть исходный код, то я могу посмотреть его и надеяться на то, что там мне MS оставит event, в который я смогу встроиться.
Если нет исходного кода, то я уже буду полагаться только на свое наитие (и, возможно, документацию, которая может и не помочь). А мое наитие может меня обмануть
__________________
Возможно сделать все. Вопрос времени

Последний раз редактировалось sukhanchik; 21.03.2017 в 16:48.
Старый 21.03.2017, 17:03   #38  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,322 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Ну т.е. получается - будет одна "большая дырка", через которую будут делать все .
Я конечно утрирую, но все определит количество доступных разработчику event-ов.
В рамках поставленной mazzy задачи - если будут event-ы на PriceDisc*-классах, то "врежемся" туда. Если будет event только на строке заказа при подстановке цены - то "врежемся" туда. Если оставят "дырку" только на этапе разноски заказа - то значит там будем менять цену.

Будет спрос на event что-нибудь типа "при старте системы", в который будет загружаться своя форма, свой код и дальше будет работать "свой extension". Который не будет мешать MS-у обновлять свой никем не используемый код ))))

Я шучу конечно, но общий смысл такой - если есть какой-то объект в системе, который все постоянно модифицируют, то после закрытия такого объекта - будет проще его вообще не трогать, а закодить копию (копию по сути) этого объекта "на стороне".

Ну т.е. есть к примеру, заказы на продажу. Их закрыли на изменение. Я пошел и добавил свой объект "акты оказанных услуг" . Естественно добавил туда только то, что мне надо. И пусть MS обновляет эти заказы...
__________________
Возможно сделать все. Вопрос времени
За это сообщение автора поблагодарили: mazzy (2).
Старый 21.03.2017, 17:16   #39  
trud is offline
trud
Участник
Лучший по профессии 2017
 
1,039 / 1633 (57) ++++++++
Регистрация: 07.06.2003
Записей в блоге: 1
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
Ну т.е. есть к примеру, заказы на продажу. Их закрыли на изменение. Я пошел и добавил свой объект "акты оказанных услуг" . Естественно добавил туда только то, что мне надо. И пусть MS обновляет эти заказы...
А вот кстати вопрос - так можно с точки зрения лицензионных соглашений? т.е. можете ли вы продублировать функциональность системы поставив еще дополнительно у дублируемых меню айтемов(они же ваши, новые) более дешевый тип лицензии(например task вместо enterprise)
За это сообщение автора поблагодарили: ax_mct (5), mazzy (2).
Старый 21.03.2017, 17:43   #40  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,322 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от trud Посмотреть сообщение
А вот кстати вопрос - так можно с точки зрения лицензионных соглашений? т.е. можете ли вы продублировать функциональность системы поставив еще дополнительно у дублируемых меню айтемов(они же ваши, новые) более дешевый тип лицензии(например task вместо enterprise)
Ну тут-то как раз как мне кажется просто. Если я дублирую функциональность, то ... я ее в программном плане не дублирую, а реализую лишь уже то, что реализовано в узком смысле, то, что нужно мне. Всяко функциональность заказов на продажу будет больше по объему функциональности моего "акта об оказанных услугах". Я еще могу "облениться" и просто нарисовать свой интерфейс, который даже напрямую в General Journal* не будет лазить, а просто будет создавать ЖГК.
Т.е. быстро, просто и под меня. С т.з. программного кода - там даже и не будет пахнуть идеей заказов на продажу. С т.з. философии системы / Best Practice - это неверно. Но... проблему с обновлениями я решил. А с лицензией - еще надо как-то доказать, что мои Task-и "заслуживают" Enterprise . Конечно, если я явно буду использовать ЖГК - то наверное это будет явно и видно. А вот если я задействую лишь архитектуру АХ... то на архитектуре как бы не стоит тип пользователя

В общем - MS-у мне кажется придется прописывать какие-то более четкие правила использования типов лицензий (используешь в коде класc DimensionStorage - все, значит Enterprise. Пишешь ручками джойны - Task) ))))))))
__________________
Возможно сделать все. Вопрос времени
За это сообщение автора поблагодарили: mazzy (2).
 


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

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

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