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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 30.05.2017, 00:28   #41  
ta_and is offline
ta_and
Участник
 
176 / 105 (4) +++++
Регистрация: 26.02.2002
Адрес: СПб
Цитата:
Сообщение от ax_mct Посмотреть сообщение
Development tutorial: SysExtension framework in factory methods where the constructor requires one or more arguments
http://kashperuk.blogspot.co.uk/2017...extension.html
Спасибо. Очень дельная статья. Ответ на мой третий вопрос.
Старый 30.05.2017, 09:17   #42  
belugin is offline
belugin
Участник
Аватар для belugin
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
Сотрудники Microsoft Dynamics
 
3,884 / 2004 (74) +++++++++
Регистрация: 16.01.2004
Адрес: Москва
Цитата:
Сообщение от mazzy Посмотреть сообщение
Вместо отдельно стоящих атрибутов и системного класса с принудительно-общей логикой дать возможность создавать свои фабрики. Продумать унификацию с экстеншенами форм и менюитемами. При этом не забыв о правах.
Так экстеншены классов-то тут не причем (в том смысле, в котором экстендятся формы) - тут новые классы создаются, а не экстендятся старые.

Цитата:
Насыпать сахара, который предоставлял бы дефолтное поведение по-умолчанию.
Какой сахар нужен? Там и так минимально - помечашь класс аттрибутом. Для вызова ровно один метод. На мой вкус он назван не очень удачно, но вполне себе удобно вызывается.

Чего, как мне кажется не хватает, это вожможномсти посмотреть все экстеншены с ключами и валидации.

Цитата:
Да много чего можно было бы сделать. И для этого не нужен был жесткий алгоритм, задействующий рефлекшен.
Дык фреймворк добавить проще чем менять компилятор. Я просто не вижу чтобы тут был какая-то большая проблема
Старый 30.05.2017, 10:02   #43  
mazzy is offline
mazzy
Administrator
Аватар для mazzy
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
Most Valuable Professional
 
20,695 / 3296 (151) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Цитата:
Сообщение от belugin Посмотреть сообщение
Так экстеншены классов-то тут не причем (в том смысле, в котором экстендятся формы) - тут новые классы создаются, а не экстендятся старые.
ох, похоже, надо выделять в новую тему и рисовать схему...

Цитата:
Сообщение от belugin Посмотреть сообщение
Какой сахар нужен? Там и так минимально - помечашь класс аттрибутом. Для вызова ровно один метод.
именно!

какая потребность есть у людей в Аксапте:
= изменить или добавить функционал, который могут использовать пользователи
== пользователи работают с функционалом через menuItem
== menuItem вызывает классы через статический метод main (menuItem также используются для вызова форм)
== права доступа к функционалу Аксапты настраивается через menuItem

Вызывать класс напрямую вообще говоря моветон в Аксапте (хоть МС делает это сплошь и рядом в стандартном функционале, сволочи)
Если вызывать напрямую, то нужно запрограммировать закат солнца вручную чтобы учесть настроенные права.
Функционал аксапты можно и должно вызывать через menuItem.

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

ну и так далее.
Макс, участники, я знаю что технология атрибутов работает. Спасибо, что вы рассказываете и даете ссылки на документацию.
Но я хотел сказать, что выбранный способ реализации - далеко не единственный. И далеко не оптимальный. Даже с тупой точки зрения выживания продукта.
Просто никто не думал о том, как ЭТО будут использовать конечные потребители - в данном случае разработчики партнеров и клиентов.

я собственно только об этом.


Цитата:
Сообщение от belugin Посмотреть сообщение
Чего, как мне кажется не хватает, это вожможномсти посмотреть все экстеншены с ключами и валидации.
Можно. Пусть делают. Пусть будет много внутренних инструментов. Да, я в курсе как это чудесно встроено во внутренний деплой, систему контроля и тестирования...
Но не стоит ожидать, что остальные будут впечатлены - они то не смогут этим пользоваться.

Цитата:
Сообщение от belugin Посмотреть сообщение
Дык фреймворк добавить проще чем менять компилятор. Я просто не вижу чтобы тут был какая-то большая проблема
Выше я приводил пример с советскими панельными домами. Вот собственно оно. Разработчикам проще добавить фреймворк. Остальное не учитывается.

Причем, belugin - образец вполне адекватного и взшенного подхода. Спасибо тебе, Макс.
Просто у него свои приоритеты. И не потому что он так решил, а потому что у него тоже есть начальство и тоже есть поставленные ему задачи и сроки.

Ключевой вопрос - что и как надо сделать, чтобы приоритеты у архитекторов-разработчиков внутри МС были хотя бы немного похожими на приоритеты потребителей (в данном случае разработчики партнеров и клиентов)...

Извините за дикий оффтопик.
__________________
GitHub, Facebook, mazzy.priot, mazzy.music, coub.

Последний раз редактировалось mazzy; 30.05.2017 в 10:08.
Старый 30.05.2017, 12:56   #44  
belugin is offline
belugin
Участник
Аватар для belugin
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
Сотрудники Microsoft Dynamics
 
3,884 / 2004 (74) +++++++++
Регистрация: 16.01.2004
Адрес: Москва
Цитата:
Сообщение от mazzy Посмотреть сообщение
Вызывать класс напрямую вообще говоря моветон в Аксапте (хоть МС делает это сплошь и рядом в стандартном функционале, сволочи)
что такое "вызывать класс"? info.add это вызывать класс или нет?

Цитата:
что делает МС, чтобы удовлетворить потребность людей?
никакого сахара для работы с инфраструктурой аксапты
минимализм и совершенно перпендикулярная остальной инфраструктуре технология атрибутов
Для этих классов это, насколько, я знаю не используется. Посмотри в коде аксапты где используется SysExtension Framework

Цитата:
Просто никто не думал о том, как ЭТО будут использовать конечные потребители - в данном случае разработчики партнеров и клиентов.
Я вообще не понимаю почему добавление атрибута на класс вместо того, чтобы добавить case куда-то внутрь метода вызывает какие-то проблемы? Единственное, что я вижу - это то, что просто сначала непривычно.
Старый 30.05.2017, 13:12   #45  
mazzy is offline
mazzy
Administrator
Аватар для mazzy
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
Most Valuable Professional
 
20,695 / 3296 (151) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Цитата:
Сообщение от belugin Посмотреть сообщение
что такое "вызывать класс"? info.add это вызывать класс или нет?
info.add - является.
запуск закрытия склада - является
запуск пересчета курсовой разницы - является
запуск отчета GER - является.
запуск из меню, из формы, как пакетное задание, в отдельном потоке и просто info.add - все это вызов класса. ты совершенно прав.

что из этого уже делается через SysExtensionAppClassFactory::getClassFromSysAttribute?
сколько нужно программировать чтобы вызвать классы при помощи SysExtensionAppClassFactory::getClassFromSysAttribute?

Цитата:
Сообщение от belugin Посмотреть сообщение
Для этих классов это, насколько, я знаю не используется. Посмотри в коде аксапты где используется SysExtension Framework
Вот именно! Нигде!! Му-ха-ха-ха!!!!

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

это всего лишь означает, что предлагаемая технология очень ограничена.

Цитата:
Сообщение от belugin Посмотреть сообщение
Я вообще не понимаю почему добавление атрибута на класс вместо того, чтобы добавить case куда-то внутрь метода вызывает какие-то проблемы? Единственное, что я вижу - это то, что просто сначала непривычно.
Да-да.
Макс, ты не переживай. Не ты один не видишь, к сожалению. Просто ты работаешь не так, как работают на проектах. И потребности, и приоритеты у тебя другие.
__________________
GitHub, Facebook, mazzy.priot, mazzy.music, coub.
Старый 30.05.2017, 13:27   #46  
EVGL is offline
EVGL
Moderator
Лучший по профессии 2014
Соотечественники
 
3,451 / 1891 (70) ++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Switch - это что, тоже технология? Вам нравится использовать эту технологию? Если нет, то почему?

Совершенно очевидно, для чего это было сделано. Все вклинивались в конструктор, теперь же этого делать не надо. Конечно, только там, где стандартный класс уже использует атрибуты. Где не использует - жалуйтесь разработчикам. Точно так же действуйте там, где необходим overlayering, а hook не предусмотрен - жалуйтесь. Может, сделают, скорее всего проигнорируют, но вы камень с души снимете, свою роль сыграете до конца.

И вообще, читайте первоисточники: http://patents.justia.com/patent/9026989.
Михаэль Галль и Михаель Понтоппидан зарегистрировали патент, завидуйте, придумывайте как сделать лучше и регистрируйте свои патенты.
За это сообщение автора поблагодарили: mazzy (2), ax_mct (10).
Старый 30.05.2017, 14:40   #47  
ax_mct is offline
ax_mct
Участник
Аватар для ax_mct
 
1,570 / 506 (20) +++++++
Регистрация: 10.10.2005
Адрес: PHP
Цитата:
Сообщение от EVGL Посмотреть сообщение
И вообще, читайте первоисточники: http://patents.justia.com/patent/9026989.
Михаэль Галль и Михаель Понтоппидан зарегистрировали патент, завидуйте, придумывайте как сделать лучше и регистрируйте свои патенты.
US Patent for Object extensions using attributes to decouple base classes from derived classes Patent (Patent # 9,026,989)

Это же начала конца света. Война патентов на уровне написания кода.
Заслуживает отдельной темы разобраться. Звонок тревожный если ручки и до этого дотянулись. Прецендент. Ведь не придумали они это, а просто оформили.
P.S. Или это не стремление корпорации зарабатывать на способах написания кода, а инициатива авторов реализации чтобы наоборот тянуть с Microsoft??
P.P.S. Assignee - MS, значит владелец патента - Microsoft. Завидовать авторам - не хочется. Хочется их казнить

Patent History
Patent number: 9026989
Type: Grant
Filed: Jun 7, 2012
Date of Patent: May 5, 2015
Patent Publication Number: 20130332898
Assignee: Microsoft Technology Licensing LLC (Redmond, WA)
Inventors: Michael Gall (Copenhagen), Michael Fruergaard Pontoppidan (Lynge), Lars Dragheim Blaaberg (Karlslunde), Arthur Greef (Burien, WA)

Последний раз редактировалось ax_mct; 30.05.2017 в 15:02.
Старый 30.05.2017, 16:13   #48  
EVGL is offline
EVGL
Moderator
Лучший по профессии 2014
Соотечественники
 
3,451 / 1891 (70) ++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Цитата:
Сообщение от ax_mct Посмотреть сообщение
Это же начала конца света. Война патентов на уровне написания кода.
Заслуживает отдельной темы разобраться. Звонок тревожный если ручки и до этого дотянулись. Прецендент. Ведь не придумали они это, а просто оформили.
P.S. Или это не стремление корпорации зарабатывать на способах написания кода, а инициатива авторов реализации чтобы наоборот тянуть с Microsoft??
P.P.S. Assignee - MS, значит владелец патента - Microsoft. Завидовать авторам - не хочется. Хочется их казнить
То есть как? Михаэль Галль и придумал. Он еще много чего придумал, например Source Document и Subledger, вот, мучаемся, но с точки зрения пользователя/консультанта - классная вещь. Господин Белугин, наверное, много может на эту тему написать, ведь ему под это пришлось мою корреспонденцию переделывать, не так ли?

Корпорация Microsoft пополнила свой многотысячный багаж патентов, все правильно, рабочее время и интеллектуальный продукт принадлежит корпорации. Сами изобретатели повесили себе на грудь то есть LinkedIn, чтобы потом продать себя подороже.

В чем проблема?
Старый 30.05.2017, 16:35   #49  
ax_mct is offline
ax_mct
Участник
Аватар для ax_mct
 
1,570 / 506 (20) +++++++
Регистрация: 10.10.2005
Адрес: PHP
Цитата:
Сообщение от EVGL Посмотреть сообщение

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

Создаю я скажем свой продукт или беру Open-source, продаю решение клиентам. А потом разоряюсь так как использовал способ написания кода который запатентован.
Или в этом продукте который я использую такое содержится. Это что же мне все патенты читать?

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

Сорри за оффтоп. Пока непонятно тема это или нет.
Старый 30.05.2017, 16:38   #50  
belugin is offline
belugin
Участник
Аватар для belugin
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
Сотрудники Microsoft Dynamics
 
3,884 / 2004 (74) +++++++++
Регистрация: 16.01.2004
Адрес: Москва
Цитата:
Сообщение от mazzy Посмотреть сообщение
info.add - является.
"вызывать его напрямую вообще говоря моветон в Аксапте" ? Ты предлагаешь через menuItem?

Цитата:
что из этого уже делается через SysExtensionAppClassFactory::getClassFromSysAttribute?
сколько нужно программировать чтобы вызвать классы при помощи SysExtensionAppClassFactory::getClassFromSysAttribute?
Вот именно! Нигде!! Му-ха-ха-ха!!!!
Упс, тут я несколько перепутал. В 6 действительно почти нет вызовов такой штуки - весь Subledger сделан на такой же, но другой. А в 7 - SysPluginFactory.

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

Цитата:
это всего лишь означает, что предлагаемая технология очень ограничена.
И это правильно - у нее четкое предназначение.

Цитата:
Да-да.
Макс, ты не переживай. Не ты один не видишь, к сожалению. Просто ты работаешь не так, как работают на проектах. И потребности, и приоритеты у тебя другие.
Расскажи чем оно так сильно портит жизнь партнеру?
За это сообщение автора поблагодарили: EVGL (1), Vadik (1).
Старый 30.05.2017, 22:57   #51  
mazzy is offline
mazzy
Administrator
Аватар для mazzy
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
Most Valuable Professional
 
20,695 / 3296 (151) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Цитата:
Сообщение от belugin Посмотреть сообщение
"вызывать его напрямую вообще говоря моветон в Аксапте" ? Ты предлагаешь через menuItem?
я предлагал? покажи мне это место, пожалуйста.

я говорил, что МС мог бы сделать более универсальный механизм, который учитывает инфраструктуру Аксапты. И мог бы насыпать синтаксического сахара. А также привел примеры того, как это делают другие.

Цитата:
Сообщение от belugin Посмотреть сообщение
Программировать? Для расширения - просто пометить атрибутом, для того места, которое надо расширить - вызов метода. Если нужен новый тип данных для ключа, добавить атрибут для него.
Прекрасно. Только мы говорили про вызывать. Ты довел мысль только до расширения.
доведи свою мысль до вызова функцонала класса, пожалуйста.

можно на примере расширить периодическое сопоставление по клиентам, например. Некоторым пользователям можно запускать специальное сопоставление по клиентам. со специальными полями в диалоге, которые устанавливает специальное условия в query. Остальные поля - стандартные.

как ? как дать пользователю пользователю? как проверить права?
как обеспечить, чтобы это расширение работало и в пакетных заданиях.

для определенности, давай сформулирую условие на старо-программистком:
= создать класс-потомок от CustVendAutoSettlement_Cust_RU (см. скриншот)
= ovverride метод dialog*
= ovverride метод query
= новый функционал должен работать как в пакетном задании, так и при непосредственном запуске пользователем
= новый функционал должен быть доступен только некоторым пользователям (желательно, чтобы система доступа была построена на стандартных правах аксапты)

=============
говоришь, кто-то указал, что это final класс?
ничего-ничего, на проекте можно [было] убрать это слово.
давай будем считать, что этого слова там нет.
=============


Цитата:
Сообщение от belugin Посмотреть сообщение
И это правильно - у нее четкое предназначение.
И какое же на твой взгляд?
А какое предназначение было у конструкторов, которых не будет?


Цитата:
Сообщение от belugin Посмотреть сообщение
Расскажи чем оно так сильно портит жизнь партнеру?
Макс, легко.
Обещаю, я сделаю это, после того, как ты покажешь как решить типовую задачу на типовом внедрении - как предоставить пользователю возможность запуска расширенного функционала тривиального семейства из 7-8 классов "просто пометив атрибутом".
Изображения
 
__________________
GitHub, Facebook, mazzy.priot, mazzy.music, coub.

Последний раз редактировалось mazzy; 30.05.2017 в 23:01.
Старый 31.05.2017, 00:45   #52  
EVGL is offline
EVGL
Moderator
Лучший по профессии 2014
Соотечественники
 
3,451 / 1891 (70) ++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Исходный вопрос превратился в "как обойтись без overlayering". Да никак, ответ все тот же: "Option 3: Admit that your solution is not feasible in Dynamics 365 for Operations". Поскольку хотя указанный класс и использует форму, которую можно расширить, то сам класс и все методы работы с query объявлены как protected. Game over.

Только на прошлой неделе имел подобный разговор. Архитектор Microsoft глубокомысленно заявлял, что методы ProjControlCalc заявлены как приватные, поскольку знающие разработчики в расчете на развитие системы прозорливо застолбили для себя возможность изменить внутреннюю реализацию и изменить контракт. Толкование хорошее, есть пища на часы телеконференций.

Но мы-то знаем, что на самом деле модуль проектов из маркетинговых соображений отложен на пыльную полку и практически не развивается с 2014 года, а модификаторы методов - это отнюдь не скрижали и не голос из неопалимой купины, а быстрая тяп-ляп работа под конец рабочего дня. С тем же успехом модификаторы можно было расставлять по броску костей, но вдруг 10 лет спустя после написания кода верховный жрец-разработчик узрел их тайный смысл и произнес роковые слова: "ТАБУ!"
Старый 31.05.2017, 01:53   #53  
mazzy is offline
mazzy
Administrator
Аватар для mazzy
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
Most Valuable Professional
 
20,695 / 3296 (151) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Цитата:
Сообщение от EVGL Посмотреть сообщение
Да никак, ответ все тот же: "Option 3: Admit that your solution is not feasible in Dynamics 365 for Operations". Поскольку хотя указанный класс и использует форму, которую можно расширить, то сам класс и все методы работы с query объявлены как protected. Game over.
Ай-ай-яй... Плохая-плохая Аксапта.
Никак не подходит под патентованную технологию. Расст-елять! Неп-еменно расст-елять!
А патентованная технология замечательная. Да-да.

Ну, ничего, в данном случае можете снять мешающие вам final, protected
можете использовать другое семейство классов с несколькими уровнями.

Просто продемонстрируйте проектик с добавленной функциональностью, которую могут использовать пользователи со специальными правами,
в которой используется мощнейшая технология атрибутов и SysExtensionAppClassFactory::getClassFromSysAttribute.

Ведь это ж "просто пометить атрибутом".
__________________
GitHub, Facebook, mazzy.priot, mazzy.music, coub.
Старый 31.05.2017, 10:31   #54  
belugin is offline
belugin
Участник
Аватар для belugin
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
Сотрудники Microsoft Dynamics
 
3,884 / 2004 (74) +++++++++
Регистрация: 16.01.2004
Адрес: Москва
Цитата:
Сообщение от mazzy Посмотреть сообщение
я предлагал? покажи мне это место, пожалуйста.
- "Вызывать класс напрямую - это моветон"
- "Info.add" это вызов класса
=> просто писать info.add это моветон.
Я прошу показать бон тон.

Цитата:
можно на примере расширить периодическое сопоставление по клиентам, например. Некоторым пользователям можно запускать специальное сопоставление по клиентам. со специальными полями в диалоге, которые устанавливает специальное условия в query. Остальные поля - стандартные.

как ? как дать пользователю пользователю? как проверить права?
как обеспечить, чтобы это расширение работало и в пакетных заданиях.
Вариант 1. Унаследоваться и перекрыть необходимые методы. В случае, если проверка прав не проходит, вызывать методы предка. Case при создании заменить на SysExtension.

Вариант 2: Использовать SysIConditionalExtension

Цитата:
говоришь, кто-то указал, что это final класс?
Не говорю - это часть другой дискуссии - запирать код или нет. Это оотогональное решение.

Цитата:
И какое же на твой взгляд?
А какое предназначение было у конструкторов, которых не будет?
1) Выше ссылка на пост Вани о том как использовать конструкторы.
2) Без конструкторов легко как и практически во всех компонентный моделях (метод init - те же самые RunBase получают параметры не из конструктора)
Старый 31.05.2017, 10:31   #55  
Bobkov is offline
Bobkov
Участник
Аватар для Bobkov
 
229 / 285 (10) ++++++
Регистрация: 30.10.2002
Адрес: Moscow
Цитата:
Сообщение от mazzy Посмотреть сообщение
Ключевой вопрос - что и как надо сделать, чтобы приоритеты у архитекторов-разработчиков внутри МС были хотя бы немного похожими на приоритеты потребителей (в данном случае разработчики партнеров и клиентов)...
Как бывший менеджер могу сказать, что наверное надо развить коммуникации между первыми и вторыми. Для этого нужны организационные формы, в рамках которых первые должны будут общаться со вторыми. Желательно чтобы это общение было постоянным и непосредственным. Тогда интересы вторых будут в значительной степени учтены.
В качестве простого наглядного примера, когда-то я как менеджер проекта добивался, чтобы члены проектной группы, которые должны общаться друг с другом, сидели не дальше двух метров друг от друга.
Старый 31.05.2017, 10:50   #56  
belugin is offline
belugin
Участник
Аватар для belugin
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
Сотрудники Microsoft Dynamics
 
3,884 / 2004 (74) +++++++++
Регистрация: 16.01.2004
Адрес: Москва
Цитата:
Сообщение от EVGL Посмотреть сообщение
Господин Белугин, наверное, много может на эту тему написать, ведь ему под это пришлось мою корреспонденцию переделывать, не так ли?
Я бы сказал, что там есть две вещи - с точки зрения программиста-локализатора часть кода стновится ненужна - так как информация о создаваемых проводках вписана во фреймворк, то не надо ее дублировать при помощи vref2log и прочего. То есть корреспонденция корреспондирует все что реализована при помощи subledger - не надо отдельно прописывать корреспонденцию для FTI и для VendInvoice

Есть некоторые претензии к понятности того, что получилось, но они за счет

1) Больших методов в SubjedgerJournalizer
2) Быстродействия и нерасширяемости пакетных insert into (дублирование кода в extensions)
3) Нарушения принципа tell-don't-ask кое где.

Это никак не связано с тем, создавать ли классы при помощи Case или при помощи атрибутов.

Еще API расширений никак не противоречит оверллеерингу - это два ортогональных аспекта. Посмотрите, например на Linux - у программистов есть возможность как пользоваться API так и делать патчи. Большинство пользуется API, но для этого нужен хороший API
Старый 31.05.2017, 11:15   #57  
mazzy is offline
mazzy
Administrator
Аватар для mazzy
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
Most Valuable Professional
 
20,695 / 3296 (151) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Цитата:
Сообщение от belugin Посмотреть сообщение
- "Вызывать класс напрямую - это моветон"
- "Info.add" это вызов класса
=> просто писать info.add это моветон.
Я прошу показать бон тон.
Макс, я в прошлый раз промолчал. Но раз ты настаиваешь...

info.add - это вызов метода класса через глобальную переменную infolog.
в аксапте есть три общеизвестных глобальных предопределенных переменных - infolog, session, appl.
ты точно хочешь продолжать защищать технологию атрибутов именно на этом примере?

если хочешь продолжать, то обрати внимание, что метод info.add по идее должен был бы быть protected + нужно было бы объявлять friend классы (error, warning, info) для доступа к add. но в аксапте нет friend.
Поэтому используется соглашение, что разработчики НЕ вызывают info.add, а должны пользоваться статическими методами Global::error, Global::warning, Global::info.

Поэтому приведенный тобой пример предельно НЕ типичен для обычной работы обычных людей...

Макс, я повторю вопрос - ты точно настаиваешь на этом примере в качестве обоснования технологи атрибутов?

=====================
А бон тон очень просто - класс, у которого есть статический метод main с арзументом Agrs. для такого класса должен быть создан menuItem. вызвать класс через стандартную конструкцию
new MenuFunction(menuitemDisplayStr(myMenuItem), MenuItemType::Display).run(args)

К сожалению, среди разработчиков МС не принято беспокоится о правах доступа, поэтому часто вызывают класс напрямую через конструктор + run. Этот способ не назвать бон тоном, но по факту игнорировать этот способ нельзя - нужно думать о нем и поддерживать его тоже.

Цитата:
Сообщение от belugin Посмотреть сообщение
Вариант 1. Унаследоваться и перекрыть необходимые методы. В случае, если проверка прав не проходит, вызывать методы предка. Case при создании заменить на SysExtension.

Вариант 2: Использовать SysIConditionalExtension
Макс, а можно проектик? Все участники тебе спасибо скажут. Особенно те, кто интересуется акс7, но у них еще нет возможности попробовать аксапту вживую.

Ты же сам сказал, что это "просто проставить атрибуты"


Цитата:
Сообщение от belugin Посмотреть сообщение
Не говорю - это часть другой дискуссии - запирать код или нет. Это оотогональное решение.
Согласен. Поэтому никаких ограничений на final и protected - да, их придется учитывать разработчикам на клиенте и заказчике. Но, согласен, это отдельная ветка обсуждения. Поэтому в этой ветке пропускаем.


Цитата:
Сообщение от belugin Посмотреть сообщение
1) Выше ссылка на пост Вани о том как использовать конструкторы.
2) Без конструкторов легко как и практически во всех компонентный моделях (метод init - те же самые RunBase получают параметры не из конструктора)
Мы все читать умеем. И все про конструкторы прочитали. С момента выхода статьи прошло несколько лет, поэтому время было.

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

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

Нет, Макс, это не одно и то же.
Нет, участники, это не придирка с словам и правописанию.

Итак, формулировка:
Цитата:
Сообщение от mazzy Посмотреть сообщение
Просто продемонстрируйте проектик с добавленной функциональностью, которую могут использовать пользователи со специальными правами,
в которой используется мощнейшая технология атрибутов и SysExtensionAppClassFactory::getClassFromSysAttribute.

Ведь это ж "просто пометить атрибутом".
__________________
GitHub, Facebook, mazzy.priot, mazzy.music, coub.

Последний раз редактировалось mazzy; 31.05.2017 в 11:28.
Старый 31.05.2017, 15:08   #58  
ax_mct is offline
ax_mct
Участник
Аватар для ax_mct
 
1,570 / 506 (20) +++++++
Регистрация: 10.10.2005
Адрес: PHP
Цитата:
Сообщение от mazzy Посмотреть сообщение
Мы все читать умеем. И все про конструкторы прочитали. С момента выхода статьи прошло несколько лет, поэтому время было.

Обрати внимание, что во всех статьях на эту тему рассматривается плоское одноуровневое наследование, а я спрашиваю про иерархию классов.
Приведенная ссылка
http://kashperuk.blogspot.co.uk/2017...extension.html
является статьей двухмесячной давности.

Основная описанная проблема - игнорирование аргументов с dictClass.makeObject().
SysExtension framework will instantiate a new instance of the corresponding class (dictClass.makeObject()), which ignores the constructor arguments.


Предложенное решение - передавать обьект третьим параметром.
In order to account for the constructor arguments we need to use an Instantiation strategy, which can then be passed in as the 3rd argument when calling SysExtensionAppClassFactory.

Если посмотреть на сигнатуру SysExtensionAppClassFactory::getClassFromSysAttribute
https://msdn.microsoft.com/en-us/lib...attribute.aspx
то этот третий параметр существует как
[SysExtAppClassDefaultInstantiation _defaultInstantiation])
Если проблема работы с многоуровневой иерархией решается то решается она через class SysExtAppClassDefaultInstantiation implements SysExtensionIInstantiationStrategy

И вот эта самая Instantiation Strategy как-то и призвана решить все проблемы.

X++:
public class BaseClassWithArgInConstructor
{
    //...
    public static BaseClassWithArgInConstructor construct(NoYesUnchanged _factoryType, str _argument)
    {
        NoYesUnchangedFactoryAttribute attr = new NoYesUnchangedFactoryAttribute(_factoryType);
        BaseClassWithArgInConstructor instance = SysExtensionAppClassFactory::getClassFromSysAttribute(
            classStr(BaseClassWithArgInConstructor), attr, [B]InstantiationStrategyForClassWithArg::construct(_argument)[/B]);
 
        return instance;
    }
}.
Старый 31.05.2017, 15:45   #59  
mazzy is offline
mazzy
Administrator
Аватар для mazzy
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
Most Valuable Professional
 
20,695 / 3296 (151) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Цитата:
Сообщение от ax_mct Посмотреть сообщение
Приведенная ссылка
http://kashperuk.blogspot.co.uk/2017...extension.html
является статьей двухмесячной давности.
Да. Приведенная по ссылке статья является статьей двухмесячной давности.
Извините.

Цитата:
Сообщение от ax_mct Посмотреть сообщение
Если проблема работы с многоуровневой иерархией решается то решается она через class SysExtAppClassDefaultInstantiation implements SysExtensionIInstantiationStrategy
Ребяты, вы опять и снова пытаетесь тыкамть меня носом в то, что это работает.
Ок. Верю.

Вы утверждаете что "просто". Ок. Можно проектик?
__________________
GitHub, Facebook, mazzy.priot, mazzy.music, coub.
Старый 31.05.2017, 16:03   #60  
mazzy is offline
mazzy
Administrator
Аватар для mazzy
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
Most Valuable Professional
 
20,695 / 3296 (151) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
например, вот такой проектик.
собрал на коленке по-старому пока билдится этот ритейл, блин.

заодно узнал, что новая аксапта пиливать хотела на параметры menuItem, если menuItem сделать стартовым объектом. пришлось сделать класс starterJob.

С другой стороны, показал, как запускать через menuItem ))))

==============================
состав проекта:
С starterJob и объекты суффиксом MST - новые.
остальные переопределенные

думаю, тем у кого нет акс7, скриншотов хватит.
чтобы увидеть исходные тексты без аксапты, скачайте aa.axpp, измените расширение на .zip и посмотрите в содержимое.

==============================
Disclimer:
проектик безумен ровно настолько, насколько безумен исходный текст семейства классов.
У нормальных людей есть нормальные обвязки для args, параметров, запускачей и прочее.
но и такие безумные поделки приходится развивать-поддерживать на проектах.
Миниатюры
Нажмите на изображение для увеличения
Название: 02.PNG
Просмотров: 39
Размер:	46.1 Кб
ID:	11449   Нажмите на изображение для увеличения
Название: 03.PNG
Просмотров: 44
Размер:	108.8 Кб
ID:	11450  

Нажмите на изображение для увеличения
Название: 04.PNG
Просмотров: 33
Размер:	131.8 Кб
ID:	11451   Нажмите на изображение для увеличения
Название: 05.PNG
Просмотров: 25
Размер:	20.8 Кб
ID:	11452  

Нажмите на изображение для увеличения
Название: 11.PNG
Просмотров: 19
Размер:	41.7 Кб
ID:	11453   Нажмите на изображение для увеличения
Название: 12.PNG
Просмотров: 19
Размер:	39.8 Кб
ID:	11454  

Нажмите на изображение для увеличения
Название: 99.PNG
Просмотров: 23
Размер:	9.9 Кб
ID:	11455  
Изображения
 
Вложения
Тип файла: axpp aa.axpp (9.1 Кб, 6 просмотров)
__________________
GitHub, Facebook, mazzy.priot, mazzy.music, coub.

Последний раз редактировалось mazzy; 31.05.2017 в 16:07.
За это сообщение автора поблагодарили: sukhanchik (4).
Теги
sysextension framework, sysoperation framework, как правильно, полезное

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
stephenmann: Technical History of Dynamics AX - From Axapta 3.0 to AX2012 Blog bot DAX Blogs 5 03.03.2017 10:22
dynamicsax-fico: Invoice search AX2012 vs. AX7 (Part 2) Blog bot DAX Blogs 0 01.04.2016 10:11
DAX2009 аналог friend классов. Как сделать? Raven Melancholic DAX: Программирование 9 07.11.2015 23:50
emeadaxsupport: Inventory closing differences between AX4.0 and AX2012 using weighted average costing method Blog bot DAX Blogs 0 27.12.2012 19:11
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 03:44.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.