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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 05.09.2013, 13:05   #1  
plumbum is offline
plumbum
Участник
Соотечественники
 
182 / 86 (3) ++++
Регистрация: 07.12.2007
Адрес: Vienna, AT
Dynalink в AX2012
Решил поделиться своими наблюдениями:

В AX2012 рекомендуется перерабатывать модель данных в сторону сурогатных ключей и связей по RecId. Также привычные в предыдущих версиях Relation на EDT заменили свойством ReferenceTable и Relation на таблице.

Тема была уже упомянута Mazzy вот здесь:
Цитата:
Сообщение от mazzy Посмотреть сообщение
раньше: MDI + dynalink между формами = ПРЕКРАСНО.
в этой версии: начали отказываться от MDI в сторону SDI. Но при этом перевели не

Так вот, при построении таких связей между таблицами и последующем переходе в главную таблицу (Go to main table) args.record() или args.lookupRecord() не передаются. Вместо этого передается 3 значения: args.lookupTable(), args.lookupField() и args.lookupValue()

Я проверил данный феномен на 2-х формах: WMSLocation и CustTable. Следующий код надо вставить в методе init форм:

X++:
    Common      callerRecord1 = element.args().record();
    Common      lookupRecord = element.args().lookupRecord();
    anytype     lookupValue  = element.args().lookupValue();
    TableId     lookupTableId= element.args().lookupTable();
    FieldId     lookupFieldId= element.args().lookupField();
В случае с WMSLocation, InventDim передается в args.record()
В случае с CustTable передается только тройка значений

Связи между таблицами следующие:
1. SalesTable -> CustTable: \Data Dictionary\Tables\SalesTable\Relations\OrderCustomer
Связь основана еще на старом Relation на EDT. AccountNum является PrimaryIndex

2. InventDim -> WMSLocation: \Data Dictionary\Tables\InventDim\Relations\WMSLocation
Relation включает в себя 2 поля, составляющие PrimaryIndex в WMSLocation: InventLocationId + WMSLocationId. Соответственно на EDT WMSLocationId никаких связей нет. Свойство ReferenceTable тоже не выставлено

Следующая статья описывает поведение связей на таблицах/типах. Однако на следующий вопрос я так и не могу ответить:

Почему при переходе из InventDim в WMSLocation args.record() все же передается, хотя Relation основан на PrimaryKey? Неужели все дело в композитном индексе и отсутсвии ReferenceTable на EDT?

При работе с сурогатными ключами ситуация такая же, как и с CustTable: args.record() пуст. При двойном нажатии на строку в ListPage args.record() все же передается...

Складывается впечатление, что ссылки на объекты в вызывающих формах специально подавляются, передача параметров "по значению" более надежна с точки зрения утечек памяти. Этот механизм наверное также используется при переходе из SSRS отчета в форму.

Ну а нам внедренцам остается только вздыхать...
__________________
http://www.axdevposts.blogspot.com
Пришел, уведел.... отойди, дай другому увидеть!
За это сообщение автора поблагодарили: mazzy (10), Logger (5), MikeR (3).
Старый 05.09.2013, 15:36   #2  
MikeR is offline
MikeR
MCT
Аватар для MikeR
MCBMSS
Лучший по профессии 2015
Лучший по профессии 2014
 
1,628 / 627 (24) +++++++
Регистрация: 28.11.2005
Адрес: просто землянин
Не удержался, сорри
Изображения
 
__________________
Axapta book for developer
За это сообщение автора поблагодарили: plumbum (1), imir (2).
Старый 15.09.2014, 10:45   #3  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,438 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Столкнулся с этим безобразием. Не знаю на сколько универсальным является найденное решение, но в моем случае у меня получилось достучаться до исходного курсора вот таким образом:
X++:
FormRun _caller = _args.caller();
Common lookupRecord = _caller.selectedControl().dataSourceObject().cursor();
За это сообщение автора поблагодарили: trud (3), Logger (3), plumbum (2).
Теги
ax2012, dynalink, relation

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
emeadaxsupport: AX2012 Upgrades - Setting a clean AX2012 database to start with the upgrade check-list and not the Initialization check-list. Blog bot DAX Blogs 1 13.02.2013 23:47
emeadaxsupport: Inventory closing differences between AX4.0 and AX2012 using weighted average costing method Blog bot DAX Blogs 0 27.12.2012 19:11
axblog4u: Display Web Image Content in Forms using Dynamics AX2012 Blog bot DAX Blogs 0 28.05.2012 19:12
ukax: Microsoft Dynamics AX2012 - Partner Update Briefing Blog bot DAX Blogs 0 23.07.2011 20:15
axaptapedia: Tutorial Form Dynalink Blog bot DAX Blogs 0 22.08.2007 23:00

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

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

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