|
22.07.2008, 17:14 | #1 |
Участник
|
Дублирование объектов АОТ
Как реализовано дублирование объектов АОТ, вызываемое из контекстного меню? Создавать таблички через treeNode я научился, просто не хочется писать код, создающий все подузлы таблицы (Fileds, Relations, Field Groups и т.д.) - наверняко ведь это уже написано. Только вот не могу найти
|
|
22.07.2008, 17:30 | #2 |
Модератор
|
может я не понял вопрос, но при дублировании таблицы в АОТ она появляется с именем CopyOfNameTable
NameTable - имя таблицы. |
|
22.07.2008, 17:41 | #3 |
Участник
|
Наверно имеется ввиду программное создание таблицы.
|
|
22.07.2008, 17:42 | #4 |
Участник
|
|
|
22.07.2008, 18:05 | #5 |
Участник
|
TreeNode.AOTDuplicate делает не то, что нужно?
|
|
|
За это сообщение автора поблагодарили: aidsua (1). |
22.07.2008, 18:13 | #6 |
Участник
|
|
|
22.07.2008, 18:15 | #7 |
Модератор
|
TreeNode.AOTDuplicate Method описывается в Microsoft Dynamics AX 2009 SDK
http://msdn.microsoft.com/en-us/library/cc608086.aspx хотя чет там ничего о нем не описывается.. Последний раз редактировалось Poleax; 22.07.2008 в 18:21. |
|
22.07.2008, 19:28 | #8 |
Участник
|
AOTDrop тоже не прокатывает. Может конечно я его неправильно использую
X++: treeNode = xInfo.rootNode(); treeNode = treeNode.AOTfindChild('Data Dictionary'); treeNode = treeNode.AOTfindChild('Tables'); treeNodeDet = treeNode.AOTfindChild('Table2'); treeNode.AOTDrop(treeNodeDet); |
|
22.07.2008, 20:41 | #9 |
Участник
|
Леша, попробуй этот проект покопать:
http://axutilities.blogspot.com/2005...le-wizard.html Возможно создание подузлов как раз там и найдешь.
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0 |
|
|
За это сообщение автора поблагодарили: lev (1). |
23.07.2008, 11:40 | #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(); }
__________________
Все может быть и быть все может, все может быть или не быть, но быть того никак не может, чего совсем не может быть. |
|
23.07.2008, 12:13 | #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 |
|
27.01.2009, 17:56 | #12 |
Участник
|
treeNodeDet = treeNodeDet.makeCopy();
Axapta 3.0 SP3 ругается, что нет такой функции ( |
|
28.01.2009, 09:46 | #13 |
Участник
|
Вопрос такой:
как стандартными методами Axapta 3.0 SP3 создать новую табличку аналогичную имеющейся в AOT (можно, конечно, через dict классы, но (ИМХО) делать поновой то, что, возможно, уже сделано - неправильно). Поделитесь опытом, пожалуйста. |
|
28.01.2009, 14:51 | #14 |
Administrator
|
Я в свое время делал так. Объект в АОТ создать легко через метод TreeNode.AOT.add(). Далее - ему копируются все свойства через
X++: str s; s = orig.AOTGetProperties(); //... Тут изменяем свойство Name на новое myNode.AOTsetProperties(s); С релейшнами - сложнее - тут заковыка. Их совсем ручками придется создавать. С группами и delete action-ами не пробовал - но думаю проблем не будет. Ну а методы тоже легко копируются - получается текст метода и засовывается в новый объект. Да, увы - это ручное создание. Но поковыряв дублирование - у меня тоже вышли похожие грабли (Аксапта падала) и пришлось сделать вручную
__________________
Возможно сделать все. Вопрос времени |
|
28.01.2009, 15:34 | #15 |
Боец
|
Цитата:
Да, увы - это ручное создание...
X++: treeNode.treeNodeExport(fileNameStr) |
|
28.01.2009, 17:00 | #16 |
Участник
|
Цитата:
Сообщение от DSPIC
Гораздо проще и, самое главное - надежнее,экспортнуть выбранный, элемент
X++: treeNode.treeNodeExport(fileNameStr) Мне надо в realTime генерить табличку по другой. |
|
28.01.2009, 19:08 | #17 |
Боец
|
нет, это не ручками. Про ручки в прямом смысле речь вообще не идет, - это мышкой делается...
Будет время - набросаю пример, а пока сорри. Вообще, речь только о таблицах? |
|
28.01.2009, 21:30 | #18 |
Administrator
|
2xfree: Подход Ваш "наверняко ведь это уже написано" абсолютно верен, когда дело касается функционала или каких-то уже реализованных приемов программирования. Однако такие "сервисные" функции, как дублирование объекта в АОТ реализованы на уровне ядра (т.е. зашиты в exe-шнике) и могут не иметь рабочего аналога в системных классах (типа как TreeNode.makeCopy()). То, что действительно написано и работает - это дублирование через экспорт/импорт. Но тут надо разбираться. В свое время (в рамках учебного задания) я посчитал, что делать экспорт/импорт - будет менее удобно (и главное - долго ковырять механизм) - поэтому пошел через "ручное" исследование узлов АОТа.
Просто в функционале видимо нигде не требуется дублировать таблицы - вот и не реализовали сей функционал как готовый метод
__________________
Возможно сделать все. Вопрос времени |
|
13.03.2012, 18:22 | #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 |
|
|