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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 30.10.2009, 09:46   #1  
AxTimur is offline
AxTimur
Участник
 
21 / 11 (1) +
Регистрация: 08.08.2008
Поиск таблиц по EDT
Можно ли по определенному EDT выбрать все таблицы где данный EDT используется?.
Старый 30.10.2009, 09:49   #2  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от AxTimur Посмотреть сообщение
Можно ли по определенному EDT выбрать все таблицы где данный EDT используется?.
Я как то тоже заморочился над такой проблемой, в стандарте ничего не нашел, поэтому написал своё
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 30.10.2009, 09:52   #3  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
сейчас найду проект, выложу, может кому пригодится...
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
За это сообщение автора поблагодарили: AxTimur (1).
Старый 30.10.2009, 09:53   #4  
AxTimur is offline
AxTimur
Участник
 
21 / 11 (1) +
Регистрация: 08.08.2008
:)
Цитата:
Сообщение от lev Посмотреть сообщение
Я как то тоже заморочился над такой проблемой, в стандарте ничего не нашел, поэтому написал своё
Так с чего начать хотя бы?
Старый 30.10.2009, 09:57   #5  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Цитата:
в стандарте ничего не нашел
Перекрестные ссылки ?
За это сообщение автора поблагодарили: mazzy (2).
Старый 30.10.2009, 09:59   #6  
AxTimur is offline
AxTimur
Участник
 
21 / 11 (1) +
Регистрация: 08.08.2008
Цитата:
Сообщение от lev Посмотреть сообщение
сейчас найду проект, выложу, может кому пригодится...
Спасибочки
Старый 30.10.2009, 10:08   #7  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от AxTimur Посмотреть сообщение
Можно ли по определенному EDT выбрать все таблицы где данный EDT используется?.
конечно. при помощи перекрестных ссылок.
Миниатюры
Нажмите на изображение для увеличения
Название: 1.png
Просмотров: 283
Размер:	89.5 Кб
ID:	5312  
__________________
полезное на axForum, github, vk, coub.
Старый 30.10.2009, 10:21   #8  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от Андре Посмотреть сообщение
Перекрестные ссылки ?
Как вариант, но не очень удобно. Плюс я там добавил некоторые возможности...
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 30.10.2009, 10:23   #9  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
А ещё можно просто воспользоваться поиском по AOT. Я имею в виду вкладку 'Свойства', которая появляется при выборе режима 'Все узлы'

Но только учтите, что таким способом вы найдёте таблицы, которые используют непосредственно сам EDT, но не его наследников
Старый 30.10.2009, 10:30   #10  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Если перекрестные ссылки по каким-либо причинам не подходят, то примерно так. Быстрее обычного поиска.
X++:
static void findTablesWithEDT)
{
    Dictionary         dictionary = new Dictionary();
    SysDictTable       dictTable;
    SysDictField       dictField;
    int                i, j;
    int                typeIdToFind = typeId2ExtendedTypeId(typeid(RContractCode));
    int                tableCount;
    str                tableInfo;
    ;

    for (i=1; i<=dictionary.tableCnt() ; i++)
    {
        dictTable = new SysDictTable(dictionary.tableCnt2Id(i));

        if (!dictTable.isMap() && !dictTable.isView() && !dictTable.isSystemTable() && !dictTable.isTmp())
        {
            for (j=1; j<=dictTable.fieldCnt(); j++)
            {
                dictField = dictTable.fieldObject(dictTable.fieldCnt2Id(j));
                if (dictField.typeId() == typeIdToFind)
                {
                    if (!dictTable.labelLabelId())
                    {
                      tableInfo = dictTable.name();
                    }
                    else
                    {
                        tableInfo = strfmt ('%1 - %2', dictTable.name(), dictTable.Label());
                    }
                    info(tableInfo, '', new  SysInfoAction_newWindow(dictTable.path()));
                    tableCount++;
                    break;
                }
            }
        }
    }
    info(strfmt("Всего таблиц - %1", tableCount));
}
За это сообщение автора поблагодарили: AxTimur (1).
Старый 30.10.2009, 10:32   #11  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2156 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
А чем поиск плох? выбираем узел Tables, проставляем фильтр по свойству ExtendedDataType и вперед

упс.. опередили
Миниатюры
Нажмите на изображение для увеличения
Название: Image1.jpg
Просмотров: 457
Размер:	43.9 Кб
ID:	5314   Нажмите на изображение для увеличения
Название: Image2.jpg
Просмотров: 326
Размер:	47.9 Кб
ID:	5315  

__________________
Ivanhoe as is..

Последний раз редактировалось Ivanhoe; 30.10.2009 в 10:33. Причина: опередили
За это сообщение автора поблагодарили: mazzy (2).
Старый 30.10.2009, 10:33   #12  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Ivanhoe Посмотреть сообщение
А чем поиск плох?
Медленно работает
__________________
полезное на axForum, github, vk, coub.
Старый 30.10.2009, 10:35   #13  
AxTimur is offline
AxTimur
Участник
 
21 / 11 (1) +
Регистрация: 08.08.2008
Всем большое спасибо я разобрался. Вот ответ :

X++:
 Dictionary      dictionary = new Dictionary();
    int             i, j;
    DictTable       dictTable;
    DictField       dictField;
    ;
    #AviFiles

    for (i = 1; i <= dictionary.tableCnt(); i++)
    {
        dictTable = new DictTable(dictionary.tableCnt2Id(i));

            if (!dictTable.isTmp() && !dictTable.isSystemTable() && !dictTable.isView() && !dictTable.isMap())
            {
                for (j = 1; j <= dictTable.fieldCnt(); j++)
                {
                    dictField = new DictField(dictTable.id(), dictTable.fieldCnt2Id(j));
                    if(dictField.typeId() == extendedTypeName2Id_RU("DlvTransportId"))
                    {
                        Print strfmt("%1 , %2 ", dictTable.id(), dictField.typeId());
                        Pause;
                   }
                }
             }
    }
Старый 30.10.2009, 10:37   #14  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Итак, подробно описывать долго, опишу вкратце, если будут вопросы спрашивайте

Сразу оговорюсь по поводу использования перекрестных ссылок. Это как вариант, но не очень удобно, лично для меня.

Функция собирает временную таблицу. Проверяются Table, View, Map, TmpTable (временные таблицы). В таблице это определяется типом строки. Так же показывается сколько всего строк в таблице, и сколько в таблице строк, в которых поле, использующее EDT НЕ пустое (эту возможность можно регулировать параметрами).
Вызов функции напрямую выдает список EDT, из которого можно выбрать нужный. При выборе запускается поиск таблиц.
Вот в кратце. Я ещё навесил на контекстное меню в EDT эту функцию.

Axapta 3.0 SP3.

В приложенном архиве проект и текстовый файл с методом, выводящим список EDT (просто у меня не было такого , метод добавить в Global)

P.S. Просьба сильно не пинать, возможно реализация требует поправок
Вложения
Тип файла: rar UseEDT.rar (6.6 Кб, 97 просмотров)
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
За это сообщение автора поблагодарили: BOAL (2), raz (5), Ace of Database (1), Player1 (1).
Старый 30.10.2009, 12:19   #15  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Спасибо.
Цитата:
Сообщение от lev Посмотреть сообщение
Сразу оговорюсь по поводу использования перекрестных ссылок. Это как вариант, но не очень удобно, лично для меня.
А почему?
__________________
полезное на axForum, github, vk, coub.
Старый 30.10.2009, 12:29   #16  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от mazzy Посмотреть сообщение
Спасибо.


А почему?
Если говорить в общем, то я ими пользуюсь, и перекрестные ссылки конечно выручают. но в конкретной задаче, получения списка таблиц использующих EDT, мне не хватало информации имеющейся в них. Поэтому не удобно. Ещё может возникнуть проблемка если вдруг по какой то причине ссылки не обновлены, можно упустить что нибудь важное....
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
За это сообщение автора поблагодарили: DSPIC (1).
Старый 30.10.2009, 12:54   #17  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от lev Посмотреть сообщение
мне не хватало информации имеющейся в них.
А какой?
__________________
полезное на axForum, github, vk, coub.
Старый 30.10.2009, 13:10   #18  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от mazzy Посмотреть сообщение
А какой?
вот
Цитата:
сколько всего строк в таблице, и сколько в таблице строк, в которых поле, использующее EDT НЕ пустое
просто после того как найдем таблицы, мне необходимо было выполнять некоторые манипуляции с данными в поле, а для того что бы в пустую не лапатить каждую таблицу я определяю надо ли вообще с таблицей заморачиваться.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Теги
законченный пример, как правильно, объект приложения, перекрестные ссылки, поиск, полезное

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Создание наследника EDT через Х++ vesna DAX: Программирование 12 02.05.2012 08:13
Владельцы таблиц в БД аксапты AxaptaUser DAX: Администрирование 11 23.05.2007 18:33
Создание EDT в X++ Dimus DAX: Программирование 9 14.10.2005 13:48
Синхронизация таблиц при изменении EDT z_av DAX: Программирование 1 16.12.2004 11:55
Список полей таблиц на базе конкретного EDT Владимир Максимов DAX: Программирование 10 06.10.2004 14:45

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

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

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