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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 04.10.2017, 16:33   #1  
wojzeh is offline
wojzeh
Участник
Аватар для wojzeh
Соотечественники
 
677 / 517 (19) +++++++
Регистрация: 27.04.2006
Адрес: Montreal
Цитата:
Сообщение от mazzy Посмотреть сообщение
Я не знаю как правильно решить поставленную задачу в поставленных условиях.
практическое решение было бы похоже на то, что приведено в блоге...
ок, формальное одобрение верховного жреца всё же получено.

как смотришь на то, чтоб убрать весь "эмоциональный шум" из этой ветки? так чтоб читатели могли выцепить суть, не отвлекаясь на "куда катится этот мир".
__________________
Felix nihil admirari
Старый 04.10.2017, 16:40   #2  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от wojzeh Посмотреть сообщение
ок, формальное одобрение верховного жреца всё же получено.
это не одобрение )

Цитата:
Сообщение от wojzeh Посмотреть сообщение
как смотришь на то, чтоб убрать весь "эмоциональный шум" из этой ветки? так чтоб читатели могли выцепить суть, не отвлекаясь на "куда катится этот мир".
удалять документы? )))))

как смотришь на то, чтобы создать пост, в котором ты сделаешь выжимку, которую считаешь нужной, чтобы читатели могли выцепить суть?
с удовольствием добавлю ссылку на твой пост.

дело в том, что я не вижу никакого эмоционального шума в этой ветке.
я вижу обсуждение на нескольких уровнях восприятия для разных категорий читателей.
__________________
полезное на axForum, github, vk, coub.
Старый 04.10.2017, 16:46   #3  
wojzeh is offline
wojzeh
Участник
Аватар для wojzeh
Соотечественники
 
677 / 517 (19) +++++++
Регистрация: 27.04.2006
Адрес: Montreal
Цитата:
Сообщение от mazzy Посмотреть сообщение
это не одобрение )


удалять документы? )))))

как смотришь на то, чтобы создать пост, в котором ты сделаешь выжимку, которую считаешь нужной, чтобы читатели могли выцепить суть?
с удовольствием добавлю ссылку на твой пост.

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

я именно такой пост в оригинале и создал - с выжимкой.

полностью согласен с вашими оценками о том, что в идеальном мире за такое бы сразу в адъ. но мы уже в аду.
__________________
Felix nihil admirari
Старый 04.10.2017, 19:46   #4  
ax_mct is offline
ax_mct
Banned
 
2,548 / 1091 (0) ++++++++
Регистрация: 10.10.2005
Адрес: Westlands
Цитата:
Сообщение от wojzeh Посмотреть сообщение

я именно такой пост в оригинале и создал - с выжимкой.

полностью согласен с вашими оценками о том, что в идеальном мире за такое бы сразу в адъ. но мы уже в аду.
pre()>Save
standard method()
post()>Restore

В принципе это самый что ни на есть workaround. Который великолепен если его воспринимать именно как workaround.

А есть какой-то способ избежать вызова "standard method()" или подменить его?
И интересно почему, если это в любом случае ад, не хотят давать возможность такого полного перекрытия? Ведь для этого не нужен именно overlay сверху, можно overlay и сбоку.

Как понимаю ce.CancelSuperCall() помогает избежать вызов двух форм и добавили это как фикс, а не как часть общего дизайна.
Старый 04.10.2017, 20:30   #5  
wojzeh is offline
wojzeh
Участник
Аватар для wojzeh
Соотечественники
 
677 / 517 (19) +++++++
Регистрация: 27.04.2006
Адрес: Montreal
у них на выходе всё в порядке!

Нажмите на изображение для увеличения
Название: проблема.png
Просмотров: 325
Размер:	126.1 Кб
ID:	11672
__________________
Felix nihil admirari
Старый 04.10.2017, 21:20   #6  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от ax_mct Посмотреть сообщение
И интересно почему, если это в любом случае ад, не хотят давать возможность такого полного перекрытия? Ведь для этого не нужен именно overlay сверху, можно overlay и сбоку.
как я понимаю. Общая задача осуществить механизм безболезненных обновлений.

Предположим, у вас есть метод X класса Y у метода есть его публичный интерфейс:
  • предусловия
  • постусловия
  • инварианты

И есть реализация (например он может изменить приватную переменную невидимую снаружи). Если расширения смогут отменять вызов какого угодно метода, то состояние объекта может быть испорчено. Так как ваше расширение не может учесть внутреннее состояние объекта будущих версий.

Например в версии 1 вы написали расширение отменяющее вызов метода x целиком и как-то сымитировали его работу без того, что нам надо.

И есть реализация (например он может изменить приватную переменную невидимую снаружи). Если расширения смогут отменять вызов какого угодно метода, то состояние объекта может быть испорчено. Так как ваше расширение не может учесть внутреннее состояние объекта будущих версий.

Например в версии 1 вы написали расширение отменяющее вызов метода x целиком и как-то сымитировали его работу через публичный интерфейс.

В версии 1 sp 1 внутрь добавили кеш, которое ваше расширение обновить не может (не только потому, что оно не может модифицировать приватные поля, но и потому, что оно написано для версии 1, про sp1 не знает) в результате остальные методы класса берут данные из кеша устаревшие.

Собственно, если сделать подмену произвольного метода, то это и будет практически оверлееринг, но без удобного способа смотреть изменения.

Последний раз редактировалось belugin; 04.10.2017 в 21:23.
Старый 04.10.2017, 22:44   #7  
ax_mct is offline
ax_mct
Banned
 
2,548 / 1091 (0) ++++++++
Регистрация: 10.10.2005
Адрес: Westlands
Цитата:
Сообщение от belugin Посмотреть сообщение
как я понимаю. Общая задача осуществить механизм безболезненных обновлений.
...
Собственно, если сделать подмену произвольного метода, то это и будет практически оверлееринг, но без удобного способа смотреть изменения.
Спасибо, задумка понятна. Сделать это безболезненным. Но разве что только для вендора и то недолго. Все равно надо проводить при каждом обновлении аудит изменений на их логическую уже совместимость.

Ничего страшного в подмене нет. Это даст больше управляемости и надежности. А проверять конфликты можно и компилятором.

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

Kashperuk пишет что в Platform Update 11 что-то такое появится. Радостно наблюдать как пишется новый продукт.
https://docs.microsoft.com/en-us/dyn...tform-releases
Старый 05.10.2017, 08:55   #8  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от ax_mct Посмотреть сообщение
каждом обновлении аудит изменений на их логическую уже совместимость.
*Теоретически* (то есть отвлекааясь от Аксапты данной нам в ощущениях) при создании расширения надо руководствоваться публичным контрактом метода включая побочные эффекты а не его исходным кодом (реализацией).

Контракт может быть описан как неформально (в XML документации) так и формально (например, набором тестов, Code Contracts).

Цитата:
Ничего страшного в подмене нет. Это даст больше управляемости и надежности. А проверять конфликты можно и компилятором.
Вопрос: чем тогда это отличается от оверлееринга только хуже?

Цитата:
Ничего страшного в подмене нет. Это даст больше управляемости и надежности. А проверять конфликты можно и компилятором.
Вопрос: чем тогда это отличается от оверлееринга только хуже?

Последний раз редактировалось belugin; 05.10.2017 в 09:15.
За это сообщение автора поблагодарили: Vadik (1), mazzy (2).
Старый 05.10.2017, 00:42   #9  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Цитата:
Сообщение от belugin Посмотреть сообщение
И есть реализация (например он может изменить приватную переменную невидимую снаружи). Если расширения смогут отменять вызов какого угодно метода, то состояние объекта может быть испорчено. Так как ваше расширение не может учесть внутреннее состояние объекта будущих версий.
Это все только слова и теоретические рассуждения. На практике все происходит с точностью до наоборот, и я могу это доказать на цифрах. При переходе с 7.1 на 7.2 наше приложение согласно отчету анализа обновления было затронуто 119 (прописью: сто девятнадцать) уничтоженными полями или таблицами, и это только data dictionary. Весь код, который это использовал - расширения, перекрытия, классы с бизнес-логикой - может идти лесом. Т.е. мастера по redesign / reengineering в Microsoft плевали на доработки и партнерские решения. Они ломали и будут ломать, с корнем удалять, менять внутреннюю логику. При этом самое худшее, что может случиться, это формально компилируемый код расширений, который просто перестал вызываться или работать из-за изменения порядка исполнения объектов.
За это сообщение автора поблагодарили: Link (1), ax_mct (10), gl00mie (2).
Старый 05.10.2017, 09:13   #10  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от EVGL Посмотреть сообщение
Это все только слова и теоретические рассуждения. На практике все происходит с точностью до наоборот, и я могу это доказать на цифрах. При переходе с 7.1 на 7.2 наше приложение согласно отчету анализа обновления было затронуто 119 (прописью: сто девятнадцать) уничтоженными полями или таблицами, и это только data dictionary.
Вопрос был "зачем" то есть про интенцию. То есть про теорию в голове того кто придумывал до реализации на практике. Про практику вы знаете лучше меня.

Практически сильно следят за обратной совместимостью при разработке хотфиксов и CU - то есть про обновления в рамках одной версии. При разработке следующей версии есть предупреждения которые можно игнорировать.

Мне самому интересно, как можно совместить подход в котором:
  • Можно разрабатывать только при помощи расширений
  • Точками расширения объявлены все элементы public и protected сделанные до того как расширения появились
  • Нет исчерпывающей документации по каждой точке расширения
  • Надо изменять функциональность

Теоретически надо отделять те куски которые вендор может изменить, от тех которые он будет поддерживать и следить за этим. Для разделения у нас есть public protected private и internal (причем последнее заработало на всех уровнях только в последних PU).
За это сообщение автора поблагодарили: Link (1).
Старый 04.10.2017, 21:55   #11  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от ax_mct Посмотреть сообщение
А есть какой-то способ избежать вызова "standard method()" или подменить его?
Ждите Platform Update 11 который скоро появится
За это сообщение автора поблагодарили: ax_mct (11).
Старый 05.10.2017, 20:34   #12  
wojzeh is offline
wojzeh
Участник
Аватар для wojzeh
Соотечественники
 
677 / 517 (19) +++++++
Регистрация: 27.04.2006
Адрес: Montreal
Цитата:
Сообщение от kashperuk Посмотреть сообщение
Ждите Platform Update 11 который скоро появится
то есть мне после его инсталляции нужно будет все доработки переписывать?
__________________
Felix nihil admirari
Старый 04.10.2017, 22:04   #13  
skuull is offline
skuull
Участник
Most Valuable Professional
Лучший по профессии 2014
 
700 / 752 (27) +++++++
Регистрация: 08.03.2013
Адрес: ХЗ
Цитата:
Сообщение от ax_mct Посмотреть сообщение

А есть какой-то способ избежать вызова "standard method()" или подменить его?
Есть :
X++:
[ExtensionOf(classStr(Class1))]
final public class Class1_Extension
{
    public void run()
    {
        try
        {
            if (true)
            {
                throw Exception::Error;
            }
            next run();
        }
        catch (Exception::Error)
        {
            info('Done!');
        }
    }
}
Такое же эксплуатирование деталей (кривых) реализации как и в этом блоге. В любой момент починят (или поменяют реализацию XppPrePostArgs) и все развалиться к чертям, но кого это останавливает ?

Я так и не понял из ответов выше, зачем все это если есть CoC или просто автор еще про нее не узнал?

Последний раз редактировалось skuull; 04.10.2017 в 22:19.
За это сообщение автора поблагодарили: kashperuk (5), EVGL (10), trud (6), Link (1).
Старый 04.10.2017, 23:04   #14  
ax_mct is offline
ax_mct
Banned
 
2,548 / 1091 (0) ++++++++
Регистрация: 10.10.2005
Адрес: Westlands
Цитата:
Сообщение от skuull Посмотреть сообщение
Я так и не понял из ответов выше, зачем все это если есть CoC или просто автор еще про нее не узнал?
CoC - Clash of Clans?

Как понимаю в CoC нельзя не вызывать next. И соответственно мы не можем вырезать или заменить то что нам не нужно. Только в очередной раз облизать. И автор темы решит свою проблему точно так же опасно с CoC как и Pre/Post, только вместо двух методов будет один. Сам же по себе такой способ как паттерн решения не должен быть промышленным. Рабочий но потенциально опасный workaround. После которого инженер должен пойти и хорошо напиться.

Возможно именно обязательность вызова next изменят в PU 11. О чем то же Kashperuk намекает.

P.S. вьехал в код - мы обходим вызов NEXT прыгая исключением. Неплохо. Это реально используется?
А можно создать свой собственный тип исключения, Exception::TODO? А что мне нравится, я правда столько не выпью, но в аду как в аду

Но наш кокретный гений Michael Fruergaard Pontoppidan по ходу математик, а не кибернетик.
Заменять метод - это фу, потому что тогда кто-то покажется нелепым.
Цитата:
Overlayering gives you the ability to replace any method. You take a copy of the original method and can edit it as you please. There is some tooling on top that gives a better experience, but at the end of the day customizations done this way are intrusive, and cannot be upgraded automatically. (For example, when the original code is changed, those changes must be merged in.)
If CoC allowed skipping the execution of standard code, you could take a copy of the standard code, edit it in any way you want, place it in a wrapper method and voila – you had overlayering in disguise. If we allowed this, we would be back to square one. CoC would have the exact same replacing semantics and problems as overlayering – just without the tooling.
https://blogs.msdn.microsoft.com/mfp...in-of-command/

Последний раз редактировалось ax_mct; 04.10.2017 в 23:12.
Старый 04.10.2017, 23:16   #15  
skuull is offline
skuull
Участник
Most Valuable Professional
Лучший по профессии 2014
 
700 / 752 (27) +++++++
Регистрация: 08.03.2013
Адрес: ХЗ
Цитата:
Сообщение от ax_mct Посмотреть сообщение
P.S. вьехал в код - мы обходим вызов NEXT прыгая исключением. Неплохо. Это реально используется?
Это пример того что это технически возможно на PU10, используется или нет я хз, мало ли кулибинов на свете. Я бы лично не стал использовать ни то ни это по причинам вышеизложенным.
Старый 05.10.2017, 03:55   #16  
skuull is offline
skuull
Участник
Most Valuable Professional
Лучший по профессии 2014
 
700 / 752 (27) +++++++
Регистрация: 08.03.2013
Адрес: ХЗ
Цитата:
Сообщение от ax_mct Посмотреть сообщение
А можно создать свой собственный тип исключения, Exception::TODO? А что мне нравится, я правда столько не выпью, но в аду как в аду
Вы можете ловить c sharp исключения в 7ке, значит должны мочь их кидать, создайте свой тип и попробуйте
За это сообщение автора поблагодарили: ax_mct (2).
Старый 05.10.2017, 20:47   #17  
wojzeh is offline
wojzeh
Участник
Аватар для wojzeh
Соотечественники
 
677 / 517 (19) +++++++
Регистрация: 27.04.2006
Адрес: Montreal
Цитата:
Сообщение от skuull Посмотреть сообщение
В любой момент починят (или поменяют реализацию XppPrePostArgs) и все развалиться к чертям, но кого это останавливает ?
что значит "поменяют"? уберут метод добавления нового параметра? уберут метод доступа к объекту? как оно будет компилироваться в таком случае? это же не какие-то там недокументированные возможности, а как раз для того и предназначенные.

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

Цитата:
Сообщение от skuull Посмотреть сообщение
Я так и не понял из ответов выше, зачем все это если есть CoC или просто автор еще про нее не узнал?
я не узнал, сорян. можешь дать толковую ссылку? спасибо
__________________
Felix nihil admirari

Последний раз редактировалось wojzeh; 05.10.2017 в 20:56. Причина: логическая ошибка
Старый 05.10.2017, 21:00   #18  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от wojzeh Посмотреть сообщение
я не узнал, сорян. можешь дать толковую ссылку? спасибо
https://blogs.msdn.microsoft.com/mfp...in-of-command/
Старый 05.10.2017, 22:08   #19  
skuull is offline
skuull
Участник
Most Valuable Professional
Лучший по профессии 2014
 
700 / 752 (27) +++++++
Регистрация: 08.03.2013
Адрес: ХЗ
Цитата:
Сообщение от wojzeh Посмотреть сообщение
что значит "поменяют"? уберут метод добавления нового параметра? уберут метод доступа к объекту? как оно будет компилироваться в таком случае? это же не какие-то там недокументированные возможности, а как раз для того и предназначенные.
Ну такие ребята как Peter Villadsen конкретно про этот злобный хак говорят:
Цитата:
Will the approach work? Probably: The arguments are collected in an X++ struct (i.e. name / value pairs). Will we guarantee that it will work forever? No.
Там как раз в соседней ветки возмущаются по поводу удаленных полей между релизами, так что могут поломать запросто, как поломали pack\unpack в PU10, а казалось бы фундаментальная фича. Edited: вот уже и в эту ветку притащили

Идея то не нова и была полезна до CoC, а щас никчему.

Цитата:
Сообщение от wojzeh Посмотреть сообщение
я не узнал, сорян. можешь дать толковую ссылку? спасибо
Помимо видео от Вани\mfp, https://docs.microsoft.com/en-us/dyn...d-wrapping-coc

Последний раз редактировалось skuull; 05.10.2017 в 23:22.
Теги
chain of command, extensions

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
sertandev: AX7 Extensibility – Part 3 : Event handlers and delegates (hooks) Blog bot DAX Blogs 0 28.08.2017 19:11
ievgensaxblog: D365O. Trick to pass a value between Pre and Post event handler using XppPrePostArgs. Blog bot DAX Blogs 0 01.07.2017 10:13
How to cancel method execution in pre-event handler alicedr DAX: Программирование 6 01.01.2017 15:33
newdynamicsax: Pre / Post handlers and kernel classes. Blog bot DAX Blogs 0 25.04.2016 15:11

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

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

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