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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 16.10.2015, 04:23   #1  
Vasiliy Petrovich is offline
Vasiliy Petrovich
Участник
 
83 / 17 (1) ++
Регистрация: 26.06.2015
Как сделать с суррогатными ключами
нужно в таблицу добавить два новых поля:
1) Тип
2) Подтип
причем лукап подтипов должен быть отфильтрован на основе выбранного типа.

до ax2012 было просто релейшенами сделать, и без всякого кода таких два поля с лукапами можно было сделать
а в Ax2012 сделали replacement key всякие и не получается уже так сделать. (в релейшн типа foreign key нельзя добавить фильтр)
Как быть?
Старый 16.10.2015, 09:19   #2  
Vasiliy Petrovich is offline
Vasiliy Petrovich
Участник
 
83 / 17 (1) ++
Регистрация: 26.06.2015
походу без кода никак не сделать
перекрывать надо методы resolveReference и lookupReference
Старый 16.10.2015, 09:56   #3  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2155 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
А не использовать суррогатный ключ нельзя?
__________________
Ivanhoe as is..
Старый 16.10.2015, 10:47   #4  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Vasiliy Petrovich Посмотреть сообщение
(в релейшн типа foreign key нельзя добавить фильтр)
А если первичным ключём в таблице подтипов сделать не просто RecId подтипа, а комбинацию RecId подтипа + RecId типа. Тогда вторичный ключ система должна будет сформировать также из двух полей.
Старый 16.10.2015, 11:10   #5  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,651 / 1158 (42) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Не делайте Relation типа Foreign Key. Сделайте обычный Relation типа Normal. В чем проблема-то? Их отличие только в значении определенного флага на этом самом Relation. С точки зрения собственно работы никаких отличий нет. Это исключительно "дизайнерская фича" для автоматического формирования ряда настроек при создании этого самого Relation

Если Вас смущает сообщение Best Practices, то для отдельно взятой таблицы проверку Relation на Foreign Key можно отключить через модификацию флага в заголовке (правда, только через XPO)

Подробно описано здесь https://erpcoder.wordpress.com/2014/...on-this-table/

А если вкратце, то отключить проверку Relation на Foreign Key для конкретной таблицы можно так:
  1. Выгрузить таблицу в XPO
  2. сразу за заголовком таблицы будет идти строка: EnforceFKRelation 1
  3. Вместо флага 1 поставить флаг 0, что означает "не проверять"
  4. Импортировать XPO
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
За это сообщение автора поблагодарили: Logger (1).
Старый 16.10.2015, 11:40   #6  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
С обычным Relation не будет работать Reference Data Sources.

Сейчас проверил сложный первичный ключ тоже не получится сделать. Первичный ключ должен содержать только одно поле (
Старый 16.10.2015, 14:02   #7  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,275 / 3476 (122) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Их отличие только в значении определенного флага на этом самом Relation.
Ну ... я бы несколько поостерегся их не использовать. Сильно подозреваю, что на этот флаг в будущем может быть повешена логика. Уж больно она напрашивается.
Во-первых, Relation типа ForeignKey дает возможность установить на Relation-е свойство CreateNavigatePropertyMethods и впоследствии пользоваться не только теми методами, которые находятся в узле Methods, но и динамически создаваемыми методами перехода от одной таблицы к другой.
Во-вторых, в форме расширенного фильтра есть возможность выбирать из списка полей не только поля выбранной таблицы и ее родителей, а еще и связанных по ForeignKey таблиц (см таблицу VendTable и релейшн MainContactWorker на таблицу HcmWorker; в форме - это поле Ответственный). И этот выбор зависит от значения метода sysDictField.isSurrogateForeignKey().

Сейчас, если создать Relation типа Обычный и добавить одну связку - то независимо от того - взведен флаг с ForeignKey у релейшна или нет, и метод CreateNavigatePropertyMethods на релейшне доступен и метод sysDictField.isSurrogateForeignKey() возвращает значение True. Все эти прелести пропадают при добавлениии в релейшн второго поля-связки.

Соответственно, с учетом того, что система хранит информацию о том, как был создан Relation - через ForeignKey или через Nornal - никто не застрахован от того, что метод sysDictField.isSurrogateForeignKey() будет смотреть на этот флаг (а это ядро между тем), а также пропадет свойство CreateNavigatePropertyMethods у релейшна, у которого "нет полномочий его менять.

Но пока оно работает... хорошо
__________________
Возможно сделать все. Вопрос времени
За это сообщение автора поблагодарили: EVGL (1), Владимир Максимов (1), Cardagant (1).
Старый 16.10.2015, 19:28   #8  
Vasiliy Petrovich is offline
Vasiliy Petrovich
Участник
 
83 / 17 (1) ++
Регистрация: 26.06.2015
Цитата:
Сообщение от Ivanhoe Посмотреть сообщение
А не использовать суррогатный ключ нельзя?
можно, но я так понял, что в AX2012 так принято
хочу делать так, как принято

вот тут описан сценарий похожий, но отличие в том, что фильтр у них не в поле primary таблицы, а отдельный контрол на форме http://www.microsoft.com/en-us/downl....aspx?id=35369
там предлагают код писать тоже

Последний раз редактировалось Vasiliy Petrovich; 16.10.2015 в 19:30.
Старый 16.10.2015, 19:33   #9  
Vasiliy Petrovich is offline
Vasiliy Petrovich
Участник
 
83 / 17 (1) ++
Регистрация: 26.06.2015
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Не делайте Relation типа Foreign Key. Сделайте обычный Relation типа Normal. В чем проблема-то?
это я первым делом попробовал конечно
но поле перестает быть золушкой и превращается в тыкву.
Старый 16.10.2015, 20:46   #10  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2155 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Цитата:
Сообщение от Vasiliy Petrovich Посмотреть сообщение
можно, но я так понял, что в AX2012 так принято
хочу делать так, как принято
Без необходимости не надо так делать. На практике в 2012 это не принято. Куча лишних проблем с отладкой, начальными данными, bi и т.п.
__________________
Ivanhoe as is..
За это сообщение автора поблагодарили: trud (1).
Теги
ax2012r3, relation

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Сделать левый join или сделать динамическую группировку в GRID kadet DAX: Программирование 10 12.03.2013 12:07
Как сделать фильтр по группе пользователей? Zabr DAX: Программирование 12 08.04.2009 11:40
Заумный отчет по ОС, как сделать? Бриллиантик DAX: Программирование 13 09.07.2008 16:36
Как лучше сделать? Smith DAX: Программирование 7 12.10.2004 13:57
дизайн отчета (как сделать его с разделителями между столбцами?) puz DAX: Программирование 7 02.09.2003 08:50
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 11:11.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.