AXForum  
Zurück   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Kennwort vergessen?
Registrieren Forum Rules Hilfe Benutzerliste Heutige Beiträge Suchen

 
 
Themen-Optionen Thema durchsuchen Ansicht
Alt 30.09.2021, 00:31   #21  
sukhanchik ist offline
sukhanchik
Administrator
Benutzerbild von sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3.342 / 3563 (125) ++++++++++
Registriert seit: 13.06.2004
Ort: Москва
Zitat:
Zitat von axm2017 Beitrag anzeigen
Увы. Есть такое понятие как карма и поддержка.

Лучики добра при разработке наследства от тех кто не думал шлю регулярно. Думаю что и в мою сторону летят, поэтому иногда пытаюсь думать.
Ну в Вашем случае получается, что есть последователи вашего закрытого кода. А это "в корне меняет ситуацию". Конечно в этом случае, когда потребители вашего закрытого кода "под боком" и могут "оперативно настучать" - Вам действительно приходится думать о поддержке. Но опять-таки... полагаю, что таких последователей у Вас если не всего один, то явно крайне мало по сравнению с MS. Т.е. можно в принципе попытаться "угадать", где делать точки расширения. MS-у в этом плане гораздо сложнее
__________________
Возможно сделать все. Вопрос времени
Alt 30.09.2021, 08:10   #22  
belugin ist offline
belugin
Участник
Benutzerbild von belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4.622 / 2925 (107) +++++++++
Registriert seit: 16.01.2004
Blog-Einträge: 5
Zitat:
Zitat von mazzy Beitrag anzeigen
вот ты даже не представляешь насколько отрицательно ты сейчас о продукте сказал.
ведь это "всего-лишь" значит, что изначально точки расширения не были продуманы.
Какие-то точки расширения были продуманы, какие-то нет. Какие-то были лишние. Регулярное добавление свидетельствует только о том, что либо не все были продуманы заранее либо появися новый функционал.
Alt 30.09.2021, 08:11   #23  
Logger ist offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3.984 / 3273 (117) ++++++++++
Registriert seit: 12.10.2004
Ort: Москва
Blog-Einträge: 2
Zitat:
Zitat von Stitch_MS Beitrag anzeigen
а однажды даже написать event handler к навигационному методу на таблице (это которого не видно в aot, но он там всё-таки есть после активации определенного свойства на table relation-е), потому-что по-другому ну никак.
Как интересно! А вы не могли бы описать подробнее ?
Alt 30.09.2021, 08:14   #24  
Logger ist offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3.984 / 3273 (117) ++++++++++
Registriert seit: 12.10.2004
Ort: Москва
Blog-Einträge: 2
Zitat:
Zitat von belugin Beitrag anzeigen
Они могут себе попросить точку расширения, которой им не хватает.
Не могут. Вернее могут, но это слишком дорого и трудозатратно. Т.е. по факту не могут. И на практике ищут обходные пути. Об этом многократно говорилось.
Пожалуй я соглашусь с Евгением (DSPIC), что если по умолчанию ставить везде protected вместо private, то всем будет намного легче.
Alt 30.09.2021, 08:20   #25  
Logger ist offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3.984 / 3273 (117) ++++++++++
Registriert seit: 12.10.2004
Ort: Москва
Blog-Einträge: 2
Zitat:
Zitat von mazzy Beitrag anzeigen
классическая аксапта до CIL использует очень древнуюю виртуальную машину Java
Что, правда ? Мне казалось что Дамгаарды просто посмотрели на Java 1.0 и сделали по мотивам, но все сами. Как же оно было на самом деле?
Alt 30.09.2021, 08:34   #26  
fed ist offline
fed
Moderator
Benutzerbild von fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2.913 / 5736 (197) ++++++++++
Registriert seit: 13.03.2002
Ort: Hüfingen,DE
Zitat:
Zitat von Logger Beitrag anzeigen
Что, правда ? Мне казалось что Дамгаарды просто посмотрели на Java 1.0 и сделали по мотивам, но все сами. Как же оно было на самом деле?
Я тоже много раз читал рассуждения mazzy по поводу того что Аксапта использует древнюю явовскую VM, но никогда не читал что-то подобного в воспоминаниях участников процесса или даже архивных внутренних документах MS. При этом схожесть с явой в старой аксапте - она тоже достаточно относительная. Я бы скорее назвал X++ версии 2.5 "Visual Basic с явовским синтаксисом". Все-таки многие очень фундаментальные явовские идеи - типа интерфейсов, появились в языке только где-то в DAX2009 (хотя да - interface был reserved word со времен версии 2.1).

Geändert von fed (30.09.2021 um 10:19 Uhr)
Alt 30.09.2021, 08:36   #27  
belugin ist offline
belugin
Участник
Benutzerbild von belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4.622 / 2925 (107) +++++++++
Registriert seit: 16.01.2004
Blog-Einträge: 5
Zitat:
Zitat von DSPIC Beitrag anzeigen
Точки расширения они делают регулярно. Деятели...
Тут такая логическая цепочка: регулярные обновления => совместимость => органичение объема API.

При регулярных обновлениях надо быть обратно совместимым потому, что иначе расширения будут отваливаться. Теперь рассмотрим, что будет, если просто везде стаить public.

Вот, допустим кто-то написал

X++:
public void foo(string bar)
{
   ...- 
}
Теперь нам надо сделать дополнительный параметр.

X++:
public void foo(string bar, int baz)
- так делать нельзя. Расширение может вызывать этот метод и оно перестанет компилироваться и работать.

X++:
public void foo(string bar, int baz = 0)
Тут расширение из предыдущей фразы будет работать, но
1. Может быть расширение которое обернуло этот код и не прокидывает новый параметр
2. Если параметр baz логически обязательный, то все скомпилируется и сработает но неправильно. Фактически, это означает, что логически обязательный параметр вообще никак нельзя добавить без потери обратной совместимости.

X++:
public void foo(string bar)
{
     this.fooWithBaz(bar, 0);
}
public void fooWithBaz(string bar, int baz)
Так можно, но нельзя перестать вызывать foо в том месте, где он изначально вызывался, потому, что расширение может подписаться на вызовы foo или обернуть и тогда оно тихо перестанет работать.

Еще можно сделать disposable context - фактически передавать дополнительные данные через статический метод, но будут пролемы с рекурсией.

Можно изначально передавать параметры завернутые в parameter object.

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

При этом всем этот метод в реальности, скорее всего, никакими расширениями не используется (потому, что большинство методов не используется) и делать его piblic значит просто закрыть себе возможность развития этого участка кода без какой бы то ни было выгоды для кого-то.
This post has been rated by: sukhanchik (6), DSPIC (5).
Alt 30.09.2021, 08:40   #28  
fed ist offline
fed
Moderator
Benutzerbild von fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2.913 / 5736 (197) ++++++++++
Registriert seit: 13.03.2002
Ort: Hüfingen,DE
Zitat:
Zitat von belugin Beitrag anzeigen
Они могут себе попросить точку расширения, которой им не хватает.
Мы регулярно их делаем.
Могу поделиться опытом: Запросили точку расширения 19 мая. Получили ее в версии 10.0.21, которая в сентябре попала в general availability. Поскольку фича была непринципиальна - мы могли позволить себе подождать.
Но в целом соглашусь с другими ораторами: Запрос точки расширения могут себе позволить только ISV. В проектных условиях - cut and paste - наше все...
This post has been rated by: belugin (5).
Alt 30.09.2021, 09:02   #29  
belugin ist offline
belugin
Участник
Benutzerbild von belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4.622 / 2925 (107) +++++++++
Registriert seit: 16.01.2004
Blog-Einträge: 5
Zitat:
Zitat von fed Beitrag anzeigen
Я тоже много раз читал рассуждения mazzy по поводу того что Аксапта использует древнюю явовскую VM, но никогда не читал что-то подобного в воспоминаниях участников процесса или даже архивных внутренних документах MS.
Маззи явно не отделяет свои гипотезы от того, что ему точно известно.

В Ax<=2012 своя ВМ и свой рантайм. Это можно даже по внешним свойствам догадаться. Оно ведет себя не как ява, а как динамический рантайм со статическим проверщиком типа тайпскрипт.

final - оно ж прежде всего логическая вещь, а не для перформанса.
Alt 30.09.2021, 09:35   #30  
belugin ist offline
belugin
Участник
Benutzerbild von belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4.622 / 2925 (107) +++++++++
Registriert seit: 16.01.2004
Blog-Einträge: 5
Кстати, конкретно от модуля ER есть API которые бы вы хотели, но не просили официально?
Alt 30.09.2021, 10:07   #31  
Stitch_MS ist offline
Stitch_MS
Участник
Benutzerbild von Stitch_MS
Соотечественники
 
397 / 483 (17) +++++++
Registriert seit: 27.02.2006
Ort: Дания
Zitat:
Zitat von Logger Beitrag anzeigen
Как интересно! А вы не могли бы описать подробнее ?
Нужно было использовать запись ERFormatMappingTable, но не ту, что ER модуль предлагает. Детали не спрашивайте, у меня у самого вопросы к консультанту, но задачу нужно было решить. Поскольку модуль закрыт, пришлось прицепиться к навигационному методу solution, чтобы подставить нужную запись ERFormatMappingTable, из которой уже в стандартном коде будет найдена соответствующая ERSolutionTable через ERFormatMappingTable.solution().

X++:
[ExtensionOf(tableStr(ERFormatMappingTable))]
final class ERFormatMappingTableNNN_Extension
{
    [PreHandlerFor(tableStr(ERFormatMappingTable), tableMethodStr(ERFormatMappingTable, solution))]
    public static void ERFormatMappingTable_Pre_solution(XppPrePostArgs args)
    {
        NNNEuSalesListReportingEngineContext context = NNNEuSalesListReportingEngineContext::current();

        if (context != null && context.generatingReport && context.reportFormatMappingId != 0)
        {
            ERFormatMappingTable erFormatMappingTable = ERFormatMappingTable::find(context.reportFormatMappingId);

            ERFormatMappingTable callerERFormatMappingTable = args.getThis() as ERFormatMappingTable;

            callerERFormatMappingTable.data(erFormatMappingTable);
        }
    }

}
This post has been rated by: belugin (5), Logger (5).
Alt 30.09.2021, 10:14   #32  
axm2017 ist offline
axm2017
Участник
 
2.066 / 296 (14) ++++++
Registriert seit: 15.05.2017
Zitat:
Zitat von belugin Beitrag anzeigen
Кстати, конкретно от модуля ER есть API которые бы вы хотели, но не просили официально?
Хотелки (как разраба):
а) возможность создавать свою среду разработки. Не уверен что сейчас это возможно без финтов. +

б) возможность встроить свои форматы (как Excel и ко) Вроде писали что можно но не тестил. + но- по идее конечно могу выгрузить в формате xml или json и далее уже все сделать но выглядеть это будет колхозно.

в) возможность связать явно маппинг и формат +++

Geändert von axm2017 (30.09.2021 um 10:39 Uhr)
Alt 30.09.2021, 11:00   #33  
axm2017 ist offline
axm2017
Участник
 
2.066 / 296 (14) ++++++
Registriert seit: 15.05.2017
Zitat:
Zitat von sukhanchik Beitrag anzeigen
Ну в Вашем случае получается, что есть последователи вашего закрытого кода. А это "в корне меняет ситуацию"...
Разные случаи есть. Типичный случай когда человек не сильно погруженный в функционал полез менять что то в доступных методах. Ограничение позволяет ему выбрать правильное место по мысли автора кода.
This post has been rated by: sukhanchik (3).
Alt 30.09.2021, 14:43   #34  
VORP ist offline
VORP
Участник
Benutzerbild von VORP
 
147 / 95 (4) ++++
Registriert seit: 26.05.2006
Zitat:
Какие-то точки расширения были продуманы, какие-то нет. Какие-то были лишние
В новом модуле CreditManagement (Управление кредитными лимитами, CredMan) вообще вся функциональность сделана internal, то есть даже копи-паст не очень поможет(если только скопировать всю модель).
Alt 30.09.2021, 16:14   #35  
belugin ist offline
belugin
Участник
Benutzerbild von belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4.622 / 2925 (107) +++++++++
Registriert seit: 16.01.2004
Blog-Einträge: 5
Zitat:
Zitat von Stitch_MS Beitrag anzeigen
Детали не спрашивайте, у меня у самого вопросы к консультанту, но задачу нужно было решить.
Мне тогда трудно использовать эту информацию. Хотелось бы знать, зачем, чего не хватило в стандартном функционале.

P.S. Вот тут "as XXX" лучше убрать имхо. Если что-то не так, то лучше получить invalidcastexception и знать в чем именно дело, чем nullreferenceexception и гадать то ли пришел null то ли не тот тип.

X++:
            ERFormatMappingTable callerERFormatMappingTable = args.getThis() as ERFormatMappingTable;

            callerERFormatMappingTable.data(erFormatMappingTable);
Да и короче будет
This post has been rated by: Stitch_MS (3).
Alt 30.09.2021, 16:23   #36  
belugin ist offline
belugin
Участник
Benutzerbild von belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4.622 / 2925 (107) +++++++++
Registriert seit: 16.01.2004
Blog-Einträge: 5
Zitat:
Zitat von axm2017 Beitrag anzeigen
а) возможность создавать свою среду разработки. Не уверен что сейчас это возможно без финтов. +
Это вряд ли - получается надо открыть все-все а потом это поддерживать.

Zitat:
б) возможность встроить свои форматы (как Excel и ко) Вроде писали что можно но не тестил. + но- по идее конечно могу выгрузить в формате xml или json и далее уже все сделать но выглядеть это будет колхозно.
Это можно завести как запрос на точку расширения, только с бизнес мотивацией. Желательно с описанием примера.

Zitat:
в) возможность связать явно маппинг и формат +++
Мы кажется это обсуждали уже, но я забыл зачем именно это нужно и по-быстрому не нашел.
Alt 30.09.2021, 17:57   #37  
Stitch_MS ist offline
Stitch_MS
Участник
Benutzerbild von Stitch_MS
Соотечественники
 
397 / 483 (17) +++++++
Registriert seit: 27.02.2006
Ort: Дания
Zitat:
Zitat von VORP Beitrag anzeigen
В новом модуле CreditManagement (Управление кредитными лимитами, CredMan) вообще вся функциональность сделана internal, то есть даже копи-паст не очень поможет(если только скопировать всю модель).
О, это вообще песня. Чтобы эта приблуда заработала в Intercompany без копи-пасты, пришлось жестоко изобретать.

Например, через reflection в нужные моменты временно активировать кредит-чекпоинты для типа proforma confirmation в настройках, а потом постить этот документ для original SO, чтобы сработал кредит-чек и, если надо, заблокировал его.

Или, скажем, при нажатии Release to warehouse в intercompany SO, переходить в original SO, запускать кредит-чек для чекпоинта Release to warehouse, и если там получался кредит-холд, перебрасывать этот кредит-холд в IC SO. Так чтобы в итоге задолженность конечного покупателя не дала отпустить товар на склад в другой компании.
Alt 30.09.2021, 18:41   #38  
trud ist offline
trud
Участник
Лучший по профессии 2017
 
1.039 / 1635 (57) ++++++++
Registriert seit: 07.06.2003
Blog-Einträge: 1
Zitat:
Zitat von sukhanchik Beitrag anzeigen
Грубо говоря - мне дали задачу, я написал класс, в котором 20 методов private и 10 методов public / protected. Если я обычный программист - я не думаю о последователях - ибо их нет, а расставлять точки расширения наобум - это бестолковая задача. А вот если я программист MS - я обязан дополнительно подумать об (условно) 5 точках расширения, которые я должен заложить в свой код.
Этож не так работает, у программистов МС тоже есть свои сроки и задачи. Т.е. там где партнер использует рефлекшн, они просто ставят internal.
Потом возникает вопрос частоты обновлений, тут на помощь приходит микросервисная архитектура. Делается микросервис(идельно - работающий только на Тир2, что отсекает большую часть разработчиков из репортинга багов ), который уже отдельная команда пилит по своему расписанию.
Т.е. архитектура системы подстраивается под структуру огранизации разрабатывающей ПО, вроде такой закон даже есть
Вообще модификаторы идеально были сделаны в начальной версии АХ, т.е. private не запрещал вызов метода, а выдавал ошибку BP. Это как бы на порядок лучше использование Reflection.
This post has been rated by: sukhanchik (3), vmoskalenko (5).
Alt 30.09.2021, 19:02   #39  
imir ist offline
imir
Участник
 
159 / 161 (6) ++++++
Registriert seit: 28.05.2010
Ладно со старыми методами, там private по-умолчанию переехал из 12-й, это можно объяснить (не)злым умыслом. Но в новых модулях, кторые пишутся с нуля.. смотрим написанный недавно с нуля Asset leasing:

- все классы помечены internal final class AssetLease*
Все методы:
-все что можно private
- там где нельзя поставить private по смыслу - internal
- нельзя ни то, ни другое - [Hookable(false)]

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

Допускаю, что это задумано для того, чтобы репортили баги вместо заплаток, потому что модуль сырой, но тенденция однако может распространиться на все остальное.
Alt 30.09.2021, 19:37   #40  
Stitch_MS ist offline
Stitch_MS
Участник
Benutzerbild von Stitch_MS
Соотечественники
 
397 / 483 (17) +++++++
Registriert seit: 27.02.2006
Ort: Дания
Zitat:
Zitat von imir Beitrag anzeigen
Допускаю, что это задумано для того, чтобы репортили баги вместо заплаток
А ещё это освобождает вендора от неприятных раздумий типа «а не breaking ли change я сейчас пилю?»
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
d365technext: Private, Protected and Public attribute access in Class Extension Blog bot DAX Blogs 0 30.07.2018 20:13
i-neti: X++ in AX7: элементы с уровнями доступа private и public. Часть 4 Blog bot DAX Blogs 0 18.04.2017 13:11
mfp: X++ in AX7: Private and public members Blog bot DAX Blogs 12 10.12.2015 09:08
dynamics-ax: Microsoft Highlights New ERP Public Sector Capabilities for AX 2012 Blog bot DAX Blogs 0 23.05.2011 19:11
Rahul Sharma: Convert Dynamics AX Entity Private Address into Public GAB Address Blog bot DAX Blogs 0 07.04.2011 02:15

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Gehe zu

Рейтинг@Mail.ru
Alle Zeitangaben in WEZ +3. Es ist jetzt 22:54 Uhr.
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.