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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 30.05.2017, 00:28   #1  
ta_and is offline
ta_and
Участник
 
226 / 122 (5) +++++
Регистрация: 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
Спасибо. Очень дельная статья. Ответ на мой третий вопрос.
Старый 29.05.2017, 20:36   #2  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
спасибо )

Что мог бы сделать вендор: Extension Methods.

c# https://docs.microsoft.com/en-us/dot...ension-methods
Котлин https://kotlinlang.org/docs/reference/extensions.html

Вот это был бы настоящий и очень хороший extension.
Но вендор решил иначе.
__________________
полезное на axForum, github, vk, coub.

Последний раз редактировалось mazzy; 29.05.2017 в 21:46.
Старый 29.05.2017, 21:50   #3  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Extension methods есть в Ax7 и они тут ни при чем. Это просто синтаксический сахар для вызова статических методов. Есть даже подобие companion objects в котлине

Последний раз редактировалось belugin; 29.05.2017 в 21:55.
Старый 29.05.2017, 22:02   #4  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
именно!
синтаксический сахар.
именно для вызова статических методов.

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

Цитата:
Сообщение от belugin Посмотреть сообщение
и они тут ни при чем.
?!

как скажешь. бог с тобой.
__________________
полезное на axForum, github, vk, coub.
Старый 29.05.2017, 22:16   #5  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от mazzy Посмотреть сообщение
я имел в виду "мог бы сделать Extension Methods вместо атрибутов для создания экземпляров классов".
Они никак не помогут в деле создания extensions - куда вставлять их вызов
Старый 29.05.2017, 22:30   #6  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Вместо безумной конструкции
SysExtensionAppClassFactory::getClassFromSysAttribute

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

Насыпать сахара, который предоставлял бы дефолтное поведение по-умолчанию.

Да много чего можно было бы сделать. И для этого не нужен был жесткий алгоритм, задействующий рефлекшен.
__________________
полезное на axForum, github, vk, coub.

Последний раз редактировалось mazzy; 29.05.2017 в 22:36.
Старый 30.05.2017, 09:17   #7  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от mazzy Посмотреть сообщение
Вместо отдельно стоящих атрибутов и системного класса с принудительно-общей логикой дать возможность создавать свои фабрики. Продумать унификацию с экстеншенами форм и менюитемами. При этом не забыв о правах.
Так экстеншены классов-то тут не причем (в том смысле, в котором экстендятся формы) - тут новые классы создаются, а не экстендятся старые.

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

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

Цитата:
Да много чего можно было бы сделать. И для этого не нужен был жесткий алгоритм, задействующий рефлекшен.
Дык фреймворк добавить проще чем менять компилятор. Я просто не вижу чтобы тут был какая-то большая проблема
Старый 30.05.2017, 10:02   #8  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от belugin Посмотреть сообщение
Так экстеншены классов-то тут не причем (в том смысле, в котором экстендятся формы) - тут новые классы создаются, а не экстендятся старые.
ох, похоже, надо выделять в новую тему и рисовать схему...

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

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

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

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

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

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


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

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

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

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

Извините за дикий оффтопик.
__________________
полезное на axForum, github, vk, coub.

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

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

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

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

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

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

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

Цитата:
Сообщение от belugin Посмотреть сообщение
Я вообще не понимаю почему добавление атрибута на класс вместо того, чтобы добавить case куда-то внутрь метода вызывает какие-то проблемы? Единственное, что я вижу - это то, что просто сначала непривычно.
Да-да.
Макс, ты не переживай. Не ты один не видишь, к сожалению. Просто ты работаешь не так, как работают на проектах. И потребности, и приоритеты у тебя другие.
__________________
полезное на axForum, github, vk, coub.
Старый 31.05.2017, 10:31   #11  
Bobkov is offline
Bobkov
Участник
Аватар для Bobkov
 
238 / 299 (10) ++++++
Регистрация: 30.10.2002
Адрес: München
Цитата:
Сообщение от mazzy Посмотреть сообщение
Ключевой вопрос - что и как надо сделать, чтобы приоритеты у архитекторов-разработчиков внутри МС были хотя бы немного похожими на приоритеты потребителей (в данном случае разработчики партнеров и клиентов)...
Как бывший менеджер могу сказать, что наверное надо развить коммуникации между первыми и вторыми. Для этого нужны организационные формы, в рамках которых первые должны будут общаться со вторыми. Желательно чтобы это общение было постоянным и непосредственным. Тогда интересы вторых будут в значительной степени учтены.
В качестве простого наглядного примера, когда-то я как менеджер проекта добивался, чтобы члены проектной группы, которые должны общаться друг с другом, сидели не дальше двух метров друг от друга.
Старый 01.06.2017, 00:32   #12  
skuull is offline
skuull
Участник
Most Valuable Professional
Лучший по профессии 2014
 
699 / 752 (27) +++++++
Регистрация: 08.03.2013
Адрес: ХЗ
Цитата:
Сообщение от mazzy Посмотреть сообщение
какая потребность есть у людей в Аксапте:
= изменить или добавить функционал, который могут использовать пользователи
== пользователи работают с функционалом через menuItem
== menuItem вызывает классы через статический метод main (menuItem также используются для вызова форм)
== права доступа к функционалу Аксапты настраивается через menuItem

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

что делает МС, чтобы удовлетворить потребность людей?
никакого сахара для работы с инфраструктурой аксапты
минимализм и совершенно перпендикулярная остальной инфраструктуре технология атрибутов
Есть частные случаи когда МС о нас подумала (ну или так случайно вышло), вот конкретный пример.
Есть станадртный класс BankDepositSlip у которого нет наследников но он помечен
X++:
[Microsoft.Dynamics.AX.Platform.Extensibility.ExportInterfaceAttribute,
System.ComponentModel.Composition.ExportMetadataAttribute('BankCreateDepositSlip', 'BankDepositSlip'),
System.ComponentModel.Composition.ExportAttribute('Dynamics.AX.Application.BankDepositSlip')]
В main берется parm() из menuItem'а
X++:
public static void main(Args args)
    {
        BankDepositSlip instance;

        if (args && args.record())
        {
            instance = BankDepositSlip::construct(args.record(), args.parm());

            if (instance.prompt())
            {
                instance.runOperation();
            }
        }
    }

 protected static BankDepositSlip construct(LedgerJournalTrans _ledgerJournalTrans, str _variationName = 'BankDepositSlip')
    {
        BankDepositSlip instance;

        SysPluginMetadataCollection meta = new SysPluginMetadataCollection();
        meta.SetManagedValue('BankCreateDepositSlip', _variationName);
        instance = SysPluginFactory::Instance('Dynamics.AX.Application', classstr(BankDepositSlip), meta);
        
        Debug::assert(instance != null);

        instance.initInstance(_ledgerJournalTrans);

        return instance;
    }
И чтобы расширить это мне было достаточно
а) создать наследник пометив его другим атрибутом
б) создать новый menuItem с новым параметром.
Не все так плохо как хотелось бы
За это сообщение автора поблагодарили: mazzy (2), sukhanchik (4), Ace of Database (2).
Старый 01.06.2017, 08:39   #13  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от belugin Посмотреть сообщение
В том что ты сделал: если задать сочетание Vend и MST это правильно что он молча это понимает и не ругается?
как я уже писал - этот проектик безумен настолько, насколько безумен исходный код, поставляемый майкрософтом.

да, можно передавать строковый тег.
но обычно стратегия определяется не menuItem, а datasource: если стоим на одной записи, то делаем одно, если на другой, то делаем другое, если вызываем из другой таблицы, то третье и так далее. а в менюИтемах задаются режимы обработки.

Цитата:
Сообщение от belugin Посмотреть сообщение
Если допустимо, чтобы он ругался на такое сочетание. То для расширения черех SysExt надо пометить атрибутом новый класс.
да. это было понятно.

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

да, в platform update 7 они таки сделали.
  • new с параметрами
  • атрибут помечается строкой с разделителем ";", а не enum
  • в строке - позиционная запись параметров
  • в строке никаких дефолтных значений
  • в строке нет экранирующих символов чтобы экранировать ; в параметрах
  • никакого синтаксического сахара
  • строка похоже тупо проверяется на равенство - никаких регулярок, никаких критериев типа *?, никаких подстановок, никаких сравнений json-xml-структур.

Но:
= никакой параллельности или асинхронности в фреймворке не предполагается
= за уникальностью ключа должен следить сам программист
= ключ - строка, с позиционными значениями (почему не аксаптовский контейнер, не xml, не json, не другой сериализуемый объект? почему не использовать имя класса в качестве ключа?)
= вся стратегия определения ключа должна находится в одном месте - попытка сделать делегирование принятия решения о ключе приводит к возвращению к иерерхии конструкторов, только в отдельном классе.

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

А весь конструктор должен быть в одном методе. Со всеми пересечениями кода. Та-дам!

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

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

насколько эта байда проще-легче, чем просто код конструкторов?

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


Цитата:
Сообщение от belugin Посмотреть сообщение
Снести все фабричные методы заменив на вызов фреймворка
вот-вот! именно!

Цитата:
Сообщение от belugin Посмотреть сообщение
Можно завтра в обед попробовать вместе это сделать
можно. спасибо. только у нас щас должен быть engineering complete.
боюсь, что на этой неделе я только урывками во время компиляции.

но тема - интересная.
в идеале нужен проект на семействе классов с иерархией.

Цитата:
Сообщение от skuull Посмотреть сообщение
вот конкретный пример.
спасибо.

Цитата:
Сообщение от skuull Посмотреть сообщение
И чтобы расширить это мне было достаточно
а) создать наследник пометив его другим атрибутом
б) создать новый menuItem с новым параметром.
Не все так плохо как хотелось бы
нет, конечно ))))))

подумайте еще.
для дальнейшего предметного обсуждения:
1. выберите пример с иерархическим семейством, а не плоским.
2. подумайте что будет, если в эту иерархию добавляет новые классы не один программист, а хотя бы два независимых программиста.
3. подумайте как предоставить эту расширенную функциональность пользователями.

и главное: а чем получившаяся конструкция по сути отличается от старых добрых конструкторов? (не считая дополнительной трудоемкости и отвалившихся перекрестных ссылок, конечно)
__________________
полезное на axForum, github, vk, coub.

Последний раз редактировалось mazzy; 01.06.2017 в 09:01.
Старый 30.05.2017, 13:27   #14  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Switch - это что, тоже технология? Вам нравится использовать эту технологию? Если нет, то почему?

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

И вообще, читайте первоисточники: http://patents.justia.com/patent/9026989.
Михаэль Галль и Михаель Понтоппидан зарегистрировали патент, завидуйте, придумывайте как сделать лучше и регистрируйте свои патенты.
За это сообщение автора поблагодарили: mazzy (2), ax_mct (10).
Старый 30.05.2017, 14:40   #15  
ax_mct is offline
ax_mct
Banned
 
2,548 / 1091 (0) ++++++++
Регистрация: 10.10.2005
Адрес: Westlands
Цитата:
Сообщение от 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   #16  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 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   #17  
ax_mct is offline
ax_mct
Banned
 
2,548 / 1091 (0) ++++++++
Регистрация: 10.10.2005
Адрес: Westlands
Цитата:
Сообщение от EVGL Посмотреть сообщение

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

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

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

Сорри за оффтоп. Пока непонятно тема это или нет.
Старый 31.05.2017, 10:50   #18  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от 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, 00:45   #19  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 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   #20  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от EVGL Посмотреть сообщение
Да никак, ответ все тот же: "Option 3: Admit that your solution is not feasible in Dynamics 365 for Operations". Поскольку хотя указанный класс и использует форму, которую можно расширить, то сам класс и все методы работы с query объявлены как protected. Game over.
Ай-ай-яй... Плохая-плохая Аксапта.
Никак не подходит под патентованную технологию. Расст-елять! Неп-еменно расст-елять!
А патентованная технология замечательная. Да-да.

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

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

Ведь это ж "просто пометить атрибутом".
__________________
полезное на axForum, github, vk, coub.
Теги
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:19.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.