![]() |
#1 |
Участник
|
Дублирование объектов АОТ
Как реализовано дублирование объектов АОТ, вызываемое из контекстного меню? Создавать таблички через treeNode я научился, просто не хочется писать код, создающий все подузлы таблицы (Fileds, Relations, Field Groups и т.д.) - наверняко ведь это уже написано. Только вот не могу найти
![]() |
|
![]() |
#2 |
Модератор
|
может я не понял вопрос, но при дублировании таблицы в АОТ она появляется с именем CopyOfNameTable
NameTable - имя таблицы. |
|
![]() |
#3 |
Участник
|
Наверно имеется ввиду программное создание таблицы.
![]() |
|
![]() |
#4 |
Участник
|
|
|
![]() |
#5 |
Участник
|
TreeNode.AOTDuplicate делает не то, что нужно?
|
|
|
За это сообщение автора поблагодарили: aidsua (1). |
![]() |
#6 |
Участник
|
|
|
![]() |
#7 |
Модератор
|
TreeNode.AOTDuplicate Method описывается в Microsoft Dynamics AX 2009 SDK
http://msdn.microsoft.com/en-us/library/cc608086.aspx хотя чет там ничего о нем не описывается.. Последний раз редактировалось Poleax; 22.07.2008 в 18:21. |
|
![]() |
#8 |
Участник
|
AOTDrop тоже не прокатывает. Может конечно я его неправильно использую
X++: treeNode = xInfo.rootNode(); treeNode = treeNode.AOTfindChild('Data Dictionary'); treeNode = treeNode.AOTfindChild('Tables'); treeNodeDet = treeNode.AOTfindChild('Table2'); treeNode.AOTDrop(treeNodeDet); |
|
![]() |
#9 |
Участник
|
Леша, попробуй этот проект покопать:
http://axutilities.blogspot.com/2005...le-wizard.html Возможно создание подузлов как раз там и найдешь.
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0 |
|
|
За это сообщение автора поблагодарили: lev (1). |
![]() |
#10 |
Злыдни
|
Может, так попробовать? Только не знаю, как переименовать узел
X++: static void Job10(Args _args) { TreeNode treeNode, treeNodeDet; XInfo xInfo = new XInfo(); ; treeNode = xInfo.rootNode(); treeNode = treeNode.AOTfindChild('Data Dictionary'); treeNode = treeNode.AOTfindChild('Tables'); treeNodeDet = treeNode.AOTfindChild('xRefTypeHierarchy'); treeNodeDet = treeNodeDet.makeCopy(); // надо переименовать!!! treeNodeDet.AOTsave(); }
__________________
Все может быть и быть все может, все может быть или не быть, но быть того никак не может, чего совсем не может быть. |
|
![]() |
#11 |
Участник
|
Цитата:
Сообщение от npokypatop
![]() Может, так попробовать? Только не знаю, как переименовать узел
X++: static void Job10(Args _args) { TreeNode treeNode, treeNodeDet; XInfo xInfo = new XInfo(); ; treeNode = xInfo.rootNode(); treeNode = treeNode.AOTfindChild('Data Dictionary'); treeNode = treeNode.AOTfindChild('Tables'); treeNodeDet = treeNode.AOTfindChild('xRefTypeHierarchy'); treeNodeDet = treeNodeDet.makeCopy(); // надо переименовать!!! treeNodeDet.AOTsave(); }
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0 |
|
![]() |
#12 |
Участник
|
treeNodeDet = treeNodeDet.makeCopy();
Axapta 3.0 SP3 ругается, что нет такой функции ( |
|
![]() |
#13 |
Участник
|
Вопрос такой:
как стандартными методами Axapta 3.0 SP3 создать новую табличку аналогичную имеющейся в AOT (можно, конечно, через dict классы, но (ИМХО) делать поновой то, что, возможно, уже сделано - неправильно). Поделитесь опытом, пожалуйста. |
|
![]() |
#14 |
Administrator
|
Я в свое время делал так. Объект в АОТ создать легко через метод TreeNode.AOT.add(). Далее - ему копируются все свойства через
X++: str s; s = orig.AOTGetProperties(); //... Тут изменяем свойство Name на новое myNode.AOTsetProperties(s); С релейшнами - сложнее - тут заковыка. Их совсем ручками придется создавать. С группами и delete action-ами не пробовал - но думаю проблем не будет. Ну а методы тоже легко копируются - получается текст метода и засовывается в новый объект. Да, увы - это ручное создание. Но поковыряв дублирование - у меня тоже вышли похожие грабли (Аксапта падала) и пришлось сделать вручную
__________________
Возможно сделать все. Вопрос времени |
|
![]() |
#15 |
Боец
|
Цитата:
Да, увы - это ручное создание...
X++: treeNode.treeNodeExport(fileNameStr) |
|
![]() |
#16 |
Участник
|
Цитата:
Сообщение от DSPIC
![]() Гораздо проще и, самое главное - надежнее,экспортнуть выбранный, элемент
X++: treeNode.treeNodeExport(fileNameStr) Мне надо в realTime генерить табличку по другой. |
|
![]() |
#17 |
Боец
|
нет, это не ручками. Про ручки в прямом смысле речь вообще не идет, - это мышкой делается...
Будет время - набросаю пример, а пока сорри. Вообще, речь только о таблицах? |
|
![]() |
#18 |
Administrator
|
2xfree: Подход Ваш "наверняко ведь это уже написано" абсолютно верен, когда дело касается функционала или каких-то уже реализованных приемов программирования. Однако такие "сервисные" функции, как дублирование объекта в АОТ реализованы на уровне ядра (т.е. зашиты в exe-шнике) и могут не иметь рабочего аналога в системных классах (типа как TreeNode.makeCopy()). То, что действительно написано и работает - это дублирование через экспорт/импорт. Но тут надо разбираться. В свое время (в рамках учебного задания) я посчитал, что делать экспорт/импорт - будет менее удобно (и главное - долго ковырять механизм) - поэтому пошел через "ручное" исследование узлов АОТа.
Просто в функционале видимо нигде не требуется дублировать таблицы - вот и не реализовали сей функционал как готовый метод
__________________
Возможно сделать все. Вопрос времени |
|
![]() |
#19 |
Участник
|
В 2009 можно с помощью AOTDuplicate
X++: static void Job196(Args _args) { TreeNode treeNode, treeNodeDet; XInfo xInfo = new XInfo(); ; treeNode = xInfo.rootNode(); treeNode = treeNode.AOTfindChild('Data Dictionary'); treeNode = treeNode.AOTfindChild('Tables'); treeNodeDet = treeNode.AOTfindChild('CustGroup'); treeNodeDet = treeNodeDet.AOTDuplicate(); treeNodeDet.AOTsetProperty('Name', 'DLCustGroup_NV'); treeNodeDet.AOTsave(); } |
|
Теги |
документация, ax2009 |
|
|