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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 17.10.2008, 23:13   #1  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,984 / 3273 (117) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от EVGL Посмотреть сообщение
Раньше Best Practices были слегка параноидальными и ругались на отсутствие ссылки на самого себя.
Думаю что не только по этой причине делают в Relation связь таблицы самой на себя.

Тут все хитрее. Дело в том что движок Аксапты может определять связь между таблицами как через связи определенные на EDT, так и через связи определенные на уровне таблиц, причем у последних приоритет выше.

У меня был реальный пример. Есть таблица SalesTable - у неё не определена связь на саму себя через salesId. Если на форме SalesTable нажать Запросы - Итоги - то откроется форма подсчета итогов и сработает Dynalink - будет связь по SalesId. Спрашивается, откуда она взялась ? Судя по всему из расширенного типа данных которые прописан в SalesTable.salesId

Далее, делаем какую-нить кастомизацию - определяем на SalesTable составной relation по 3 новым полям.
SalesTable.CUSTOM_DataAreaId == SalesTable.DataAreaID
SalesTable.CUSTOM_SalesId == SalesTable.SalesId
SalesTable.CUSTOM_SourceType == 0 // поле с типом Енум - неважно какое.
(Это мы цепочки писали - задавали таким образом свои связи между заказами в разных компаниях)

И после этого ломается форма Запросы - Итоги !!! Везде.
Даже на тех заказах, на которых поля
SalesTable.CUSTOM_DataAreaId
SalesTable.CUSTOM_SalesId
SalesTable.CUSTOM_SourceType
пустые !

Оказывается система подхватывал Dynalink уже по новой связке ! Хотя по идее не должна была. Так как значения в полях не подходили. Она взяла кусок Relation-а и стала по нему делать Dynalink !

Т.е. получается что ядро Аксапты видит, что в relation-х таблицы есть связка по SalesId - после этого забивает на связки в расширенных типах которые прописаны в полях. Выкусывает из составного relation по 3-м полям связку по одному полю SalesId.CUSTOM_SalesId == SalesTable.SalesId и использует его в качестве Dynalink при вызове Запросы - Итоги

Пипец.
Но стоило мне определить на таблице отдельный Relation с тавтологической связкой
SalesTable.SalesId == SalesTable.SalesId
как все чудесным образом вылечилось.
Старый 18.10.2008, 19:09   #2  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Цитата:
Сообщение от Logger Посмотреть сообщение
Тут все хитрее. Дело в том что движок Аксапты может определять связь между таблицами как через связи определенные на EDT, так и через связи определенные на уровне таблиц, причем у последних приоритет выше.
Вы ошибаетесь. Приоритет связей на уровне расширенного типа на самом деле ВЫШЕ, чем у таблицы, и это полное гадство. Именно поэтому в системе полно расширенных типов вроде XXXBaseXXXid, не имеющих связей. Другими словами, если на типе есть связь, то она имеет наивысший приоритет. Если связи на типе нет, то берется связь из таблицы.
Старый 19.10.2008, 03:09   #3  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от EVGL Посмотреть сообщение
Вы ошибаетесь. Приоритет связей на уровне расширенного типа на самом деле ВЫШЕ, чем у таблицы, и это полное гадство. Именно поэтому в системе полно расширенных типов вроде XXXBaseXXXid, не имеющих связей. Другими словами, если на типе есть связь, то она имеет наивысший приоритет. Если связи на типе нет, то берется связь из таблицы.
На самом деле - странное утверждение, учитывая, что это довольно просто проверить.

Создаем таблицу с 1 полем, тип поля - ItemId.
Создаем на таблице Relation по этому полю на таблицу SalesLine (по ItemId)

Открываем браузер таблиц, создаем запись и открываем лукап - видим записи из SalesLine. Соответственно, relation по таблице имеет приоритет выше, чем relation по EDT

Или я не понял смысла дискуссии?
За это сообщение автора поблагодарили: EVGL (2).
Старый 23.10.2008, 13:10   #4  
Zeppelin is offline
Zeppelin
Участник
 
21 / 15 (1) ++
Регистрация: 09.09.2007
Чтобы не создавать новой ветки

Цитата:
Сообщение от kashperuk Посмотреть сообщение
На самом деле - странное утверждение, учитывая, что это довольно просто проверить.

Создаем таблицу с 1 полем, тип поля - ItemId.
Создаем на таблице Relation по этому полю на таблицу SalesLine (по ItemId)

Открываем браузер таблиц, создаем запись и открываем лукап - видим записи из SalesLine. Соответственно, relation по таблице имеет приоритет выше, чем relation по EDT

Или я не понял смысла дискуссии?
А если модифицировать пример Ивана , предположим так

Создаем таблицу с 2 мя полями
1 ItemID тип поля - ItemId.
2 SalesId тип поля - SalesIdBase
Создаём Relation по этим двум полям на таблицу SalesLine
MyTable.ItemId == SalesLine.ItemId
MyTable.SalesId == SalesLine.SalesId


То при этом переход к основной таблице кардинально изменится - будет происходить на основании EDT к InventTable , а не к SalesLine (причём пара значений ItemId,SalesId присутствует в SalesLine) Вопрос - почему так происходит, если судя по вышеизложенному переход должен осуществляться
на основании Relation т е к SalesLine

Спасибо !
За это сообщение автора поблагодарили: kashperuk (5).
Теги
relation, axapta

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Two Tables with Two Relations Blog bot DAX Blogs 0 31.03.2008 11:05
Удаление Relations lemchey_white DAX: Программирование 2 06.12.2007 12:42
Странный код в базовом функционале PavelSR DAX: Программирование 6 23.04.2007 16:01
Как не использовать relations на таблицах demetra DAX: Программирование 13 14.07.2006 11:00
Вопрос о корректности Relations Gustav DAX: Программирование 9 11.05.2006 15:30
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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