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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 30.08.2017, 19:55   #2  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от kashperuk Посмотреть сообщение
Допустим у меня есть TableId и FieldId, где FieldId - это поле на таблице с TableId
Это поле - foreign key на другую таблицу, и для этой связи существует Table relation на таблице с TableId

Как мне это определить наиболее оптимальным способом?
я не знаю оптимального способа.
и не уверен, что для акс7 DictTable и DictField - правильные способы.

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

2. через DictTable, DictField
вот кусок кода для акс7 из моего пока приватного проекта по созданию ER-диаграм и dgml-диаграм.
этот кусок почти без изменений подойдет для любой версии.

X++:
            SysDictTable dt = new SysDictTable(TableId);

...

            //------ relations
            SetEnumerator dre = dt.relations().getEnumerator();
            while (dre.moveNext())
            {
                SysDictRelation dr = dre.current();
                var member = dr.externTableName();
                container ThisKey = conNull();
                container OtherKey = conNull();

                for(int l=1; l<=dr.lines(); l++)
                {
                    try
                    {
                        var ThisKeyId = dr.lineTableValue(l);
                        var ThisKeyField = new SysDictField(dt.id(), ThisKeyId);
                        var ThisKeyName = ThisKeyField ? ThisKeyField.name() : strFmt("%1", ThisKeyId);
                        ThisKey += ThisKeyName;

                        Var OtherKeyId = dr.lineExternTableValue(l);
                        var OtherKeyField = new SysDictField(dr.externTable(), OtherKeyId);
                        var OtherKeyName = OtherKeyField ? OtherKeyField.name() : strFmt("%1", OtherKeyId);
                        OtherKey += OtherKeyName;
                    }
                    catch
                    {
                        exceptionTextFallThrough();
                    }
                }
                if( ThisKey && OtherKey )
                {
                    this.appendNewXML(xmlType, 'Association', [
                        ['Name', dr.name()],
                        ['Member' , member],
                        ['ThisKey', con2Str(ThisKey, ',')],
                        ['OtherKey', con2Str(OtherKey, ',')],
                        ['IsForeignKey', 'true'],
                        ['Type', member]]);
                }
Миниатюры
Нажмите на изображение для увеличения
Название: ax7tables.png
Просмотров: 531
Размер:	113.5 Кб
ID:	11618  
__________________
полезное на axForum, github, vk, coub.

Последний раз редактировалось mazzy; 30.08.2017 в 20:04.
За это сообщение автора поблагодарили: Vadik (1), Logger (3), macklakov (3), kashperuk (2), axotnik88 (1).
Теги
dicttable, reflection, relation

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как правильно отобразить значение поля таблицы Skolos DAX: Программирование 12 25.02.2016 21:30
How to add a new relation on a table from code Blog bot DAX Blogs 0 14.09.2014 04:56
emeadaxsupport: The 'view details' feature will not work on an EDT field when the field has a relation defined in the 'table references' subnode. Blog bot DAX Blogs 0 26.01.2013 02:14
Каким образом выцепить айдишку или текстовую репрезентацию EDT поля таблицы. HorrR DAX: Программирование 8 18.02.2008 15:45
Как добраться до поля таблицы? Sergioso DAX: Программирование 4 20.01.2005 15:39
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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