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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 10.06.2021, 11:39   #1  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Как стандартный ListEnumerator получает ссылку на список?
Эпиграф:
Какой он, этот Слонопотам?
Неужели очень злой?
Идет ли он на свист? И если идет, то з а ч е м ?..
Любит ли он поросят или нет?
И к а к он их любит?..

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

Бедный Пятачок не знал, как ответить на все эти вопросы. А ведь ему через какой-нибудь час предстояло впервые в жизни встретиться с настоящим Слонопотамом!
щас глупую весч спрошу.

Как стандартный ListEnumerator получает ссылку на список?

сейчас единственный способ создать экземпляр класса ListEnumerator - это вызвать метод list.getEnumerator()

ну, ок. пусть будет единственный.

я так понимаю что метод list.getEnumerator()
внутри создает экземпляр класса ListEnumerator
и каким-то образом передает ссылку на енумерируемый список.

А как он передает? каким методом? можно ли этот скрытый метод вызвать из x++?

X++:
    List list = new list(Types::String)
    ListEnumerator le = list.getEnumerator();

    while( le && le.moveNext() )
    {
        this.addEnd(le.current());
    }
см. также:
А вот как заимплементить Enumerator
MapsIterator
__________________
полезное на axForum, github, vk, coub.
За это сообщение автора поблагодарили: belugin (5).
Старый 10.06.2021, 12:03   #2  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Не знаю возможно ли как-то private метод класса ядра аксапты вызвать из X++
В любом случае не стоит это делать, так как в другом билде все может поломаться.

А зачем вообще это ?
Какая проблема изначально стоит ?
Старый 10.06.2021, 12:17   #3  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Logger Посмотреть сообщение
то private метод класса ядра аксапты вызвать из X++
а какой это метод?

Цитата:
Сообщение от Logger Посмотреть сообщение
А зачем вообще это ?
Какая проблема изначально стоит ?
проблема? проблем нет. как нет никаких вопросов как реализовать. уже реализовано.
мне интересно как это работает. поэтому я задаю вопрос на форуме специалистов.

задача - сделать свой энумератор, конечно. с блекджеком и фильтрами.


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

есть желание обсуждать - создавайте отдельную ветку и обсуждайте на здоровье.

в этой ветке вопрос:
Как стандартный ListEnumerator получает ссылку на список?
__________________
полезное на axForum, github, vk, coub.

Последний раз редактировалось mazzy; 10.06.2021 в 12:21.
Старый 10.06.2021, 12:40   #4  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
В 365 у него internal конструктор.

internal ListEnumerator(List sourceList)
За это сообщение автора поблагодарили: mazzy (5).
Старый 10.06.2021, 13:14   #5  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от belugin Посмотреть сообщение
В 365 у него internal конструктор.

internal ListEnumerator(List sourceList)
все таки конструктор, а не property с set-get методами...
спасибо.

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

не совсем точное воспроизведение стихотворения «Трусость» японской поэтессы Акико Ёсано (1878—1942) в переводе Веры Марковой
https://ru.wikipedia.org/wiki/%D0%97...B5%D1%82%D0%B0
__________________
полезное на axForum, github, vk, coub.
Старый 10.06.2021, 14:11   #7  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Папа, не лазай в розетку. Это дети говорят. Уже пробовали.
Старый 10.06.2021, 14:34   #8  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от mazzy Посмотреть сообщение
а как в классических аксаптах?
Там C++, который, наружу в X++ не выставляется. Очень грубо говоря похоже на OleAutomation (IDispatch)
За это сообщение автора поблагодарили: mazzy (5).
Старый 11.06.2021, 18:34   #9  
Lemming is offline
Lemming
Участник
Аватар для Lemming
 
1,144 / 343 (14) ++++++
Регистрация: 20.04.2004
Адрес: Москва, Чайнатаун в Люблино
Записей в блоге: 10
!
2005 год, mazzy предлагает внедрять аксапту без программирования, 2015 год, mazzy поработал в Microsoft, 2021 год, mazzy собирается делать в аксапте коллекции, которые не уступают стандартным! Я что-то упустил?

По теме: в баню как там оно в стандарте, потому что код размазан и большей частью скрыт, если хочется сделать свой Enumaretor то надо измерить скорость доступа к базовым коллекциям: Array и Container. Последний наверное медленней, потому что по сути им Damgaard изобрели JSON за долго до веб-революции, так как контейнер - это строка и на сериализацию и обратно уходит какое-то время.

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

1.
2005 - Майкрософт поддерживает и развивает Аксапту
2021 - Майкрософт НЕ поддерживает и НЕ развивает классические Аксапты, для которых...

2.
...mazzy уже давно делает энумераторы (не коллекции!!!!), которые...

3.
...значительно превосходят стандартные!

------------

И еще. На меня очень сильно повлиял вовсе не Microsoft, а работа в команде Ивана Захарова, особенно с db.
Ребяты, очень вам признателен.

------------
Цитата:
Сообщение от Lemming Посмотреть сообщение
скорость доступа к базовым коллекциям: Array и Container. Последний наверное медленней, потому что по сути им Damgaard изобрели JSON за долго до веб-революции, так как контейнер - это строка и на сериализацию и обратно уходит какое-то время.
угу. огромное время

Цитата:
Сообщение от Lemming Посмотреть сообщение
Моя идея такая, что нужно вычислить максимальную скорость работы самых базовых примитивов и на этом писать свой Enumerator с фильтрами, куртизанками, Илоном Маском и Рогозиным
уже вычислено - душераздирающее зрелище (С) Ослик Иа-Иа

я все больше склоняюсь к X++оберткам вокруг .net-овских классов. (особенно в части regexp...)

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

в стандарте слишком много сил положено на передачу данных между клиентом и сервером. запутали до невозможности.

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

Последний раз редактировалось mazzy; 11.06.2021 в 19:20.
За это сообщение автора поблагодарили: sukhanchik (5).
Старый 12.06.2021, 11:58   #11  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Позволю себе один комментарий: 2021-2012 = 9.
С другой стороны, это не предел. Сейчас сносим систему в Бразилии, "возраст" которой превосходит мой биологический. То есть лет 30 еще есть у AX 2012

Последний раз редактировалось EVGL; 12.06.2021 в 12:01.
За это сообщение автора поблагодарили: trud (1).
Старый 12.06.2021, 16:01   #12  
trud is offline
trud
Участник
Лучший по профессии 2017
 
1,039 / 1633 (57) ++++++++
Регистрация: 07.06.2003
Записей в блоге: 1
Цитата:
Сообщение от mazzy Посмотреть сообщение
задача - сделать свой энумератор, конечно. с блекджеком и фильтрами.
Такая фукнциональность уже есть, называется временные таблицы
Старый 12.06.2021, 16:18   #13  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от trud Посмотреть сообщение
Такая фукнциональность уже есть, называется временные таблицы
и ты, trud?!
ты тоже путаешь энумераторы с коллекциями?!
__________________
полезное на axForum, github, vk, coub.
Старый 14.06.2021, 07:23   #14  
trud is offline
trud
Участник
Лучший по профессии 2017
 
1,039 / 1633 (57) ++++++++
Регистрация: 07.06.2003
Записей в блоге: 1
И я
Но как бы не стоит забывать, что в языке же есть встроенная конструкция while select, и довольно странно ее не использовать. Я так понимаю в текущих тренингах по X++ Микрософт не включает работу со временными таблицами в список тем, и в последних версиях можно наблюдать как их разработчики пытаются использовать List и ListEnumerator и подобные классы, думаю изрядно чертыхаясь при этом(я согласен что классы эти максимально неудобны). Но по идее временная таблица даст тебе максимальную гибкость и простоту в таких запросах(есть также мнение что производительность не максимальна, но это совсем пограничные случаи)

Последний раз редактировалось trud; 14.06.2021 в 07:33.
Старый 14.06.2021, 14:32   #15  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от trud Посмотреть сообщение
И я
Жаль, очень жаль...

Цитата:
Сообщение от trud Посмотреть сообщение
Но как бы не стоит забывать, что в языке же есть встроенная конструкция while select, и довольно странно ее не использовать.
Дык, не забывай. И используй.

вот энумератор: https://github.com/mazzy-ax/SysEnume...tor_Record.xpp
обрати внимание на метод next, в котором используется оператор next.

из моего неопубликованного:
Нажмите на изображение для увеличения
Название: Capture.PNG
Просмотров: 30
Размер:	106.1 Кб
ID:	13188

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


Цитата:
Сообщение от trud Посмотреть сообщение
Я так понимаю в текущих тренингах по X++ Микрософт не включает работу со временными таблицами в список тем, и в последних версиях можно наблюдать как их разработчики пытаются использовать List и ListEnumerator и подобные классы, думаю изрядно чертыхаясь при этом(я согласен что классы эти максимально неудобны). Но по идее временная таблица даст тебе максимальную гибкость и простоту в таких запросах(есть также мнение что производительность не максимальна, но это совсем пограничные случаи)
майкрософт не разобрался с виртуальными компаниями - прибил
майкрософт не разобрался со своими же наследуемыми таблицами
майкрософт не разобрался со своим же timevalidation в таблицах
майкрософт не разобрался со своими же dataEntity
мало ли с чем не разобрался майкрософт...

согласен, что просто перекладывать while select в list - верх маразма.

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

------------

думается мне, что ты сильно сужаешь тему стандартного энумератора.

и уж точно уводишь в сторону от изначальной темы:
Как стандартный ListEnumerator получает ссылку на список?
__________________
полезное на axForum, github, vk, coub.
Старый 15.06.2021, 19:25   #16  
vmoskalenko is offline
vmoskalenko
Участник
Аватар для vmoskalenko
 
145 / 334 (12) ++++++
Регистрация: 25.01.2007
Адрес: Toronto
Ой... когда-то давно я делал замеры производительности в AX2012:
  • Array
  • Container
  • List
  • Map
  • Set
  • Table in memory (Client)
  • Table in memory (Server)

К письму прикладываю XPO и Excel с результатами замеров.
По вертикали время выполнения, по горизонтали - кол-во записей.



Вобщем самый быстрий на операции Поиска и удаления - Array.
Второе и Третье место - Map & Set

С приемлемым результатом выступил Container.

А вот Table in Memory - оказались самые тормознутые.
List тоже там затисался, но там что-то было реализовано в виде цикла - потому и такой результат.
Миниатюры
Нажмите на изображение для увеличения
Название: perf_SearchAndDelete.jpg
Просмотров: 195
Размер:	95.3 Кб
ID:	13191  
Вложения
Тип файла: xlsx inMemoryDataStructure_searchAndDelete.xlsx (25.8 Кб, 31 просмотров)
Тип файла: xpo SharedProject_CEL_PerfTest.xpo (84.1 Кб, 46 просмотров)
За это сообщение автора поблагодарили: AlGol (4), EVGL (5), Lemming (5), Stitch_MS (5), Dynamics365Eng (1).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
D365 как получить список всех меточных файлов swr DAX: Программирование 1 10.08.2020 10:45
список объектов из перекрестных ссылок jeky DAX: Программирование 2 01.11.2018 13:37
Как работает список рассылки? fialka DAX: Функционал 2 26.06.2008 09:15
Сергей Герасимов: Майкрософт ежемесячно публикует список исправленных ошибок Blog bot DAX Blogs 1 16.01.2007 11:52
Список полей таблиц на базе конкретного EDT Владимир Максимов DAX: Программирование 10 06.10.2004 14:45
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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