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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 07.03.2020, 13:21   #1  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,158 / 1286 (47) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Создание relation на на таблице DAX2012 можно ли расширить?
Добрый день.
В DAX2012 есть замечательная возможность - создать relation, указать там таблицу, настроить свойства relation и вызывать в контекстном меню "Создать \ ForeignKey \ ...".
При этом создается сама запись в relation, создается поле.
Все бы хорошо, но хотелось бы, поле создавалось с учетом настроек relation:
  • Наименование поля бралось бы из наименования relation.
  • EDT поля прописывалось бы точно из EDT поля, на которое получается связь (а не RefRecId или вообще пустое).
  • Если в свойстве RelatedTableCardinality relation установлено ExactlyOne, то сразу бы в поле было Mandatory равное Yes.
  • Ну и еще несколько мелких хотелок.
Можно ли этого добиться? Настроек не нашел. Возможно, что нужно внедриться в какой-то класс AOT или написать расширение редактора? Или это вообще все происходит в ядре и недоступно для нас?
Старый 07.03.2020, 14:54   #2  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,867 / 3123 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Не исследовал этот вопрос, но можно проверить несколько вещей:
1. Поковырять контекстное меню \Menus\SysContextMenu, там все доступные функции обычно заведены, а класс написанный на X++ рулит видимостью. Если найдется что-то полезное то кастомизировать. Если ничего не нашлось, то написать свое.

2. Поставить breakpoint в методах
\Classes\ClassFactory\createClass
\Classes\ClassFactory\formRunClass
\Classes\ClassFactory\formRunClassOnClient
\Classes\ClassFactory\makeObjectOnClient
\Classes\ClassFactory\makeObjectOnServer
подергать обсуждаемый функционал. Если остановится на точке останова, то видно какой X++ класс работает.

3. Поискать по перекрестным ссылкам обращение к соответствующим свойствам. Возможно найдется нужный класс или что-то аналогичное позволяющее написать свое.

4. Поскольку перекрестные ссылки могут проиндексировать не все из-за новомодного стиля кодирования, то можно просто поискать по подстроке по всему аот.
Вот этим инструментом, это делается за 1-2 минуты
Ax 2012 быстрый поиск по исходным текстам прямым SQL запросом
Даже быстрее чем сканирование AOD в 2009-й
За это сообщение автора поблагодарили: Raven Melancholic (2), S.Kuskov (2).
Старый 07.03.2020, 22:13   #3  
pitersky is offline
pitersky
северный Будда
Аватар для pitersky
Ex AND Project
Соотечественники
 
1,486 / 408 (16) +++++++
Регистрация: 26.09.2007
Адрес: Солнечная система
Цитата:
Сообщение от Raven Melancholic Посмотреть сообщение
Добрый день.
В DAX2012 есть замечательная возможность - создать relation, указать там таблицу, настроить свойства relation...
вроде как теперь по феншую писать reference а не relation
__________________
С уважением,
Вячеслав
Старый 07.03.2020, 22:48   #4  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,273 / 3466 (122) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от pitersky Посмотреть сообщение
вроде как теперь по феншую писать reference а не relation
Какой-то странный феншуй. Relation как был так и остался - он никуда не делся. Я безусловно имею в виду Relation на таблице. А relation на EDT действительно умер и возродился в виде Reference, но на нем нет тех свойств, про которые говорит топикстартер.
__________________
Возможно сделать все. Вопрос времени
Старый 08.03.2020, 16:27   #5  
trud is offline
trud
Участник
Лучший по профессии 2017
 
1,038 / 1629 (57) ++++++++
Регистрация: 07.06.2003
Записей в блоге: 1
Я делал подобное для D365FO, но функция там запускается именно при клике на поле. При этом создается релейшн с уже заполненными сво-вами
https://github.com/TrudAX/TRUDUtilsD...table-relation
В целом это несложно переписать для АХ2012, но у вас конечно более расширенные требования
За это сообщение автора поблагодарили: sukhanchik (6), Raven Melancholic (5).
Старый 09.03.2020, 17:54   #6  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,158 / 1286 (47) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Цитата:
Сообщение от trud Посмотреть сообщение
...функция там запускается именно при клике на поле. При этом создается релейшн с уже заполненными сво-вами
Сам подход, что идем не от релейшена к полю, а от поля к релейшену заслуживает внимания - в DAX2012 это достаточно просто реализуется в рамках инфраструктуры SysContextMenu.
Хотя в DAX2012 при заполнении EDT поля или при переносе EDT на узел полей таблицы и так предлагается создать релейшен, если в EDT настроено свойство Reference, но при этом свойства relation не заполняются.
Можно попробовать взять на себя более интеллектуальное поведение, проигнорировав стандартное поведение. Пока не знаю буду ли реализовывать такое, но направление интересное.
Старый 09.03.2020, 18:00   #7  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,158 / 1286 (47) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Цитата:
Сообщение от Logger Посмотреть сообщение
Поковырять контекстное меню \Menus\SysContextMenu, там все доступные функции обычно заведены, а класс написанный на X++ рулит видимостью. Если найдется что-то полезное то кастомизировать. Если ничего не нашлось, то написать свое.
Не, к сожалению эта операция вне инфраструктуры SysContextMenu.
Ну и перекрестные ссылки, точки останова, поиск текстов ничего не дали. Создание релейшенов, если понадобится, явно делается при помощи TreeNode, но при этом какое-то получение свойств релейшенов, скорее всего, должно опираться на классы DictRelation (SysDictRelation) , но в AOT ссылок на эти классы в предполагаемом контексте просто нет.
Старый 09.03.2020, 19:06   #8  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,158 / 1286 (47) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Хотя написать что-то совсем сбоку, не вписываясь в текущие возможности - типа вызывал на таблице контекстное меню "Создать Relation" в котором можно указать таблицу для ссылки, что-то там еще и создать поле, релейшен и настроить свойства и того и другого тоже вариант.
Почему бы и нет?
Старый 09.03.2020, 19:19   #9  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,867 / 3123 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Мне кажется это самый комфортный вариант.
Кодировать просто и быстро. Можно заточить инструмент под себя, что душа пожелает.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как проверить, что можно вызвать оператор next на таблице? mazzy DAX: Программирование 12 05.06.2018 20:33
Relation CustTable, VendTable и т.д. на таблице LedgerJournalTrans AX2009 Gad DAX: Программирование 2 20.04.2010 20:04
Создание поля в системной таблице akvi DAX: Программирование 3 23.09.2009 10:10
Создание Lookup формы Maxim Gorbunov DAX: База знаний и проекты 9 26.06.2007 16:44
Что и как можно резать? George Nordic DAX: Администрирование 1 11.05.2004 18:44
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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