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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 09.08.2017, 21:16   #1  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Как правильно получить элементы AOT заданной модели? В X++? В SQL? в акс2012? в акс7? А extension?
Начал разбираться с вопросом и слегка прифигел от разнообразия программных велосипедов.

Фиг с ним, что нет напрашивающегося класса DictModel.
я также не нашел методов выход на на модель из treenode...

Как правильно получить элементы AOT заданной модели?

В X++? В SQL?
в акс2012? в акс7?
как получить отдельно Extension-объекты, отдельно основные объекты модели?
__________________
полезное на axForum, github, vk, coub.
Старый 09.08.2017, 21:56   #2  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,325 / 3548 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
AX 2012: См метод WHSParameters::version().
Суть: У класса Treenode есть метод (нестатический) AOTGetModel(), возвращающий ID модели.
ID модели преобразуется в DisplayName через получение и распарсивание XML-ки, которую сгенерит метод SysModelStore::getModelManifest(modelId)

D365: С ходу не нашел. У TreeNode метод AOTGetModel() еще остался, но я не уверен в его использовании в коде. Класса SysModelStore нет, но есть класс SysModelMetaData из методов которого неочевидно - могут ли они по ID модели получить название.
__________________
Возможно сделать все. Вопрос времени
За это сообщение автора поблагодарили: mazzy (2).
Старый 09.08.2017, 22:12   #3  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
У TreeNode метод AOTGetModel() еще остался, но я не уверен в его использовании в коде.
точно! есть. проморгал.
точно! не используется.

Цитата:
Сообщение от sukhanchik Посмотреть сообщение
Класса SysModelStore нет
Точно! этого класса в акс7 нет. а акс6 у меня сейчас под рукой нет.


Цитата:
Сообщение от sukhanchik Посмотреть сообщение
но есть класс SysModelMetaData из методов которого неочевидно - могут ли они по ID модели получить название.
о... этот класс - отдельная пестня.
я не хотел с начинать ветку с матюков.
поэтому решил спросить - может я чего не понимаю.
предлагаю оставить обсуждение этого класса в конец. или в отдельную ветку.

может будет таки что-то конструктивное?
__________________
полезное на axForum, github, vk, coub.

Последний раз редактировалось mazzy; 09.08.2017 в 22:16.
Старый 09.08.2017, 22:33   #4  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от mazzy Посмотреть сообщение
о... этот класс - отдельная пестня.
Посмотрел еще раз внутрь.
1. класс SysModelMetaData - это модель всего AOT, без учета моделей (вот такая фигня, маляты)
2. я вспомнил, что эти редиски (нехорошие люди) программно генерируют метод init и вызывают его только из метода main. но не "смогли" выполнить генерацию из new. кто бы сомневался! *мат-поскипан*. выбрали, блин, универсальный метод-билдер... *мат-поскипан*

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

а пока вопрос:
Как правильно получить элементы AOT заданной модели? В X++? В SQL? в акс2012? в акс7? А extension?
__________________
полезное на axForum, github, vk, coub.
Старый 09.08.2017, 22:39   #5  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,325 / 3548 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
А вопрос по AX 2012 не снялся?
__________________
Возможно сделать все. Вопрос времени
Старый 09.08.2017, 23:06   #6  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
А вопрос по AX 2012 не снялся?
как бы тебе сказать...

ты ответил как можно сделать в принципе.
я спрашивал "Как правильно". Я не уверен, что "распарсивание XML-ки" это правильный подход.
)

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

но сам вопрос "как правильно" обсудить вполне можно. я так считаю.
__________________
полезное на axForum, github, vk, coub.
Старый 09.08.2017, 23:32   #7  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Для примера что я хочу получить:
Изображения
 
__________________
полезное на axForum, github, vk, coub.
Старый 10.08.2017, 02:34   #8  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
AOTGetModel(), возвращающий ID модели.
В общем, фиг. в моем инстансе для всех таблиц возвращает 15.
__________________
полезное на axForum, github, vk, coub.
Старый 10.08.2017, 08:44   #9  
trud is offline
trud
Участник
Лучший по профессии 2017
 
1,039 / 1633 (57) ++++++++
Регистрация: 07.06.2003
Записей в блоге: 1
Цитата:
Сообщение от mazzy Посмотреть сообщение
Для примера что я хочу получить:
а если просто файлы в директории посмотреть? или это не то
Старый 10.08.2017, 09:31   #10  
KiselevSA is offline
KiselevSA
Злыдни
Аватар для KiselevSA
Злыдни
Лучший по профессии 2015
 
958 / 333 (13) ++++++
Регистрация: 25.01.2002
Адрес: Москва
А в 7-ке функция сборки в проект всех объектов одной модели осталась (Сервис / Управление моделью / Создать проект на основе модели, класс SysModelCreateProject)?
__________________
люди...считают, что если техника не ломается, то ее не нужно ремонтировать. Инженеры считают, что если она не ломается, то нуждается в совершенствовании.
Старый 10.08.2017, 10:04   #11  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от trud Посмотреть сообщение
а если просто файлы в директории посмотреть? или это не то
не, не то.
в директориях могут быть просто файлы.
и модули, не инсталированные в аксапту.
"замучаешься пыль глотать"

Цитата:
Сообщение от KiselevSA Посмотреть сообщение
А в 7-ке функция сборки в проект всех объектов одной модели осталась (Сервис / Управление моделью / Создать проект на основе модели, класс SysModelCreateProject)?
тут дело такое...
в акс7 код редактируется в Visual Studio.
Аксаптовские вещи в VS сделаны через аддоны. Фреймворк аддонов ооочень сильно отличается от кода и окружения, которое "живет" в аксапте.
__________________
полезное на axForum, github, vk, coub.
Старый 10.08.2017, 10:06   #12  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
X++:
private Microsoft.Dynamics.AX.Metadata.Providers.IMetadataProvider getMetadataProvider()
    {
        var environment = Microsoft.Dynamics.ApplicationPlatform.Environment.EnvironmentFactory::GetApplicationEnvironment();
        Microsoft.Dynamics.AX.Metadata.Storage.Runtime.RuntimeProviderConfiguration runtimeProviderConfiguration = new Microsoft.Dynamics.AX.Metadata.Storage.Runtime.RuntimeProviderConfiguration(environment.get_Aos().get_PackageDirectory());
        Microsoft.Dynamics.AX.Metadata.Storage.MetadataProviderFactory metadataProvicerFactory =  new Microsoft.Dynamics.AX.Metadata.Storage.MetadataProviderFactory();
        return metadataProvicerFactory.CreateRuntimeProvider(runtimeProviderConfiguration);
    }

...

MetadataProvider.Classes.ListObjectsForModel(ModelName)
За это сообщение автора поблагодарили: mazzy (2).
Старый 10.08.2017, 11:09   #13  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
да, подобный велосипед я тоже видел.
очень смущает вот эта конструкция:
Цитата:
Сообщение от belugin Посмотреть сообщение
X++:
environment.get_Aos().get_PackageDirectory()
можешь в нескольких словах рассказать как она работает?
что будет, если в структуру каталогов попадет что-то левое? например, в результате бесчеловечных программистских опытов в каталогах останутся неинсталлированные модули или другие ошметки файлов.

а также что будет, если используется несколько АОСов?
__________________
полезное на axForum, github, vk, coub.

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

но она:
1. работает через полный перебор объектов AOT
2. должна знать о подчиненных элементах (table.Extensions)

в общем - фигня какая-то.

Хочу отметить, что набор методов явно писался в переходные времена, когда еще не было решено что будет ключом - int Id или String Name.

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

Собственно отсюда и вопрос ветки:
Как правильно получить элементы AOT заданной модели? В X++? В SQL? в акс2012? в акс7? А extension?

X++:
    protected set getTableNamesFromModels()
    {
        boolean inModel(str modelDisplayName, str objname, System.Type type)
        {
            var models = Microsoft.Dynamics.Ax.Xpp.MetadataSupport::GetModelsOfMetadataArtifact(objName, type);
            var modelsEnumerator = models.getEnumerator();
            while (modelsEnumerator.moveNext())
            {
                Microsoft.Dynamics.AX.Metadata.MetaModel.ModelInfo modelInfo = modelsEnumerator.Current;
                if( ModelDisplayName == modelInfo.DisplayName )
                {
                    return true;
                }
            }

            return false;
        }

        set result = new set(Types::String);
        var modelName = 'Fleet Management Extension';

        var axTableType = new Microsoft.Dynamics.AX.Metadata.MetaModel.AxTable();
        var axTableExtType = new Microsoft.Dynamics.AX.Metadata.MetaModel.AxTableExtension();

        var t = Microsoft.Dynamics.Ax.Xpp.MetadataSupport::TableNames();  // Why Enumerator?
        while ( t.moveNext() )
        {
            var tname = t.get_current();

            if ( inModel(ModelName, tname, axTableType.GetType()) )
            {
                result.add(tname);
                continue;
            }

            var tExt = Microsoft.Dynamics.Ax.Xpp.MetadataSupport::GetTableExtensionNames(tname); // Why collection?
            var tExtEnum = tExt.GetEnumerator();
            while( tExtEnum.moveNext() )
            {
                var tExtName = tExtEnum.Get_Current();
                if ( inModel(ModelName, tExtName, axTableExtType.GetType()) )
                {
                    result.add(tExtName);
                    continue;
                }
            }
        }
        
        return result;
    }
__________________
полезное на axForum, github, vk, coub.

Последний раз редактировалось mazzy; 10.08.2017 в 11:27.
За это сообщение автора поблагодарили: sukhanchik (5).
Старый 10.08.2017, 12:47   #15  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от mazzy Посмотреть сообщение
можешь в нескольких словах рассказать как она работает?
что будет, если в структуру каталогов попадет что-то левое? например, в результате бесчеловечных программистских опытов в каталогах останутся неинсталлированные модули или другие ошметки файлов.
Насколько я помню DIct* работает через то же самое, то есть будет то же самое . Как оно внутри - надо смотреть исходники.
Старый 10.08.2017, 12:50   #16  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от belugin Посмотреть сообщение
Насколько я помню DIct* работает через то же самое, то есть будет то же самое . Как оно внутри - надо смотреть исходники.
опачки!
я всегда думал, что через псевдотаблицу UtilElements.
раньше aod - это база данных внутреннего формата, которая хранит UtilElements. Все остальное - обертка над этой базой.

теперь это файлы? хм...
а что будет, если кто-то нехороший при работающей аксапте начнет файлы трогать? например, добавлять в файлы/каталоги что-нибудь полезное (или вредоносное)?
__________________
полезное на axForum, github, vk, coub.
Старый 10.08.2017, 12:54   #17  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Что будет если то же самое кто-то будет делать для любого остального софта, который не использует базу данных для хранения кода а только каталоги? Мне кажется, проблема надумана
Старый 10.08.2017, 13:08   #18  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от belugin Посмотреть сообщение
Мне кажется, проблема надумана
это не проблема, это вопрос.
__________________
полезное на axForum, github, vk, coub.
Старый 10.08.2017, 13:48   #19  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Ладно, давайте вернемся к теме. Будем надеятся, что внутри таки окажется чистый дух воды.


Цитата:
Сообщение от belugin Посмотреть сообщение
X++:
MetadataProvider.Classes.ListObjectsForModel(ModelName)
Еще раз спасибо. Я посмотрю провайдера и вокруг.

Правильно я понимаю, что всякие SysDict, treeNode, UtilElement можно считать устаревшими и не стоит рассчитывать, что они будут развиваться?
Я правильно понимаю, что сейчас актуальны namespace Microsoft.Dynamics.Ax.*? И если что и будет развиваться, то в первую очередь они?
__________________
полезное на axForum, github, vk, coub.
Старый 11.08.2017, 08:43   #20  
KiselevSA is offline
KiselevSA
Злыдни
Аватар для KiselevSA
Злыдни
Лучший по профессии 2015
 
958 / 333 (13) ++++++
Регистрация: 25.01.2002
Адрес: Москва
Я не прог, но посмотрел бы еще на DynamicsAX-model MANAGEMENT-view all package dependencies. Что делает, как собирает.
__________________
люди...считают, что если техника не ломается, то ее не нужно ремонтировать. Инженеры считают, что если она не ломается, то нуждается в совершенствовании.
За это сообщение автора поблагодарили: mazzy (2).
Теги
ax2012, ax7, модель

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Получить SQL-имя таблицы типа TempDB RVS DAX: Программирование 3 18.11.2014 11:50
Как получить Имя Амортизационной группы ОС (из модели учета НУ)? snow DAX: Программирование 2 09.08.2013 13:26
Dynamics AX: SQL Server, Heart of Dynamics AX Blog bot DAX Blogs 0 13.07.2007 18:00
Как получить значения полей (modifiedDate, modifiedTime, modifiedBy и др.) при работе с объектами AOT типа Map? LRA DAX: База знаний и проекты 15 02.04.2007 13:37
SQL: Physical Address Extension (PAE). Recoilme DAX: Администрирование 3 20.04.2006 10:18

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

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

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